aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Robert Manea <gotmor@gmail.com>2009-10-18 18:04:41 +0200
committerGravatar Robert Manea <gotmor@gmail.com>2009-10-18 18:04:41 +0200
commit9432a991bc3acd3fbc61468529aa0d620320ea75 (patch)
tree81c985662063822489d984455a708f218d18e118
parent6e1cdd5eef34745223212ec154f2c0ff56f1f88c (diff)
added menu_add/menu_remove commands
-rw-r--r--Makefile4
-rw-r--r--callbacks.c32
-rw-r--r--callbacks.h3
-rw-r--r--events.c1
-rw-r--r--uzbl-core.c57
-rw-r--r--uzbl-core.h15
6 files changed, 109 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index f75b79d..65a2760 100644
--- a/Makefile
+++ b/Makefile
@@ -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);
+
diff --git a/events.c b/events.c
index 48f3bc0..a8dc421 100644
--- a/events.c
+++ b/events.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: */