]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-sidebar-attachments.c
Updated Thai translation.
[evince.git] / shell / ev-sidebar-attachments.c
index 47549f6c73ed466bcb9bdc979c52440697a21e8a..aaaea31c99c2fb8298aec45ef7bcce1440d0a66f 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"
@@ -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);
@@ -567,7 +567,7 @@ ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar)
                      "text-column", COLUMN_NAME,
                      "pixbuf-column", COLUMN_ICON,
                      NULL);
-       g_signal_connect_swapped (G_OBJECT (ev_attachbar->priv->icon_view),
+       g_signal_connect_swapped (ev_attachbar->priv->icon_view,
                                  "button-press-event",
                                  G_CALLBACK (ev_sidebar_attachments_button_press),
                                  (gpointer) ev_attachbar);
@@ -605,7 +605,7 @@ ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar)
                GDK_ACTION_COPY);
 #endif
 
-       g_signal_connect (G_OBJECT (ev_attachbar->priv->icon_view),
+       g_signal_connect (ev_attachbar->priv->icon_view,
                          "drag-data-get",
                          G_CALLBACK (ev_sidebar_attachments_drag_data_get),
                          (gpointer) ev_attachbar);     
@@ -650,14 +650,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) {
@@ -665,7 +670,7 @@ ev_sidebar_attachments_set_document (EvSidebarPage   *page,
 
                screen = gtk_widget_get_screen (GTK_WIDGET (ev_attachbar));
                ev_attachbar->priv->icon_theme = gtk_icon_theme_get_for_screen (screen);
-               g_signal_connect_swapped (G_OBJECT (ev_attachbar->priv->icon_theme),
+               g_signal_connect_swapped (ev_attachbar->priv->icon_theme,
                                          "changed",
                                          G_CALLBACK (ev_sidebar_attachments_update_icons),
                                          (gpointer) ev_attachbar);
@@ -684,11 +689,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 +716,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;
 }