]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Make print dialog non-modal. Fix for the bug #325622.
[evince.git] / shell / ev-view.c
index 9c7779b2f5fb552289d33dfd243f1664a16d50bf..f0a371cd605c027d32a0aa376c08881c2d776bca 100644 (file)
@@ -179,6 +179,7 @@ static gboolean   ev_view_scroll_event                       (GtkWidget
                                                              GdkEventScroll     *event);
 static gboolean   ev_view_expose_event                       (GtkWidget          *widget,
                                                              GdkEventExpose     *event);
+static gboolean   ev_view_popup_menu                         (GtkWidget         *widget);
 static gboolean   ev_view_button_press_event                 (GtkWidget          *widget,
                                                              GdkEventButton     *event);
 static gboolean   ev_view_motion_notify_event                (GtkWidget          *widget,
@@ -319,13 +320,16 @@ scroll_to_current_page (EvView *view, GtkOrientation orientation)
 
         doc_point_to_view_point (view, view->current_page, &view->pending_point, &view_point);
 
-       view->pending_point.x = 0;
-       view->pending_point.y = 0;
+       if (orientation == GTK_ORIENTATION_VERTICAL) {
+               view->pending_point.y = 0;
+       } else {
+               view->pending_point.x = 0;
+       }
 
        if (orientation == GTK_ORIENTATION_VERTICAL) {
                if (view->continuous) {
                        gtk_adjustment_clamp_page (view->vadjustment,
-                                                  view_point.y - view->spacing,
+                                                  view_point.y - view->spacing / 2,
                                                   view_point.y + view->vadjustment->page_size);
                } else {
                        gtk_adjustment_set_value (view->vadjustment,
@@ -1174,8 +1178,8 @@ goto_xyz_link (EvView *view, EvLink *link)
        page = ev_link_get_page (link);
        ev_page_cache_get_size (view->page_cache, page, 0, 1.0, NULL, &height);
 
-       ev_view_set_sizing_mode (view, EV_SIZING_FREE);
        if (zoom != 0) {
+               ev_view_set_sizing_mode (view, EV_SIZING_FREE);
                ev_view_set_zoom (view, zoom, FALSE);
        }
 
@@ -1619,6 +1623,19 @@ ev_view_expose_event (GtkWidget      *widget,
        return FALSE;
 }
 
+static gboolean
+ev_view_popup_menu (GtkWidget *widget)
+{
+    gint x, y;
+    EvLink *link;
+    EvView *view = EV_VIEW (widget);
+    
+    gtk_widget_get_pointer (widget, &x, &y);
+    link = ev_view_get_link_at_location (view, x, y);
+    g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, link);
+    return TRUE;
+}
+
 static gboolean
 ev_view_button_press_event (GtkWidget      *widget,
                            GdkEventButton *event)
@@ -1703,10 +1720,10 @@ selection_update_idle_cb (EvView *view)
 static gboolean
 selection_scroll_timeout_cb (EvView *view)
 {      
-       gint y, shift = 0;
+       gint x, y, shift = 0;
        GtkWidget *widget = GTK_WIDGET (view);
        
-       gtk_widget_get_pointer (widget, NULL, &y);
+       gtk_widget_get_pointer (widget, &x, &y);
 
        if (y > widget->allocation.height) {
                shift = (y - widget->allocation.height) / 2;
@@ -1720,6 +1737,20 @@ selection_scroll_timeout_cb (EvView *view)
                                          view->vadjustment->lower,
                                          view->vadjustment->upper -
                                          view->vadjustment->page_size));       
+
+       if (x > widget->allocation.width) {
+               shift = (x - widget->allocation.width) / 2;
+       } else if (x < 0) {
+               shift = x / 2;
+       }
+
+       if (shift)
+               gtk_adjustment_set_value (view->hadjustment,
+                                         CLAMP (view->hadjustment->value + shift,
+                                         view->hadjustment->lower,
+                                         view->hadjustment->upper -
+                                         view->hadjustment->page_size));       
+
        return TRUE;
 }
 
@@ -2369,6 +2400,7 @@ ev_view_class_init (EvViewClass *class)
        widget_class->leave_notify_event = ev_view_leave_notify_event;
        widget_class->style_set = ev_view_style_set;
        widget_class->drag_data_get = ev_view_drag_data_get;
+       widget_class->popup_menu = ev_view_popup_menu;
        gtk_object_class->destroy = ev_view_destroy;
 
        class->set_scroll_adjustments = ev_view_set_scroll_adjustments;