]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-sidebar-links.c
Updated the Kannada translations
[evince.git] / shell / ev-sidebar-links.c
index 623753c9272549da6f43db3a9d8f4919bf8866d3..0d0ece839487ce4fb04fd93cdc283b8318f122c1 100644 (file)
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #ifdef HAVE_CONFIG_H
  */
 
 #ifdef HAVE_CONFIG_H
@@ -46,7 +46,7 @@ struct _EvSidebarLinksPrivate {
        EvJob *job;
        GtkTreeModel *model;
        EvDocument *document;
        EvJob *job;
        GtkTreeModel *model;
        EvDocument *document;
-       EvPageCache *page_cache;
+       EvDocumentModel *doc_model;
 };
 
 enum {
 };
 
 enum {
@@ -60,18 +60,20 @@ enum {
        N_SIGNALS
 };
 
        N_SIGNALS
 };
 
-static void update_page_callback                       (EvPageCache       *page_cache,
-                                                        gint               current_page,
-                                                        EvSidebarLinks    *sidebar_links);
+static void update_page_callback                       (EvSidebarLinks    *sidebar_links,
+                                                        gint               old_page,
+                                                        gint               current_page);
 static void row_activated_callback                     (GtkTreeView *treeview,
                                                         GtkTreePath *arg1,
                                                         GtkTreeViewColumn *arg2,
                                                         gpointer user_data);
 static void row_activated_callback                     (GtkTreeView *treeview,
                                                         GtkTreePath *arg1,
                                                         GtkTreeViewColumn *arg2,
                                                         gpointer user_data);
+static void ev_sidebar_links_set_links_model            (EvSidebarLinks *links,
+                                                        GtkTreeModel   *model);
 static void job_finished_callback                      (EvJobLinks     *job,
                                                         EvSidebarLinks *sidebar_links);
 static void job_finished_callback                      (EvJobLinks     *job,
                                                         EvSidebarLinks *sidebar_links);
-static void ev_sidebar_links_page_iface_init           (EvSidebarPageIface *iface);
-static void ev_sidebar_links_set_document                      (EvSidebarPage  *sidebar_page,
-                                                        EvDocument     *document);
+static void ev_sidebar_links_set_current_page           (EvSidebarLinks *sidebar_links,
+                                                        gint            current_page);
+static void ev_sidebar_links_page_iface_init           (EvSidebarPageInterface *iface);
 static gboolean ev_sidebar_links_support_document      (EvSidebarPage  *sidebar_page,
                                                         EvDocument     *document);
 static const gchar* ev_sidebar_links_get_label                 (EvSidebarPage *sidebar_page);
 static gboolean ev_sidebar_links_support_document      (EvSidebarPage  *sidebar_page,
                                                         EvDocument     *document);
 static const gchar* ev_sidebar_links_get_label                 (EvSidebarPage *sidebar_page);
@@ -95,18 +97,12 @@ ev_sidebar_links_set_property (GObject      *object,
                               const GValue *value,
                               GParamSpec   *pspec)
 {
                               const GValue *value,
                               GParamSpec   *pspec)
 {
-       EvSidebarLinks *ev_sidebar_links;
-       GtkTreeModel *model;
-  
-       ev_sidebar_links = EV_SIDEBAR_LINKS (object);
+       EvSidebarLinks *ev_sidebar_links = EV_SIDEBAR_LINKS (object);
 
        switch (prop_id)
        {
        case PROP_MODEL:
 
        switch (prop_id)
        {
        case PROP_MODEL:
-               model = ev_sidebar_links->priv->model;
-               ev_sidebar_links->priv->model = GTK_TREE_MODEL (g_value_dup_object (value));
-               if (model)
-                       g_object_unref (model);
+               ev_sidebar_links_set_links_model (ev_sidebar_links, g_value_get_object (value));
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -159,7 +155,7 @@ ev_sidebar_links_dispose (GObject *object)
        if (sidebar->priv->document) {
                g_object_unref (sidebar->priv->document);
                sidebar->priv->document = NULL;
        if (sidebar->priv->document) {
                g_object_unref (sidebar->priv->document);
                sidebar->priv->document = NULL;
-               sidebar->priv->page_cache = NULL;
+               sidebar->priv->doc_model = NULL;
        }
 
        G_OBJECT_CLASS (ev_sidebar_links_parent_class)->dispose (object);
        }
 
        G_OBJECT_CLASS (ev_sidebar_links_parent_class)->dispose (object);
@@ -175,9 +171,8 @@ ev_sidebar_links_map (GtkWidget *widget)
        GTK_WIDGET_CLASS (ev_sidebar_links_parent_class)->map (widget);
 
        if (links->priv->model) {
        GTK_WIDGET_CLASS (ev_sidebar_links_parent_class)->map (widget);
 
        if (links->priv->model) {
-               update_page_callback (links->priv->page_cache,
-                                     ev_page_cache_get_current_page (links->priv->page_cache),
-                                     links);
+               ev_sidebar_links_set_current_page (links,
+                                                  ev_document_model_get_page (links->priv->doc_model));
        }
 }
 
        }
 }
 
@@ -239,10 +234,10 @@ selection_changed_callback (GtkTreeSelection   *selection,
                if (link == NULL)
                        return;
 
                if (link == NULL)
                        return;
 
-               g_signal_handler_block (ev_sidebar_links->priv->page_cache,
+               g_signal_handler_block (ev_sidebar_links->priv->doc_model,
                                        ev_sidebar_links->priv->page_changed_id);
                g_signal_emit (ev_sidebar_links, signals[LINK_ACTIVATED], 0, link);
                                        ev_sidebar_links->priv->page_changed_id);
                g_signal_emit (ev_sidebar_links, signals[LINK_ACTIVATED], 0, link);
-               g_signal_handler_unblock (ev_sidebar_links->priv->page_cache,
+               g_signal_handler_unblock (ev_sidebar_links->priv->doc_model,
                                          ev_sidebar_links->priv->page_changed_id);
 
                g_object_unref (link);
                                          ev_sidebar_links->priv->page_changed_id);
 
                g_object_unref (link);
@@ -264,7 +259,7 @@ create_loading_model (void)
                                                     G_TYPE_STRING);
 
        gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
                                                     G_TYPE_STRING);
 
        gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
