]> 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 1f089fcf3ed41a95ddcdcbfb9de9352cfb887235..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,
@@ -328,7 +329,7 @@ scroll_to_current_page (EvView *view, GtkOrientation orientation)
        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,
@@ -1622,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)
@@ -1706,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;
@@ -1723,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;
 }
 
@@ -2372,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;