[evince] [shell] Add an action to edit menu to save current settings as default



commit fe42dcceedd95b687f34a62027741e20e23d225f
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Tue Jul 27 17:45:40 2010 +0200

    [shell] Add an action to edit menu to save current settings as default
    
    Default settings will be used only for new documents that don't have
    metadata. Fixes bug #620325.

 data/evince-ui.xml                   |    2 +
 data/org.gnome.Evince.gschema.xml.in |   28 +++
 shell/ev-window.c                    |  342 ++++++++++++++++++++++------------
 3 files changed, 254 insertions(+), 118 deletions(-)
---
diff --git a/data/evince-ui.xml b/data/evince-ui.xml
index 0d15aab..f8e750d 100644
--- a/data/evince-ui.xml
+++ b/data/evince-ui.xml
@@ -27,6 +27,8 @@
       <menuitem name="EditRotateRightMenu" action="EditRotateRight"/>
       <separator/>
       <menuitem name="EditToolbarMenu" action="EditToolbar"/>
+      <separator/>
+      <menuitem name="EditSaveSettingsMenu" action="EditSaveSettings"/>
     </menu>
 
     <menu name="ViewMenu" action="View">
diff --git a/data/org.gnome.Evince.gschema.xml.in b/data/org.gnome.Evince.gschema.xml.in
index 5022a72..57431f5 100644
--- a/data/org.gnome.Evince.gschema.xml.in
+++ b/data/org.gnome.Evince.gschema.xml.in
@@ -1,4 +1,11 @@
 <schemalist>
+
+  <enum id="org.gnome.Evince.SizingMode">
+    <value nick="best-fit" value="0"/>
+    <value nick="fit-width" value="1"/>
+    <value nick="free" value="2"/>
+  </enum>
+
   <schema id="org.gnome.Evince" path="/apps/evince/" gettext-domain="evince">
     <key name="override-restrictions" type="b">
       <default>true</default>
@@ -18,6 +25,27 @@
     <key name="window-ratio" type="(dd)">
       <default>(0., 0.)</default>
     </key>