-       markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>", _("Loading..."));
+       markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>", _("Loading…"));
        gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
                            EV_DOCUMENT_LINKS_COLUMN_MARKUP, markup,
                            EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
        gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
                            EV_DOCUMENT_LINKS_COLUMN_MARKUP, markup,
                            EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
@@ -316,11 +311,11 @@ print_section_cb (GtkWidget *menuitem, EvSidebarLinks *sidebar)
                                g_object_unref (link);
                        }
                } else {
                                g_object_unref (link);
                        }
                } else {
-                       last_page = ev_page_cache_get_n_pages (sidebar->priv->page_cache);
+                       last_page = ev_document_get_n_pages (sidebar->priv->document);
                }
 
                if (last_page == -1)
                }
 
                if (last_page == -1)
-                       last_page = ev_page_cache_get_n_pages (sidebar->priv->page_cache);
+                       last_page = ev_document_get_n_pages (sidebar->priv->document);
        
                window = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
                if (EV_IS_WINDOW (window)) {
        
                window = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
                if (EV_IS_WINDOW (window)) {
@@ -337,7 +332,7 @@ build_popup_menu (EvSidebarLinks *sidebar)
 
        menu = gtk_menu_new ();
        item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PRINT, NULL);
 
        menu = gtk_menu_new ();
        item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PRINT, NULL);
-       gtk_label_set_label (GTK_LABEL (GTK_BIN (item)->child), _("Print..."));
+       gtk_label_set_label (GTK_LABEL (gtk_bin_get_child (GTK_BIN (item))), _("Print…"));
        gtk_widget_show (item);
        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
        g_signal_connect (item, "activate",
        gtk_widget_show (item);
        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
        g_signal_connect (item, "activate",
@@ -439,11 +434,11 @@ ev_sidebar_links_construct (EvSidebarLinks *ev_sidebar_links)
                                             NULL);
        g_object_set (G_OBJECT (renderer), "style", PANGO_STYLE_ITALIC, NULL);
 
                                             NULL);
        g_object_set (G_OBJECT (renderer), "style", PANGO_STYLE_ITALIC, NULL);
 
-       g_signal_connect (GTK_TREE_VIEW (priv->tree_view),
+       g_signal_connect (priv->tree_view,
                          "button_press_event",
                          G_CALLBACK (button_press_cb),
                          ev_sidebar_links);
                          "button_press_event",
                          G_CALLBACK (button_press_cb),
                          ev_sidebar_links);
-       g_signal_connect (GTK_TREE_VIEW (priv->tree_view),
+       g_signal_connect (priv->tree_view,
                          "popup_menu",
                          G_CALLBACK (popup_menu_cb),
                          ev_sidebar_links);
                          "popup_menu",
                          G_CALLBACK (popup_menu_cb),
                          ev_sidebar_links);
