[evince/wip/recent-view: 15/16] shell: Integrate recent view into the main window
- From: Germán Poó Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/wip/recent-view: 15/16] shell: Integrate recent view into the main window
- Date: Tue, 1 Jul 2014 20:21:29 +0000 (UTC)
commit 1f2c56049f5f503d27e965399b20fbc50a2f6bdb
Author: Germán Poo-Caamaño <gpoo gnome org>
Date: Tue Jun 24 20:02:23 2014 -0700
shell: Integrate recent view into the main window
https://bugzilla.gnome.org/show_bug.cgi?id=633501
shell/ev-application.c | 2 +-
shell/ev-window.c | 166 ++++++++++++++++++++++++++++++++++++++++--------
shell/ev-window.h | 1 +
3 files changed, 140 insertions(+), 29 deletions(-)
---
diff --git a/shell/ev-application.c b/shell/ev-application.c
index d1aa053..521cf8a 100644
--- a/shell/ev-application.c
+++ b/shell/ev-application.c
@@ -595,7 +595,7 @@ _ev_application_open_uri_at_dest (EvApplication *application,
ev_window = ev_application_get_empty_window (application, screen);
if (!ev_window)
- ev_window = EV_WINDOW (ev_window_new ());
+ ev_window = EV_WINDOW (ev_window_new_for_uri ());
ev_application_open_uri_in_window (application, uri, ev_window,
screen, dest, mode,
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 4ae4829..29da0d4 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -51,7 +51,6 @@
#include "ev-document-images.h"
#include "ev-document-links.h"
#include "ev-document-annotations.h"
-#include "ev-document-type-builtins.h"
#include "ev-document-misc.h"
#include "ev-file-exporter.h"
#include "ev-file-helpers.h"
@@ -89,6 +88,7 @@
#include "ev-zoom-action.h"
#include "ev-toolbar.h"
#include "ev-bookmarks.h"
+#include "ev-recent-view.h"
#ifdef ENABLE_DBUS
#include "ev-gdbus-generated.h"
@@ -182,6 +182,9 @@ struct _EvWindowPrivate {
GtkWidget *attachment_popup;
GList *attach_list;
+ /* For bookshelf view of recent items*/
+ EvRecentView *recent_view;
+
/* Document */
EvDocumentModel *model;
char *uri;
@@ -368,6 +371,11 @@ static void ev_window_setup_bookmarks (EvWindow *windo
static void ev_window_show_find_bar (EvWindow *ev_window,
gboolean restart);
static void ev_window_close_find_bar (EvWindow *ev_window);
+static void ev_window_show_recent_view (EvWindow *ev_window);
+static void ev_window_hide_recent_view (EvWindow *ev_window);
+static void recent_view_item_activated_cb (EvRecentView *recent_view,
+ const char *uri,
+ EvWindow *ev_window);
static gchar *nautilus_sendto = NULL;
@@ -394,9 +402,11 @@ ev_window_set_action_enabled (EvWindow *ev_window,
}
static void
-ev_window_setup_action_sensitivity (EvWindow *ev_window)
+ev_window_update_actions_sensitivity (EvWindow *ev_window)
{
EvDocument *document = ev_window->priv->document;
+ EvView *view = EV_VIEW (ev_window->priv->view);
+ GAction *action;
const EvDocumentInfo *info = NULL;
gboolean has_document = FALSE;
gboolean ok_to_print = TRUE;
@@ -404,13 +414,20 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
gboolean has_properties = TRUE;
gboolean override_restrictions = TRUE;
gboolean can_get_text = FALSE;
- gboolean has_pages = FALSE;
gboolean can_find = FALSE;
+ gboolean can_find_in_page = FALSE;
+ gboolean presentation_mode;
+ gboolean dual_mode = FALSE;
+ gboolean has_pages = FALSE;
+ int n_pages = 0, page = -1;
if (document) {
has_document = TRUE;
- has_pages = ev_document_get_n_pages (document) > 0;
info = ev_document_get_info (document);
+ page = ev_document_model_get_page (ev_window->priv->model);
+ n_pages = ev_document_get_n_pages (ev_window->priv->document);
+ has_pages = n_pages > 0;
+ dual_mode = ev_document_model_get_dual_page (ev_window->priv->model);
}
if (!info || info->fields_mask == 0) {
@@ -477,25 +494,14 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
ev_window_set_action_enabled (ev_window, "add-bookmark",
has_pages && ev_window->priv->bookmarks);
- ev_window_update_actions_sensitivity (ev_window);
-}
+ /* Recent View */
+ ev_window_set_action_enabled (ev_window, "recent-view", has_document);
+ 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));
-static void
-ev_window_update_actions_sensitivity (EvWindow *ev_window)
-{
- EvView *view = EV_VIEW (ev_window->priv->view);
- int n_pages = 0, page = -1;
- gboolean has_pages = FALSE;
- gboolean presentation_mode;
- gboolean can_find_in_page = FALSE;
- gboolean dual_mode = FALSE;
-
- if (ev_window->priv->document) {
- page = ev_document_model_get_page (ev_window->priv->model);
- n_pages = ev_document_get_n_pages (ev_window->priv->document);
- has_pages = n_pages > 0;
- dual_mode = ev_document_model_get_dual_page (ev_window->priv->model);
- }
+ ev_window_set_action_enabled (ev_window, "recent-view", has_document);
+ 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));
can_find_in_page = (ev_window->priv->find_job &&
ev_job_find_has_results (EV_JOB_FIND (ev_window->priv->find_job)));
@@ -1395,7 +1401,7 @@ override_restrictions_changed (GSettings *settings,
gchar *key,
EvWindow *ev_window)
{
- ev_window_setup_action_sensitivity (ev_window);
+ ev_window_update_actions_sensitivity (ev_window);
}
#ifdef HAVE_DESKTOP_SCHEMAS
@@ -1404,7 +1410,7 @@ lockdown_changed (GSettings *lockdown,
const gchar *key,
EvWindow *ev_window)
{
- ev_window_setup_action_sensitivity (ev_window);
+ ev_window_update_actions_sensitivity (ev_window);
}
#endif
@@ -1455,7 +1461,7 @@ ev_window_setup_document (EvWindow *ev_window)
}
#endif
- ev_window_setup_action_sensitivity (ev_window);
+ ev_window_update_actions_sensitivity (ev_window);
if (ev_window->priv->properties) {
ev_properties_dialog_set_document (EV_PROPERTIES_DIALOG (ev_window->priv->properties),
@@ -1534,6 +1540,10 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document)
_("The document contains only empty pages"));
}
+ ev_window_hide_recent_view (ev_window);
+ ev_toolbar_set_mode (EV_TOOLBAR (ev_window->priv->toolbar),
+ EV_TOOLBAR_MODE_NORMAL);
+
if (EV_WINDOW_IS_PRESENTATION (ev_window)) {
gint current_page;
@@ -4070,6 +4080,7 @@ ev_window_run_fullscreen (EvWindow *window)
if (window->priv->metadata && !ev_window_is_empty (window))
ev_metadata_set_boolean (window->priv->metadata, "fullscreen", TRUE);
+ ev_window_update_actions_sensitivity (window);
}
static void
@@ -4105,6 +4116,7 @@ ev_window_stop_fullscreen (EvWindow *window,
if (window->priv->metadata && !ev_window_is_empty (window))
ev_metadata_set_boolean (window->priv->metadata, "fullscreen", FALSE);
+ ev_window_update_actions_sensitivity (window);
}
static void
@@ -4552,6 +4564,23 @@ ev_window_cmd_go_backwards (GSimpleAction *action,
}
}
+static void
+ev_window_cmd_toggle_recent_view (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ EvWindow *ev_window = user_data;
+ EvToolbar *toolbar = EV_TOOLBAR (ev_window->priv->toolbar);
+
+ if (ev_toolbar_get_mode (toolbar) == EV_TOOLBAR_MODE_NORMAL) {
+ ev_window_show_recent_view (ev_window);
+ ev_toolbar_set_mode (toolbar, EV_TOOLBAR_MODE_RECENT_VIEW);
+ } else {
+ ev_window_hide_recent_view (ev_window);
+ ev_toolbar_set_mode (toolbar, EV_TOOLBAR_MODE_NORMAL);
+ }
+}
+
static gint
compare_bookmarks (EvBookmark *a,
EvBookmark *b)
@@ -5033,6 +5062,23 @@ find_sidebar_result_activated_cb (EvFindSidebar *find_sidebar,
}
static void
+recent_view_item_activated_cb (EvRecentView *recent_view,
+ const char *uri,
+ EvWindow *ev_window)
+{
+ if (g_strcmp0 (ev_window->priv->uri, uri) == 0) {
+ ev_window_hide_recent_view (ev_window);
+ ev_toolbar_set_mode (EV_TOOLBAR (ev_window->priv->toolbar),
+ EV_TOOLBAR_MODE_NORMAL);
+ return;
+ }
+
+ ev_application_open_uri_at_dest (EV_APP, uri,
+ gtk_window_get_screen (GTK_WINDOW (ev_window)),
+ NULL, 0, NULL, gtk_get_current_event_time ());
+}
+
+static void
ev_window_update_find_status_message (EvWindow *ev_window)
{
gchar *message;
@@ -5708,6 +5754,7 @@ static const GActionEntry actions[] = {
{ "escape", ev_window_cmd_escape },
{ "open-menu", ev_window_cmd_action_menu },
{ "caret-navigation", NULL, NULL, "false", ev_window_cmd_view_toggle_caret_navigation },
+ { "recent-view", NULL, NULL, "false", ev_window_cmd_toggle_recent_view },
/* Popups specific items */
{ "open-link", ev_window_popup_cmd_open_link },
@@ -6775,7 +6822,7 @@ ev_window_init (EvWindow *ev_window)
gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
ev_window->priv->find_bar,
FALSE, TRUE, 0);
-
+
/* Add the main area */
ev_window->priv->hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
g_signal_connect (ev_window->priv->hpaned,
@@ -7054,7 +7101,7 @@ ev_window_init (EvWindow *ev_window)
gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (ev_window), TRUE);
ev_window_sizing_mode_changed_cb (ev_window->priv->model, NULL, ev_window);
- ev_window_setup_action_sensitivity (ev_window);
+ ev_window_update_actions_sensitivity (ev_window);
/* Drag and Drop */
gtk_drag_dest_set (GTK_WIDGET (ev_window),
@@ -7069,7 +7116,8 @@ ev_window_init (EvWindow *ev_window)
*
* Creates a #GtkWidget that represents the window.
*
- * Returns: the #GtkWidget that represents the window.
+ * Returns: the #GtkWidget that represents the window with the Recent View
+ * activated..
*/
GtkWidget *
ev_window_new (void)
@@ -7082,9 +7130,71 @@ ev_window_new (void)
"show-menubar", FALSE,
NULL));
+ ev_window_show_recent_view (EV_WINDOW (ev_window));
+ ev_toolbar_set_mode (EV_TOOLBAR (EV_WINDOW (ev_window)->priv->toolbar), EV_TOOLBAR_MODE_RECENT_VIEW);
return ev_window;
}
+/**
+ * ev_window_new_for_uri:
+ *
+ * Creates a #GtkWidget that represents the window.
+ *
+ * Returns: the #GtkWidget that represents the window with the document opened.
+ */
+GtkWidget *
+ev_window_new_for_uri (void)
+{
+ GtkWidget *ev_window;
+
+ ev_window = GTK_WIDGET (g_object_new (EV_TYPE_WINDOW,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "application", g_application_get_default (),
+ "show-menubar", FALSE,
+ NULL));
+
+ ev_toolbar_set_mode (EV_TOOLBAR (EV_WINDOW (ev_window)->priv->toolbar), EV_TOOLBAR_MODE_NORMAL);
+ return ev_window;
+}
+
+static void
+ev_window_show_recent_view (EvWindow *ev_window)
+{
+ GAction *action;
+ gboolean has_document;
+
+ has_document = ev_window->priv->document != NULL;
+
+ gtk_widget_hide (ev_window->priv->hpaned);
+ gtk_widget_hide (ev_window->priv->find_bar);
+
+ if (!ev_window->priv->recent_view) {
+ ev_window->priv->recent_view = EV_RECENT_VIEW (ev_recent_view_new ());
+ g_signal_connect_object (ev_window->priv->recent_view,
+ "item-activated",
+ G_CALLBACK (recent_view_item_activated_cb),
+ ev_window, 0);
+ gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
+ GTK_WIDGET (ev_window->priv->recent_view),
+ TRUE, TRUE, 0);
+ }
+
+ ev_window_set_action_enabled (ev_window, "recent-view", has_document);
+ 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));
+ gtk_widget_show (GTK_WIDGET (ev_window->priv->recent_view));
+}
+
+static void
+ev_window_hide_recent_view (EvWindow *ev_window)
+{
+ if (ev_window->priv->recent_view)
+ gtk_widget_hide (GTK_WIDGET (ev_window->priv->recent_view));
+
+ gtk_widget_show (ev_window->priv->hpaned);
+ ev_window_update_actions_sensitivity (ev_window);
+}
+
const gchar *
ev_window_get_dbus_object_path (EvWindow *ev_window)
{
diff --git a/shell/ev-window.h b/shell/ev-window.h
index f420e97..84d07fd 100644
--- a/shell/ev-window.h
+++ b/shell/ev-window.h
@@ -72,6 +72,7 @@ struct _EvWindowClass {
GType ev_window_get_type (void) G_GNUC_CONST;
GtkWidget *ev_window_new (void);
+GtkWidget *ev_window_new_for_uri (void);
const char *ev_window_get_uri (EvWindow *ev_window);
void ev_window_open_uri (EvWindow *ev_window,
const char *uri,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]