X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-sidebar-attachments.c;h=aaaea31c99c2fb8298aec45ef7bcce1440d0a66f;hb=d937b8505ff14af15ae0372ab40a0e81a93b728c;hp=47549f6c73ed466bcb9bdc979c52440697a21e8a;hpb=fe8a90e5ecdc21069bc6617f07b7ab12a5a4a012;p=evince.git diff --git a/shell/ev-sidebar-attachments.c b/shell/ev-sidebar-attachments.c index 47549f6c..aaaea31c 100644 --- a/shell/ev-sidebar-attachments.c +++ b/shell/ev-sidebar-attachments.c @@ -31,6 +31,7 @@ #include #include +#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; }