]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
HIGification of toolbar editor dialogue.
[evince.git] / shell / ev-window.c
index 4aef9afc62f339a8b7d83968098a12259cbf68c5..b18f98502f3940d472aba6a466ce04c523505b48 100644 (file)
@@ -619,9 +619,7 @@ page_changed_cb (EvPageCache *page_cache,
 {
        update_action_sensitivity (ev_window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_int (ev_window->priv->uri, "page", page);
-#endif
 }
 
 static void
@@ -635,7 +633,6 @@ update_document_mode (EvWindow *window, EvDocumentMode mode)
        }
 }
 
-#ifdef ENABLE_METADATA
 static void
 setup_document_from_metadata (EvWindow *window)
 {
@@ -649,7 +646,6 @@ setup_document_from_metadata (EvWindow *window)
        }
 
 }
-#endif
 
 static void
 ev_window_setup_document (EvWindow *ev_window)
@@ -696,9 +692,7 @@ ev_window_setup_document (EvWindow *ev_window)
                                                   ev_window->priv->document);
        }
 
-#ifdef ENABLE_METADATA
        setup_document_from_metadata (ev_window);
-#endif
 }
 
 static void
@@ -935,7 +929,6 @@ ev_window_xfer_job_cb  (EvJobXfer *job,
        }               
 }
 
-#ifdef ENABLE_METADATA
 static void
 setup_view_from_metadata (EvWindow *window)
 {
@@ -944,6 +937,9 @@ setup_view_from_metadata (EvWindow *window)
        GEnumValue *enum_value;
        GValue width = { 0, };
        GValue height = { 0, };
+       GValue maximized = { 0, };
+       GValue x = { 0, };
+       GValue y = { 0, };
        GValue sizing_mode = { 0, };
        GValue zoom = { 0, };
        GValue continuous = { 0, };
@@ -952,11 +948,27 @@ setup_view_from_metadata (EvWindow *window)
        GValue fullscreen = { 0, };
 
        /* Window size */
-       if (ev_metadata_manager_get (uri, "window_width", &width) &&
-           ev_metadata_manager_get (uri, "window_height", &height)) {
-               gtk_window_set_default_size (GTK_WINDOW (window),
-                                            g_value_get_int (&width),
-                                            g_value_get_int (&height));
+       if (!GTK_WIDGET_VISIBLE (window)) {
+               gboolean restore_size = TRUE;
+
+               if (ev_metadata_manager_get (uri, "window_maximized", &maximized)) {
+                       if (g_value_get_boolean (&maximized)) {
+                               gtk_window_maximize (GTK_WINDOW (window));
+                               restore_size = FALSE;
+                       }
+               }
+
+               if (restore_size &&
+                   ev_metadata_manager_get (uri, "window_x", &x) &&
+                   ev_metadata_manager_get (uri, "window_y", &y) &&
+                   ev_metadata_manager_get (uri, "window_width", &width) &&
+                   ev_metadata_manager_get (uri, "window_height", &height)) {
+                       gtk_window_set_default_size (GTK_WINDOW (window),
+                                                    g_value_get_int (&width),
+                                                    g_value_get_int (&height));
+                       gtk_window_move (GTK_WINDOW (window), g_value_get_int (&x),
+                                        g_value_get_int (&y));
+               }
        }
 
        /* Sizing mode */
@@ -997,7 +1009,6 @@ setup_view_from_metadata (EvWindow *window)
                }
        }
 }
-#endif
 
 void
 ev_window_open_uri (EvWindow *ev_window, const char *uri)
@@ -1008,9 +1019,7 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri)
        g_free (ev_window->priv->uri);
        ev_window->priv->uri = g_strdup (uri);
 
-#ifdef ENABLE_METADATA
        setup_view_from_metadata (ev_window);
-#endif
        
        ev_window_clear_jobs (ev_window);
        ev_window_clear_local_uri (ev_window);
@@ -1738,9 +1747,7 @@ ev_window_run_fullscreen (EvWindow *window)
        gtk_window_fullscreen (GTK_WINDOW (window));
        ev_window_update_fullscreen_popup (window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", TRUE);
-#endif
 }
 
 static void
@@ -1768,9 +1775,7 @@ ev_window_stop_fullscreen (EvWindow *window)
        gtk_window_unfullscreen (GTK_WINDOW (window));
        update_chrome_visibility (window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", FALSE);
-#endif
 }
 
 static void
@@ -1816,9 +1821,7 @@ ev_window_run_presentation (EvWindow *window)
        ev_window_update_presentation_action (window);
        update_chrome_visibility (window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (window->priv->uri, "presentation", TRUE);
-#endif
 }
 
 static void
@@ -1835,9 +1838,7 @@ ev_window_stop_presentation (EvWindow *window)
        ev_window_update_presentation_action (window);
        update_chrome_visibility (window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (window->priv->uri, "presentation", FALSE);
-#endif
 }
 
 static void
