Mercurial > geeqie
comparison src/pixbuf-renderer.c @ 1709:54280e8b8309
improved scroll on slower machines
patch by Stanislav Brabec
author | nadvornik |
---|---|
date | Tue, 28 Jul 2009 22:27:24 +0000 |
parents | 82de367f2d72 |
children | 9a351e8f3b97 |
comparison
equal
deleted
inserted
replaced
1708:fc147a2d8aaf | 1709:54280e8b8309 |
---|---|
3744 static gboolean pr_mouse_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) | 3744 static gboolean pr_mouse_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
3745 { | 3745 { |
3746 PixbufRenderer *pr; | 3746 PixbufRenderer *pr; |
3747 gint accel; | 3747 gint accel; |
3748 | 3748 |
3749 /* This is a hack, but work far the best, at least for single pointer systems. | |
3750 * See http://bugzilla.gnome.org/show_bug.cgi?id=587714 for more. */ | |
3751 gint x, y; | |
3752 gdk_window_get_pointer (bevent->window, &x, &y, NULL); | |
3753 bevent->x = x; | |
3754 bevent->y = y; | |
3755 | |
3749 pr = PIXBUF_RENDERER(widget); | 3756 pr = PIXBUF_RENDERER(widget); |
3750 | 3757 |
3751 if (pr->scroller_id) | 3758 if (pr->scroller_id) |
3752 { | 3759 { |
3753 pr->scroller_xpos = bevent->x; | 3760 pr->scroller_xpos = bevent->x; |
3785 pr_drag_signal(pr, bevent); | 3792 pr_drag_signal(pr, bevent); |
3786 | 3793 |
3787 pr->drag_last_x = bevent->x; | 3794 pr->drag_last_x = bevent->x; |
3788 pr->drag_last_y = bevent->y; | 3795 pr->drag_last_y = bevent->y; |
3789 | 3796 |
3797 /* This is recommended by the GTK+ documentation, but does not work properly. | |
3798 * Use deprecated way until GTK+ gets a solution for correct motion hint handling: | |
3799 * http://bugzilla.gnome.org/show_bug.cgi?id=587714 | |
3800 */ | |
3801 /* gdk_event_request_motions (bevent); */ | |
3790 return FALSE; | 3802 return FALSE; |
3791 } | 3803 } |
3792 | 3804 |
3793 static gboolean pr_leave_notify_cb(GtkWidget *widget, GdkEventCrossing *cevent, gpointer data) | 3805 static gboolean pr_leave_notify_cb(GtkWidget *widget, GdkEventCrossing *cevent, gpointer data) |
3794 { | 3806 { |
3817 pr->in_drag = TRUE; | 3829 pr->in_drag = TRUE; |
3818 pr->drag_last_x = bevent->x; | 3830 pr->drag_last_x = bevent->x; |
3819 pr->drag_last_y = bevent->y; | 3831 pr->drag_last_y = bevent->y; |
3820 pr->drag_moved = 0; | 3832 pr->drag_moved = 0; |
3821 gdk_pointer_grab(widget->window, FALSE, | 3833 gdk_pointer_grab(widget->window, FALSE, |
3822 GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, | 3834 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_RELEASE_MASK, |
3823 NULL, NULL, bevent->time); | 3835 NULL, NULL, bevent->time); |
3824 gtk_grab_add(widget); | 3836 gtk_grab_add(widget); |
3825 break; | 3837 break; |
3826 case MOUSE_BUTTON_MIDDLE: | 3838 case MOUSE_BUTTON_MIDDLE: |
3827 pr->drag_moved = 0; | 3839 pr->drag_moved = 0; |
3917 g_signal_connect(G_OBJECT(pr), "hierarchy-changed", | 3929 g_signal_connect(G_OBJECT(pr), "hierarchy-changed", |
3918 G_CALLBACK(pr_hierarchy_changed_cb), pr); | 3930 G_CALLBACK(pr_hierarchy_changed_cb), pr); |
3919 g_signal_connect(G_OBJECT(pr), "leave_notify_event", | 3931 g_signal_connect(G_OBJECT(pr), "leave_notify_event", |
3920 G_CALLBACK(pr_leave_notify_cb), pr); | 3932 G_CALLBACK(pr_leave_notify_cb), pr); |
3921 | 3933 |
3922 gtk_widget_set_events(GTK_WIDGET(pr), GDK_POINTER_MOTION_MASK | | 3934 gtk_widget_set_events(GTK_WIDGET(pr), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | |
3923 GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | | 3935 GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | |
3924 GDK_LEAVE_NOTIFY_MASK); | 3936 GDK_LEAVE_NOTIFY_MASK); |
3925 | 3937 |
3926 g_signal_connect(G_OBJECT(pr), "drag_begin", | 3938 g_signal_connect(G_OBJECT(pr), "drag_begin", |
3927 G_CALLBACK(pr_mouse_drag_cb), pr); | 3939 G_CALLBACK(pr_mouse_drag_cb), pr); |