+    <key name="sizing-mode" enum="org.gnome.Evince.SizingMode">
+      <default>'fit-width'</default>
+    </key>
+    <key name="inverted-colors" type="b">
+      <default>false</default>
+    </key>
+    <key name="continuous" type="b">
+      <default>true</default>
+    </key>
+    <key name="dual-page" type="b">
+      <default>false</default>
+    </key>
+    <key name="fullscreen" type="b">
+      <default>false</default>
+    </key>
+    <key name="sidebar-page" type="s">
+      <default>'links'</default>
+    </key>
+    <key name="sidebar-size" type="i">
+      <default>132</default>
+    </key>
   </schema>
 
 </schemalist>
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 202e3c7..2d69097 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -142,7 +142,7 @@ struct _EvWindowPrivate {
 
 	/* Settings */
 	GSettings *settings;
-	GSettings *last_settings;
+	GSettings *default_settings;
 	GSettings *lockdown_settings;
 
 	/* Menubar accels */
@@ -193,6 +193,7 @@ struct _EvWindowPrivate {
 	EvWindowPageMode page_mode;
 	EvWindowTitle *title;
 	EvMetadata *metadata;
+	gboolean is_new_doc;
 
 	/* Load params */
 	EvLinkDest       *dest;
@@ -274,6 +275,8 @@ static void	ev_window_update_actions	 	(EvWindow         *ev_window);
 static void     ev_window_sidebar_visibility_changed_cb (EvSidebar        *ev_sidebar,
 							 GParamSpec       *pspec,
 							 EvWindow         *ev_window);
+static void     ev_window_view_toolbar_cb               (GtkAction        *action,
+							 EvWindow         *ev_window);
 static void     ev_window_set_page_mode                 (EvWindow         *window,
 							 EvWindowPageMode  page_mode);
 static void	ev_window_load_job_cb  			(EvJob            *job,
@@ -652,6 +655,22 @@ update_sizing_buttons (EvWindow *window)
 	}
 }
 
+static void
+update_chrome_actions (EvWindow *window)
+{
+	EvWindowPrivate *priv = window->priv;
+	GtkActionGroup *action_group = priv->action_group;
+	GtkAction *action;
+
+	action= gtk_action_group_get_action (action_group, "ViewToolbar");
+	g_signal_handlers_block_by_func
+		(action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+				      (priv->chrome & EV_CHROME_TOOLBAR) != 0);
+	g_signal_handlers_unblock_by_func
+		(action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+}
+
 /**
  * ev_window_is_empty:
  * @ev_window: The instance of the #EvWindow.
@@ -895,6 +914,65 @@ ev_window_page_changed_cb (EvWindow        *ev_window,
 		ev_metadata_set_int (ev_window->priv->metadata, "page", new_page);
 }
 
+static const gchar *
+ev_window_sidebar_get_current_page_id (EvWindow *ev_window)
+{
+	GtkWidget   *current_page;
+	const gchar *id;
+
+	g_object_get (ev_window->priv->sidebar,
+		      "current_page", &current_page,
+		      NULL);
+
+	if (current_page == ev_window->priv->sidebar_links) {
+		id = LINKS_SIDEBAR_ID;
+	} else if (current_page == ev_window->priv->sidebar_thumbs) {
+		id = THUMBNAILS_SIDEBAR_ID;
+	} else if (current_page == ev_window->priv->sidebar_attachments) {
+		id = ATTACHMENTS_SIDEBAR_ID;
+	} else if (current_page == ev_window->priv->sidebar_layers) {
+		id = LAYERS_SIDEBAR_ID;
+	} else if (current_page == ev_window->priv->sidebar_annots) {
+		id = ANNOTS_SIDEBAR_ID;
+	} else {
+		g_assert_not_reached();
+	}
+
+	g_object_unref (current_page);
+
+	return id;
+}
+
+static void
+ev_window_sidebar_set_current_page (EvWindow    *window,
+				    const gchar *page_id)
+{
+	EvDocument *document = window->priv->document;
+	EvSidebar  *sidebar = EV_SIDEBAR (window->priv->sidebar);
+	GtkWidget  *links = window->priv->sidebar_links;
+	GtkWidget  *thumbs = window->priv->sidebar_thumbs;
+	GtkWidget  *attachments = window->priv->sidebar_attachments;
+	GtkWidget  *annots = window->priv->sidebar_annots;
+	GtkWidget  *layers = window->priv->sidebar_layers;
+
+	if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 &&
+	    ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
+		ev_sidebar_set_page (sidebar, links);
+	} else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) == 0 &&
+		   ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
+		ev_sidebar_set_page (sidebar, thumbs);
+	} else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) == 0 &&
+		   ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) {
+		ev_sidebar_set_page (sidebar, attachments);
+	} else if (strcmp (page_id, LAYERS_SIDEBAR_ID) == 0 &&
+		   ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (layers), document)) {
+		ev_sidebar_set_page (sidebar, layers);
+	} else if (strcmp (page_id, ANNOTS_SIDEBAR_ID) == 0 &&
+		   ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (annots), document)) {
+		ev_sidebar_set_page (sidebar, annots);
+	}
+}
+
 static void
 update_document_mode (EvWindow *window, EvDocumentMode mode)
 {
@@ -910,18 +988,24 @@ static void
 setup_chrome_from_metadata (EvWindow *window)
 {
 	EvChrome chrome = EV_CHROME_NORMAL;
-	gboolean show_toolbar;
+	gboolean show_toolbar = TRUE;
 
-	if (window->priv->document) {
-		if (!window->priv->metadata ||
-		    !ev_metadata_get_boolean (window->priv->metadata, "show_toolbar", &show_toolbar)) {
-			show_toolbar = g_settings_get_boolean (window->priv->last_settings, "show-toolbar");
-		}
+	if (ev_window_is_empty (window)) {
+		window->priv->chrome = chrome;
+
+		return;
+	}
 
-		if (!show_toolbar)
-			chrome &= ~EV_CHROME_TOOLBAR;
+	if (!window->priv->metadata) {
+		show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
+	} else if (!ev_metadata_get_boolean (window->priv->metadata, "show_toolbar", &show_toolbar)) {
+		if (window->priv->is_new_doc)
+			show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
 	}
 
+	if (!show_toolbar)
+		chrome &= ~EV_CHROME_TOOLBAR;
+
 	window->priv->chrome = chrome;
 }
 
@@ -929,73 +1013,85 @@ static void
 setup_sidebar_from_metadata (EvWindow *window)
 {
 	EvDocument *document = window->priv->document;
-	GtkWidget  *sidebar = window->priv->sidebar;
-	GtkWidget  *links = window->priv->sidebar_links;
-	GtkWidget  *thumbs = window->priv->sidebar_thumbs;
-	GtkWidget  *attachments = window->priv->sidebar_attachments;
-	GtkWidget  *annots = window->priv->sidebar_annots;
-	GtkWidget  *layers = window->priv->sidebar_layers;
+	GSettings  *settings =  window->priv->default_settings;
 	gchar      *page_id;
 	gint        sidebar_size;
-	gboolean    sidebar_visibility;
+	gboolean    sidebar_visibility = TRUE;
 
-	if (document) {
-		if (!window->priv->metadata ||
-		    !ev_metadata_get_boolean (window->priv->metadata, "sidebar_visibility", &sidebar_visibility)) {
-			sidebar_visibility = g_settings_get_boolean (window->priv->last_settings, "show-sidebar");
-		}
-		update_chrome_flag (window, EV_CHROME_SIDEBAR, sidebar_visibility);
-		update_chrome_visibility (window);
+	if (ev_window_is_empty (window))
+		return;
+
+	if (!window->priv->metadata) {
+		sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
+	} else if (!ev_metadata_get_boolean (window->priv->metadata, "sidebar_visibility", &sidebar_visibility)) {
+		if (window->priv->is_new_doc)
+			sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
 	}
 
-	if (!window->priv->metadata)
+	update_chrome_flag (window, EV_CHROME_SIDEBAR, sidebar_visibility);
+	update_chrome_visibility (window);
+
+	if (!window->priv->metadata) {
+		/* Set default values */
+		gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
+					g_settings_get_int (settings, "sidebar-size"));
+		if (document) {
+			page_id = g_settings_get_string (settings, "sidebar-page");
+			ev_window_sidebar_set_current_page (window, page_id);
+			g_free (page_id);
+		}
+
 		return;
+	}
 
 	if (ev_metadata_get_int (window->priv->metadata, "sidebar_size", &sidebar_size)) {
 		gtk_paned_set_position (GTK_PANED (window->priv->hpaned), sidebar_size);
+	} else if (window->priv->is_new_doc) {
+		gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
+					g_settings_get_int (settings, "sidebar-size"));
 	}
 
