diff options
-rw-r--r-- | callbacks.c | 56 | ||||
-rw-r--r-- | uzbl-core.c | 57 | ||||
-rw-r--r-- | uzbl-core.h | 3 |
3 files changed, 46 insertions, 70 deletions
diff --git a/callbacks.c b/callbacks.c index 4e105b1..622d71a 100644 --- a/callbacks.c +++ b/callbacks.c @@ -615,27 +615,26 @@ void populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { (void) v; (void) c; + GUI *g = &uzbl.gui; GtkWidget *item; MenuItem *mi; guint i=0; WebKitHitTestResult *ht; guint context, hit=0; + if(!g->menu_items) + return; + /* check context */ - ht = webkit_web_view_get_hit_test_result(uzbl.gui.web_view, uzbl.state.last_button); + ht = webkit_web_view_get_hit_test_result(g->web_view, uzbl.state.last_button); g_object_get(ht, "context", &context, NULL); - /* Separate custom entries from default ones */ - item = gtk_separator_menu_item_new(); - gtk_menu_append(GTK_MENU(m), item); - gtk_widget_show(item); - - if(uzbl.gui.menu_items_link && - (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK)) { - - for(i=0; i < uzbl.gui.menu_items_link->len; i++) { - mi = g_ptr_array_index(uzbl.gui.menu_items_link, i); + for(i=0; i < uzbl.gui.menu_items->len; i++) { + hit = 0; + mi = g_ptr_array_index(uzbl.gui.menu_items, i); + if((mi->context > WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT) && + (context & mi->context)) { if(mi->issep) { item = gtk_separator_menu_item_new(); gtk_menu_append(GTK_MENU(m), item); @@ -648,39 +647,12 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { gtk_menu_append(GTK_MENU(m), item); gtk_widget_show(item); } + hit++; } - hit++; - } - - if(uzbl.gui.menu_items_image && - (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE)) { - - for(i=0; i < uzbl.gui.menu_items_image->len; i++) { - mi = g_ptr_array_index(uzbl.gui.menu_items_image, i); - - if(mi->issep) { - item = gtk_separator_menu_item_new(); - gtk_menu_append(GTK_MENU(m), item); - gtk_widget_show(item); - } - else { - item = gtk_menu_item_new_with_label(mi->name); - g_signal_connect(item, "activate", - G_CALLBACK(run_menu_command), mi->cmd); - gtk_menu_append(GTK_MENU(m), item); - gtk_widget_show(item); - } - } - hit++; - } - - if(uzbl.gui.menu_items && - !hit && - (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT)) { - - for(i=0; i < uzbl.gui.menu_items->len; i++) { - mi = g_ptr_array_index(uzbl.gui.menu_items, i); + if((mi->context == WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT) && + (context <= WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT) && + !hit) { if(mi->issep) { item = gtk_separator_menu_item_new(); gtk_menu_append(GTK_MENU(m), item); diff --git a/uzbl-core.c b/uzbl-core.c index 02ba08c..5d4447b 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -693,13 +693,14 @@ update_gui(WebKitWebView *page, GArray *argv, GString *result) { } void -add_to_menu(GArray *argv, GPtrArray **p) { +add_to_menu(GArray *argv, guint context) { + GUI *g = &uzbl.gui; MenuItem *m; gchar *item_cmd = NULL; gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2); - if(!*p) - *p = g_ptr_array_new(); + if(!g->menu_items) + g->menu_items = g_ptr_array_new(); if(split[1]) item_cmd = g_strdup(split[1]); @@ -708,8 +709,9 @@ add_to_menu(GArray *argv, GPtrArray **p) { m = malloc(sizeof(MenuItem)); m->name = g_strdup(split[0]); m->cmd = g_strdup(item_cmd?item_cmd:""); + m->context = context; m->issep = FALSE; - g_ptr_array_add(*p, m); + g_ptr_array_add(g->menu_items, m); } else g_free(item_cmd); @@ -722,7 +724,7 @@ menu_add(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_to_menu(argv, &uzbl.gui.menu_items); + add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT); } @@ -731,7 +733,7 @@ menu_add_link(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_to_menu(argv, &uzbl.gui.menu_items_link); + add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK); } void @@ -739,16 +741,17 @@ menu_add_image(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_to_menu(argv, &uzbl.gui.menu_items_image); + add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE); } void -add_separator_to_menu(GArray *argv, GPtrArray **p) { +add_separator_to_menu(GArray *argv, guint context) { + GUI *g = &uzbl.gui; MenuItem *m; gchar *sep_name; - if(!*p) - *p = g_ptr_array_new(); + if(!g->menu_items) + g->menu_items = g_ptr_array_new(); if(!argv_idx(argv, 0)) return; @@ -756,10 +759,11 @@ add_separator_to_menu(GArray *argv, GPtrArray **p) { sep_name = argv_idx(argv, 0); m = malloc(sizeof(MenuItem)); - m->name = g_strdup(sep_name); - m->cmd = NULL; - m->issep = TRUE; - g_ptr_array_add(*p, m); + m->name = g_strdup(sep_name); + m->cmd = NULL; + m->context = context; + m->issep = TRUE; + g_ptr_array_add(g->menu_items, m); } void @@ -767,7 +771,7 @@ menu_add_separator(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_separator_to_menu(argv, &uzbl.gui.menu_items); + add_separator_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT); } void @@ -775,23 +779,24 @@ menu_add_separator_link(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_separator_to_menu(argv, &uzbl.gui.menu_items_link); + add_separator_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK); } void menu_add_separator_image(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - add_separator_to_menu(argv, &uzbl.gui.menu_items_image); + add_separator_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE); } void -remove_from_menu(GArray *argv, GPtrArray **p) { +remove_from_menu(GArray *argv, guint context) { + GUI *g = &uzbl.gui; MenuItem *mi; gchar *name = NULL; guint i=0; - if(!*p) + if(!g->menu_items) return; if(!argv_idx(argv, 0)) @@ -799,14 +804,14 @@ remove_from_menu(GArray *argv, GPtrArray **p) { else name = argv_idx(argv, 0); - for(i=0; i < (*p)->len; i++) { - mi = g_ptr_array_index(*p, i); + for(i=0; i < g->menu_items->len; i++) { + mi = g_ptr_array_index(g->menu_items, i); - if(!strcmp(name, mi->name)) { + if((context == mi->context) && !strcmp(name, mi->name)) { g_free(mi->name); g_free(mi->cmd); g_free(mi); - g_ptr_array_remove_index(*p, i); + g_ptr_array_remove_index(g->menu_items, i); } } } @@ -816,7 +821,7 @@ menu_remove(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - remove_from_menu(argv, &uzbl.gui.menu_items); + remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT); } void @@ -824,7 +829,7 @@ menu_remove_link(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - remove_from_menu(argv, &uzbl.gui.menu_items_link); + remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK); } void @@ -832,7 +837,7 @@ menu_remove_image(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - remove_from_menu(argv, &uzbl.gui.menu_items_image); + remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE); } void diff --git a/uzbl-core.h b/uzbl-core.h index b12ae9d..a6f34e4 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -73,8 +73,6 @@ typedef struct { /* custom context menu item */ GPtrArray *menu_items; - GPtrArray *menu_items_link; - GPtrArray *menu_items_image; } GUI; @@ -471,6 +469,7 @@ typedef struct { gchar *name; gchar *cmd; gboolean issep; + guint context; } MenuItem; |