[evince] Use EvPageActionWidget directly in the toolbar instead of EvPageAction



commit 1e803dcde60be73bd853dce5852ceed566c8899c
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Sun Jun 22 11:08:11 2014 +0200

    Use EvPageActionWidget directly in the toolbar instead of EvPageAction
    
    We will get rid of current EvPageAction when the previewer doesn't use
    GtkUIManager for the toolbar.

 libmisc/ev-page-action-widget.c |    3 ++
 shell/ev-toolbar.c              |   20 ++++++++---
 shell/ev-toolbar.h              |    1 +
 shell/ev-window.c               |   77 ++++++---------------------------------
 shell/ev-window.h               |    1 -
 5 files changed, 31 insertions(+), 71 deletions(-)
---
diff --git a/libmisc/ev-page-action-widget.c b/libmisc/ev-page-action-widget.c
index c5a14e0..a5410e5 100644
--- a/libmisc/ev-page-action-widget.c
+++ b/libmisc/ev-page-action-widget.c
@@ -245,6 +245,7 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget)
        gtk_container_add (GTK_CONTAINER (action_widget), hbox);
        gtk_widget_show (hbox);
 
+        gtk_widget_set_sensitive (GTK_WIDGET (action_widget), FALSE);
        gtk_widget_show (GTK_WIDGET (action_widget));
 }
 
@@ -260,6 +261,8 @@ ev_page_action_widget_document_changed_cb (EvDocumentModel    *model,
                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);
diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c
index 6b68dee..31e4089 100644
--- a/shell/ev-toolbar.c
+++ b/shell/ev-toolbar.c
@@ -31,6 +31,7 @@
 #include "ev-history-action.h"
 #include "ev-application.h"
 #include "ev-recent-menu-model.h"
+#include "ev-page-action-widget.h"
 #include <math.h>
 
 enum
@@ -46,6 +47,7 @@ struct _EvToolbarPrivate {
         GtkWidget *action_menu_button;
         GtkWidget *history_action;
         GtkWidget *zoom_action;
+        GtkWidget *page_selector;
         GMenu *bookmarks_section;
 };
 
@@ -194,10 +196,8 @@ ev_toolbar_constructed (GObject *object)
 {
         EvToolbar      *ev_toolbar = EV_TOOLBAR (object);
         GtkBuilder     *builder;
-        GtkActionGroup *action_group;
         GtkWidget      *tool_item;
         GtkWidget      *hbox, *vbox;
-        GtkAction      *action;
         GtkWidget      *button;
         gboolean        rtl;
         GMenuModel     *menu;
@@ -214,7 +214,6 @@ ev_toolbar_constructed (GObject *object)
         gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (ev_toolbar)),
                                      GTK_STYLE_CLASS_MENUBAR);
 
-        action_group = ev_window_get_main_action_group (ev_toolbar->priv->window);
         builder = gtk_builder_new_from_resource ("/org/gnome/evince/shell/ui/menus.ui");
 
         /* Navigation */
@@ -242,8 +241,11 @@ ev_toolbar_constructed (GObject *object)
         gtk_widget_show (tool_item);
 
         /* Page selector */
-        action = gtk_action_group_get_action (action_group, "PageSelector");
-        tool_item = gtk_action_create_tool_item (action);
+        /* Use EvPageActionWidget for now, since the page selector action is also used by the previewer */
+        tool_item = GTK_WIDGET (g_object_new (EV_TYPE_PAGE_ACTION_WIDGET, NULL));
+        ev_toolbar->priv->page_selector = tool_item;
+        ev_page_action_widget_set_model (EV_PAGE_ACTION_WIDGET (tool_item),
+                                         ev_window_get_document_model (ev_toolbar->priv->window));
         if (rtl)
                 gtk_widget_set_margin_left (tool_item, 12);
         else
@@ -422,3 +424,11 @@ ev_toolbar_action_menu_popup (EvToolbar *ev_toolbar)
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ev_toolbar->priv->action_menu_button),
                                       TRUE);
 }
