Index: chrome/browser/gtk/browser_actions_toolbar_gtk.cc |
diff --git a/chrome/browser/gtk/browser_actions_toolbar_gtk.cc b/chrome/browser/gtk/browser_actions_toolbar_gtk.cc |
index 3eb7e983b31515300a983f5d8163125f71c5e7fa..0ea880ca5181b2d1a14643524be6fcd7a045fdd9 100644 |
--- a/chrome/browser/gtk/browser_actions_toolbar_gtk.cc |
+++ b/chrome/browser/gtk/browser_actions_toolbar_gtk.cc |
@@ -100,13 +100,13 @@ class BrowserActionButton : public NotificationObserver, |
ImageLoadingTracker::DONT_CACHE); |
} |
- g_signal_connect(button_.get(), "button-press-event", |
+ signals_.Connect(button_.get(), "button-press-event", |
G_CALLBACK(OnButtonPress), this); |
- g_signal_connect(button_.get(), "clicked", |
+ signals_.Connect(button_.get(), "clicked", |
G_CALLBACK(OnClicked), this); |
- g_signal_connect_after(button_.get(), "expose-event", |
- G_CALLBACK(OnExposeEvent), this); |
- g_signal_connect(button_.get(), "drag-begin", |
+ signals_.ConnectAfter(button_.get(), "expose-event", |
+ G_CALLBACK(OnExposeEvent), this); |
+ signals_.Connect(button_.get(), "drag-begin", |
G_CALLBACK(&OnDragBegin), this); |
registrar_.Add(this, NotificationType::EXTENSION_BROWSER_ACTION_UPDATED, |
@@ -318,6 +318,7 @@ class BrowserActionButton : public NotificationObserver, |
// Same as |default_icon_|, but stored as SkBitmap. |
SkBitmap default_skbitmap_; |
+ GtkSignalRegistrar signals_; |
NotificationRegistrar registrar_; |
// The context menu view and model for this extension action. |
@@ -352,19 +353,19 @@ BrowserActionsToolbarGtk::BrowserActionsToolbarGtk(Browser* browser) |
GtkWidget* gripper = gtk_button_new(); |
GTK_WIDGET_UNSET_FLAGS(gripper, GTK_CAN_FOCUS); |
gtk_widget_add_events(gripper, GDK_POINTER_MOTION_MASK); |
- g_signal_connect(gripper, "motion-notify-event", |
+ signals_.Connect(gripper, "motion-notify-event", |
G_CALLBACK(OnGripperMotionNotifyThunk), this); |
- g_signal_connect(gripper, "expose-event", |
+ signals_.Connect(gripper, "expose-event", |
G_CALLBACK(OnGripperExposeThunk), this); |
- g_signal_connect(gripper, "enter-notify-event", |
+ signals_.Connect(gripper, "enter-notify-event", |
G_CALLBACK(OnGripperEnterNotifyThunk), this); |
- g_signal_connect(gripper, "leave-notify-event", |
+ signals_.Connect(gripper, "leave-notify-event", |
G_CALLBACK(OnGripperLeaveNotifyThunk), this); |
- g_signal_connect(gripper, "button-release-event", |
+ signals_.Connect(gripper, "button-release-event", |
G_CALLBACK(OnGripperButtonReleaseThunk), this); |
- g_signal_connect(gripper, "button-press-event", |
+ signals_.Connect(gripper, "button-press-event", |
G_CALLBACK(OnGripperButtonPressThunk), this); |
- g_signal_connect(overflow_button_.widget(), "button-press-event", |
+ signals_.Connect(overflow_button_.widget(), "button-press-event", |
G_CALLBACK(OnOverflowButtonPressThunk), this); |
gtk_box_pack_start(GTK_BOX(hbox_.get()), gripper, FALSE, FALSE, 0); |
@@ -384,19 +385,13 @@ BrowserActionsToolbarGtk::BrowserActionsToolbarGtk(Browser* browser) |
// We want to connect to "set-focus" on the toplevel window; we have to wait |
// until we are added to a toplevel window to do so. |
- g_signal_connect(widget(), "hierarchy-changed", |
+ signals_.Connect(widget(), "hierarchy-changed", |
G_CALLBACK(OnHierarchyChangedThunk), this); |
ViewIDUtil::SetID(button_hbox_.get(), VIEW_ID_BROWSER_ACTION_TOOLBAR); |
} |
BrowserActionsToolbarGtk::~BrowserActionsToolbarGtk() { |
- GtkWidget* toplevel = gtk_widget_get_toplevel(widget()); |
- if (toplevel) { |
- g_signal_handlers_disconnect_by_func( |
- toplevel, reinterpret_cast<gpointer>(OnSetFocusThunk), this); |
- } |
- |
if (model_) |
model_->RemoveObserver(this); |
button_hbox_.Destroy(); |
@@ -423,7 +418,7 @@ void BrowserActionsToolbarGtk::SetupDrags() { |
gtk_drag_dest_set(button_hbox_.get(), GTK_DEST_DEFAULT_DROP, &drag_target, 1, |
GDK_ACTION_MOVE); |
- g_signal_connect(button_hbox_.get(), "drag-motion", |
+ signals_.Connect(button_hbox_.get(), "drag-motion", |
G_CALLBACK(OnDragMotionThunk), this); |
} |
@@ -463,16 +458,16 @@ void BrowserActionsToolbarGtk::CreateButtonForExtension(Extension* extension, |
gtk_drag_source_set(button->widget(), GDK_BUTTON1_MASK, &drag_target, 1, |
GDK_ACTION_MOVE); |
// We ignore whether the drag was a "success" or "failure" in Gtk's opinion. |
- g_signal_connect(button->widget(), "drag-end", |
+ signals_.Connect(button->widget(), "drag-end", |
G_CALLBACK(&OnDragEndThunk), this); |
- g_signal_connect(button->widget(), "drag-failed", |
+ signals_.Connect(button->widget(), "drag-failed", |
G_CALLBACK(&OnDragFailedThunk), this); |
// Any time a browser action button is shown or hidden we have to update |
// the chevron state. |
- g_signal_connect(button->widget(), "show", |
+ signals_.Connect(button->widget(), "show", |
G_CALLBACK(&OnButtonShowOrHideThunk), this); |
- g_signal_connect(button->widget(), "hide", |
+ signals_.Connect(button->widget(), "hide", |
G_CALLBACK(&OnButtonShowOrHideThunk), this); |
gtk_widget_show(button->widget()); |
@@ -712,7 +707,7 @@ void BrowserActionsToolbarGtk::OnHierarchyChanged( |
if (!GTK_WIDGET_TOPLEVEL(toplevel)) |
return; |
- g_signal_connect(toplevel, "set-focus", G_CALLBACK(OnSetFocusThunk), this); |
+ signals_.Connect(toplevel, "set-focus", G_CALLBACK(OnSetFocusThunk), this); |
} |
void BrowserActionsToolbarGtk::OnSetFocus(GtkWidget* widget, |
@@ -826,7 +821,7 @@ gboolean BrowserActionsToolbarGtk::OnOverflowButtonPress( |
// TODO(estade): set the menu item's tooltip. |
} |
- g_signal_connect(overflow_menu_->widget(), "button-press-event", |
+ signals_.Connect(overflow_menu_->widget(), "button-press-event", |
G_CALLBACK(OnOverflowMenuButtonPressThunk), this); |
gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(overflow), |