]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Make page width the default sizing mode
[evince.git] / shell / ev-window.c
index 5da249c39ea7fdf4febeeaefd4ce95226482fee7..211c44602437bdf003306642e4e5ac7c5bbacdb7 100644 (file)
@@ -133,6 +133,9 @@ static GtkTargetEntry ev_drop_types[] = {
 #define GCONF_CHROME_SIDEBAR   "/apps/evince/show_sidebar"
 #define GCONF_CHROME_STATUSBAR "/apps/evince/show_statusbar"
 
+#define GCONF_SIDEBAR_SIZE      "/apps/evince/sidebar_size"
+#define SIDEBAR_DEFAULT_SIZE    132
+
 static void     ev_window_update_fullscreen_popup (EvWindow         *window);
 static void     ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspec,
                                                         EvWindow   *ev_window);
@@ -189,6 +192,7 @@ update_action_sensitivity (EvWindow *ev_window)
        set_action_sensitive (ev_window, "ViewNormalSize", document!=NULL);
        set_action_sensitive (ev_window, "ViewBestFit", document!=NULL);
        set_action_sensitive (ev_window, "ViewPageWidth", document!=NULL);
+       set_action_sensitive (ev_window, "ViewReload", document!=NULL);
 
         /* Go menu */
        if (document) {
@@ -228,6 +232,8 @@ update_action_sensitivity (EvWindow *ev_window)
 static void
 set_widget_visibility (GtkWidget *widget, gboolean visible)
 {
+       g_return_if_fail (GTK_IS_WIDGET (widget));
+       
        if (visible)
                gtk_widget_show (widget);
        else
@@ -1090,6 +1096,20 @@ screen_size_changed_cb (GdkScreen *screen,
        ev_window_update_fullscreen_popup (window);
 }
 
+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);
+}
+
 static void
 destroy_fullscreen_popup (EvWindow *window)
 {
@@ -1468,6 +1488,23 @@ ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window)
        ev_view_set_page (EV_VIEW (ev_window->priv->view), G_MAXINT);
 }
 
+static void
+ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
+{
+       char *uri;
+       int page;
+
+       g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+       page = ev_document_get_page (ev_window->priv->document);
+       uri = g_strdup (ev_window->priv->uri);
+
+       ev_window_open (ev_window, uri);
+       ev_window_open_page (ev_window, page);
+
+       g_free (uri);
+}
+
 static void
 ev_window_cmd_help_contents (GtkAction *action, EvWindow *ev_window)
 {
@@ -1955,6 +1992,9 @@ static GtkActionEntry entries[] = {
         { "ViewNormalSize", GTK_STOCK_ZOOM_100, NULL, "<control>0",
           N_("Reset the zoom level to the default value"),
           G_CALLBACK (ev_window_cmd_view_normal_size) },
+        { "ViewReload", GTK_STOCK_REFRESH, N_("_Reload"), "<control>R",
+          N_("Reload the document"),
+          G_CALLBACK (ev_window_cmd_view_reload) },
 
         /* Go menu */
         { "GoPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "Page_Up",
@@ -2160,6 +2200,9 @@ ev_window_init (EvWindow *ev_window)
        GtkAccelGroup *accel_group;
        GError *error = NULL;
        GtkWidget *sidebar_widget, *toolbar_dock;
+       GConfValue *value;
+       GConfClient *client;
+       int sidebar_size;
 
        ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
 
@@ -2236,16 +2279,30 @@ ev_window_init (EvWindow *ev_window)
 
        /* Add the main area */
        ev_window->priv->hpaned = gtk_hpaned_new ();
+       g_signal_connect (ev_window->priv->hpaned,
+                         "notify::position",
+                         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_box_pack_start (GTK_BOX (ev_window->priv->main_box), ev_window->priv->hpaned,
-                           TRUE, TRUE, 0);     
+                           TRUE, TRUE, 0);
+       gtk_widget_show (ev_window->priv->hpaned);
+       
        ev_window->priv->sidebar = ev_sidebar_new ();
-       g_signal_connect (ev_window->priv->sidebar,
-                         "notify::visible",
-                         G_CALLBACK (ev_window_sidebar_visibility_changed_cb),
-                         ev_window);
        gtk_paned_pack1 (GTK_PANED (ev_window->priv->hpaned),
                         ev_window->priv->sidebar, FALSE, FALSE);
-       gtk_widget_show (ev_window->priv->hpaned);
+       gtk_widget_show (ev_window->priv->sidebar);
 
        /* Stub sidebar, for now */
        sidebar_widget = ev_sidebar_links_new ();
@@ -2320,6 +2377,12 @@ ev_window_init (EvWindow *ev_window)
        set_chrome_actions (ev_window);
        update_chrome_visibility (ev_window);
 
+       /* Connect sidebar signals */
+       g_signal_connect (ev_window->priv->sidebar,
+                         "notify::visible",
+                         G_CALLBACK (ev_window_sidebar_visibility_changed_cb),
+                         ev_window);
+       
        /* Connect to find bar signals */
        g_signal_connect (ev_window->priv->find_bar,
                          "previous",
@@ -2363,6 +2426,6 @@ ev_window_init (EvWindow *ev_window)
 
        /* Set it to something random to force a change */
        ev_window->priv->sizing_mode = EV_SIZING_FREE;
-       ev_window_set_sizing_mode (ev_window, EV_SIZING_BEST_FIT);
+       ev_window_set_sizing_mode (ev_window,  EV_SIZING_FIT_WIDTH);
        update_action_sensitivity (ev_window);
 }