+
+GtkWidget *
+ev_toolbar_get_page_selector (EvToolbar *ev_toolbar)
+{
+        g_return_val_if_fail (EV_IS_TOOLBAR (ev_toolbar), NULL);
+
+        return ev_toolbar->priv->page_selector;
+}
diff --git a/shell/ev-toolbar.h b/shell/ev-toolbar.h
index 0c54932..0220b22 100644
--- a/shell/ev-toolbar.h
+++ b/shell/ev-toolbar.h
@@ -51,6 +51,7 @@ GType      ev_toolbar_get_type           (void);
 GtkWidget *ev_toolbar_new                (EvWindow *window);
 gboolean   ev_toolbar_has_visible_popups (EvToolbar *ev_toolbar);
 void       ev_toolbar_action_menu_popup  (EvToolbar *ev_toolbar);
+GtkWidget *ev_toolbar_get_page_selector  (EvToolbar *ev_toolbar);
 
 G_END_DECLS
 
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 9355e61..accb918 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -63,7 +63,7 @@
 #include "ev-loading-message.h"
 #include "ev-message-area.h"
 #include "ev-metadata.h"
-#include "ev-page-action.h"
+#include "ev-page-action-widget.h"
 #include "ev-password-view.h"
 #include "ev-properties-dialog.h"
 #include "ev-sidebar-annotations.h"
@@ -239,8 +239,6 @@ struct _EvWindowPrivate {
 
 #define EV_WINDOW_IS_PRESENTATION(w) (w->priv->presentation_view != NULL)
 
-#define PAGE_SELECTOR_ACTION   "PageSelector"
-
 #define GS_LOCKDOWN_SCHEMA_NAME  "org.gnome.desktop.lockdown"
 #define GS_LOCKDOWN_SAVE         "disable-save-to-disk"
 #define GS_LOCKDOWN_PRINT        "disable-printing"
@@ -388,17 +386,6 @@ ev_window_set_action_enabled (EvWindow   *ev_window,
 }
 
 static void
-ev_window_set_action_sensitive (EvWindow   *ev_window,
-                               const char *name,
-                               gboolean    sensitive)
-{
-       GtkAction *action = gtk_action_group_get_action (ev_window->priv->action_group,
-                                                        name);
-       gtk_action_set_sensitive (action, sensitive);
-}
-
-
-static void
 ev_window_setup_action_sensitivity (EvWindow *ev_window)
 {
        EvDocument *document = ev_window->priv->document;
@@ -482,9 +469,6 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
        ev_window_set_action_enabled (ev_window, "add-bookmark",
                                        has_pages && ev_window->priv->bookmarks);
 
-       /* Toolbar-specific actions: */
-       ev_window_set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, has_pages);
-
         ev_window_update_actions_sensitivity (ev_window);
 }
 
@@ -3652,14 +3636,13 @@ ev_window_cmd_focus_page_selector (GSimpleAction *action,
                                   gpointer       user_data)
 {
        EvWindow *window = user_data;
-       GtkAction *page_action;
+       GtkWidget *page_selector;
 
        update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, TRUE);
        update_chrome_visibility (window);
 
-       page_action = gtk_action_group_get_action (window->priv->action_group,
-                                                  PAGE_SELECTOR_ACTION);
-       ev_page_action_grab_focus (EV_PAGE_ACTION (page_action));
+       page_selector = ev_toolbar_get_page_selector (EV_TOOLBAR (window->priv->toolbar));
+       ev_page_action_widget_grab_focus (EV_PAGE_ACTION_WIDGET (page_selector));
 }
 
 static void
@@ -5453,11 +5436,6 @@ ev_window_dispose (GObject *object)
                priv->ui_manager = NULL;
        }
 
