Enable new context menu code with WebKitGTK+ 1.1.15 afterall

To avoid regressing we keep the hacked document menu for now
and add a small improvement to fix image context menus with
older WebKitGTK+ versions.
This commit is contained in:
Christian Dywan 2009-09-26 21:36:41 +02:00
parent 249b8e4669
commit 55a2ecf710

View file

@ -69,7 +69,7 @@ struct _MidoriView
MidoriLoadStatus load_status; MidoriLoadStatus load_status;
gboolean minimized; gboolean minimized;
gchar* statusbar_text; gchar* statusbar_text;
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
WebKitHitTestResult* hit_test; WebKitHitTestResult* hit_test;
#endif #endif
gchar* link_uri; gchar* link_uri;
@ -1150,7 +1150,7 @@ gtk_widget_button_press_event_cb (WebKitWebView* web_view,
else if (view->middle_click_opens_selection) else if (view->middle_click_opens_selection)
{ {
gboolean is_editable; gboolean is_editable;
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
WebKitHitTestResult* result; WebKitHitTestResult* result;
WebKitHitTestResultContext context; WebKitHitTestResultContext context;
@ -1267,7 +1267,7 @@ gtk_widget_scroll_event_cb (WebKitWebView* web_view,
return FALSE; return FALSE;
} }
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
static void static void
midori_web_view_menu_open_activate_cb (GtkWidget* widget, midori_web_view_menu_open_activate_cb (GtkWidget* widget,
MidoriView* view) MidoriView* view)
@ -1502,20 +1502,22 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
GtkWidget* widget = GTK_WIDGET (view); GtkWidget* widget = GTK_WIDGET (view);
GtkWidget* menuitem; GtkWidget* menuitem;
GtkWidget* icon; GtkWidget* icon;
#if !WEBKIT_CHECK_VERSION (1, 1, 15)
gchar* stock_id; gchar* stock_id;
#endif
GList* items; GList* items;
gboolean has_selection; gboolean has_selection;
gboolean is_editable; gboolean is_editable;
gboolean is_document; gboolean is_document;
GtkWidget* label; GtkWidget* label;
guint i;
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
gint x, y; gint x, y;
GdkEventButton event; GdkEventButton event;
WebKitHitTestResultContext context; WebKitHitTestResultContext context;
gboolean is_image; gboolean is_image;
gboolean is_media; gboolean is_media;
gint i;
gdk_window_get_pointer (GTK_WIDGET (web_view)->window, &x, &y, NULL); gdk_window_get_pointer (GTK_WIDGET (web_view)->window, &x, &y, NULL);
event.x = x; event.x = x;
@ -1553,6 +1555,8 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
gtk_image_get_stock (GTK_IMAGE (icon), &stock_id, NULL); gtk_image_get_stock (GTK_IMAGE (icon), &stock_id, NULL);
} }
is_editable = !strcmp (stock_id, GTK_STOCK_CUT); is_editable = !strcmp (stock_id, GTK_STOCK_CUT);
if (is_document && !strcmp (stock_id, GTK_STOCK_OPEN))
is_document = FALSE;
} }
else else
is_editable = FALSE; is_editable = FALSE;
@ -1579,12 +1583,17 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
return; return;
} }
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
/* FIXME: We can't re-implement Open in Frame or Inspect page,
so we can't replace the default document menu */
if (!is_document)
{
items = gtk_container_get_children (GTK_CONTAINER (menu)); items = gtk_container_get_children (GTK_CONTAINER (menu));
i = 0; i = 0;
while ((menuitem = g_list_nth_data (items, i++))) while ((menuitem = g_list_nth_data (items, i++)))
gtk_widget_destroy (menuitem); gtk_widget_destroy (menuitem);
g_list_free (items); g_list_free (items);
}
if (view->link_uri) if (view->link_uri)
{ {
midori_view_insert_menu_item (menu_shell, -1, midori_view_insert_menu_item (menu_shell, -1,
@ -1688,7 +1697,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
if (!view->link_uri && has_selection) if (!view->link_uri && has_selection)
{ {
GtkWidget* window; GtkWidget* window;
guint i;
window = gtk_widget_get_toplevel (GTK_WIDGET (web_view)); window = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
i = 0; i = 0;
@ -1724,7 +1732,7 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
} }
g_object_unref (search_engines); g_object_unref (search_engines);
} }
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
midori_view_insert_menu_item (menu_shell, 0, midori_view_insert_menu_item (menu_shell, 0,
_("_Search the Web"), GTK_STOCK_FIND, _("_Search the Web"), GTK_STOCK_FIND,
G_CALLBACK (midori_web_view_menu_search_web_activate_cb), widget); G_CALLBACK (midori_web_view_menu_search_web_activate_cb), widget);
@ -1753,7 +1761,9 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
if (is_document) if (is_document)
{ {
#if WEBKIT_CHECK_VERSION (1, 1, 16) /* FIXME: We can't re-implement Open in Frame or Inspect page
#if WEBKIT_CHECK_VERSION (1, 1, 15) */
#if 0
menuitem = sokoke_action_create_popup_menu_item ( menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "Back")); gtk_action_group_get_action (actions, "Back"));
gtk_menu_shell_append (menu_shell, menuitem); gtk_menu_shell_append (menu_shell, menuitem);
@ -1787,7 +1797,7 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
gtk_menu_shell_append (menu_shell, menuitem); gtk_menu_shell_append (menu_shell, menuitem);
gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ()); gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
/* if (webkit_web_view_get_main_frame (web_view) != frame_under_mouse) /* if (webkit_web_view_get_main_frame (web_view) != frame_under_mouse)
{ {
midori_view_insert_menu_item (menu_shell, -1, midori_view_insert_menu_item (menu_shell, -1,
@ -1826,7 +1836,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
{ "EncodingWestern" }, { "EncodingWestern" },
{ "EncodingCustom" }, { "EncodingCustom" },
}; };
guint i;
sub_menu = gtk_menu_new (); sub_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), sub_menu); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), sub_menu);
@ -2136,7 +2145,7 @@ midori_view_init (MidoriView* view)
view->load_status = MIDORI_LOAD_FINISHED; view->load_status = MIDORI_LOAD_FINISHED;
view->minimized = FALSE; view->minimized = FALSE;
view->statusbar_text = NULL; view->statusbar_text = NULL;
#if WEBKIT_CHECK_VERSION (1, 1, 16) #if WEBKIT_CHECK_VERSION (1, 1, 15)
view->hit_test = NULL; view->hit_test = NULL;
#endif #endif
view->link_uri = NULL; view->link_uri = NULL;