]> spindle.queued.net Git - midori/commitdiff
Implement menu items after refactoring the context menu changes
authorChristian Dywan <christian@twotoasts.de>
Sat, 19 Sep 2009 19:18:25 +0000 (21:18 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 20 Sep 2009 15:26:28 +0000 (17:26 +0200)
midori/midori-view.c

index 1ac970e947b8a1fb99d64d4fd9e4adfa1a4e82fa..d51e0f85fca77d4002cb7008d5fa1ce6c154be07 100644 (file)
@@ -69,6 +69,9 @@ struct _MidoriView
     MidoriLoadStatus load_status;
     gboolean minimized;
     gchar* statusbar_text;
+    #if WEBKIT_CHECK_VERSION (1, 1, 15)
+    WebKitHitTestResult* hit_test;
+    #endif
     gchar* link_uri;
     gboolean has_selection;
     gchar* selected_text;
@@ -1146,6 +1149,127 @@ gtk_widget_scroll_event_cb (WebKitWebView*  web_view,
         return FALSE;
 }
 
+#if WEBKIT_CHECK_VERSION (1, 1, 15)
+static void
+midori_web_view_menu_open_activate_cb (GtkWidget*  widget,
+                                       MidoriView* view)
+{
+    midori_view_set_uri (view, view->link_uri);
+}
+
+static void
+midori_web_view_menu_new_window_activate_cb (GtkWidget*  widget,
+                                             MidoriView* view)
+{
+    g_signal_emit (view, signals[NEW_WINDOW], 0, view->link_uri);
+}
+
+static void
+midori_web_view_menu_link_copy_activate_cb (GtkWidget*  widget,
+                                            MidoriView* view)
+{
+    GdkDisplay* display = gtk_widget_get_display (widget);
+    GtkClipboard* clipboard = gtk_clipboard_get_for_display (display,
+        GDK_SELECTION_CLIPBOARD);
+    gtk_clipboard_set_text (clipboard, view->link_uri, -1);
+}
+
+static void
+midori_web_view_menu_save_activate_cb (GtkWidget*  widget,
+                                       MidoriView* view)
+{
+    WebKitNetworkRequest* request = webkit_network_request_new (view->link_uri);
+    WebKitDownload* download = webkit_download_new (request);
+    gboolean handled;
+    g_object_unref (request);
+    g_object_set_data (G_OBJECT (download), "save-as-download", 0);
+    g_signal_emit (view, signals[DOWNLOAD_REQUESTED], 0, download, &handled);
+    webkit_download_start (download);
+}
+
+static void
+midori_web_view_menu_image_new_tab_activate_cb (GtkWidget*  widget,
+                                                MidoriView* view)
+{
+    gchar* uri = katze_object_get_string (view->hit_test, "image-uri");
+    g_signal_emit (view, signals[NEW_TAB], 0, uri,
+                   view->open_tabs_in_the_background);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_image_new_window_activate_cb (GtkWidget*  widget,
+                                                    MidoriView* view)
+{
+    gchar* uri = katze_object_get_string (view->hit_test, "image-uri");
+    g_signal_emit (view, signals[NEW_WINDOW], 0, uri);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_image_copy_activate_cb (GtkWidget*  widget,
+                                             MidoriView* view)
+{
+    GdkDisplay* display = gtk_widget_get_display (widget);
+    GtkClipboard* clipboard = gtk_clipboard_get_for_display (display,
+        GDK_SELECTION_CLIPBOARD);
+    gchar* uri = katze_object_get_string (view->hit_test, "image-uri");
+    gtk_clipboard_set_text (clipboard, uri, -1);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_image_save_activate_cb (GtkWidget*  widget,
+                                             MidoriView* view)
+{
+    gchar* uri = katze_object_get_string (view->hit_test, "image-uri");
+    WebKitNetworkRequest* request = webkit_network_request_new (uri);
+    WebKitDownload* download = webkit_download_new (request);
+    gboolean handled;
+    g_object_unref (request);
+    g_object_set_data (G_OBJECT (download), "save-as-download", 0);
+    g_signal_emit (view, signals[DOWNLOAD_REQUESTED], 0, download, &handled);
+    webkit_download_start (download);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_video_copy_activate_cb (GtkWidget*  widget,
+                                             MidoriView* view)
+{
+    GdkDisplay* display = gtk_widget_get_display (widget);
+    GtkClipboard* clipboard = gtk_clipboard_get_for_display (display,
+        GDK_SELECTION_CLIPBOARD);
+    gchar* uri = katze_object_get_string (view->hit_test, "media-uri");
+    gtk_clipboard_set_text (clipboard, uri, -1);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_video_save_activate_cb (GtkWidget*  widget,
+                                             MidoriView* view)
+{
+    gchar* uri = katze_object_get_string (view->hit_test, "media-uri");
+    WebKitNetworkRequest* request = webkit_network_request_new (uri);
+    WebKitDownload* download = webkit_download_new (request);
+    gboolean handled;
+    g_object_unref (request);
+    g_object_set_data (G_OBJECT (download), "save-as-download", 0);
+    g_signal_emit (view, signals[DOWNLOAD_REQUESTED], 0, download, &handled);
+    webkit_download_start (download);
+    g_free (uri);
+}
+
+static void
+midori_web_view_menu_video_download_activate_cb (GtkWidget*  widget,
+                                                 MidoriView* view)
+{
+    gchar* uri = katze_object_get_string (view->hit_test, "media-uri");
+    sokoke_spawn_program (view->download_manager, uri, TRUE);
+    g_free (uri);
+}
+#endif
+
 static void
 midori_web_view_menu_new_tab_activate_cb (GtkWidget*  widget,
                                           MidoriView* view)
@@ -1264,7 +1388,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
     #if WEBKIT_CHECK_VERSION (1, 1, 15)
     gint x, y;
     GdkEventButton event;
-    WebKitHitTestResult* result;
     WebKitHitTestResultContext context;
     gboolean is_image;
     gboolean is_media;
@@ -1273,8 +1396,9 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
     gdk_window_get_pointer (GTK_WIDGET (web_view)->window, &x, &y, NULL);
     event.x = x;
     event.y = y;
-    result = webkit_web_view_get_hit_test_result (web_view, &event);
-    context = katze_object_get_int (result, "context");
+    katze_object_assign (view->hit_test,
+        webkit_web_view_get_hit_test_result (web_view, &event));
+    context = katze_object_get_int (view->hit_test, "context");
     has_selection = context & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION;
     /* Ensure view->selected_text */
     midori_view_has_selection (view);
@@ -1282,7 +1406,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
     is_image = context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE;
     is_media = context & WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA;
     is_document = !view->link_uri && !has_selection && !is_image && !is_media;
-    g_object_unref (result);
     #else
     has_selection = midori_view_has_selection (view);
     is_document = !view->link_uri && !has_selection;
@@ -1298,6 +1421,7 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
         if (!strcmp (stock_id, GTK_STOCK_FIND))
         {
             gtk_widget_hide (menuitem);
+            gtk_widget_set_no_show_all (menuitem);
             menuitem = (GtkWidget*)g_list_nth_data (items, 1);
             gtk_widget_hide (menuitem);
             menuitem = (GtkWidget*)g_list_nth_data (items, 2);
@@ -1341,20 +1465,20 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
     {
         midori_view_insert_menu_item (menu_shell, -1,
             _("Open _Link"), NULL,
-            NULL /* G_CALLBACK (midori_web_view_menu_open_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_open_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             _("Open Link in New _Tab"), STOCK_TAB_NEW,
             G_CALLBACK (midori_web_view_menu_new_tab_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             _("Open Link in New _Window"), STOCK_WINDOW_NEW,
-            NULL /* G_CALLBACK (midori_web_view_menu_new_window_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_new_window_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             _("_Copy Link destination"), NULL,
-            NULL /* G_CALLBACK (midori_web_view_menu_copy_link_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_link_copy_activate_cb), widget);
         /* FIXME */
         midori_view_insert_menu_item (menu_shell, -1,
             FALSE ? _("_Save Link destination") : _("_Download Link destination"), NULL,
-            NULL /* G_CALLBACK (midori_web_view_menu_save_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_save_activate_cb), widget);
         if (view->download_manager && *view->download_manager)
             midori_view_insert_menu_item (menu_shell, -1,
             _("Download with Download _Manager"), STOCK_TRANSFER,
@@ -1370,31 +1494,31 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
             gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
         midori_view_insert_menu_item (menu_shell, -1,
             _("Open _Image in New Tab"), STOCK_TAB_NEW,
-            NULL /* G_CALLBACK (midori_web_view_menu_image_new_tab_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_image_new_tab_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             _("Open _Image in New Window"), STOCK_WINDOW_NEW,
-            NULL /* G_CALLBACK (midori_web_view_menu_image_new_window_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_image_new_window_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             _("Copy Image _Address"), NULL,
-            NULL /* G_CALLBACK (midori_web_view_menu_image_new_window_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_image_copy_activate_cb), widget);
         /* FIXME */
         midori_view_insert_menu_item (menu_shell, -1,
             FALSE ? _("Save I_mage") : _("Download I_mage"), GTK_STOCK_SAVE,
-            NULL /* G_CALLBACK (midori_web_view_menu_image_save_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_image_save_activate_cb), widget);
     }
 
     if (is_media)
     {
         midori_view_insert_menu_item (menu_shell, -1,
             _("Copy Video _Address"), NULL,
-            NULL /* G_CALLBACK (midori_web_view_menu_video_copy_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_video_copy_activate_cb), widget);
         midori_view_insert_menu_item (menu_shell, -1,
             FALSE ? _("Save _Video") : _("Download _Video"), GTK_STOCK_SAVE,
-            NULL /* G_CALLBACK (midori_web_view_menu_video_save_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_video_save_activate_cb), widget);
         if (view->download_manager && *view->download_manager)
             midori_view_insert_menu_item (menu_shell, -1,
             _("Download with Download _Manager"), STOCK_TRANSFER,
-            NULL /* G_CALLBACK (midori_web_view_menu_video_download_activate_cb) */, widget);
+            G_CALLBACK (midori_web_view_menu_video_download_activate_cb), widget);
     }
     #else
     if (view->link_uri)
@@ -1422,27 +1546,18 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
         #else
         /* hack to disable non-functional Download File */
         gtk_widget_hide (menuitem);
-        menuitem = gtk_image_menu_item_new_with_mnemonic (
-            _("_Save Link destination"));
-        gtk_menu_shell_insert (menu_shell, menuitem, 3);
-        g_signal_connect (menuitem, "activate",
-            G_CALLBACK (midori_web_view_menu_save_as_activate_cb), view);
+        gtk_widget_set_no_show_all (menuitem);
+        midori_view_insert_menu_item (menu_shell, 3,
+            _("_Save Link destination"), NULL,
+            G_CALLBACK (midori_web_view_menu_save_as_activate_cb), widget);
         #endif
         if (view->download_manager && *view->download_manager)
-        {
-            menuitem = gtk_image_menu_item_new_with_mnemonic (
-                _("Download with Download _Manager"));
-            icon = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS,
-                                             GTK_ICON_SIZE_MENU);
-            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), icon);
-            gtk_menu_shell_insert (menu_shell, menuitem, 4);
-            g_signal_connect (menuitem, "activate",
-                G_CALLBACK (midori_web_view_menu_download_activate_cb), view);
-        }
-        menuitem = gtk_image_menu_item_new_from_stock (STOCK_BOOKMARK_ADD, NULL);
-        gtk_menu_shell_insert (menu_shell, menuitem, 5);
-        g_signal_connect (menuitem, "activate",
-            G_CALLBACK (midori_web_view_menu_add_bookmark_activate_cb), view);
+            midori_view_insert_menu_item (menu_shell, 4,
+            _("Download with Download _Manager"), STOCK_TRANSFER,
+            G_CALLBACK (midori_web_view_menu_download_activate_cb), widget);
+        midori_view_insert_menu_item (menu_shell, 5,
+            NULL, STOCK_BOOKMARK_ADD,
+            G_CALLBACK (midori_web_view_menu_add_bookmark_activate_cb), widget);
     }
     #endif
 
@@ -1546,9 +1661,7 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
         menuitem = sokoke_action_create_popup_menu_item (
                 gtk_action_group_get_action (actions, "UndoTabClose"));
         gtk_menu_shell_append (menu_shell, menuitem);
-
-        menuitem = gtk_separator_menu_item_new ();
-        gtk_menu_shell_append (menu_shell, menuitem);
+        gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
 
         menuitem = sokoke_action_create_popup_menu_item (
                 gtk_action_group_get_action (actions, "ZoomIn"));
@@ -1585,9 +1698,7 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
             }
         }
 
-        menuitem = gtk_separator_menu_item_new ();
-        gtk_menu_shell_append (menu_shell, menuitem);
-
+        gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
         menuitem = sokoke_action_create_popup_menu_item (
                 gtk_action_group_get_action (actions, "BookmarkAdd"));
         gtk_menu_shell_append (menu_shell, menuitem);
@@ -1884,6 +1995,9 @@ midori_view_init (MidoriView* view)
     view->load_status = MIDORI_LOAD_FINISHED;
     view->minimized = FALSE;
     view->statusbar_text = NULL;
+    #if WEBKIT_CHECK_VERSION (1, 1, 15)
+    view->hit_test = NULL;
+    #endif
     view->link_uri = NULL;
     view->selected_text = NULL;
     view->news_feeds = katze_array_new (KATZE_TYPE_ITEM);