-       if (priv->action_group) {
-               g_object_unref (priv->action_group);
-               priv->action_group = NULL;
-       }
-
        if (priv->view_popup_action_group) {
                g_object_unref (priv->view_popup_action_group);
                priv->view_popup_action_group = NULL;
@@ -5800,39 +5778,19 @@ sidebar_annots_annot_add_cancelled (EvSidebarAnnotations *sidebar_annots,
 }
 
 static void
-register_custom_actions (EvWindow *window, GtkActionGroup *group)
-{
-       GtkAction *action;
-
-       action = g_object_new (EV_TYPE_PAGE_ACTION,
-                              "name", PAGE_SELECTOR_ACTION,
-                              "label", _("Page"),
-                              "tooltip", _("Select Page"),
-                              "icon_name", "text-x-generic",
-                              "visible_overflown", FALSE,
-                              NULL);
-       ev_page_action_set_model (EV_PAGE_ACTION (action),
-                                 window->priv->model);
-       g_signal_connect (action, "activate_link",
-                         G_CALLBACK (activate_link_cb), window);
-       gtk_action_group_add_action (group, action);
-       g_object_unref (action);
-}
-
-static void
 sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links,
                          GParamSpec     *pspec,
                          EvWindow       *ev_window)
 {
        GtkTreeModel *model;
-       GtkAction *action;
+       GtkWidget *page_selector;
 
        g_object_get (G_OBJECT (ev_sidebar_links),
                      "model", &model,
                      NULL);
 
-       action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
-       ev_page_action_set_links_model (EV_PAGE_ACTION (action), model);
+       page_selector = ev_toolbar_get_page_selector (EV_TOOLBAR (ev_window->priv->toolbar));
+       ev_page_action_widget_update_links_model (EV_PAGE_ACTION_WIDGET (page_selector), model);
        g_object_unref (model);
 }
 
@@ -6766,15 +6724,7 @@ ev_window_init (EvWindow *ev_window)
                                         actions, G_N_ELEMENTS (actions),
                                         ev_window);
 
-       action_group = gtk_action_group_new ("MenuActions");
-       ev_window->priv->action_group = action_group;
-       gtk_action_group_set_translation_domain (action_group, NULL);
-       register_custom_actions (ev_window, action_group);
-
        ev_window->priv->ui_manager = gtk_ui_manager_new ();
-       gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
-                                           action_group, 0);
-
        accel_group =
                gtk_ui_manager_get_accel_group (ev_window->priv->ui_manager);
        gtk_window_add_accel_group (GTK_WINDOW (ev_window), accel_group);
@@ -6823,6 +6773,11 @@ ev_window_init (EvWindow *ev_window)
                            FALSE, TRUE, 0);
        gtk_widget_show (ev_window->priv->toolbar);
 
+       g_signal_connect (ev_toolbar_get_page_selector (EV_TOOLBAR (ev_window->priv->toolbar)),
+                         "activate-link",
+                         G_CALLBACK (activate_link_cb),
+                         ev_window);
+
        /* Find Bar */
        ev_window->priv->find_bar = egg_find_bar_new ();
        gtk_style_context_add_class (gtk_widget_get_style_context (ev_window->priv->find_bar),
@@ -7164,14 +7119,6 @@ ev_window_get_ui_manager (EvWindow *ev_window)
        return ev_window->priv->ui_manager;
 }
 
-GtkActionGroup *
-ev_window_get_main_action_group (EvWindow *ev_window)
-{
-       g_return_val_if_fail (EV_WINDOW (ev_window), NULL);
-
-       return ev_window->priv->action_group;
-}
-
 GMenuModel *
 ev_window_get_bookmarks_menu (EvWindow *ev_window)
 {
diff --git a/shell/ev-window.h b/shell/ev-window.h
index cabd9c9..1d16a67 100644
--- a/shell/ev-window.h
+++ b/shell/ev-window.h
@@ -89,7 +89,6 @@ void          ev_window_print_range                    (EvWindow       *ev_window,
                                                           int           last_page);
 const gchar    *ev_window_get_dbus_object_path           (EvWindow       *ev_window);
 GtkUIManager   *ev_window_get_ui_manager                 (EvWindow       *ev_window);
-GtkActionGroup *ev_window_get_main_action_group          (EvWindow       *ev_window);
 GMenuModel     *ev_window_get_bookmarks_menu             (EvWindow       *ev_window);
 EvHistory      *ev_window_get_history                    (EvWindow       *ev_window);
 EvDocumentModel *ev_window_get_document_model            (EvWindow       *ev_window);


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