aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Robert Manea <gotmor@gmail.com>2009-10-19 17:28:03 +0200
committerGravatar Robert Manea <gotmor@gmail.com>2009-10-19 17:28:03 +0200
commitf4f51de768759334b093634741b1e871ba0b9f19 (patch)
tree4e07f27feb1d9602088e4a65cd129fcf82a13b06
parentca4d8aa5ade15615ae2cbc4560560cf735cbb2e1 (diff)
refactor menu_* commands and functions
-rw-r--r--callbacks.c56
-rw-r--r--uzbl-core.c57
-rw-r--r--uzbl-core.h3
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;