diff --git a/extensions/adblock.c b/extensions/adblock.c index e9cb482..deee713 100644 --- a/extensions/adblock.c +++ b/extensions/adblock.c @@ -815,6 +815,9 @@ adblock_resource_request_starting_cb (WebKitWebView* web_view, const gchar* req_uri; const char *page_uri; + if (g_object_get_data (G_OBJECT (view), "adblock-disabled")) + return; + page_uri = webkit_web_view_get_uri (web_view); /* Skip checks on about: pages */ if (midori_uri_is_blank (page_uri)) @@ -1037,7 +1040,35 @@ adblock_remove_tab_cb (MidoriBrowser* browser, static void adblock_deactivate_cb (MidoriExtension* extension, - MidoriBrowser* browser); + GtkWidget* bbox); + +static void +adblock_button_toggled_cb (GtkToggleButton* button, + MidoriBrowser* browser) +{ + MidoriView* view; + + view = MIDORI_VIEW (midori_browser_get_current_tab (browser)); + if (view != NULL) + { + gboolean button_enabled = gtk_toggle_button_get_active (button); + gboolean disabled = g_object_get_data (G_OBJECT (view), "adblock-disabled"); + g_object_set_data (G_OBJECT (view), "adblock-disabled", (gpointer)!button_enabled); + if (!midori_view_is_blank (view) && (disabled == button_enabled)) + midori_view_reload (MIDORI_VIEW (view), TRUE); + } +} + +static void +adblock_browser_notify_tab_cb (MidoriBrowser* browser, + GParamSpec* pspec, + GtkWidget* button) +{ + MidoriView* view = MIDORI_VIEW (midori_browser_get_current_tab (browser)); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + (view == NULL) || !g_object_get_data (G_OBJECT (view), "adblock-disabled")); +} static void adblock_app_add_browser_cb (MidoriApp* app, @@ -1045,21 +1076,39 @@ adblock_app_add_browser_cb (MidoriApp* app, MidoriExtension* extension) { GtkWidget* statusbar; + GtkWidget* bbox; + GtkWidget* button; GtkWidget* image; + GtkWidget* toolbar; GtkWidget* view; gint i; statusbar = katze_object_get_object (browser, "statusbar"); - image = NULL; - /* image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU); - gtk_widget_show (image); - gtk_box_pack_start (GTK_BOX (statusbar), image, FALSE, FALSE, 3); */ - g_object_set_data_full (G_OBJECT (browser), "status-image", image, - (GDestroyNotify)gtk_widget_destroy); + bbox = gtk_hbox_new (FALSE, 0); + + button = gtk_check_button_new (); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); + gtk_widget_set_tooltip_text (button, _("Block advertisements")); + g_object_set_data (G_OBJECT (button), "feature-label", _("Adblock")); + image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU); + gtk_button_set_image (GTK_BUTTON (button), image); + g_signal_connect (button, "toggled", + G_CALLBACK (adblock_button_toggled_cb), browser); + + toolbar = katze_object_get_object (browser, "navigationbar"); + sokoke_button_use_toolbar_style (toolbar, button); + g_object_unref (toolbar); + + gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 2); + gtk_box_pack_end (GTK_BOX (statusbar), bbox, FALSE, FALSE, 3); + gtk_widget_show_all (bbox); i = 0; while((view = midori_browser_get_nth_tab(browser, i++))) adblock_add_tab_cb (browser, MIDORI_VIEW (view), extension); + view = midori_browser_get_current_tab (browser); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + (view == NULL) || !g_object_get_data(G_OBJECT (view), "adblock-disabled")); g_signal_connect (browser, "add-tab", G_CALLBACK (adblock_add_tab_cb), extension); @@ -1068,7 +1117,9 @@ adblock_app_add_browser_cb (MidoriApp* app, g_signal_connect (extension, "open-preferences", G_CALLBACK (adblock_open_preferences_cb), extension); g_signal_connect (extension, "deactivate", - G_CALLBACK (adblock_deactivate_cb), browser); + G_CALLBACK (adblock_deactivate_cb), bbox); + g_signal_connect (browser, "notify::tab", + G_CALLBACK (adblock_browser_notify_tab_cb), button); g_object_unref (statusbar); } @@ -1515,9 +1566,10 @@ adblock_deactivate_tabs (MidoriView* view, static void adblock_deactivate_cb (MidoriExtension* extension, - MidoriBrowser* browser) + GtkWidget* bbox) { gint i; + MidoriBrowser* browser = midori_browser_get_for_widget (bbox); GtkWidget* view; MidoriApp* app = midori_extension_get_app (extension); MidoriWebSettings* settings = katze_object_get_object (app, "settings"); @@ -1525,13 +1577,16 @@ adblock_deactivate_cb (MidoriExtension* extension, g_signal_handlers_disconnect_by_func ( browser, adblock_open_preferences_cb, extension); g_signal_handlers_disconnect_by_func ( - extension, adblock_deactivate_cb, browser); + extension, adblock_deactivate_cb, bbox); g_signal_handlers_disconnect_by_func ( app, adblock_app_add_browser_cb, extension); g_signal_handlers_disconnect_by_func ( browser, adblock_add_tab_cb, extension); g_signal_handlers_disconnect_by_func ( browser, adblock_remove_tab_cb, extension); + g_signal_handlers_disconnect_matched (browser, G_SIGNAL_MATCH_FUNC, + 0, -1, NULL, adblock_browser_notify_tab_cb, NULL); + gtk_widget_destroy (bbox); i = 0; while((view = midori_browser_get_nth_tab(browser, i++)))