-	if (document && ev_metadata_get_string (window->priv->metadata, "sidebar_page", &page_id)) {
-		if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), links);
-		} else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs);
-		} else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), attachments);
-		} else if (strcmp (page_id, LAYERS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (layers), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), layers);
-		} else if (strcmp (page_id, ANNOTS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (annots), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), annots);
-		}
-	} else if (document) {
-		if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), links);
-		} else if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs);
-		} else if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), attachments);
-		} else if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (layers), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), layers);
-		} else if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (annots), document)) {
-			ev_sidebar_set_page (EV_SIDEBAR (sidebar), annots);
-		}
+	if (!document)
+		return;
+
+	if (ev_metadata_get_string (window->priv->metadata, "sidebar_page", &page_id)) {
+		ev_window_sidebar_set_current_page (window, page_id);
+	} else if (window->priv->is_new_doc) {
+		page_id = g_settings_get_string (settings, "sidebar-page");
+		ev_window_sidebar_set_current_page (window, page_id);
+		g_free (page_id);
 	}
 }
 
 static void
 setup_model_from_metadata (EvWindow *window)
 {
-	gint     page;
-	gchar   *sizing_mode;
-	gdouble  zoom;
-	gint     rotation;
-	gboolean inverted_colors = FALSE;
-	gboolean continuous = FALSE;
-	gboolean dual_page = FALSE;
-	gboolean fullscreen = FALSE;
+	GSettings *settings = window->priv->default_settings;
+	gint       page;
+	gchar     *sizing_mode;
+	gdouble    zoom;
+	gint       rotation;
+	gboolean   inverted_colors = FALSE;
+	gboolean   continuous = FALSE;
+	gboolean   dual_page = FALSE;
+	gboolean   fullscreen = FALSE;
+
+	if (!window->priv->metadata) {
+		/* Set default values */
+		ev_document_model_set_sizing_mode (window->priv->model,
+						   g_settings_get_enum (settings, "sizing-mode"));
+		ev_document_model_set_inverted_colors (window->priv->model,
+						       g_settings_get_boolean (settings, "inverted-colors"));
+		ev_document_model_set_continuous (window->priv->model,
+						  g_settings_get_boolean (settings, "continuous"));
+		ev_document_model_set_dual_page (window->priv->model,
+						 g_settings_get_boolean (settings, "dual-page"));
+		fullscreen = g_settings_get_boolean (settings, "fullscreen");
+		if (fullscreen)
+			ev_window_run_fullscreen (window);
 
-	if (!window->priv->metadata)
 		return;
+	}
 
 	/* Current page */
 	if (!window->priv->dest &&
@@ -1010,6 +1106,9 @@ setup_model_from_metadata (EvWindow *window)
 		enum_value = g_enum_get_value_by_nick
 			(g_type_class_peek (EV_TYPE_SIZING_MODE), sizing_mode);
 		ev_document_model_set_sizing_mode (window->priv->model, enum_value->value);
+	} else if (window->priv->is_new_doc) {
+		ev_document_model_set_sizing_mode (window->priv->model,
+						   g_settings_get_enum (settings, "sizing-mode"));
 	}
 
 	/* Zoom */
@@ -1039,25 +1138,37 @@ setup_model_from_metadata (EvWindow *window)
 	}
 
 	/* Inverted Colors */
