X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-view.c;h=f0a371cd605c027d32a0aa376c08881c2d776bca;hb=0badb78f245130a87888ccbfa624c251707ddf27;hp=1f089fcf3ed41a95ddcdcbfb9de9352cfb887235;hpb=96b7b39d956756ad5e354b67e7da4d2a73415cb3;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index 1f089fcf..f0a371cd 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -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;