@@ -479,8 +474,8 @@ fill_page_labels (GtkTreeModel *tree_model,
        if (page < 0) 
                return FALSE;
        
        if (page < 0) 
                return FALSE;
        
-       page_label = ev_page_cache_get_page_label (sidebar_links->priv->page_cache,
-                                                  page);
+       page_label = ev_document_get_page_label (sidebar_links->priv->document,
+                                                page);
        gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
                            EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label, 
                            -1);
        gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
                            EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label, 
                            -1);
@@ -523,7 +518,7 @@ update_page_callback_foreach (GtkTreeModel *model,
                dest_page = ev_link_get_page (link);
                g_object_unref (link);
                
                dest_page = ev_link_get_page (link);
                g_object_unref (link);
                
-               current_page = ev_page_cache_get_current_page (sidebar_links->priv->page_cache);
+               current_page = ev_document_model_get_page (sidebar_links->priv->doc_model);
                         
                if (dest_page == current_page) {
                        gtk_tree_view_expand_to_path (GTK_TREE_VIEW (sidebar_links->priv->tree_view),
                         
                if (dest_page == current_page) {
                        gtk_tree_view_expand_to_path (GTK_TREE_VIEW (sidebar_links->priv->tree_view),
@@ -539,16 +534,15 @@ update_page_callback_foreach (GtkTreeModel *model,
 }
 
 static void
 }
 
 static void
-update_page_callback (EvPageCache    *page_cache,
-                     gint            current_page,
-                     EvSidebarLinks *sidebar_links)
+ev_sidebar_links_set_current_page (EvSidebarLinks *sidebar_links,
+                                  gint            current_page)
 {
        GtkTreeSelection *selection;
        GtkTreeModel *model;
        GtkTreeIter iter;
 
        /* Widget is not currently visible */
 {
        GtkTreeSelection *selection;
        GtkTreeModel *model;
        GtkTreeIter iter;
 
        /* Widget is not currently visible */
-       if (!GTK_WIDGET_MAPPED (sidebar_links))
+       if (!gtk_widget_get_mapped (GTK_WIDGET (sidebar_links)))
                return;
        
        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar_links->priv->tree_view));
                return;
        
        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar_links->priv->tree_view));
@@ -586,6 +580,14 @@ update_page_callback (EvPageCache    *page_cache,
        g_signal_handler_unblock (sidebar_links->priv->tree_view, sidebar_links->priv->row_activated_id);
 }
 
        g_signal_handler_unblock (sidebar_links->priv->tree_view, sidebar_links->priv->row_activated_id);
 }
 
+static void
+update_page_callback (EvSidebarLinks *sidebar_links,
+                     gint            old_page,
+                     gint            new_page)
+{
+       ev_sidebar_links_set_current_page (sidebar_links, new_page);
+}
+
 static void 
 row_activated_callback (GtkTreeView       *treeview,
                        GtkTreePath       *arg1,
 static void 
 row_activated_callback (GtkTreeView       *treeview,
                        GtkTreePath       *arg1,
@@ -622,19 +624,32 @@ expand_open_links (GtkTreeView *tree_view, GtkTreeModel *model, GtkTreeIter *par
                } while (gtk_tree_model_iter_next (model, &iter));
        }
 }
                } while (gtk_tree_model_iter_next (model, &iter));
        }
 }
-       
+
+static void
+ev_sidebar_links_set_links_model (EvSidebarLinks *sidebar_links,
+                                 GtkTreeModel   *model)
+{
+       EvSidebarLinksPrivate *priv = sidebar_links->priv;
+
+       if (priv->model == model)
+               return;
+
+       if (priv->model)
+               g_object_unref (priv->model);
+       priv->model = g_object_ref (model);
+
+       g_object_notify (G_OBJECT (sidebar_links), "model");
+}
+
 static void
 job_finished_callback (EvJobLinks     *job,
                       EvSidebarLinks *sidebar_links)
 {
 static void
 job_finished_callback (EvJobLinks     *job,
                       EvSidebarLinks *sidebar_links)
 {
-       EvSidebarLinksPrivate *priv;
+       EvSidebarLinksPrivate *priv = sidebar_links->priv;
        GtkTreeSelection *selection;
 
        GtkTreeSelection *selection;
 
-       priv = sidebar_links->priv;
-       
-       priv->model = job->model;
-       g_object_notify (G_OBJECT (sidebar_links), "model");
-       
+       ev_sidebar_links_set_links_model (sidebar_links, job->model);
+
        gtk_tree_model_foreach (priv->model, (GtkTreeModelForeachFunc)fill_page_labels, sidebar_links);
 
        gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
        gtk_tree_model_foreach (priv->model, (GtkTreeModelForeachFunc)fill_page_labels, sidebar_links);
 
        gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
@@ -653,34 +668,34 @@ job_finished_callback (EvJobLinks     *job,
                                          G_CALLBACK (selection_changed_callback),
                                          sidebar_links);
        }
                                          G_CALLBACK (selection_changed_callback),
                                          sidebar_links);
        }