-	if (ev_metadata_get_boolean (window->priv->metadata, "inverted-colors", &inverted_colors))
+	if (ev_metadata_get_boolean (window->priv->metadata, "inverted-colors", &inverted_colors)) {
 		ev_document_model_set_inverted_colors (window->priv->model, inverted_colors);
+	} else if (window->priv->is_new_doc) {
+		ev_document_model_set_inverted_colors (window->priv->model,
+						       g_settings_get_boolean (settings, "inverted-colors"));
+	}
 
 	/* Continuous */
 	if (ev_metadata_get_boolean (window->priv->metadata, "continuous", &continuous)) {
 		ev_document_model_set_continuous (window->priv->model, continuous);
+	} else if (window->priv->is_new_doc) {
+		ev_document_model_set_continuous (window->priv->model,
+						  g_settings_get_boolean (settings, "continuous"));
 	}
 
 	/* Dual page */
 	if (ev_metadata_get_boolean (window->priv->metadata, "dual-page", &dual_page)) {
 		ev_document_model_set_dual_page (window->priv->model, dual_page);
+	} else if (window->priv->is_new_doc) {
+		ev_document_model_set_dual_page (window->priv->model,
+						 g_settings_get_boolean (settings, "dual-page"));
 	}
 
 	/* Fullscreen */
-	if (ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
-		if (fullscreen) {
-			ev_window_run_fullscreen (window);
-		}
+	if (!ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
+		if (window->priv->is_new_doc)
+			fullscreen = g_settings_get_boolean (settings, "fullscreen");
 	}
+
+	if (fullscreen)
+		ev_window_run_fullscreen (window);
 }
 
 static void
@@ -1069,6 +1180,8 @@ setup_document_from_metadata (EvWindow *window)
 	gdouble width_ratio;
 	gdouble height_ratio;
 
+	setup_sidebar_from_metadata (window);
+
 	if (window->priv->metadata) {
 		/* Make sure to not open a document on the last page,
 		 * since closing it on the last page most likely means the
@@ -1079,14 +1192,12 @@ setup_document_from_metadata (EvWindow *window)
 		if (page == n_pages - 1)
 			ev_document_model_set_page (window->priv->model, 0);
 
-		setup_sidebar_from_metadata (window);
-
 		if (ev_metadata_get_int (window->priv->metadata, "window_width", &width) &&
 		    ev_metadata_get_int (window->priv->metadata, "window_height", &height))
 			return; /* size was already set in setup_size_from_metadata */
 	}
 
