X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libview%2Fev-view-presentation.c;h=b32a0bbba4e2ed6900b72580f24d3305455ade33;hb=1e63533e4d2fe74b17883a51f984ecacb9138231;hp=3612904ae025cd539d3d5edb2b094cb3a414b739;hpb=88674d5ff3403c517fa643738912072833aa0e0c;p=evince.git diff --git a/libview/ev-view-presentation.c b/libview/ev-view-presentation.c index 3612904a..b32a0bbb 100644 --- a/libview/ev-view-presentation.c +++ b/libview/ev-view-presentation.c @@ -517,7 +517,7 @@ ev_view_presentation_set_page (EvViewPresentation *pview, gint new_page) if (new_page >= n_pages) ev_view_presentation_set_end (pview); - else + else if (new_page != pview->current_page) ev_view_presentation_update_current_page (pview, new_page); } @@ -1235,19 +1235,60 @@ ev_view_presentation_motion_notify_event (GtkWidget *widget, return FALSE; } -static gboolean -init_presentation (GtkWidget *widget) +static GdkRectangle +ev_view_presentation_get_monitor_geometry (EvViewPresentation *pview) { - EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget); - GdkScreen *screen = gtk_widget_get_screen (widget); + 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 (widget)); + 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); + + return monitor; +} + +static void +ev_view_presentation_update_scale (EvViewPresentation *pview) +{ + GdkRectangle monitor = ev_view_presentation_get_monitor_geometry (pview); + + 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 void +ev_view_presentation_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + gtk_widget_set_allocation (widget, allocation); + if (gtk_widget_get_realized (widget)) + gdk_window_move_resize (gtk_widget_get_window (widget), + allocation->x, + allocation->y, + allocation->width, + allocation->height); + ev_view_presentation_update_scale (EV_VIEW_PRESENTATION (widget)); +} + +static gboolean +init_presentation (GtkWidget *widget) +{ + EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget); + GdkRectangle monitor = ev_view_presentation_get_monitor_geometry (pview); + pview->monitor_width = monitor.width; pview->monitor_height = monitor.height; + g_signal_connect_swapped (G_OBJECT (widget), "screen-changed", + G_CALLBACK (ev_view_presentation_update_scale), pview); + ev_view_presentation_update_current_page (pview, pview->current_page); ev_view_presentation_hide_cursor_timeout_start (pview); @@ -1437,6 +1478,7 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass) gobject_class->dispose = ev_view_presentation_dispose; + widget_class->size_allocate = ev_view_presentation_size_allocate; widget_class->get_preferred_width = ev_view_presentation_get_preferred_width; widget_class->get_preferred_height = ev_view_presentation_get_preferred_height; widget_class->realize = ev_view_presentation_realize;