-       priv->page_changed_id = g_signal_connect (priv->page_cache, "page-changed",
-                                                 G_CALLBACK (update_page_callback),
-                                                 sidebar_links);
+       priv->page_changed_id =
+               g_signal_connect_swapped (priv->doc_model, "page-changed",
+                                         G_CALLBACK (update_page_callback),
+                                         sidebar_links);
        if (priv->row_activated_id <= 0) {
                priv->row_activated_id =
        if (priv->row_activated_id <= 0) {
                priv->row_activated_id =
-                       g_signal_connect (G_OBJECT (priv->tree_view), "row-activated",
+                       g_signal_connect (priv->tree_view, "row-activated",
                                          G_CALLBACK (row_activated_callback),
                                          sidebar_links);
        }
                                          G_CALLBACK (row_activated_callback),
                                          sidebar_links);
        }
-       
-       update_page_callback (priv->page_cache,
-                             ev_page_cache_get_current_page (priv->page_cache),
-                             sidebar_links);
+
+       ev_sidebar_links_set_current_page (sidebar_links,
+                                          ev_document_model_get_page (priv->doc_model));
 }
 
 static void
 }
 
 static void
-ev_sidebar_links_set_document (EvSidebarPage  *sidebar_page,
-                              EvDocument     *document)
+ev_sidebar_links_document_changed_cb (EvDocumentModel *model,
+                                     GParamSpec      *pspec,
+                                     EvSidebarLinks  *sidebar_links)
 {
 {
-       EvSidebarLinks *sidebar_links;
-       EvSidebarLinksPrivate *priv;
+       EvDocument *document = ev_document_model_get_document (model);
+       EvSidebarLinksPrivate *priv = sidebar_links->priv;
 
 
-       g_return_if_fail (EV_IS_SIDEBAR_PAGE (sidebar_page));
-       g_return_if_fail (EV_IS_DOCUMENT (document));
-       
-       sidebar_links = EV_SIDEBAR_LINKS (sidebar_page);
+       if (!EV_IS_DOCUMENT_LINKS (document))
+               return;
 
 
-       priv = sidebar_links->priv;
+       if (!ev_document_links_has_document_links (EV_DOCUMENT_LINKS (document)))
+               return;
 
        if (priv->document) {
                gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), NULL);
 
        if (priv->document) {
                gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), NULL);
@@ -688,7 +703,6 @@ ev_sidebar_links_set_document (EvSidebarPage  *sidebar_page,
        }
 
        priv->document = g_object_ref (document);
        }
 
        priv->document = g_object_ref (document);
-       priv->page_cache = ev_page_cache_get (document);
 
        if (priv->job) {
                g_signal_handlers_disconnect_by_func (priv->job,
 
        if (priv->job) {
                g_signal_handlers_disconnect_by_func (priv->job,
@@ -706,6 +720,22 @@ ev_sidebar_links_set_document (EvSidebarPage  *sidebar_page,
        ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE);
 }
 
        ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE);
 }
 
+static void
+ev_sidebar_links_set_model (EvSidebarPage   *sidebar_page,
+                           EvDocumentModel *model)
+{
+       EvSidebarLinks *sidebar_links = EV_SIDEBAR_LINKS (sidebar_page);
+       EvSidebarLinksPrivate *priv = sidebar_links->priv;
+
+       if (priv->doc_model == model)
+               return;
+
+       priv->doc_model = model;
+       g_signal_connect (model, "notify::document",
+                         G_CALLBACK (ev_sidebar_links_document_changed_cb),
+                         sidebar_page);
+}
+
 static gboolean
 ev_sidebar_links_support_document (EvSidebarPage  *sidebar_page,
                                   EvDocument *document)
 static gboolean
 ev_sidebar_links_support_document (EvSidebarPage  *sidebar_page,
                                   EvDocument *document)
@@ -721,10 +751,10 @@ ev_sidebar_links_get_label (EvSidebarPage *sidebar_page)
 }
 
 static void
 }
 
 static void
-ev_sidebar_links_page_iface_init (EvSidebarPageIface *iface)
+ev_sidebar_links_page_iface_init (EvSidebarPageInterface *iface)
 {
        iface->support_document = ev_sidebar_links_support_document;
 {
        iface->support_document = ev_sidebar_links_support_document;
-       iface->set_document = ev_sidebar_links_set_document;
+       iface->set_model = ev_sidebar_links_set_model;
        iface->get_label = ev_sidebar_links_get_label;
 }
 
        iface->get_label = ev_sidebar_links_get_label;
 }