Remove OwnerGrabButtonMask from button entries for GDK_BUTTON_PRESS /

Fri Feb 18 14:37:29 2000  Owen Taylor  <otaylor@redhat.com>

	* gdk/x11/gdkwindow-x11.c (gdk_event_mask_table): Remove
	OwnerGrabButtonMask from button entries for
	GDK_BUTTON_PRESS / GDK_BUTTON_RELEASE.

	* gtk/gtklayout.c (gtk_layout_realize): Always add GDK_SCROLL
	to the event mask (which will result in button/press release
	being added to the event mask on Unix) so scrolling works
	for layouts in scroll windows.

	* gdk/gdkevents.h (enum): Fix up GDK_ALL_EVENTS_MASK.

	Patch from Anders Carlsson  <andersca@picard.andersnet> to add
	a scroll event.

 	* gtk/testgtk.c (scroll_test_scroll): Added an example of mouse wheel
 	scrolling to the "Test Scrolling" part of testgtk.

 	* gtk/gtkwidget.h (struct _GtkWidgetClass): Added scroll_event signal.

 	* gtk/gtkwidget.c: Added "scroll_event" GTK+ signal and matched
 	it against GDK_SCROLL.

 	* gtk/gtkrange.c (gtk_range_scroll_event): Updated to use the new
 	way of mouse wheel scrolling.

 	* gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): Likewise.

 	* gtk/gtkspinbutton.c (gtk_spin_button_scroll): Likewise.

 	* gtk/gtkmain.c: Removed previous mouse wheel hack.

 	* gdk/x11/gdkwindow-x11.c (gdk_event_mask_table): Added entry in
 	gdk_event_mask_table.

 	* gdk/x11/gdkevents-x11.c (gdk_event_translate): Added
 	GdkEventScroll handler.

 	* gdk/gdkevents.h: Added GdkEventScroll structure.
This commit is contained in:
Owen Taylor
2000-02-18 20:02:24 +00:00
committed by Owen Taylor
parent ab1deac87f
commit c8a2382b65
21 changed files with 526 additions and 80 deletions

View File

@ -757,45 +757,10 @@ gtk_main_do_event (GdkEvent *event)
gtk_widget_event (event_widget, event);
break;
case GDK_SCROLL:
case GDK_BUTTON_PRESS:
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
/* We treat button 4-5 specially, assume we have
* a MS-style scrollwheel mouse, and try to find
* a plausible widget to scroll. We also trap
* button 4-5 double and triple clicks here, since
* they will be generated if the user scrolls quickly.
*/
if ((grab_widget == event_widget) &&
(event->button.button == 4 || event->button.button == 5))
{
GtkWidget *range = NULL;
GtkWidget *scrollwin;
if (GTK_IS_RANGE (event_widget))
range = event_widget;
else
{
scrollwin = gtk_widget_get_ancestor (event_widget,
GTK_TYPE_SCROLLED_WINDOW);
if (scrollwin)
range = GTK_SCROLLED_WINDOW (scrollwin)->vscrollbar;
}
if (range && GTK_WIDGET_VISIBLE (range))
{
if (event->type == GDK_BUTTON_PRESS)
{
GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
gfloat new_value = adj->value + ((event->button.button == 4) ?
-adj->page_increment / 2:
adj->page_increment / 2);
new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
gtk_adjustment_set_value (adj, new_value);
}
break;
}
}
gtk_propagate_event (grab_widget, event);
break;