aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/menu.c
diff options
context:
space:
mode:
authorGravatar koral <koral@mailoo.org>2011-02-10 14:39:15 +0100
committerGravatar koral <koral@mailoo.org>2011-02-10 14:39:15 +0100
commitaa565b52f9f82b6c137b2af2178d7ffb9297f310 (patch)
treeccd8ffdaa221efa69049c4bcc78195042b1541e0 /src/menu.c
parentd08b19e722e263d0f4cf6454e55414014b97b235 (diff)
Moves menu functions in a dedicated source file.
Diffstat (limited to 'src/menu.c')
-rw-r--r--src/menu.c192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/menu.c b/src/menu.c
new file mode 100644
index 0000000..451b35a
--- /dev/null
+++ b/src/menu.c
@@ -0,0 +1,192 @@
+#include "menu.h"
+#include "util.h"
+#include "uzbl-core.h"
+
+void
+add_to_menu(GArray *argv, guint context) {
+ GUI *g = &uzbl.gui;
+ MenuItem *m;
+ gchar *item_cmd = NULL;
+
+ if(!argv_idx(argv, 0))
+ return;
+
+ gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2);
+ if(!g->menu_items)
+ g->menu_items = g_ptr_array_new();
+
+ if(split[1])
+ item_cmd = split[1];
+
+ if(split[0]) {
+ 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(g->menu_items, m);
+ }
+
+ g_strfreev(split);
+}
+
+
+void
+menu_add(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT);
+
+}
+
+
+void
+menu_add_link(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK);
+}
+
+
+void
+menu_add_image(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE);
+}
+
+
+void
+menu_add_edit(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE);
+}
+
+
+void
+add_separator_to_menu(GArray *argv, guint context) {
+ GUI *g = &uzbl.gui;
+ MenuItem *m;
+ gchar *sep_name;
+
+ if(!g->menu_items)
+ g->menu_items = g_ptr_array_new();
+
+ if(!argv_idx(argv, 0))
+ return;
+ else
+ sep_name = argv_idx(argv, 0);
+
+ m = malloc(sizeof(MenuItem));
+ m->name = g_strdup(sep_name);
+ m->cmd = NULL;
+ m->context = context;
+ m->issep = TRUE;
+ g_ptr_array_add(g->menu_items, m);
+}
+
+
+void
+menu_add_separator(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_separator_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT);
+}
+
+
+void
+menu_add_separator_link(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ 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, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE);
+}
+
+
+void
+menu_add_separator_edit(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ add_separator_to_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE);
+}
+
+
+void
+remove_from_menu(GArray *argv, guint context) {
+ GUI *g = &uzbl.gui;
+ MenuItem *mi;
+ gchar *name = NULL;
+ guint i=0;
+
+ if(!g->menu_items)
+ return;
+
+ if(!argv_idx(argv, 0))
+ return;
+ else
+ name = argv_idx(argv, 0);
+
+ for(i=0; i < g->menu_items->len; i++) {
+ mi = g_ptr_array_index(g->menu_items, i);
+
+ if((context == mi->context) && !strcmp(name, mi->name)) {
+ g_free(mi->name);
+ g_free(mi->cmd);
+ g_free(mi);
+ g_ptr_array_remove_index(g->menu_items, i);
+ }
+ }
+}
+
+
+void
+menu_remove(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT);
+}
+
+
+void
+menu_remove_link(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK);
+}
+
+
+void
+menu_remove_image(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE);
+}
+
+
+void
+menu_remove_edit(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page;
+ (void) result;
+
+ remove_from_menu(argv, WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE);
+}
+