Implement 'Block image' menuitem in adblock, adding URIs to custom list
For now it only has effect after reloading the page.
This commit is contained in:
parent
af43d5a761
commit
5452c7c71d
1 changed files with 89 additions and 26 deletions
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#define SIGNATURE_SIZE 8
|
#define SIGNATURE_SIZE 8
|
||||||
#define USE_PATTERN_MATCHING 1
|
#define USE_PATTERN_MATCHING 1
|
||||||
|
#define CUSTOM_LIST_NAME "custom.list"
|
||||||
#define ADBLOCK_FILTER_VALID(__filter) \
|
#define ADBLOCK_FILTER_VALID(__filter) \
|
||||||
(__filter && (g_str_has_prefix (__filter, "http") \
|
(__filter && (g_str_has_prefix (__filter, "http") \
|
||||||
|| g_str_has_prefix (__filter, "file")))
|
|| g_str_has_prefix (__filter, "file")))
|
||||||
|
@ -102,6 +103,7 @@ adblock_reload_rules (MidoriExtension* extension)
|
||||||
gchar* folder;
|
gchar* folder;
|
||||||
guint i = 0;
|
guint i = 0;
|
||||||
filters = midori_extension_get_string_list (extension, "filters", NULL);
|
filters = midori_extension_get_string_list (extension, "filters", NULL);
|
||||||
|
gchar* custom_list;
|
||||||
|
|
||||||
if (!filters)
|
if (!filters)
|
||||||
return;
|
return;
|
||||||
|
@ -135,6 +137,10 @@ adblock_reload_rules (MidoriExtension* extension)
|
||||||
g_free (path);
|
g_free (path);
|
||||||
g_free (filename);
|
g_free (filename);
|
||||||
}
|
}
|
||||||
|
custom_list = g_build_filename (midori_extension_get_config_dir (extension),
|
||||||
|
CUSTOM_LIST_NAME, NULL);
|
||||||
|
adblock_parse_file (custom_list);
|
||||||
|
g_free (custom_list);
|
||||||
katze_assign (blockscript, adblock_build_js (blockcss, blockcssprivate));
|
katze_assign (blockscript, adblock_build_js (blockcss, blockcssprivate));
|
||||||
g_strfreev (filters);
|
g_strfreev (filters);
|
||||||
g_free (folder);
|
g_free (folder);
|
||||||
|
@ -693,6 +699,58 @@ adblock_session_request_queued_cb (SoupSession* session,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if WEBKIT_CHECK_VERSION (1, 1, 15)
|
||||||
|
static void
|
||||||
|
adblock_custom_block_image_cb (GtkWidget* widget,
|
||||||
|
MidoriExtension* extension)
|
||||||
|
{
|
||||||
|
FILE* list;
|
||||||
|
gchar* custom_list;
|
||||||
|
gchar* uri;
|
||||||
|
|
||||||
|
custom_list = g_build_filename (midori_extension_get_config_dir (extension),
|
||||||
|
CUSTOM_LIST_NAME, NULL);
|
||||||
|
if (!(list = g_fopen (custom_list, "a+")))
|
||||||
|
{
|
||||||
|
g_free (custom_list);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uri = g_object_get_data (G_OBJECT (widget), "uri");
|
||||||
|
g_fprintf (list, "%s\n", uri);
|
||||||
|
fclose (list);
|
||||||
|
adblock_parse_file (custom_list);
|
||||||
|
g_free (custom_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
adblock_populate_popup_cb (WebKitWebView* web_view,
|
||||||
|
GtkWidget* menu,
|
||||||
|
MidoriExtension* extension)
|
||||||
|
{
|
||||||
|
GtkWidget* menuitem;
|
||||||
|
gchar *uri;
|
||||||
|
gint x, y;
|
||||||
|
GdkEventButton event;
|
||||||
|
WebKitHitTestResultContext context;
|
||||||
|
WebKitHitTestResult* hit_test;
|
||||||
|
|
||||||
|
gdk_window_get_pointer (GTK_WIDGET (web_view)->window, &x, &y, NULL);
|
||||||
|
event.x = x;
|
||||||
|
event.y = y;
|
||||||
|
hit_test = webkit_web_view_get_hit_test_result (web_view, &event);
|
||||||
|
context = katze_object_get_int (hit_test, "context");
|
||||||
|
if (!(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE))
|
||||||
|
return;
|
||||||
|
uri = katze_object_get_string (hit_test, "image-uri");
|
||||||
|
menuitem = gtk_menu_item_new_with_mnemonic ("B_lock image");
|
||||||
|
gtk_widget_show (menuitem);
|
||||||
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
|
||||||
|
g_object_set_data_full (G_OBJECT (menuitem), "uri", uri, (GDestroyNotify)g_free);
|
||||||
|
g_signal_connect (menuitem, "activate",
|
||||||
|
G_CALLBACK (adblock_custom_block_image_cb), extension);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_window_object_cleared_cb (GtkWidget* web_view,
|
adblock_window_object_cleared_cb (GtkWidget* web_view,
|
||||||
WebKitWebFrame* web_frame,
|
WebKitWebFrame* web_frame,
|
||||||
|
@ -703,14 +761,19 @@ adblock_window_object_cleared_cb (GtkWidget* web_view,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_add_tab_cb (MidoriBrowser* browser,
|
adblock_add_tab_cb (MidoriBrowser* browser,
|
||||||
MidoriView* view,
|
MidoriView* view,
|
||||||
GtkWidget* image)
|
MidoriExtension* extension)
|
||||||
{
|
{
|
||||||
|
|
||||||
GtkWidget* web_view = gtk_bin_get_child (GTK_BIN (view));
|
GtkWidget* web_view = gtk_bin_get_child (GTK_BIN (view));
|
||||||
|
GtkWidget* image = g_object_get_data (G_OBJECT (browser), "status-image");
|
||||||
|
|
||||||
g_signal_connect (web_view, "window-object-cleared",
|
g_signal_connect (web_view, "window-object-cleared",
|
||||||
G_CALLBACK (adblock_window_object_cleared_cb), 0);
|
G_CALLBACK (adblock_window_object_cleared_cb), 0);
|
||||||
|
#if WEBKIT_CHECK_VERSION (1, 1, 15)
|
||||||
|
g_signal_connect_after (web_view, "populate-popup",
|
||||||
|
G_CALLBACK (adblock_populate_popup_cb), extension);
|
||||||
|
#endif
|
||||||
#if HAVE_WEBKIT_RESOURCE_REQUEST
|
#if HAVE_WEBKIT_RESOURCE_REQUEST
|
||||||
g_signal_connect (web_view, "resource-request-starting",
|
g_signal_connect (web_view, "resource-request-starting",
|
||||||
G_CALLBACK (adblock_resource_request_starting_cb), image);
|
G_CALLBACK (adblock_resource_request_starting_cb), image);
|
||||||
|
@ -719,14 +782,14 @@ adblock_add_tab_cb (MidoriBrowser* browser,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_deactivate_cb (MidoriExtension* extension,
|
adblock_deactivate_cb (MidoriExtension* extension,
|
||||||
GtkWidget* image);
|
MidoriBrowser* browser);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_add_tab_foreach_cb (MidoriView* view,
|
adblock_add_tab_foreach_cb (MidoriView* view,
|
||||||
MidoriBrowser* browser,
|
MidoriBrowser* browser,
|
||||||
GtkWidget* image)
|
MidoriExtension* extension)
|
||||||
{
|
{
|
||||||
adblock_add_tab_cb (browser, view, image);
|
adblock_add_tab_cb (browser, view, extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -738,22 +801,21 @@ adblock_app_add_browser_cb (MidoriApp* app,
|
||||||
GtkWidget* image;
|
GtkWidget* image;
|
||||||
|
|
||||||
statusbar = katze_object_get_object (browser, "statusbar");
|
statusbar = katze_object_get_object (browser, "statusbar");
|
||||||
#if 0
|
image = NULL;
|
||||||
image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU);
|
/* image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU);
|
||||||
gtk_widget_show (image);
|
gtk_widget_show (image);
|
||||||
gtk_box_pack_start (GTK_BOX (statusbar), image, FALSE, FALSE, 3);
|
gtk_box_pack_start (GTK_BOX (statusbar), image, FALSE, FALSE, 3); */
|
||||||
#else
|
g_object_set_data_full (G_OBJECT (browser), "status-image", image,
|
||||||
image = GTK_WIDGET (browser);
|
(GDestroyNotify)gtk_widget_destroy);
|
||||||
#endif
|
|
||||||
|
|
||||||
midori_browser_foreach (browser,
|
midori_browser_foreach (browser,
|
||||||
(GtkCallback)adblock_add_tab_foreach_cb, image);
|
(GtkCallback)adblock_add_tab_foreach_cb, extension);
|
||||||
g_signal_connect (browser, "add-tab",
|
g_signal_connect (browser, "add-tab",
|
||||||
G_CALLBACK (adblock_add_tab_cb), image);
|
G_CALLBACK (adblock_add_tab_cb), extension);
|
||||||
g_signal_connect (browser, "populate-tool-menu",
|
g_signal_connect (browser, "populate-tool-menu",
|
||||||
G_CALLBACK (adblock_browser_populate_tool_menu_cb), extension);
|
G_CALLBACK (adblock_browser_populate_tool_menu_cb), extension);
|
||||||
g_signal_connect (extension, "deactivate",
|
g_signal_connect (extension, "deactivate",
|
||||||
G_CALLBACK (adblock_deactivate_cb), image);
|
G_CALLBACK (adblock_deactivate_cb), browser);
|
||||||
g_object_unref (statusbar);
|
g_object_unref (statusbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1021,30 +1083,31 @@ adblock_parse_file (gchar* path)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_deactivate_tabs (MidoriView* view,
|
adblock_deactivate_tabs (MidoriView* view,
|
||||||
GtkWidget* image)
|
MidoriBrowser* browser,
|
||||||
|
MidoriExtension* extension)
|
||||||
{
|
{
|
||||||
GtkWidget* web_view = gtk_bin_get_child (GTK_BIN (view));
|
GtkWidget* web_view = gtk_bin_get_child (GTK_BIN (view));
|
||||||
MidoriBrowser* browser = midori_browser_get_for_widget (image);
|
GtkWidget* image = g_object_get_data (G_OBJECT (browser), "status-image");
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
browser, adblock_add_tab_cb, 0);
|
browser, adblock_add_tab_cb, extension);
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
web_view, adblock_window_object_cleared_cb, 0);
|
web_view, adblock_window_object_cleared_cb, 0);
|
||||||
|
#if WEBKIT_CHECK_VERSION (1, 1, 15)
|
||||||
|
g_signal_handlers_disconnect_by_func (
|
||||||
|
web_view, adblock_populate_popup_cb, extension);
|
||||||
|
#endif
|
||||||
#if HAVE_WEBKIT_RESOURCE_REQUEST
|
#if HAVE_WEBKIT_RESOURCE_REQUEST
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
web_view, adblock_resource_request_starting_cb, image);
|
web_view, adblock_resource_request_starting_cb, image);
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
|
||||||
gtk_widget_destroy (image);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_deactivate_cb (MidoriExtension* extension,
|
adblock_deactivate_cb (MidoriExtension* extension,
|
||||||
GtkWidget* image)
|
MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
MidoriBrowser* browser = midori_browser_get_for_widget (image);
|
|
||||||
MidoriApp* app = midori_extension_get_app (extension);
|
MidoriApp* app = midori_extension_get_app (extension);
|
||||||
|
|
||||||
#if !HAVE_WEBKIT_RESOURCE_REQUEST
|
#if !HAVE_WEBKIT_RESOURCE_REQUEST
|
||||||
|
@ -1059,7 +1122,7 @@ adblock_deactivate_cb (MidoriExtension* extension,
|
||||||
extension, adblock_deactivate_cb, browser);
|
extension, adblock_deactivate_cb, browser);
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
app, adblock_app_add_browser_cb, extension);
|
app, adblock_app_add_browser_cb, extension);
|
||||||
midori_browser_foreach (browser, (GtkCallback)adblock_deactivate_tabs, image);
|
midori_browser_foreach (browser, (GtkCallback)adblock_deactivate_tabs, browser);
|
||||||
|
|
||||||
katze_assign (blockcss, NULL);
|
katze_assign (blockcss, NULL);
|
||||||
katze_assign (blockcssprivate, NULL);
|
katze_assign (blockcssprivate, NULL);
|
||||||
|
|
Loading…
Reference in a new issue