-	g_settings_get (window->priv->last_settings, "window-ratio", "(dd)", &width_ratio, &height_ratio);
+	g_settings_get (window->priv->default_settings, "window-ratio", "(dd)", &width_ratio, &height_ratio);
 	if (width_ratio > 0. && height_ratio > 0.) {
 		gdouble    document_width;
 		gdouble    document_height;
@@ -1420,6 +1531,8 @@ ev_window_load_job_cb (EvJob *job,
 	if (!ev_job_is_failed (job)) {
 		ev_document_model_set_document (ev_window->priv->model, document);
 
+		setup_chrome_from_metadata (ev_window);
+		update_chrome_actions (ev_window);
 		setup_document_from_metadata (ev_window);
 		setup_view_from_metadata (ev_window);
 
@@ -1888,11 +2001,12 @@ ev_window_open_uri (EvWindow       *ev_window,
 		g_object_unref (ev_window->priv->metadata);
 
 	source_file = g_file_new_for_uri (uri);
-	if (!ev_file_is_temp (source_file) &&
-	    ev_is_metadata_supported_for_file (source_file))
+	if (!ev_file_is_temp (source_file) && ev_is_metadata_supported_for_file (source_file)) {
 		ev_window->priv->metadata = ev_metadata_new (source_file);
-	else
+		ev_window->priv->is_new_doc = ev_metadata_is_empty (ev_window->priv->metadata);
+	} else {
 		ev_window->priv->metadata = NULL;
+	}
 
 	if (ev_window->priv->search_string)
 		g_free (ev_window->priv->search_string);
@@ -3965,6 +4079,34 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
 }
 
 static void
+ev_window_cmd_edit_save_settings (GtkAction *action, EvWindow *ev_window)
+{
+	EvWindowPrivate *priv = ev_window->priv;
+	EvDocumentModel *model = priv->model;
+	GSettings       *settings = priv->default_settings;
+
+	g_settings_set_boolean (settings, "continuous",
+				ev_document_model_get_continuous (model));
+	g_settings_set_boolean (settings, "dual-page",
+				ev_document_model_get_dual_page (model));
+	g_settings_set_boolean (settings, "fullscreen",
+				ev_document_model_get_fullscreen (model));
+	g_settings_set_boolean (settings, "inverted-colors",
+				ev_document_model_get_inverted_colors (model));
+	g_settings_set_enum (settings, "sizing-mode",
+			     ev_document_model_get_sizing_mode (model));
+	g_settings_set_boolean (settings, "show-toolbar",
+				gtk_widget_get_visible (priv->toolbar));
+	g_settings_set_boolean (settings, "show-sidebar",
+				gtk_widget_get_visible (priv->sidebar));
+	g_settings_set_int (settings, "sidebar-size",
+			    gtk_paned_get_position (GTK_PANED (priv->hpaned)));
+	g_settings_set_string (settings, "sidebar-page",
+			       ev_window_sidebar_get_current_page_id (ev_window));
+	g_settings_apply (settings);
+}
+
+static void
 ev_window_cmd_view_zoom_in (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
@@ -4377,8 +4519,6 @@ ev_window_view_toolbar_cb (GtkAction *action, EvWindow *ev_window)
 	update_chrome_visibility (ev_window);
 	if (ev_window->priv->metadata)
 		ev_metadata_set_boolean (ev_window->priv->metadata, "show_toolbar", active);
-	if (ev_window->priv->document)
-		g_settings_set_boolean (ev_window->priv->last_settings, "show-toolbar", active);
 }
 
 static void
@@ -4397,29 +4537,11 @@ ev_window_sidebar_current_page_changed_cb (EvSidebar  *ev_sidebar,
 					   GParamSpec *pspec,
 					   EvWindow   *ev_window)
 {
-	GtkWidget *current_page;
-	const char *id;
-
-	g_object_get (G_OBJECT (ev_sidebar), "current_page", &current_page, NULL);
-
-	if (current_page == ev_window->priv->sidebar_links) {
-		id = LINKS_SIDEBAR_ID;
-	} else if (current_page == ev_window->priv->sidebar_thumbs) {
-		id = THUMBNAILS_SIDEBAR_ID;
-	} else if (current_page == ev_window->priv->sidebar_attachments) {
-		id = ATTACHMENTS_SIDEBAR_ID;
-	} else if (current_page == ev_window->priv->sidebar_layers) {
-		id = LAYERS_SIDEBAR_ID;
-	} else if (current_page == ev_window->priv->sidebar_annots) {
-		id = ANNOTS_SIDEBAR_ID;
-	} else {
-		g_assert_not_reached();
+	if (ev_window->priv->metadata && !ev_window_is_empty (ev_window)) {
+		ev_metadata_set_string (ev_window->priv->metadata,
+					"sidebar_page",
+					ev_window_sidebar_get_current_page_id (ev_window));
 	}
-
-	g_object_unref (current_page);
-
-	if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
-		ev_metadata_set_string (ev_window->priv->metadata, "sidebar_page", id);
 }
 
 static void
@@ -4439,8 +4561,6 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar  *ev_sidebar,
 		if (ev_window->priv->metadata)
 			ev_metadata_set_boolean (ev_window->priv->metadata, "sidebar_visibility",
 						 visible);
-		if (ev_window->priv->document)
-			g_settings_set_boolean (ev_window->priv->last_settings, "show-sidebar", visible);
 	}
 }
 
@@ -4951,10 +5071,10 @@ ev_window_dispose (GObject *object)
 		priv->settings = NULL;
 	}
 
-	if (priv->last_settings) {
-		g_settings_apply (priv->last_settings);
-		g_object_unref (priv->last_settings);
-		priv->last_settings = NULL;
+	if (priv->default_settings) {
+		g_settings_apply (priv->default_settings);
+		g_object_unref (priv->default_settings);
+		priv->default_settings = NULL;
 	}
 
 	if (priv->lockdown_settings) {
@@ -5198,6 +5318,8 @@ static const GtkActionEntry entries[] = {
 	  G_CALLBACK (ev_window_cmd_edit_rotate_left) },
 	{ "EditRotateRight", EV_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "<control>Right", NULL,
 	  G_CALLBACK (ev_window_cmd_edit_rotate_right) },
+	{ "EditSaveSettings", NULL, N_("Save Current Settings as _Default"), "<control>T", NULL,
+	  G_CALLBACK (ev_window_cmd_edit_save_settings) },
 
 
         /* View menu */
@@ -5511,22 +5633,6 @@ set_action_properties (GtkActionGroup *action_group)
 }
 
 static void
-set_chrome_actions (EvWindow *window)
-{
-	EvWindowPrivate *priv = window->priv;
-	GtkActionGroup *action_group = priv->action_group;
-	GtkAction *action;
-
-	action= gtk_action_group_get_action (action_group, "ViewToolbar");
-	g_signal_handlers_block_by_func
-		(action, G_CALLBACK (ev_window_view_toolbar_cb), window);
-	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
-				      (priv->chrome & EV_CHROME_TOOLBAR) != 0);
-	g_signal_handlers_unblock_by_func
-		(action, G_CALLBACK (ev_window_view_toolbar_cb), window);
-}
-
-static void
 sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links,
 			  GParamSpec     *pspec,
 			  EvWindow       *ev_window)
