[evince] Make EvPageActionWidget work when the document model already has a document when it's set



commit 94d08928cb942c81f3f3bc01f0fc6649691e9d32
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Sun Jun 22 11:47:11 2014 +0200

    Make EvPageActionWidget work when the document model already has a document when it's set

 libmisc/ev-page-action-widget.c |   58 ++++++++++++++++++++++-----------------
 1 files changed, 33 insertions(+), 25 deletions(-)
---
diff --git a/libmisc/ev-page-action-widget.c b/libmisc/ev-page-action-widget.c
index a5410e5..1839ee9 100644
--- a/libmisc/ev-page-action-widget.c
+++ b/libmisc/ev-page-action-widget.c
@@ -250,35 +250,45 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget)
 }
 
 static void
-ev_page_action_widget_document_changed_cb (EvDocumentModel    *model,
-                                          GParamSpec         *pspec,
-                                          EvPageActionWidget *action_widget)
+ev_page_action_widget_set_document (EvPageActionWidget *action_widget,
+                                    EvDocument         *document)
 {
-       EvDocument *document = ev_document_model_get_document (model);
-
-       g_object_ref (document);
-       if (action_widget->document)
-               g_object_unref (action_widget->document);
-       action_widget->document = document;
-
-        gtk_widget_set_sensitive (GTK_WIDGET (action_widget), ev_document_get_n_pages (document) > 0);
-
-       if (action_widget->signal_id > 0) {
-               g_signal_handler_disconnect (action_widget->doc_model,
-                                            action_widget->signal_id);
-               action_widget->signal_id = 0;
-       }
-       action_widget->signal_id =
-               g_signal_connect (action_widget->doc_model,
+        if (document) {
+                g_object_ref (document);
+                gtk_widget_set_sensitive (GTK_WIDGET (action_widget), ev_document_get_n_pages (document) > 
0);
+        }
+
+        if (action_widget->signal_id > 0) {
+                g_signal_handler_disconnect (action_widget->doc_model,
+                                             action_widget->signal_id);
+                action_widget->signal_id = 0;
+        }
+
+        if (action_widget->document)
+                g_object_unref (action_widget->document);
+        action_widget->document = document;
+        if (!action_widget->document)
+                return;
+
+        action_widget->signal_id =
+                g_signal_connect (action_widget->doc_model,
                                   "page-changed",
                                   G_CALLBACK (page_changed_cb),
                                   action_widget);
 
-       ev_page_action_widget_set_current_page (action_widget,
-                                               ev_document_model_get_page (model));
+        ev_page_action_widget_set_current_page (action_widget,
+                                                ev_document_model_get_page (action_widget->doc_model));
         ev_page_action_widget_update_max_width (action_widget);
 }
 
+static void
+ev_page_action_widget_document_changed_cb (EvDocumentModel    *model,
+                                          GParamSpec         *pspec,
+                                          EvPageActionWidget *action_widget)
+{
+        ev_page_action_widget_set_document (action_widget, ev_document_model_get_document (model));
+}
+
 void
 ev_page_action_widget_set_model (EvPageActionWidget *action_widget,
                                 EvDocumentModel    *model)
@@ -291,6 +301,7 @@ ev_page_action_widget_set_model (EvPageActionWidget *action_widget,
        g_object_add_weak_pointer (G_OBJECT (model),
                                   (gpointer)&action_widget->doc_model);
 
+        ev_page_action_widget_set_document (action_widget, ev_document_model_get_document (model));
        g_signal_connect (model, "notify::document",
                          G_CALLBACK (ev_page_action_widget_document_changed_cb),
                          action_widget);
@@ -312,10 +323,7 @@ ev_page_action_widget_finalize (GObject *object)
                action_widget->doc_model = NULL;
        }
 
-       if (action_widget->document) {
-               g_object_unref (action_widget->document);
-               action_widget->document = NULL;
-       }
+        ev_page_action_widget_set_document (action_widget, NULL);
 
        G_OBJECT_CLASS (ev_page_action_widget_parent_class)->finalize (object);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]