diff --git a/extensions/statusbar-features.c b/extensions/statusbar-features.c index c9cd68a..848bdd1 100644 --- a/extensions/statusbar-features.c +++ b/extensions/statusbar-features.c @@ -34,33 +34,6 @@ statusbar_features_app_add_browser_cb (MidoriApp* app, MidoriExtension* extension); static void -statusbar_features_toolbar_notify_toolbar_style_cb (GtkWidget* toolbar, - GParamSpec* pspec, - GtkWidget* button) -{ - GtkToolbarStyle style = katze_object_get_enum (toolbar, "toolbar-style"); - const gchar* text = g_object_get_data (G_OBJECT (button), "feature-label"); - switch (style) - { - case GTK_TOOLBAR_BOTH: - case GTK_TOOLBAR_BOTH_HORIZ: - gtk_button_set_label (GTK_BUTTON (button), text); - gtk_widget_show (gtk_button_get_image (GTK_BUTTON (button))); - break; - case GTK_TOOLBAR_TEXT: - gtk_button_set_label (GTK_BUTTON (button), text); - gtk_widget_hide (gtk_button_get_image (GTK_BUTTON (button))); - break; - case GTK_TOOLBAR_ICONS: - gtk_button_set_label (GTK_BUTTON (button), ""); - gtk_widget_show (gtk_button_get_image (GTK_BUTTON (button))); - break; - default: - g_assert_not_reached (); - } -} - -static void statusbar_features_browser_notify_tab_cb (MidoriBrowser* browser, GParamSpec* pspec, GtkWidget* combobox) @@ -82,12 +55,8 @@ statusbar_features_deactivate_cb (MidoriExtension* extension, { MidoriApp* app = midori_extension_get_app (extension); MidoriBrowser* browser = midori_browser_get_for_widget (bbox); - GtkWidget* toolbar = katze_object_get_object (browser, "navigationbar"); gtk_widget_destroy (bbox); - g_signal_handlers_disconnect_matched (toolbar, G_SIGNAL_MATCH_FUNC, - 0, -1, NULL, statusbar_features_toolbar_notify_toolbar_style_cb, NULL); - g_object_unref (toolbar); g_signal_handlers_disconnect_by_func ( extension, statusbar_features_deactivate_cb, bbox); g_signal_handlers_disconnect_by_func ( @@ -132,18 +101,14 @@ statusbar_features_app_add_browser_cb (MidoriApp* app, image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Load images automatically")); - statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); - g_signal_connect (toolbar, "notify::toolbar-style", - G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); + sokoke_button_use_toolbar_style (toolbar, button); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 2); button = katze_property_proxy (settings, "enable-scripts", "toggle"); g_object_set_data (G_OBJECT (button), "feature-label", _("Scripts")); image = gtk_image_new_from_stock (STOCK_SCRIPTS, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Enable scripts")); - statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); - g_signal_connect (toolbar, "notify::toolbar-style", - G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); + sokoke_button_use_toolbar_style (toolbar, button); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 2); if (midori_web_settings_has_plugin_support ()) { @@ -152,9 +117,7 @@ statusbar_features_app_add_browser_cb (MidoriApp* app, image = gtk_image_new_from_stock (STOCK_PLUGINS, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Enable Netscape plugins")); - statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); - g_signal_connect (toolbar, "notify::toolbar-style", - G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); + sokoke_button_use_toolbar_style (toolbar, button); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 2); } button = katze_property_proxy (settings, "identify-as", "custom-user-agent"); @@ -171,6 +134,7 @@ statusbar_features_app_add_browser_cb (MidoriApp* app, statusbar_features_browser_notify_tab_cb (browser, NULL, button); gtk_widget_show_all (bbox); gtk_box_pack_end (GTK_BOX (statusbar), bbox, FALSE, FALSE, 3); + g_object_unref (toolbar); g_object_unref (statusbar); g_signal_connect (extension, "deactivate", diff --git a/midori/sokoke.c b/midori/sokoke.c index e4a0a44..73da76d 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -1747,3 +1747,51 @@ sokoke_get_download_filename (WebKitDownload* download) return filename; } +static void +sokoke_button_notify_toolbar_style_cb (GtkWidget* toolbar, + GParamSpec* pspec, + GtkWidget* button) +{ + GtkToolbarStyle style = katze_object_get_enum (toolbar, "toolbar-style"); + const gchar* text = g_object_get_data (G_OBJECT (button), "feature-label"); + switch (style) + { + case GTK_TOOLBAR_BOTH: + case GTK_TOOLBAR_BOTH_HORIZ: + gtk_button_set_label (GTK_BUTTON (button), text); + gtk_widget_show (gtk_button_get_image (GTK_BUTTON (button))); + break; + case GTK_TOOLBAR_TEXT: + gtk_button_set_label (GTK_BUTTON (button), text); + gtk_widget_hide (gtk_button_get_image (GTK_BUTTON (button))); + break; + case GTK_TOOLBAR_ICONS: + gtk_button_set_label (GTK_BUTTON (button), ""); + gtk_widget_show (gtk_button_get_image (GTK_BUTTON (button))); + break; + default: + g_assert_not_reached (); + } +} + +static gboolean +sokoke_button_toolbar_style_destroy_cb (GtkWidget* button, + GtkWidget* toolbar) +{ + g_signal_handlers_disconnect_by_func (toolbar, + sokoke_button_notify_toolbar_style_cb, button); + g_signal_handlers_disconnect_by_func (button, + sokoke_button_toolbar_style_destroy_cb, toolbar); + return TRUE; +} + +void +sokoke_button_use_toolbar_style (GtkWidget* toolbar, GtkWidget* button) +{ + g_return_if_fail (GTK_IS_WIDGET (toolbar) && GTK_IS_WIDGET (button)); + g_signal_connect (toolbar, "notify::toolbar-style", + G_CALLBACK (sokoke_button_notify_toolbar_style_cb), button); + sokoke_button_notify_toolbar_style_cb (toolbar, NULL, button); + g_signal_connect (button, "destroy", + G_CALLBACK (sokoke_button_toolbar_style_destroy_cb), toolbar); +} diff --git a/midori/sokoke.h b/midori/sokoke.h index a714cd9..d89853c 100644 --- a/midori/sokoke.h +++ b/midori/sokoke.h @@ -205,4 +205,8 @@ void sokoke_entry_set_clear_button_visible (GtkEntry* entry, gboolean visible); +void +sokoke_button_use_toolbar_style (GtkWidget* toolbar, + GtkWidget* button); + #endif /* !__SOKOKE_H__ */