]> www.fi.muni.cz Git - evince.git/commitdiff
Add options to open and save attachment annotations to context menu
authorCarlos Garcia Campos <carlosgc@gnome.org>
Tue, 17 Nov 2009 13:31:26 +0000 (14:31 +0100)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Tue, 17 Nov 2009 13:31:26 +0000 (14:31 +0100)
data/evince-ui.xml
libview/ev-view.c
shell/ev-window.c

index bd5e947ced44422d4f6539e643b5e65b1c78f288..108000c603f4599f8b055c9cb9e40a90237b5233 100644 (file)
@@ -77,6 +77,9 @@
     <separator/>
     <menuitem name="SaveImageAs" action="SaveImageAs"/>
     <menuitem name="CopyImage" action="CopyImage"/>
+    <separator/>
+    <menuitem name="OpenAttachment" action="OpenAttachment"/>
+    <menuitem name="SaveAttachmentAs" action="SaveAttachmentAs"/>
   </popup>
 
   <popup name="AttachmentPopup" action="AttachmentPopupAction">
index effbd362e0eb44af5f2b979df543e8a4379540ca..8c59ec8157a7e41ae7b98634babf70960fc2fad0 100644 (file)
@@ -3209,8 +3209,9 @@ ev_view_do_popup_menu (EvView *view,
                       gdouble x,
                       gdouble y)
 {
-       EvLink  *link;
-       EvImage *image;
+       EvLink       *link;
+       EvImage      *image;
+       EvAnnotation *annot;
 
        image = ev_view_get_image_at_location (view, x, y);
        if (image) {
@@ -3224,6 +3225,12 @@ ev_view_do_popup_menu (EvView *view,
                return TRUE;
        }
 
+       annot = ev_view_get_annotation_at_location (view, x, y);
+       if (annot) {
+               g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, annot);
+               return TRUE;
+       }
+
        g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, NULL);
 
        return TRUE;
index 63d8f5ce217c9310dc314a15da5e2c5e3af0f23c..e13fce8f8add8da5da369a6e492ceda41dbb62ec 100644 (file)
@@ -59,6 +59,7 @@
 #include "ev-document-images.h"
 #include "ev-document-links.h"
 #include "ev-document-thumbnails.h"
+#include "ev-document-annotations.h"
 #include "ev-document-type-builtins.h"
 #include "ev-file-exporter.h"
 #include "ev-file-helpers.h"
@@ -4441,6 +4442,39 @@ view_menu_image_popup (EvWindow  *ev_window,
        gtk_action_set_visible (action, show_image);
 }
 
+static void
+view_menu_annot_popup (EvWindow     *ev_window,
+                      EvAnnotation *annot)
+{
+       GtkAction *action;
+       gboolean   show_annot = FALSE;
+
+       if (annot && EV_IS_ANNOTATION_ATTACHMENT (annot)) {
+               EvAttachment *attachment = EV_ANNOTATION_ATTACHMENT (annot)->attachment;
+
+               if (attachment) {
+                       show_annot = TRUE;
+                       if (ev_window->priv->attach_list) {
+                               g_list_foreach (ev_window->priv->attach_list,
+                                               (GFunc) g_object_unref, NULL);
+                               g_list_free (ev_window->priv->attach_list);
+                               ev_window->priv->attach_list = NULL;
+                       }
+                       ev_window->priv->attach_list =
+                               g_list_prepend (ev_window->priv->attach_list,
+                                               g_object_ref (attachment));
+               }
+       }
+
+       action = gtk_action_group_get_action (ev_window->priv->attachment_popup_action_group,
+                                             "OpenAttachment");
+       gtk_action_set_visible (action, show_annot);
+
+       action = gtk_action_group_get_action (ev_window->priv->attachment_popup_action_group,
+                                             "SaveAttachmentAs");
+       gtk_action_set_visible (action, show_annot);
+}
+
 static gboolean
 view_menu_popup_cb (EvView   *view,
                    GObject  *object,
@@ -4453,6 +4487,8 @@ view_menu_popup_cb (EvView   *view,
                              EV_IS_LINK (object) ? EV_LINK (object) : NULL);
        view_menu_image_popup (ev_window,
                               EV_IS_IMAGE (object) ? EV_IMAGE (object) : NULL);
+       view_menu_annot_popup (ev_window,
+                              EV_IS_ANNOTATION (object) ? EV_ANNOTATION (object) : NULL);
        
        gtk_menu_popup (GTK_MENU (ev_window->priv->view_popup),
                        NULL, NULL, NULL, NULL,