Chromium Code Reviews| Index: chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| diff --git a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| index 9692b73e517065a1b9720d1d3d5a6b6c6b2db8c4..d9263e19dbfdb3a91e6464e2607612cb477de99f 100644 |
| --- a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| +++ b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| @@ -55,6 +55,10 @@ const int kNewTabButtonVOffset = 5; |
| // is started. |
| const int kResizeTabsTimeMs = 300; |
| +// A very short time just to make sure we don't clump up our Layout() calls |
| +// during slow window resizes. |
| +const int kLayoutAfterSizeAllocateMs = 10; |
| + |
| // The range outside of the tabstrip where the pointer must enter/leave to |
| // start/stop the resize animation. |
| const int kTabStripAnimationVSlop = 40; |
| @@ -706,6 +710,7 @@ TabStripGtk::TabStripGtk(TabStripModel* model, BrowserWindowGtk* window) |
| window_(window), |
| theme_service_(GtkThemeService::GetFrom(model->profile())), |
| weak_factory_(this), |
| + layout_factory_(this), |
| added_as_message_loop_observer_(false), |
| hover_tab_selector_(model) { |
| } |
| @@ -1556,6 +1561,7 @@ int TabStripGtk::tab_start_x() const { |
| bool TabStripGtk::ResizeLayoutTabs() { |
| weak_factory_.InvalidateWeakPtrs(); |
| + layout_factory_.InvalidateWeakPtrs(); |
| // It is critically important that this is unhooked here, otherwise we will |
| // keep spying on messages forever. |
| @@ -1623,7 +1629,6 @@ void TabStripGtk::ReStack() { |
| active_tab->Raise(); |
| } |
| - |
| void TabStripGtk::AddMessageLoopObserver() { |
| if (!added_as_message_loop_observer_) { |
| MessageLoopForUI::current()->AddObserver(this); |
| @@ -2081,10 +2086,16 @@ void TabStripGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) { |
| return; |
| // When there is only one tab, Layout() so we don't animate it. With more |
| - // tabs, do ResizeLayoutTabs(). In RTL(), we will also need to manually |
| - // Layout() when ResizeLayoutTabs() is a no-op. |
| - if ((GetTabCount() == 1) || (!ResizeLayoutTabs() && base::i18n::IsRTL())) |
| + // tabs, we should always attempt a resize. |
| + if (GetTabCount() == 1) { |
| Layout(); |
| + } else { |
| + layout_factory_.InvalidateWeakPtrs(); |
|
Evan Stade
2011/11/16 04:13:54
I don't get this, why not coalesce calls, i.e. if
|
| + MessageLoop::current()->PostDelayedTask( |
| + FROM_HERE, |
| + base::Bind(&TabStripGtk::Layout, layout_factory_.GetWeakPtr()), |
| + kLayoutAfterSizeAllocateMs); |
| + } |
| } |
| gboolean TabStripGtk::OnDragMotion(GtkWidget* widget, GdkDragContext* context, |