]> www.fi.muni.cz Git - evince.git/commitdiff
[shell] fix Issues #2 #3 #4
authorxbezdick <255993@mail.muni.cz>
Thu, 5 May 2011 16:34:08 +0000 (18:34 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 1 Jun 2011 11:09:22 +0000 (13:09 +0200)
shell/ev-dualscreen.c
shell/ev-dualscreen.h
shell/ev-window.c

index 91c4a40710c7454e0e0d0815a48abf473410f1d1..1802963c637d6ff564b6cc670eaf12e24088469c 100644 (file)
@@ -30,9 +30,7 @@
 #include <gtk/gtk.h>
 
 #include "ev-dualscreen.h"
-#include "ev-window.h"
 #include "ev-view.h"
-#include "ev-view-presentation.h"
 #include "ev-utils.h"
 #include "ev-sidebar.h"
 #include "ev-sidebar-thumbnails.h"
@@ -53,9 +51,11 @@ struct _EvDSCWindowPrivate {
        EvDocumentModel *notes_model;
        EvDocument      *presentation_document;
        EvDocument      *notes_document;
-
+       EvMetadata      *metadata;
        EvViewPresentation *presentation_view;
+
        gint            moveback_monitor;
+       gint            presentation_monitor;
        guint           page;
 };
 
@@ -76,6 +76,22 @@ ev_dscwindow_get_presentation_window_monitor (EvDSCWindow *ev_dscwindow)
        return work_monitor;
 }
 
+static void
+ev_dscwindow_setup_from_metadata (EvDSCWindow *ev_dscwindow)
+{
+       if (!ev_dscwindow->priv->metadata)
+               return;
+       gint    int_value;
+       gdouble double_value;
+       if (ev_metadata_get_double (ev_dscwindow->priv->metadata, "presentation-time", &double_value))
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (ev_dscwindow->priv->spinner),double_value);
+       if (ev_metadata_get_int (ev_dscwindow->priv->metadata, "presentation-monitor", &int_value)) {
+               ev_dscwindow->priv->presentation_monitor = int_value;
+       } else {
+               ev_dscwindow->priv->presentation_monitor = (ev_dscwindow->priv->moveback_monitor +  1) % 2;
+       }
+}
+
 static gboolean
 ev_dscwindow_windows_placement (EvDSCWindow *ev_dscwindow)
 {
@@ -86,15 +102,14 @@ ev_dscwindow_windows_placement (EvDSCWindow *ev_dscwindow)
        if (num_monitors == 2) {
                GdkRectangle coords;
                GdkScreen *screen = gtk_window_get_screen (GTK_WINDOW (ev_dscwindow));
-               gint presentation_monitor = ev_dscwindow_get_presentation_window_monitor(ev_dscwindow);
-               gint control_monitor = presentation_monitor;
+               gint presentation_monitor = ev_dscwindow->priv->presentation_monitor;
+               gint control_monitor = (presentation_monitor + 1) % 2;
 
                gdk_screen_get_monitor_geometry (screen, control_monitor, &coords);
                gtk_window_unmaximize (GTK_WINDOW (ev_dscwindow));
                gtk_window_move (GTK_WINDOW (ev_dscwindow), coords.x, coords.y);
                gtk_window_maximize (GTK_WINDOW (ev_dscwindow));
 
-               presentation_monitor = (control_monitor + 1) % 2;
                gdk_screen_get_monitor_geometry (screen, presentation_monitor,&coords);
                gtk_window_move (GTK_WINDOW (ev_dscwindow->priv->presentation_window), coords.x, coords.y);
 
@@ -103,6 +118,19 @@ ev_dscwindow_windows_placement (EvDSCWindow *ev_dscwindow)
                return FALSE;
 }
 
+static void
+ev_dscwindow_switch_monitors (EvDSCWindow *ev_dscwindow)
+{
+       gint num_monitors = get_num_monitors (GTK_WINDOW (ev_dscwindow));
+       if (num_monitors == 2) {
+               ev_dscwindow->priv->presentation_monitor = (ev_dscwindow->priv->presentation_monitor + 1) % 2;
+               if (ev_dscwindow->priv->metadata)
+                       ev_metadata_set_int (ev_dscwindow->priv->metadata,
+                               "presentation-monitor", ev_dscwindow->priv->presentation_monitor);
+       }
+       ev_dscwindow_windows_placement (ev_dscwindow);
+}
+
 static void
 ev_dscwindow_sidebar_visibility_cb (GtkWidget *sidebar)
 {
@@ -131,6 +159,8 @@ ev_dscwindow_presentation_time_cb (EvDSCWindow *ev_dscwindow)
 {
        gint time = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (ev_dscwindow->priv->spinner));
        ev_presentation_timer_set_time (EV_PRESENTATION_TIMER (ev_dscwindow->priv->timer),time);
+       if (ev_dscwindow->priv->metadata)
+               ev_metadata_set_double (ev_dscwindow->priv->metadata, "presentation-time", time);
 }
 
 static void
@@ -165,10 +195,14 @@ ev_dscwindow_notes_interaction (GtkContainer *container, EvDSCWindow *ev_dscwind
        ev_document_factory_add_filters (dialog, NULL);
        gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), FALSE);
        gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE);