@@ -1970,13 +1971,15 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
 {
        GtkWidget *dialog;
        GtkWidget *editor;
-       g_return_if_fail (EV_IS_WINDOW (ev_window));
     
-       dialog = gtk_dialog_new_with_buttons (_("Toolbar editor"), GTK_WINDOW (ev_window), 
+       dialog = gtk_dialog_new_with_buttons (_("Toolbar editor"),
+                                             GTK_WINDOW (ev_window), 
                                              GTK_DIALOG_DESTROY_WITH_PARENT, 
                                              GTK_STOCK_CLOSE,
-                                             GTK_RESPONSE_CANCEL
+                                             GTK_RESPONSE_CLOSE
                                              NULL);
+       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)), 5);
+       gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 18);
        gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
        gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 400);
          
@@ -1984,19 +1987,18 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
                                         ev_window->priv->toolbar_model);
        gtk_container_set_border_width (GTK_CONTAINER (editor), 5);
        gtk_box_set_spacing (GTK_BOX (EGG_TOOLBAR_EDITOR (editor)), 5);
-                    
+             
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), editor);
        egg_toolbar_editor_load_actions (EGG_TOOLBAR_EDITOR (editor),
-                                     DATADIR"/evince-toolbar.xml");
+                                        DATADIR "/evince-toolbar.xml");
 
        egg_editable_toolbar_set_edit_mode
                (EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar), TRUE);
 
-       gtk_widget_show_all (dialog);
-      
-       g_signal_connect (G_OBJECT (dialog), "response",
+       g_signal_connect (dialog, "response",
                          G_CALLBACK (ev_window_cmd_edit_toolbar_cb),
                          ev_window);
+       gtk_widget_show_all (dialog);
 }
 
 static void
@@ -2183,7 +2185,6 @@ update_view_size (EvView *view, EvWindow *window)
 static void
 save_sizing_mode (EvWindow *window)
 {
-#ifdef ENABLE_METADATA
        EvSizingMode mode;
        GEnumValue *enum_value;
 
@@ -2194,7 +2195,6 @@ save_sizing_mode (EvWindow *window)
                ev_metadata_manager_set_string (window->priv->uri, "sizing_mode",
                                                enum_value->value_nick);
        }
-#endif
 }
 
 static void     
@@ -2251,10 +2251,10 @@ ev_window_zoom_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_window)
 {
         update_action_sensitivity (ev_window);
 
-#ifdef ENABLE_METADATA
-       ev_metadata_manager_set_double (ev_window->priv->uri, "zoom",
-                                       ev_view_get_zoom (EV_VIEW (ev_window->priv->view)));
-#endif
+       if (ev_view_get_sizing_mode (view) == EV_SIZING_FREE) {
+               ev_metadata_manager_set_double (ev_window->priv->uri, "zoom",
+                                               ev_view_get_zoom (view));
+       }
 }
 
 static void
@@ -2290,10 +2290,8 @@ ev_window_continuous_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_w
 {
        ev_window_update_continuous_action (ev_window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (ev_window->priv->uri, "continuous",
                                         ev_view_get_continuous (EV_VIEW (ev_window->priv->view)));
-#endif
 }
 
 static void     
@@ -2301,10 +2299,8 @@ ev_window_dual_mode_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_wi
 {
        ev_window_update_dual_page_action (ev_window);
 
-#ifdef ENABLE_METADATA
        ev_metadata_manager_set_boolean (ev_window->priv->uri, "dual-page",
                                         ev_view_get_dual_page (EV_VIEW (ev_window->priv->view)));
-#endif
 }
 
 static char *
@@ -3166,20 +3162,38 @@ sidebar_page_main_widget_update_cb (GObject *ev_sidebar_page,
 }
 
 static gboolean
-window_configure_event_cb (EvWindow *window, gpointer dummy)
+window_state_event_cb (EvWindow *window, GdkEventWindowState *event, gpointer dummy)
 {
-#ifdef ENABLE_METADATA
-       int width, height;
+       char *uri = window->priv->uri;
+
+       if (uri && !(event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
+               gboolean maximized;
 
-       if (window->priv->uri == NULL) {
-               return FALSE;
+               maximized = event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED;
+               ev_metadata_manager_set_boolean (uri, "window_maximized", maximized);
        }
 
-       gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+       return FALSE;
+}
+
+static gboolean
+window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer dummy)
+{
+       char *uri = window->priv->uri;
+       GdkWindowState state;
+       int x, y, width, height;
 
-       ev_metadata_manager_set_int (window->priv->uri, "window_width", width);
-       ev_metadata_manager_set_int (window->priv->uri, "window_height", height);
-#endif
+       state = gdk_window_get_state (GTK_WIDGET (window)->window);
+
+       if (uri && !(state & GDK_WINDOW_STATE_FULLSCREEN)) {
+               gtk_window_get_position (GTK_WINDOW (window), &x, &y);
+               gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+
+               ev_metadata_manager_set_int (uri, "window_x", x);
+               ev_metadata_manager_set_int (uri, "window_y", y);
+               ev_metadata_manager_set_int (uri, "window_width", width);
+               ev_metadata_manager_set_int (uri, "window_height", height);
+       }
 
        return FALSE;
 }
@@ -3197,6 +3211,8 @@ ev_window_init (EvWindow *ev_window)
 
        g_signal_connect (ev_window, "configure_event",
                          G_CALLBACK (window_configure_event_cb), NULL);
+       g_signal_connect (ev_window, "window_state_event",
+                         G_CALLBACK (window_state_event_cb), NULL);
 
        ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);