| Index: chrome/browser/gtk/tabs/tab_strip_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/tabs/tab_strip_gtk.cc (revision 13178)
|
| +++ chrome/browser/gtk/tabs/tab_strip_gtk.cc (working copy)
|
| @@ -76,8 +76,10 @@
|
| G_CALLBACK(OnMotionNotify), this);
|
| g_signal_connect(G_OBJECT(tabstrip_.get()), "button-press-event",
|
| G_CALLBACK(OnButtonPress), this);
|
| + g_signal_connect(G_OBJECT(tabstrip_.get()), "leave-notify-event",
|
| + G_CALLBACK(OnLeaveNotify), this);
|
| gtk_widget_add_events(tabstrip_.get(),
|
| - GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK);
|
| + GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_LEAVE_NOTIFY_MASK);
|
| gtk_widget_show_all(tabstrip_.get());
|
|
|
| bounds_ = GetInitialWidgetBounds(tabstrip_.get());
|
| @@ -383,9 +385,9 @@
|
| }
|
|
|
| // static
|
| -gboolean TabStripGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e,
|
| +gboolean TabStripGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event,
|
| TabStripGtk* tabstrip) {
|
| - ChromeCanvasPaint canvas(e);
|
| + ChromeCanvasPaint canvas(event);
|
| if (canvas.isEmpty())
|
| return TRUE;
|
|
|
| @@ -487,3 +489,18 @@
|
|
|
| return TRUE;
|
| }
|
| +
|
| +// static
|
| +gboolean TabStripGtk::OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event,
|
| + TabStripGtk* tabstrip) {
|
| + // A leave-notify-event is generated on mouse click, which sets the mode to
|
| + // GDK_CROSSING_GRAB. Ignore this event because it doesn't meant the mouse
|
| + // has left the tabstrip.
|
| + if (tabstrip->hover_index_ != -1 && event->mode != GDK_CROSSING_GRAB) {
|
| + tabstrip->GetTabAt(tabstrip->hover_index_)->SetHovering(false);
|
| + tabstrip->hover_index_ = -1;
|
| + gtk_widget_queue_draw(tabstrip->tabstrip_.get());
|
| + }
|
| +
|
| + return TRUE;
|
| +}
|
|
|