]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-dualscreen.c
[dualscreen] beta pageswitch [shell] todo change run_presentation [presentation]...
[evince.git] / shell / ev-dualscreen.c
index 60cd2eb7d5b2c04437d2aed494dc01d05b724fde..cdeb4aeaeef7af3d57978b7340a1f7f5430a2796 100644 (file)
@@ -27,6 +27,7 @@
 #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"
@@ -41,8 +42,9 @@ struct _EvDSCWindowPrivate {
 
        GtkWidget *overview_scrolled_window;
        GtkWidget *notesview_scrolled_window;
+       GtkWidget *presentation_window;
 
-       EvWindow *presentation_window;
+       EvView *presentation_view;
        EvDocument * presentation_document;
        gint moveback_monitor;
 };
@@ -50,6 +52,7 @@ struct _EvDSCWindowPrivate {
 #define EV_DSCWINDOW_GET_PRIVATE(object) \
        (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_DSCWINDOW, EvDSCWindowPrivate))
 #define PAGE_CACHE_SIZE 52428800 /* 50MB */
+#define SIDEBAR_DEFAULT_SIZE    132
 
 /*static gpointer parent_class = NULL;*/
 
@@ -167,27 +170,45 @@ static void
 ev_dscwindow_window_placement (EvDSCWindow *ev_dscwindow)
 {
        gint num_monitors = get_num_monitors (GTK_WINDOW (ev_dscwindow));
-       if (num_monitors == 2) {
+       g_printf ("num_monitors: %d \n",num_monitors);
+       //if (num_monitors == 2) {
                GtkWindow * presentation_window = GTK_WINDOW (ev_dscwindow->priv->presentation_window);
                GdkScreen * screen = gtk_window_get_screen (presentation_window);
-
                gint work_monitor = gdk_screen_get_monitor_at_window (screen,
                        gtk_widget_get_window (GTK_WIDGET (presentation_window)));
-
                gint presentation_monitor = (work_monitor + 1) % 2;
-
                GdkRectangle coords;
                gdk_screen_get_monitor_geometry (screen, presentation_monitor,
                        &coords);
 
                gtk_window_move (presentation_window, coords.x, coords.y);
-               ev_window_run_presentation (ev_dscwindow->priv->presentation_window);
+               //ev_window_run_presentation (ev_dscwindow->priv->presentation_window);
                ev_dscwindow->priv->moveback_monitor = work_monitor;
-
                gtk_window_maximize (GTK_WINDOW (ev_dscwindow));
-       }
+       //}
 }
+/**
+ * ev_dscwindow_page_changed_cb: Callback to change page on all views
+ *
+ **/
+static void
+ev_dscwindow_page_changed_cb (EvDocumentModel *model,
+                          GParamSpec      *pspec,
+                          EvDSCWindow     *ev_dscwindow)
+{
+       gint page = ev_document_model_get_page (model);
+       g_printf("page:%d\n",page);
 
+       ev_view_presentation_set_page (EV_VIEW_PRESENTATION(ev_dscwindow->priv->presentation_view), page);
+}
+static void
+ev_dscwindow_presentation_page_changed_cb (EvDocumentModel *model,
+                          GParamSpec      *pspec,
+                          EvDSCWindow     *ev_dscwindow)
+{
+       gint page = ev_view_presentation_get_current_page (ev_dscwindow->priv->presentation_view);
+       ev_document_model_set_page (ev_dscwindow->priv->model, page);
+}
 
 /**
  * ev_dscwindow_set_presentation: Set presentation document
@@ -195,21 +216,21 @@ ev_dscwindow_window_placement (EvDSCWindow *ev_dscwindow)
  **/
 void
 ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
-       EvWindow *presentation_window, EvDocument *document)
+       EvWindow *presentation_window, EvDocument *document, GtkWidget *pview)
 {
        if (!EV_IS_WINDOW (presentation_window))
                return;
 
        ev_dscwindow->priv->presentation_window = presentation_window;
        ev_dscwindow->priv->presentation_document = document;
-
+       ev_dscwindow->priv->presentation_view = pview;
+       g_signal_connect (ev_dscwindow->priv->presentation_view,
+                         "notify::page",
+                         G_CALLBACK (ev_dscwindow_presentation_page_changed_cb),
+                         ev_dscwindow);
        ev_document_model_set_document(ev_dscwindow->priv->model,
                document);
-/*     ev_view_set_document (EV_VIEW (priv->notesview),
-               priv->presentation_document);*/
        ev_dscwindow_window_placement (ev_dscwindow);
-       /*ev_dscwindow_handle_resized (NULL, NULL, self);
-       */
 }
 
 /**
@@ -225,7 +246,7 @@ ev_dscwindow_end (GtkWidget *widget, GdkEvent *event)
 /**
 * ev_dscwindow_init: Initialize multihead presentation
 *
-* @self: EvDSCWindow.
+* @ev_dscwindow: EvDSCWindow.
 *
 * ev_dscwindow_set_presentation has to be called afterwards for loading in a document. TBD
 **/
