]> spindle.queued.net Git - midori/commitdiff
Distinguish a view that can be saved, view source
authorChristian Dywan <christian@twotoasts.de>
Wed, 14 Dec 2011 00:37:14 +0000 (01:37 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 14 Dec 2011 00:37:14 +0000 (01:37 +0100)
Looking at the data source determines if there's a
way to save the data. The prime use case is having
images in tabs.

Fixes: https://bugs.launchpad.net/midori/+bug/903499
midori/midori-browser.c
midori/midori-view.c
midori/midori-view.h

index 4415b40b28b1184be6555616c49358c636c36b85..005a94ed45df658413fe0eb019a1c9e9d82bae4d 100644 (file)
@@ -305,9 +305,7 @@ _midori_browser_update_interface (MidoriBrowser* browser)
 
     gtk_action_set_visible (_action_by_name (browser, "AddSpeedDial"),
         !midori_view_is_blank (view));
-    /* Currently views that don't support source, don't support
-       saving either. If that changes, we need to think of something. */
-    _action_set_sensitive (browser, "SaveAs", midori_view_can_view_source (view));
+    _action_set_sensitive (browser, "SaveAs", midori_view_can_save (view));
     _action_set_sensitive (browser, "Print", midori_view_can_print (view));
     _action_set_sensitive (browser, "ZoomIn", midori_view_can_zoom_in (view));
     _action_set_sensitive (browser, "ZoomOut", midori_view_can_zoom_out (view));
index b0d6eef41d674a8cab0c1fed56c7e0f548203039..d73bcfd96e8808611a8b958b6c215307c40f4003 100644 (file)
@@ -2587,10 +2587,6 @@ midori_view_populate_popup (MidoriView* view,
         menuitem = sokoke_action_create_popup_menu_item (
                 gtk_action_group_get_action (actions, "SaveAs"));
         gtk_menu_shell_append (menu_shell, menuitem);
-        /* Currently views that don't support source, don't support
-           saving either. If that changes, we need to think of something. */
-        if (!midori_view_can_view_source (view))
-            gtk_widget_set_sensitive (menuitem, FALSE);
         menuitem = sokoke_action_create_popup_menu_item (
                 gtk_action_group_get_action (actions, "SourceView"));
         gtk_menu_shell_append (menu_shell, menuitem);
@@ -4835,6 +4831,43 @@ midori_view_can_view_source (MidoriView* view)
     return is_text;
 }
 
+/**
+ * midori_view_can_save:
+ * @view: a #MidoriView
+ *
+ * Determines if the view can be saved to disk.
+ *
+ * Return value: %TRUE if the website or image can be saved
+ *
+ * Since: 0.4.3
+ **/
+gboolean
+midori_view_can_save (MidoriView* view)
+{
+    GtkWidget* web_view;
+    WebKitWebDataSource *data_source;
+    WebKitWebFrame *frame;
+    const GString *data;
+
+    g_return_val_if_fail (MIDORI_IS_VIEW (view), FALSE);
+
+    if (midori_view_is_blank (view) || view->mime_type == NULL)
+        return FALSE;
+
+    web_view = midori_view_get_web_view (view);
+    if (webkit_web_view_get_view_source_mode (WEBKIT_WEB_VIEW (web_view)))
+        return FALSE;
+
+    frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
+    data_source = webkit_web_frame_get_data_source (frame);
+    data = webkit_web_data_source_get_data (data_source);
+
+    if (data != NULL)
+        return TRUE;
+
+    return FALSE;
+}
+
 #define can_do(what) \
 gboolean \
 midori_view_can_##what (MidoriView* view) \
index e96cf7a03790fe3fbf1c92422979c5a38ac5b1c2..fcc20abd679ee504c63a2fdefd362b1c1b191dbf 100644 (file)
@@ -194,6 +194,9 @@ midori_view_print                      (MidoriView*        view);
 gboolean
 midori_view_can_view_source            (MidoriView*        view);
 
+gboolean
+midori_view_can_save                   (MidoriView*        view);
+
 gboolean
 midori_view_can_find                   (MidoriView*        view);