+       char *uri;
+       if (ev_dscwindow->priv->metadata &&
+           ev_metadata_get_string (ev_dscwindow->priv->metadata, "notes-uri", &uri))
+               gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog),uri);
 
        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
        {
-               char * uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+               uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
                GError * error = NULL;
                ev_view_set_loading (EV_VIEW (ev_dscwindow->priv->notesview), TRUE);
 
@@ -178,8 +212,10 @@ ev_dscwindow_notes_interaction (GtkContainer *container, EvDSCWindow *ev_dscwind
                        ev_dscwindow->priv->notes_document = ev_document_factory_get_document (uri,
                                &error);
                }
-               g_free (uri);
                if (error == NULL){
+                       if (ev_dscwindow->priv->metadata)
+                               ev_metadata_set_string (ev_dscwindow->priv->metadata,
+                                       "notes-uri", uri);
                        ev_dscwindow->priv->notes_model = ev_document_model_new ();
                        ev_document_model_set_document (ev_dscwindow->priv->notes_model,
                                                        ev_dscwindow->priv->notes_document);
@@ -199,6 +235,7 @@ ev_dscwindow_notes_interaction (GtkContainer *container, EvDSCWindow *ev_dscwind
                                          ev_dscwindow);
                }
        }
+       g_free (uri);
        gtk_widget_destroy (dialog);
 
        return TRUE;
@@ -217,10 +254,14 @@ ev_dscwindow_get_control (void)
 }
 
 void
-ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
-       EvWindow *presentation_window, EvDocument *document, EvViewPresentation *pview)
+ev_dscwindow_set_presentation   (EvDSCWindow    *ev_dscwindow,
+                                EvWindow       *presentation_window,
+                                EvDocument     *document,
+                                EvViewPresentation *pview,
+                                EvMetadata     *metadata)
 {
-       if (!EV_IS_WINDOW (presentation_window))
+       if (!EV_IS_WINDOW (presentation_window) || !EV_IS_DSCWINDOW (ev_dscwindow) ||
+           !EV_IS_VIEW_PRESENTATION (pview) || !EV_IS_DOCUMENT (document) )
                return;
 
        ev_dscwindow->priv->presentation_window = GTK_WIDGET(presentation_window);
@@ -228,6 +269,7 @@ ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
        ev_dscwindow->priv->presentation_view = EV_VIEW_PRESENTATION(pview);
        ev_dscwindow->priv->page = ev_view_presentation_get_current_page (pview);
        ev_dscwindow->priv->moveback_monitor = ev_dscwindow_get_presentation_window_monitor (ev_dscwindow);
+       ev_dscwindow->priv->metadata = metadata;
 
        ev_document_model_set_document(ev_dscwindow->priv->model, document);
        ev_document_model_set_page(ev_dscwindow->priv->model, ev_dscwindow->priv->page);
@@ -250,6 +292,7 @@ ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
        while(gtk_events_pending())
                gtk_main_iteration();
        /* something like http://mail.gnome.org/archives/gtk-list/2008-June/msg00061.html */
+       ev_dscwindow_setup_from_metadata (ev_dscwindow);
        ev_dscwindow_windows_placement (ev_dscwindow);
 }
 
@@ -321,7 +364,7 @@ ev_dscwindow_init (EvDSCWindow *ev_dscwindow)
        gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (b_switch), "object-flip-horizontal");
        gtk_toolbar_insert (GTK_TOOLBAR (toolbar), b_switch, -1);
        g_signal_connect_swapped (b_switch, "clicked",
-               G_CALLBACK (ev_dscwindow_windows_placement), ev_dscwindow);
+               G_CALLBACK (ev_dscwindow_switch_monitors), ev_dscwindow);
 
        GtkToolItem *b_notes = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);
        gtk_tool_button_set_label (GTK_TOOL_BUTTON(b_notes), _("Load notes..."));
index 6317430feab906d32042bfb581e32eb13fdd36bb..77b55ec5de59f4349c141b5a72067514d5f7bc13 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "ev-window.h"
 #include "ev-view-presentation.h"
+#include "ev-metadata.h"
 
 G_BEGIN_DECLS
 
@@ -52,10 +53,11 @@ struct _EvDSCWindow {
 
 GType          ev_dscwindow_get_type   (void);
 GtkWidget      *ev_dscwindow_new (void);
-void           ev_dscwindow_set_presentation (EvDSCWindow              *ev_dscwindow,
-                                               EvWindow                *presentation_window,
-                                               EvDocument              *document,
-                                               EvViewPresentation      *pview);
+void           ev_dscwindow_set_presentation   (EvDSCWindow            *ev_dscwindow,
+                                                EvWindow               *presentation_window,
+                                                EvDocument             *document,
+                                                EvViewPresentation     *pview,
+                                                EvMetadata             *metadata);
 EvDSCWindow*    ev_dscwindow_get_control (void);
 
 G_END_DECLS
index ef6f0b16ac85271cb1e5207cc7d2508e5d60e4fa..7905185e821d03de5b881bc523ec3e8a37f9aab5 100644 (file)
@@ -4058,7 +4058,8 @@ ev_window_run_presentation (EvWindow *window)
                gtk_window_present (GTK_WINDOW (control));
                ev_dscwindow_set_presentation   (control, window,
                                         window->priv->document,
-                                        EV_VIEW_PRESENTATION(window->priv->presentation_view));
+                                        EV_VIEW_PRESENTATION(window->priv->presentation_view),
+                                        window->priv->metadata);
        }
 }