]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-sidebar-attachments.c
Replace GTK_WIDGET_HAS_FOCUS() with gtk_widget_has_focus()
[evince.git] / shell / ev-sidebar-attachments.c
index 677d61fafd8cae2eae2cc5fe8a8658982c78db7b..18917f7b8eabc703e29f73d9a93c0d30e6429202 100644 (file)
@@ -31,6 +31,7 @@
 #include <glib/gstdio.h>
 #include <gtk/gtk.h>
 
+#include "ev-document-attachments.h"
 #include "ev-jobs.h"
 #include "ev-job-scheduler.h"
 #include "ev-file-helpers.h"
@@ -272,7 +273,7 @@ ev_sidebar_attachments_button_press (EvSidebarAttachments *ev_attachbar,
                                     GdkEventButton       *event,
                                     GtkWidget            *icon_view)
 {
-       if (!GTK_WIDGET_HAS_FOCUS (icon_view)) {
+       if (!gtk_widget_has_focus (icon_view)) {
                gtk_widget_grab_focus (icon_view);
        }
        
@@ -409,7 +410,7 @@ ev_sidebar_attachments_drag_data_get (GtkWidget        *widget,
                GtkTreePath  *path;
                GtkTreeIter   iter;
                GFile        *file;
-               gchar        *filename;
+               gchar        *template;
                GError       *error = NULL;
                
                path = (GtkTreePath *) l->data;
@@ -420,13 +421,12 @@ ev_sidebar_attachments_drag_data_get (GtkWidget        *widget,
                                    COLUMN_ATTACHMENT, &attachment,
                                    -1);
 
-               filename = g_build_filename (ev_tmp_dir (),
-                                            ev_attachment_get_name (attachment),
-                                            NULL);
-               file = g_file_new_for_path (filename);
-               g_free (filename);
+                /* FIXMEchpe: convert to filename encoding first! */
+                template = g_strdup_printf ("%s.XXXXXX", ev_attachment_get_name (attachment));
+                file = ev_mkstemp_file (template, &error);
+                g_free (template);
                
-               if (ev_attachment_save (attachment, file, &error)) {
+               if (file != NULL && ev_attachment_save (attachment, file, &error)) {
                        gchar *uri;
 
                        uri = g_file_get_uri (file);
@@ -534,12 +534,6 @@ ev_sidebar_attachments_class_init (EvSidebarAttachmentsClass *ev_attachbar_class
 static void
 ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar)
 {
-#if !GTK_CHECK_VERSION (2, 15, 0)
-        const GtkTargetEntry drag_targets[] = {
-                { "text/uri-list", 0, 0 }
-        };
-#endif
-
        GtkWidget *swindow;
        
        ev_attachbar->priv = EV_SIDEBAR_ATTACHMENTS_GET_PRIVATE (ev_attachbar);
@@ -589,21 +583,12 @@ ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar)
                                                                g_object_unref);
 
        /* Drag and Drop */
-#if GTK_CHECK_VERSION (2, 15, 0)
        gtk_icon_view_enable_model_drag_source (
                GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
                GDK_BUTTON1_MASK,
                NULL, 0,
                GDK_ACTION_COPY);
         gtk_drag_source_add_uri_targets (ev_attachbar->priv->icon_view);
-#else
-       gtk_icon_view_enable_model_drag_source (
-               GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
-               GDK_BUTTON1_MASK,
-               drag_targets,
-               G_N_ELEMENTS (drag_targets),
-               GDK_ACTION_COPY);
-#endif
 
        g_signal_connect (ev_attachbar->priv->icon_view,
                          "drag-data-get",
@@ -650,14 +635,19 @@ job_finished_callback (EvJobAttachments     *job,
        g_object_unref (job);
 }
 
+
 static void
-ev_sidebar_attachments_set_document (EvSidebarPage   *page,
-                                    EvDocument      *document)
+ev_sidebar_attachments_document_changed_cb (EvDocumentModel      *model,
+                                           GParamSpec           *pspec,
+                                           EvSidebarAttachments *ev_attachbar)
 {
-       EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (page);
+       EvDocument *document = ev_document_model_get_document (model);
        EvJob *job;
-       
-       if (!ev_document_has_attachments (document))
+
+       if (!EV_IS_DOCUMENT_ATTACHMENTS (document))
+               return;
+
+       if (!ev_document_attachments_has_attachments (EV_DOCUMENT_ATTACHMENTS (document)))
                return;
 
        if (!ev_attachbar->priv->icon_theme) {
@@ -684,11 +674,21 @@ ev_sidebar_attachments_set_document (EvSidebarPage   *page,
        ev_job_scheduler_push_job (job, EV_JOB_PRIORITY_NONE);
 }
 
+static void
+ev_sidebar_attachments_set_model (EvSidebarPage   *page,
+                                 EvDocumentModel *model)
+{
+       g_signal_connect (model, "notify::document",
+                         G_CALLBACK (ev_sidebar_attachments_document_changed_cb),
+                         page);
+}
+
 static gboolean
 ev_sidebar_attachments_support_document (EvSidebarPage   *sidebar_page,
                                         EvDocument      *document)
 {
-       return ev_document_has_attachments (document);
+       return (EV_IS_DOCUMENT_ATTACHMENTS (document) &&
+               ev_document_attachments_has_attachments (EV_DOCUMENT_ATTACHMENTS (document)));
 }
 
 static const gchar*
@@ -701,7 +701,7 @@ static void
 ev_sidebar_attachments_page_iface_init (EvSidebarPageIface *iface)
 {
        iface->support_document = ev_sidebar_attachments_support_document;
-       iface->set_document = ev_sidebar_attachments_set_document;
+       iface->set_model = ev_sidebar_attachments_set_model;
        iface->get_label = ev_sidebar_attachments_get_label;
 }