]> www.fi.muni.cz Git - evince.git/blobdiff - libview/ev-view-presentation.c
[presentation] resize presentation when window allocation changes
[evince.git] / libview / ev-view-presentation.c
index 6ee168beff4fd6679e24ccf7e65e5eb00fea8926..14cd0dabacb4f31d960a5a7b14076ff4de3011d4 100644 (file)
 #include "ev-view-cursor.h"
 #include "ev-page-cache.h"
 
+
+
 enum {
        PROP_0,
        PROP_DOCUMENT,
        PROP_CURRENT_PAGE,
+       PROP_PAGE,
        PROP_ROTATION,
        PROP_INVERTED_COLORS
 };
 
 enum {
-       PAGE_CHANGED,
        CHANGE_PAGE,
        FINISHED,
         SIGNAL_EXTERNAL_LINK,
@@ -98,8 +100,6 @@ struct _EvViewPresentationClass
        GtkWidgetClass base_class;
 
        /* signals */
-       void (* page_changed)  (EvViewPresentation *pview,
-                               gint                page);
        void (* change_page)   (EvViewPresentation *pview,
                                 GtkScrollType       scroll);
        void (* finished)      (EvViewPresentation *pview);
@@ -491,9 +491,8 @@ ev_view_presentation_update_current_page (EvViewPresentation *pview,
                }
        }
 
-       g_signal_emit (pview, signals[PAGE_CHANGED], 0, page);
-       g_printf("pages: %d %d\n",page,pview->current_page;
        pview->current_page = page;
+       g_object_notify (G_OBJECT(pview), "page");
 
        if (pview->page_cache)
                ev_page_cache_set_page_range (pview->page_cache, page, page);
@@ -512,7 +511,7 @@ ev_view_presentation_update_current_page (EvViewPresentation *pview,
 void
 ev_view_presentation_set_page (EvViewPresentation *pview, gint new_page)
 {
-       guint n_pages;
+               guint n_pages;
 
        n_pages = ev_document_get_n_pages (pview->document);
 
@@ -1236,6 +1235,26 @@ ev_view_presentation_motion_notify_event (GtkWidget      *widget,
        return FALSE;
 }
 
+static void
+ev_view_presentation_resize_cb (EvViewPresentation *pview,
+                                                               gpointer data)
+ {
+       GdkScreen                  *screen = gtk_widget_get_screen (GTK_WIDGET(pview));
+       GdkRectangle        monitor;
+       gint                monitor_num;
+
+       monitor_num = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (GTK_WIDGET(pview)));
+       gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+       if(!(pview->monitor_width == monitor.width)||!(pview->monitor_height = monitor.height)) {
+               pview->monitor_width = monitor.width;
+               pview->monitor_height = monitor.height;
+
+               pview->scale = 0;
+        ev_view_presentation_reset_jobs (pview);
+        ev_view_presentation_update_current_page (pview, pview->current_page);
+       }
+}
+
 static gboolean
 init_presentation (GtkWidget *widget)
 {
@@ -1244,6 +1263,9 @@ init_presentation (GtkWidget *widget)
        GdkRectangle        monitor;
        gint                monitor_num;
 
+       g_signal_connect_swapped(G_OBJECT(widget), "size-allocate",
+       G_CALLBACK(ev_view_presentation_resize_cb),G_OBJECT(pview));
+
        monitor_num = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget));
        gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
        pview->monitor_width = monitor.width;
@@ -1370,6 +1392,9 @@ ev_view_presentation_set_property (GObject      *object,
        case PROP_CURRENT_PAGE:
                pview->current_page = g_value_get_uint (value);
                break;
+       case PROP_PAGE:
+               pview->current_page = g_value_get_uint (value);
+               break;
        case PROP_ROTATION:
                 ev_view_presentation_set_rotation (pview, g_value_get_uint (value));
                break;
@@ -1390,6 +1415,9 @@ ev_view_presentation_get_property (GObject    *object,
         EvViewPresentation *pview = EV_VIEW_PRESENTATION (object);
 
         switch (prop_id) {
+               case PROP_PAGE:
+                               g_value_set_uint (value, ev_view_presentation_get_current_page (pview));
+                               break;
         case PROP_ROTATION:
                 g_value_set_uint (value, ev_view_presentation_get_rotation (pview));
                 break;
@@ -1454,13 +1482,20 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
                                                              EV_TYPE_DOCUMENT,
                                                              G_PARAM_WRITABLE |
                                                              G_PARAM_CONSTRUCT_ONLY));
+       g_object_class_install_property (gobject_class,
+                                        PROP_PAGE,
+                                        g_param_spec_uint ("page",
+                                                           "Current Page",
+                                                           "The current page",
+                                                           0, G_MAXUINT, 0,
+                                                               G_PARAM_READWRITE));
        g_object_class_install_property (gobject_class,
                                         PROP_CURRENT_PAGE,
                                         g_param_spec_uint ("current_page",
                                                            "Current Page",
                                                            "The current page",
                                                            0, G_MAXUINT, 0,
-                                                           G_PARAM_WRITABLE |
+                                                               G_PARAM_WRITABLE |
                                                            G_PARAM_CONSTRUCT_ONLY));
        g_object_class_install_property (gobject_class,
                                         PROP_ROTATION,
@@ -1488,15 +1523,7 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
                              g_cclosure_marshal_VOID__ENUM,
                              G_TYPE_NONE, 1,
                              GTK_TYPE_SCROLL_TYPE);
-       signals [PAGE_CHANGED] =
-               g_signal_new ("page-changed",
-                             EV_TYPE_VIEW_PRESENTATION,
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (EvViewPresentationClass, page_changed),
-                             NULL, NULL,
-                             g_cclosure_marshal_VOID__INT,
-                             G_TYPE_NONE, 2,
-                             G_TYPE_INT, G_TYPE_INT);
+
        signals[FINISHED] =
                g_signal_new ("finished",
                              G_OBJECT_CLASS_TYPE (gobject_class),