Index: chrome/browser/ui/panels/docked_panel_strip.cc |
diff --git a/chrome/browser/ui/panels/docked_panel_strip.cc b/chrome/browser/ui/panels/docked_panel_strip.cc |
index 33ae670e71415142a9f974b8fa0fff39fcf808e4..db2a1dbfb464cd032cb14be9c1cb56bdb881ff75 100644 |
--- a/chrome/browser/ui/panels/docked_panel_strip.cc |
+++ b/chrome/browser/ui/panels/docked_panel_strip.cc |
@@ -50,13 +50,15 @@ const int kDelayBeforeCollapsingFromTitleOnlyStateMs = 0; |
// we refresh layout with a delay. |
const int kRefreshLayoutAfterActivePanelChangeDelayMs = 200; // arbitrary |
-// The minimum panel width when it is "squeezed" in the docked strip |
-// due to lack of space. |
-const int kMinPanelWidthForDisplay = 26; |
} // namespace |
// static |
-const int DockedPanelStrip::kPanelMinWidth = 100; |
+// These numbers are semi-arbitrary. |
+// Motivation for 'width' is to make main buttons on the titlebar functional. |
+// Motivation for height is to allow autosized tightly-wrapped panel with a |
+// single line of text - so the height is set to be likely less then a titlebar, |
+// to make sure even small content is tightly wrapped. |
+const int DockedPanelStrip::kPanelMinWidth = 80; |
const int DockedPanelStrip::kPanelMinHeight = 20; |
DockedPanelStrip::DockedPanelStrip(PanelManager* panel_manager) |
@@ -161,6 +163,9 @@ void DockedPanelStrip::InsertNewlyCreatedPanel(Panel* panel) { |
panel->Initialize(gfx::Rect(pt.x(), pt.y(), width, height)); |
+ panel->SetSizeRange(gfx::Size(kPanelMinWidth, kPanelMinHeight), |
+ gfx::Size(max_panel_width, max_panel_height)); |
+ |
InsertExistingPanelAtDefaultPosition(panel, true /*update_bounds*/); |
} |
@@ -572,7 +577,7 @@ void DockedPanelStrip::ResizePanelWindow( |
// Make sure the new size does not violate panel's size restrictions. |
gfx::Size new_size(preferred_window_size.width(), |
preferred_window_size.height()); |
- panel->ClampSize(&new_size); |
+ new_size = panel->ClampSize(new_size); |
if (new_size == panel->full_size()) |
return; |
@@ -851,7 +856,7 @@ int DockedPanelStrip::WidthToDisplayPanelInStrip(bool is_for_active_panel, |
int full_width) const { |
if (is_for_active_panel) |
return full_width; |
- return std::max(kMinPanelWidthForDisplay, |
+ return std::max(kPanelMinWidth, |
static_cast<int>(floor(full_width * squeeze_factor))); |
} |
@@ -868,13 +873,15 @@ void DockedPanelStrip::CloseAll() { |
} |
void DockedPanelStrip::UpdatePanelOnStripChange(Panel* panel) { |
- // Always update limits, even on existing panels, in case the limits changed |
- // while panel was out of the strip. |
- int max_panel_width = GetMaxPanelWidth(); |
- int max_panel_height = GetMaxPanelHeight(); |
- panel->SetSizeRange(gfx::Size(kPanelMinWidth, kPanelMinHeight), |
- gfx::Size(max_panel_width, max_panel_height)); |
- |
+ // Update limits if the panel is still autosizable, in case the limit has |
+ // changed. If the panel is not autoresizable, then it was resized |
+ // by the user or by the app via API. |
+ if (panel->auto_resizable()) { |
+ int max_panel_width = GetMaxPanelWidth(); |
+ int max_panel_height = GetMaxPanelHeight(); |
+ panel->SetSizeRange(gfx::Size(kPanelMinWidth, kPanelMinHeight), |
+ gfx::Size(max_panel_width, max_panel_height)); |
+ } |
panel->set_attention_mode(Panel::USE_PANEL_ATTENTION); |
panel->SetAppIconVisibility(true); |
panel->SetAlwaysOnTop(true); |