@@ -242,20 +263,18 @@ ev_dscwindow_init (EvDSCWindow *ev_dscwindow)
        GtkWidget *v = gtk_vbox_new (FALSE, 0);
 
        ev_dscwindow->priv->model = ev_document_model_new ();
-
+       g_signal_connect (ev_dscwindow->priv->model,
+                         "notify::page",
+                         G_CALLBACK (ev_dscwindow_page_changed_cb),
+                         ev_dscwindow);
        ev_dscwindow->priv->overview = ev_sidebar_new ();
        ev_sidebar_set_model (EV_SIDEBAR (ev_dscwindow->priv->overview),
                              ev_dscwindow->priv->model);
-/*     gtk_paned_pack1 (GTK_PANED (h),
-                        ev_dscwindow->priv->overview, FALSE, FALSE);*/
-       gtk_box_pack_start (GTK_BOX (v), ev_dscwindow->priv->overview, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (v), ev_dscwindow->priv->overview, TRUE , TRUE, 0);
        gtk_widget_show (ev_dscwindow->priv->overview);
 
-       /* Stub sidebar, for now */
-
        GtkWidget *sidebar_widget;
        sidebar_widget = ev_sidebar_thumbnails_new ();
-       /*ev_window->priv->sidebar_thumbs = sidebar_widget;*/
        /*g_signal_connect (sidebar_widget,
                          "notify::main-widget",
                          G_CALLBACK (sidebar_page_main_widget_update_cb),
@@ -278,11 +297,6 @@ ev_dscwindow_init (EvDSCWindow *ev_dscwindow)
        ev_document_model_set_dual_page (ev_dscwindow->priv->model, FALSE);
        ev_document_model_set_sizing_mode (ev_dscwindow->priv->model, EV_SIZING_BEST_FIT);
 
-
-/*     gtk_container_add (GTK_CONTAINER (ev_dscwindow->priv->overview_scrolled_window),
-                                  ev_dscwindow->priv->overview);
-       */
-
        GtkWidget *e = gtk_expander_new (_("Expensive features"));
        gtk_expander_set_expanded (GTK_EXPANDER (e), TRUE);
 
@@ -319,19 +333,12 @@ ev_dscwindow_init (EvDSCWindow *ev_dscwindow)
        gtk_container_add (GTK_CONTAINER (ev_dscwindow->priv->notesview_scrolled_window),
                ev_dscwindow->priv->notesview);
        ev_view_set_model (EV_VIEW (ev_dscwindow->priv->notesview), ev_dscwindow->priv->model);
-
-       gtk_paned_set_position (GTK_PANED (h), 400);
        gtk_widget_show_all (h);
        gtk_container_add (GTK_CONTAINER (ev_dscwindow), h);
 
 /* fallback if we have >2 monitors (see window placement) */
 /*+    gtk_window_set_default_size (GTK_WINDOW (self), 800, 600);
 +
-+      g_signal_connect (h, "notify::position",
-+              G_CALLBACK (ev_dscwindow_handle_resized), self);
-+
-+      g_signal_connect (self, "size-allocate",
-+              G_CALLBACK (ev_dscwindow_handle_resized), self);
 +
 +      /* This would just open new windows. */
 /*+    gtk_drag_dest_unset (GTK_WIDGET (priv->notesview));
@@ -351,16 +358,16 @@ ev_dscwindow_dispose (GObject *obj)
        EvDSCWindow * ev_dscwindow = EV_DSCWINDOW (obj);
        EvDSCWindowPrivate *priv = ev_dscwindow->priv;
 
-/*     if (EV_IS_VIEW (priv->overview) {
-               ev_document_model_set_document (priv->model, NULL);
+//     if (EV_IS_VIEW (priv->overview) {
+//             ev_document_model_set_document (priv->model, NULL);
 
-             ev_view_set_document (EV_VIEW (priv->overview),  NULL);
-+              g_object_unref (priv->overview);
-     }
-     if (EV_IS_VIEW (priv->notesview)) {
-             ev_view_set_document (EV_VIEW (priv->notesview), NULL);
-             g_object_unref (priv->notesview);
-+      }*/
+//             ev_view_set_document (EV_VIEW (priv->overview),  NULL);
+               g_object_unref (priv->overview);
+//     }
+//     if (EV_IS_VIEW (priv->notesview)) {
+//             ev_view_set_document (EV_VIEW (priv->notesview), NULL);
+//             g_object_unref (priv->notesview);
+//     }
 /*TODO: save fulscreen state*/
        ev_window_stop_presentation (priv->presentation_window, 0);
 
@@ -378,7 +385,6 @@ ev_dscwindow_dispose (GObject *obj)
        G_OBJECT_CLASS (ev_dscwindow_parent_class)->dispose (obj);
 }
 
-
 static void
 ev_dscwindow_class_init (EvDSCWindowClass *ev_dscwindow_class)
 {