diff options
author | Robert Manea <gotmor@gmail.com> | 2009-10-18 18:04:41 +0200 |
---|---|---|
committer | Robert Manea <gotmor@gmail.com> | 2009-10-18 18:04:41 +0200 |
commit | 9432a991bc3acd3fbc61468529aa0d620320ea75 (patch) | |
tree | 81c985662063822489d984455a708f218d18e118 | |
parent | 6e1cdd5eef34745223212ec154f2c0ff56f1f88c (diff) |
added menu_add/menu_remove commands
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | callbacks.c | 32 | ||||
-rw-r--r-- | callbacks.h | 3 | ||||
-rw-r--r-- | events.c | 1 | ||||
-rw-r--r-- | uzbl-core.c | 57 | ||||
-rw-r--r-- | uzbl-core.h | 15 |
6 files changed, 109 insertions, 3 deletions
@@ -32,8 +32,8 @@ uzbl-core: ${OBJ} @echo LINKING object files @${CC} -o $@ ${OBJ} ${LDFLAGS} @echo ... done. - #@echo Stripping binary - #@strip $@ + @echo Stripping binary + @strip $@ @echo ... done. diff --git a/callbacks.c b/callbacks.c index 15b0a7e..b462c09 100644 --- a/callbacks.c +++ b/callbacks.c @@ -589,3 +589,35 @@ download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { send_event(DOWNLOAD_REQ, webkit_download_get_uri ((WebKitDownload*)download), NULL); return (FALSE); } + +void +run_menu_command(GtkWidget *menu, const char *line) { + (void) menu; + + parse_cmd_line(line, NULL); +} + + +void +populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { + (void) v; + (void) c; + GtkWidget *item; + MenuItem *mi; + guint i=0; + + if(!uzbl.gui.menu_items) + return; + + for(i=0; i < uzbl.gui.menu_items->len; i++) { + mi = g_ptr_array_index(uzbl.gui.menu_items, i); + + 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); + } + +} + diff --git a/callbacks.h b/callbacks.h index 8c43cf7..0b8c97e 100644 --- a/callbacks.h +++ b/callbacks.h @@ -186,3 +186,6 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us gboolean download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); +void +populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c); + @@ -192,3 +192,4 @@ key_to_event(guint keyval, gint mode) { gdk_keyval_name(keyval), NULL); } + diff --git a/uzbl-core.c b/uzbl-core.c index 0e8c67f..94641ff 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -622,7 +622,9 @@ struct {const char *key; CommandInfo value;} cmdlist[] = * the user, technically events and requests are the very same thing */ { "request", {event, TRUE} }, - { "update_gui", {update_gui, TRUE} } + { "update_gui", {update_gui, TRUE} }, + { "menu_add", {menu_add, 0} }, + { "menu_remove", {menu_remove, 0} } }; void @@ -684,6 +686,58 @@ update_gui(WebKitWebView *page, GArray *argv, GString *result) { } void +menu_add(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; + (void) result; + MenuItem *m; + gchar *item_cmd = NULL; + + if(!uzbl.gui.menu_items) + uzbl.gui.menu_items = g_ptr_array_new(); + + if(argv_idx(argv, 1)) + item_cmd = g_strdup(argv_idx(argv, 1)); + + if(argv_idx(argv, 0)) { + m = malloc(sizeof(MenuItem)); + m->name = g_strdup(argv_idx(argv, 0)); + m->cmd = g_strdup(item_cmd?item_cmd:""); + g_ptr_array_add(uzbl.gui.menu_items, m); + } + else + g_free(item_cmd); + +} + +void +menu_remove(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; + (void) result; + MenuItem *mi; + gchar *name = NULL; + guint i=0; + + if(!uzbl.gui.menu_items) + return; + + if(argv_idx(argv, 0)) + name = argv_idx(argv, 0); + else + return; + + for(i=0; i < uzbl.gui.menu_items->len; i++) { + mi = g_ptr_array_index(uzbl.gui.menu_items, i); + + if(!strcmp(name, mi->name)) { + g_free(mi->name); + g_free(mi->cmd); + g_free(mi); + g_ptr_array_remove_index(uzbl.gui.menu_items, i); + } + } +} + +void event(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; GString *event_name; @@ -1760,6 +1814,7 @@ create_browser () { "signal::download-requested", (GCallback)download_cb, NULL, "signal::create-web-view", (GCallback)create_web_view_cb, NULL, "signal::mime-type-policy-decision-requested", (GCallback)mime_policy_cb, NULL, + "signal::populate-popup", (GCallback)populate_popup_cb, NULL, NULL); } diff --git a/uzbl-core.h b/uzbl-core.h index 9834e59..2cfedcc 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -70,6 +70,9 @@ typedef struct { WebKitWebInspector *inspector; StatusBar sbar; + + /* custom context menu item */ + GPtrArray *menu_items; } GUI; @@ -428,10 +431,22 @@ event(WebKitWebView *page, GArray *argv, GString *result); void init_connect_socket(); +void +menu_add(WebKitWebView *page, GArray *argv, GString *result); + +void +menu_remove(WebKitWebView *page, GArray *argv, GString *result); + typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); typedef struct { Command function; gboolean no_split; } CommandInfo; +typedef struct { + gchar *name; + gchar *cmd; +} MenuItem; + + /* vi: set et ts=4: */ |