diff options
author | Brendan Taylor <whateley@gmail.com> | 2011-02-20 19:06:13 -0700 |
---|---|---|
committer | Brendan Taylor <whateley@gmail.com> | 2011-02-20 19:06:13 -0700 |
commit | 79c069dfd5a40611d83447763a32274cb3cf9f0f (patch) | |
tree | c6eb3930b9fbf83c08891c9060e3b17f886266ef /src | |
parent | a299262011692b86b39ed5911418ca5b83f4a68e (diff) | |
parent | 60b27c0e224a1153f8cfd6be61524efcf655c3da (diff) |
Merge remote-tracking branch 'jakeprobst/imagemenuitem-fix' into experimental
Conflicts:
src/uzbl-core.h
Diffstat (limited to 'src')
-rw-r--r-- | src/callbacks.c | 32 | ||||
-rw-r--r-- | src/uzbl-core.c | 3 | ||||
-rw-r--r-- | src/uzbl-core.h | 1 |
3 files changed, 29 insertions, 7 deletions
diff --git a/src/callbacks.c b/src/callbacks.c index a40057c..d315a9e 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -957,16 +957,28 @@ scroll_horiz_cb(GtkAdjustment *adjust, void *w) } void -run_menu_command(GtkWidget *menu, const char *line) { +run_menu_command(GtkWidget *menu, MenuItem *mi) { (void) menu; - parse_cmd_line(line, NULL); + if (mi->context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) { + gchar* uri; + g_object_get(mi->hittest, "image-uri", &uri, NULL); + gchar* cmd = g_strdup_printf("%s %s", mi->cmd, uri); + + parse_cmd_line(cmd, NULL); + + g_free(cmd); + g_free(uri); + g_object_unref(mi->hittest); + } + else { + parse_cmd_line(mi->cmd, NULL); + } } void populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { - (void) v; (void) c; GUI *g = &uzbl.gui; GtkWidget *item; @@ -981,11 +993,19 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { if((context = get_click_context(NULL)) == -1) return; - 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_IMAGE) { + GdkEventButton ev; + gint x, y; + gdk_window_get_pointer(gtk_widget_get_window(v), &x, &y, NULL); + ev.x = x; + ev.y = y; + mi->hittest = webkit_web_view_get_hit_test_result(v, &ev); + } + if((mi->context > WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT) && (context & mi->context)) { if(mi->issep) { @@ -996,7 +1016,7 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { else { item = gtk_menu_item_new_with_label(mi->name); g_signal_connect(item, "activate", - G_CALLBACK(run_menu_command), mi->cmd); + G_CALLBACK(run_menu_command), mi); gtk_menu_shell_append(GTK_MENU_SHELL(m), item); gtk_widget_show(item); } @@ -1014,7 +1034,7 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { else { item = gtk_menu_item_new_with_label(mi->name); g_signal_connect(item, "activate", - G_CALLBACK(run_menu_command), mi->cmd); + G_CALLBACK(run_menu_command), mi); gtk_menu_shell_append(GTK_MENU_SHELL(m), item); gtk_widget_show(item); } diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 779f378..638dd1f 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1230,7 +1230,8 @@ move_statusbar() { } g_object_unref(uzbl.gui.scrolled_win); g_object_unref(uzbl.gui.mainbar); - gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); + if (!uzbl.state.plug_mode) + gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); return; } diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 3240fc6..1285e3a 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -362,6 +362,7 @@ typedef struct { gchar* cmd; gboolean issep; guint context; + WebKitHitTestResult* hittest; } MenuItem; #endif |