@@ -5620,7 +5726,7 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
 		if (window->priv->document) {
 			ev_document_get_max_page_size (window->priv->document,
 						       &document_width, &document_height);
-			g_settings_set (window->priv->last_settings, "window-ratio", "(dd)",
+			g_settings_set (window->priv->default_settings, "window-ratio", "(dd)",
 					(double)event->width / document_width,
 					(double)event->height / document_height);
 
@@ -6817,8 +6923,8 @@ ev_window_init (EvWindow *ev_window)
 	/* Give focus to the document view */
 	gtk_widget_grab_focus (ev_window->priv->view);
 
-	ev_window->priv->last_settings = g_settings_new (GS_SCHEMA_NAME".Default");
-	g_settings_delay (ev_window->priv->last_settings);
+	ev_window->priv->default_settings = g_settings_new (GS_SCHEMA_NAME".Default");
+	g_settings_delay (ev_window->priv->default_settings);
 
 	/* Set it user interface params */
 	ev_window_setup_recent (ev_window);
@@ -6826,7 +6932,7 @@ ev_window_init (EvWindow *ev_window)
 	ev_window_setup_gtk_settings (ev_window);
 
 	setup_chrome_from_metadata (ev_window);
-	set_chrome_actions (ev_window);
+	update_chrome_actions (ev_window);
 	update_chrome_visibility (ev_window);
 
 	gtk_window_set_default_size (GTK_WINDOW (ev_window), 600, 600);



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