[evince/wip/recent-view: 57/58] ev-toolbar: Implement toolbar with multiple modes
- From: Germán Poó Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/wip/recent-view: 57/58] ev-toolbar: Implement toolbar with multiple modes
- Date: Wed, 25 Jun 2014 06:15:52 +0000 (UTC)
commit f1fcd2314c4ea203f2390a36aca4cbd7a87fc56d
Author: Germán Poo-Caamaño <gpoo gnome org>
Date: Tue Jun 24 20:01:12 2014 -0700
ev-toolbar: Implement toolbar with multiple modes
Given the restrictions of GtkHeaderBar for reparenting, we must
implement multiple modes for the toolbar, which can be customized
for Recent View, Full Screen, Preview and Document (normal).
For now, Full Screen, Preview and Document are the same.
https://bugzilla.gnome.org/show_bug.cgi?id=633501
shell/ev-toolbar.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++-
shell/ev-toolbar.h | 10 ++++++
shell/ev-window.c | 21 ++++++++++---
3 files changed, 110 insertions(+), 6 deletions(-)
---
diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c
index 11a651a..62d589b 100644
--- a/shell/ev-toolbar.c
+++ b/shell/ev-toolbar.c
@@ -1,7 +1,8 @@
/* ev-toolbar.h
* this file is part of evince, a gnome document viewer
*
- * Copyright (C) 2012 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2012-2014 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2014 Germán Poo-Caamaño <gpoo gnome org>
*
* Evince is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@@ -48,7 +49,13 @@ struct _EvToolbarPrivate {
GtkWidget *history_action;
GtkWidget *zoom_action;
GtkWidget *page_selector;
+ GtkWidget *navigation_action;
+ GtkWidget *find_button;
+ GtkWidget *recent_view_button;
+ GtkWidget *open_button;
GMenu *bookmarks_section;
+
+ EvToolbarMode toolbar_mode;
};
G_DEFINE_TYPE (EvToolbar, ev_toolbar, GTK_TYPE_HEADER_BAR)
@@ -211,8 +218,38 @@ ev_toolbar_constructed (GObject *object)
builder = gtk_builder_new_from_resource ("/org/gnome/evince/shell/ui/menus.ui");
+ /* View of recent items */
+ button = ev_toolbar_create_toggle_button (ev_toolbar, "win.recent-view",
+ "view-grid-symbolic",
+ _("Toggle between view of recent items and open
document"));
+ ev_toolbar->priv->recent_view_button = button;
+ tool_item = GTK_WIDGET (gtk_tool_item_new ());
+ gtk_container_add (GTK_CONTAINER (tool_item), button);
+ gtk_widget_show (button);
+ if (rtl)
+ gtk_widget_set_margin_left (tool_item, 6);
+ else
+ gtk_widget_set_margin_right (tool_item, 6);
+ gtk_container_add (GTK_CONTAINER (ev_toolbar), tool_item);
+ gtk_widget_show (tool_item);
+
+ button = ev_toolbar_create_button (ev_toolbar, "win.open",
+ "document-open-symbolic",
+ _("Open an existenting document"));
+ tool_item = GTK_WIDGET (gtk_tool_item_new ());
+ ev_toolbar->priv->open_button = tool_item;
+ gtk_container_add (GTK_CONTAINER (tool_item), button);
+ gtk_widget_show (button);
+ if (rtl)
+ gtk_widget_set_margin_left (tool_item, 6);
+ else
+ gtk_widget_set_margin_right (tool_item, 6);
+ gtk_container_add (GTK_CONTAINER (ev_toolbar), tool_item);
+ gtk_widget_show (tool_item);
+
/* Navigation */
hbox = ev_toolbar_create_button_group (ev_toolbar);
+ ev_toolbar->priv->navigation_action = hbox;
button = ev_toolbar_create_button (ev_toolbar, "win.go-previous-page",
"go-up-symbolic", _("Previous Page"));
@@ -265,6 +302,7 @@ ev_toolbar_constructed (GObject *object)
/* Find */
button = ev_toolbar_create_toggle_button (ev_toolbar, "win.toggle-find", "edit-find-symbolic",
_("Find a word or phrase in the document"));
+ ev_toolbar->priv->find_button = button;
tool_item = GTK_WIDGET (gtk_tool_item_new ());
gtk_container_add (GTK_CONTAINER (tool_item), button);
gtk_widget_show (button);
@@ -334,6 +372,7 @@ ev_toolbar_constructed (GObject *object)
ev_toolbar);
ev_toolbar_setup_bookmarks_menu (ev_toolbar, bookmarks_submenu_model);
+ ev_toolbar->priv->toolbar_mode = EV_TOOLBAR_MODE_NORMAL;
g_object_unref (builder);
}
@@ -417,3 +456,47 @@ ev_toolbar_get_page_selector (EvToolbar *ev_toolbar)
return ev_toolbar->priv->page_selector;
}
+
+void
+ev_toolbar_set_mode (EvToolbar *ev_toolbar,
+ EvToolbarMode mode)
+{
+ EvToolbarPrivate *priv;
+
+ g_return_if_fail (EV_IS_TOOLBAR (ev_toolbar));
+
+ priv = ev_toolbar->priv;
+
+ if (priv->toolbar_mode == mode)
+ return;
+
+ priv->toolbar_mode = mode;
+
+ switch (mode) {
+ case EV_TOOLBAR_MODE_NORMAL:
+ case EV_TOOLBAR_MODE_FULL_SCREEN:
+ case EV_TOOLBAR_MODE_PRESENTATION:
+ case EV_TOOLBAR_MODE_PREVIEW:
+ gtk_widget_show (priv->view_menu_button);
+ gtk_widget_show (priv->action_menu_button);
+ gtk_widget_show (priv->history_action);
+ gtk_widget_show (priv->zoom_action);
+ gtk_widget_show (priv->page_selector);
+ gtk_widget_show (priv->navigation_action);
+ gtk_widget_show (priv->find_button);
+ gtk_widget_show (priv->recent_view_button);
+ gtk_widget_hide (priv->open_button);
+ break;
+ case EV_TOOLBAR_MODE_RECENT_VIEW:
+ gtk_widget_hide (priv->view_menu_button);
+ gtk_widget_hide (priv->action_menu_button);
+ gtk_widget_hide (priv->history_action);
+ gtk_widget_hide (priv->zoom_action);
+ gtk_widget_hide (priv->page_selector);
+ gtk_widget_hide (priv->navigation_action);
+ gtk_widget_hide (priv->find_button);
+ gtk_widget_show (priv->recent_view_button);
+ gtk_widget_show (priv->open_button);
+ break;
+ }
+}
diff --git a/shell/ev-toolbar.h b/shell/ev-toolbar.h
index 8eba914..2a9478c 100644
--- a/shell/ev-toolbar.h
+++ b/shell/ev-toolbar.h
@@ -26,6 +26,14 @@
G_BEGIN_DECLS
+typedef enum {
+ EV_TOOLBAR_MODE_NORMAL,
+ EV_TOOLBAR_MODE_FULL_SCREEN,
+ EV_TOOLBAR_MODE_PRESENTATION,
+ EV_TOOLBAR_MODE_PREVIEW,
+ EV_TOOLBAR_MODE_RECENT_VIEW,
+} EvToolbarMode;
+
#define EV_TYPE_TOOLBAR (ev_toolbar_get_type())
#define EV_TOOLBAR(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_TOOLBAR, EvToolbar))
#define EV_IS_TOOLBAR(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_TOOLBAR))
@@ -52,6 +60,8 @@ 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);
+void ev_toolbar_set_mode (EvToolbar *ev_toolbar,
+ EvToolbarMode mode);
G_END_DECLS
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 14eb6eb..4f957ce 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -490,6 +490,13 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
action = g_action_map_lookup_action (G_ACTION_MAP (ev_window), "recent-view");
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (has_document));
+ if (has_document)
+ ev_toolbar_set_mode (EV_TOOLBAR (ev_window->priv->toolbar),
+ EV_TOOLBAR_MODE_NORMAL);
+ else
+ ev_toolbar_set_mode (EV_TOOLBAR (ev_window->priv->toolbar),
+ EV_TOOLBAR_MODE_RECENT_VIEW);
+
ev_window_update_actions_sensitivity (ev_window);
}
@@ -4568,15 +4575,16 @@ ev_window_cmd_toggle_recent_view (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
- EvWindow *ev_window = user_data;
+ EvWindow *ev_window = user_data;
+ EvToolbar *toolbar = EV_TOOLBAR (ev_window->priv->toolbar);
- if (!ev_window->priv->recent_view)
+ if (!ev_window->priv->recent_view) {
ev_window_show_recent_view (ev_window);
- else {
+ ev_toolbar_set_mode (toolbar, EV_TOOLBAR_MODE_RECENT_VIEW);
+ } else {
ev_window_swap_out_recent_view_if_needed (ev_window);
- ev_window_setup_action_sensitivity (ev_window);
+ ev_toolbar_set_mode (toolbar, EV_TOOLBAR_MODE_NORMAL);
}
- return;
}
static gint
@@ -5066,8 +5074,11 @@ ev_window_swap_out_recent_view_if_needed (EvWindow *ev_window)
{
gtk_widget_hide (GTK_WIDGET (ev_window->priv->recent_view));
ev_window->priv->recent_view = NULL;
+ ev_toolbar_set_mode (EV_TOOLBAR (ev_window->priv->toolbar),
+ EV_TOOLBAR_MODE_NORMAL);
}
gtk_widget_show (ev_window->priv->hpaned);
+ ev_window_update_actions_sensitivity (ev_window);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]