diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | data/evince.schemas.in | 22 | ||||
-rw-r--r-- | shell/ev-window.c | 113 |
3 files changed, 59 insertions, 90 deletions
@@ -1,3 +1,17 @@ +2005-09-02 Marco Pesenti Gritti <mpg@redhat.com> + + * data/evince.schemas.in: + * shell/ev-window.c: (update_chrome_visibility), + (setup_document_from_metadata), (update_sidebar_visibility), + (setup_view_from_metadata), (ev_window_sidebar_position_change_cb), + (ev_window_run_fullscreen), (ev_window_stop_fullscreen), + (ev_window_run_presentation), (ev_window_stop_presentation), + (ev_window_view_sidebar_cb), + (ev_window_sidebar_visibility_changed_cb), (set_chrome_actions), + (load_chrome), (ev_window_init): + + Persist size/visibility of sidebar per document + Fri Sep 2 00:59:55 2005 Jonathan Blandford <jrb@redhat.com> * shell/ev-view.c (draw_loading_text): Draw loading text. diff --git a/data/evince.schemas.in b/data/evince.schemas.in index 815738a..c074042 100644 --- a/data/evince.schemas.in +++ b/data/evince.schemas.in @@ -12,17 +12,6 @@ </locale> </schema> <schema> - <key>/schemas/apps/evince/show_sidebar</key> - <applyto>/apps/evince/show_sidebar</applyto> - <owner>evince</owner> - <type>bool</type> - <default>true</default> - <locale name="C"> - <short>Show sidebar by default</short> - <long>Sidebar is the side item that contains the Index and Thumbnail lists. Two boolean options, true makes sidebar visible by default while false makes sidebar not visible by default.</long> - </locale> - </schema> - <schema> <key>/schemas/apps/evince/show_statusbar</key> <applyto>/apps/evince/show_statusbar</applyto> <owner>evince</owner> @@ -33,16 +22,5 @@ <long>Statusbar is the standard bottom bar that display additional information about links and other actions. Two boolean options, true makes the statusbar visible by default while false makes sidebar not visible by default.</long> </locale> </schema> - <schema> - <key>/schemas/apps/evince/sidebar_size</key> - <applyto>/apps/evince/sidebar_size</applyto> - <owner>evince</owner> - <type>int</type> - <default>132</default> - <locale name="C"> - <short>Default sidebar size</short> - <long>Sidebar is the side item that contains the Index and Thumbnail lists. The default size sets the sidebar's width in pixels based from the side of the window. Any integer will be accepted. The sidebar will never shrink smaller than the size of the text required to display Thumbnails or Index. Large values will cause the sidebar to take up as much of the page display area as possible relative to the window's size.</long> - </locale> - </schema> </schemalist> </gconfschemafile> diff --git a/shell/ev-window.c b/shell/ev-window.c index be60190..93a3f2a 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -83,11 +83,10 @@ typedef enum { typedef enum { EV_CHROME_MENUBAR = 1 << 0, EV_CHROME_TOOLBAR = 1 << 1, - EV_CHROME_SIDEBAR = 1 << 2, - EV_CHROME_FINDBAR = 1 << 3, - EV_CHROME_STATUSBAR = 1 << 4, - EV_CHROME_RAISE_TOOLBAR = 1 << 5, - EV_CHROME_NORMAL = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR | EV_CHROME_STATUSBAR + EV_CHROME_FINDBAR = 1 << 2, + EV_CHROME_STATUSBAR = 1 << 3, + EV_CHROME_RAISE_TOOLBAR = 1 << 4, + EV_CHROME_NORMAL = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_STATUSBAR } EvChrome; struct _EvWindowPrivate { @@ -152,11 +151,9 @@ static const GtkTargetEntry ev_drop_types[] = { #define ZOOM_CONTROL_ACTION "ViewZoom" #define GCONF_CHROME_TOOLBAR "/apps/evince/show_toolbar" -#define GCONF_CHROME_SIDEBAR "/apps/evince/show_sidebar" #define GCONF_CHROME_STATUSBAR "/apps/evince/show_statusbar" #define GCONF_LOCKDOWN_SAVE "/desktop/gnome/lockdown/disable_save_to_disk" #define GCONF_LOCKDOWN_PRINT "/desktop/gnome/lockdown/disable_printing" -#define GCONF_SIDEBAR_SIZE "/apps/evince/sidebar_size" #define SIDEBAR_DEFAULT_SIZE 132 @@ -333,7 +330,7 @@ static void update_chrome_visibility (EvWindow *window) { EvWindowPrivate *priv = window->priv; - gboolean menubar, toolbar, sidebar, findbar, statusbar, fullscreen_toolbar; + gboolean menubar, toolbar, findbar, statusbar, fullscreen_toolbar; gboolean fullscreen_mode, presentation, fullscreen; presentation = ev_view_get_presentation (EV_VIEW (priv->view)); @@ -343,7 +340,6 @@ update_chrome_visibility (EvWindow *window) menubar = (priv->chrome & EV_CHROME_MENUBAR) != 0 && !fullscreen_mode; toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0 || (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && !fullscreen_mode; - sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode; fullscreen_toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0 || (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0); statusbar = (priv->chrome & EV_CHROME_STATUSBAR) != 0 && !fullscreen_mode; @@ -354,7 +350,6 @@ update_chrome_visibility (EvWindow *window) set_widget_visibility (priv->toolbar_dock, toolbar); set_action_sensitive (window, "EditToolbar", toolbar); - set_widget_visibility (priv->sidebar, sidebar); set_widget_visibility (priv->find_bar, findbar); set_widget_visibility (priv->statusbar, statusbar); @@ -655,7 +650,6 @@ setup_document_from_metadata (EvWindow *window) ev_page_cache_set_current_page (window->priv->page_cache, g_value_get_int (&page)); } - } static void @@ -941,6 +935,18 @@ ev_window_xfer_job_cb (EvJobXfer *job, } static void +update_sidebar_visibility (EvWindow *window) +{ + char *uri = window->priv->uri; + GValue sidebar_visibility = { 0, }; + + if (ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility)) { + set_widget_visibility (window->priv->sidebar, + g_value_get_boolean (&sidebar_visibility)); + } +} + +static void setup_view_from_metadata (EvWindow *window) { EvView *view = EV_VIEW (window->priv->view); @@ -958,6 +964,7 @@ setup_view_from_metadata (EvWindow *window) GValue presentation = { 0, }; GValue fullscreen = { 0, }; GValue rotation = { 0, }; + GValue sidebar_size = { 0, }; /* Window size */ if (!GTK_WIDGET_VISIBLE (window)) { @@ -1039,6 +1046,14 @@ setup_view_from_metadata (EvWindow *window) } } } + + /* Sidebar */ + if (ev_metadata_manager_get (uri, "sidebar_size", &sidebar_size)) { + gtk_paned_set_position (GTK_PANED (window->priv->hpaned), + g_value_get_int (&sidebar_size)); + } + + update_sidebar_visibility (window); } void @@ -1645,14 +1660,10 @@ static void ev_window_sidebar_position_change_cb (GObject *object, GParamSpec *pspec, EvWindow *ev_window) { - GConfClient *client; - int sidebar_size; - - sidebar_size = gtk_paned_get_position (GTK_PANED (object)); - - client = gconf_client_get_default (); - gconf_client_set_int (client, GCONF_SIDEBAR_SIZE, sidebar_size, NULL); - g_object_unref (client); + if (ev_window->priv->uri) { + ev_metadata_manager_set_int (ev_window->priv->uri, "sidebar_size", + gtk_paned_get_position (GTK_PANED (object))); + } } static void @@ -1837,7 +1848,9 @@ ev_window_run_fullscreen (EvWindow *window) if (window->priv->fullscreen_popup == NULL) window->priv->fullscreen_popup = ev_window_create_fullscreen_popup (window); + update_chrome_visibility (window); + gtk_widget_hide (window->priv->sidebar); g_object_set (G_OBJECT (window->priv->scrolled_window), "shadow-type", GTK_SHADOW_NONE, @@ -1885,6 +1898,7 @@ ev_window_stop_fullscreen (EvWindow *window) ev_window_update_fullscreen_action (window); gtk_window_unfullscreen (GTK_WINDOW (window)); update_chrome_visibility (window); + update_sidebar_visibility (window); ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", FALSE); } @@ -1931,6 +1945,7 @@ ev_window_run_presentation (EvWindow *window) gtk_window_fullscreen (GTK_WINDOW (window)); ev_window_update_presentation_action (window); update_chrome_visibility (window); + gtk_widget_hide (window->priv->sidebar); ev_metadata_manager_set_boolean (window->priv->uri, "presentation", TRUE); } @@ -1948,6 +1963,7 @@ ev_window_stop_presentation (EvWindow *window) gtk_window_unfullscreen (GTK_WINDOW (window)); ev_window_update_presentation_action (window); update_chrome_visibility (window); + update_sidebar_visibility (window); ev_metadata_manager_set_boolean (window->priv->uri, "presentation", FALSE); } @@ -2539,40 +2555,30 @@ ev_window_view_statusbar_cb (GtkAction *action, EvWindow *ev_window) static void ev_window_view_sidebar_cb (GtkAction *action, EvWindow *ev_window) { - update_chrome_flag (ev_window, EV_CHROME_SIDEBAR, - GCONF_CHROME_SIDEBAR, - gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); + set_widget_visibility (ev_window->priv->sidebar, + gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); } static void ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspec, EvWindow *ev_window) { + EvView *view = EV_VIEW (ev_window->priv->view); GtkAction *action; - gboolean visible, fullscreen_mode; - - - fullscreen_mode = ev_view_get_presentation (EV_VIEW (ev_window->priv->view)) || - ev_view_get_fullscreen (EV_VIEW (ev_window->priv->view)); - - visible = GTK_WIDGET_VISIBLE (ev_sidebar); - /* In fullscreen mode the sidebar is not visible, - * but we don't want to update the chrome - */ - if (fullscreen_mode) - return; - action = gtk_action_group_get_action (ev_window->priv->action_group, "ViewSidebar"); g_signal_handlers_block_by_func (action, G_CALLBACK (ev_window_view_sidebar_cb), ev_window); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), + GTK_WIDGET_VISIBLE (ev_sidebar)); g_signal_handlers_unblock_by_func (action, G_CALLBACK (ev_window_view_sidebar_cb), ev_window); - update_chrome_flag (ev_window, EV_CHROME_SIDEBAR, - GCONF_CHROME_SIDEBAR, visible); + if (!ev_view_get_presentation (view) && !ev_view_get_fullscreen (view)) { + ev_metadata_manager_set_boolean (ev_window->priv->uri, "sidebar_visibility", + GTK_WIDGET_VISIBLE (ev_sidebar)); + } } static void @@ -3170,14 +3176,6 @@ set_chrome_actions (EvWindow *window) g_signal_handlers_unblock_by_func (action, G_CALLBACK (ev_window_view_toolbar_cb), window); - action= gtk_action_group_get_action (action_group, "ViewSidebar"); - g_signal_handlers_block_by_func - (action, G_CALLBACK (ev_window_view_sidebar_cb), window); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), - (priv->chrome & EV_CHROME_SIDEBAR) != 0); - g_signal_handlers_unblock_by_func - (action, G_CALLBACK (ev_window_view_sidebar_cb), window); - action= gtk_action_group_get_action (action_group, "ViewStatusbar"); g_signal_handlers_block_by_func (action, G_CALLBACK (ev_window_view_statusbar_cb), window); @@ -3204,14 +3202,6 @@ load_chrome (void) gconf_value_free (value); } - value = gconf_client_get (client, GCONF_CHROME_SIDEBAR, NULL); - if (value != NULL) { - if (value->type == GCONF_VALUE_BOOL && !gconf_value_get_bool (value)) { - chrome &= ~EV_CHROME_SIDEBAR; - } - gconf_value_free (value); - } - value = gconf_client_get (client, GCONF_CHROME_STATUSBAR, NULL); if (value != NULL) { if (value->type == GCONF_VALUE_BOOL && !gconf_value_get_bool (value)) { @@ -3344,9 +3334,6 @@ ev_window_init (EvWindow *ev_window) GtkAccelGroup *accel_group; GError *error = NULL; GtkWidget *sidebar_widget, *toolbar_dock; - GConfValue *value; - GConfClient *client; - int sidebar_size; g_signal_connect (ev_window, "configure_event", G_CALLBACK (window_configure_event_cb), NULL); @@ -3426,17 +3413,7 @@ ev_window_init (EvWindow *ev_window) G_CALLBACK (ev_window_sidebar_position_change_cb), ev_window); - sidebar_size = SIDEBAR_DEFAULT_SIZE; - client = gconf_client_get_default (); - value = gconf_client_get (client, GCONF_SIDEBAR_SIZE, NULL); - if (value != NULL) { - if (value->type == GCONF_VALUE_INT) { - sidebar_size = gconf_value_get_int (value); - } - gconf_value_free (value); - } - g_object_unref (client); - gtk_paned_set_position (GTK_PANED (ev_window->priv->hpaned), sidebar_size); + gtk_paned_set_position (GTK_PANED (ev_window->priv->hpaned), SIDEBAR_DEFAULT_SIZE); gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box), ev_window->priv->hpaned, TRUE, TRUE, 0); gtk_widget_show (ev_window->priv->hpaned); |