Do not interpret distant clicks as double-clicks (#116541, Bernhard
Tue Dec 16 01:46:46 2003 Matthias Clasen <maclas@gmx.de> Do not interpret distant clicks as double-clicks (#116541, Bernhard Walle): * gdk/gdkdisplay.h (struct GdkDisplay): Add new fields double_click_distance, button_x and button_y. * gdk/gdkdisplay.c (gdk_display_init): Initialize the new fields. * gdk/gdkdisplay.h: * gdk/gdkevents.c (gdk_display_set_double_click_distance): New function to set the double click distance on a display. * gdk/gdkevents.c: Take double click distance into account when generating single, double or triple clicks. * gtk/gtksettings.c: Add new setting "gtk-double-click-distance". * gdk/x11/gdkevents-x11.c: Add the XSetting "Net/DoubleClickDistance" and map it to "gtk-double-click-distance".
This commit is contained in:
committed by
Matthias Clasen
parent
69c2585f0d
commit
fbb0ba1a3b
@ -46,10 +46,6 @@ GdkEventFunc _gdk_event_func = NULL; /* Callback for events */
|
||||
gpointer _gdk_event_data = NULL;
|
||||
GDestroyNotify _gdk_event_notify = NULL;
|
||||
|
||||
#define TRIPLE_CLICK_TIME(display) (2*display->double_click_time)
|
||||
#define DOUBLE_CLICK_DIST 5
|
||||
#define TRIPLE_CLICK_DIST 5
|
||||
|
||||
/*********************************************
|
||||
* Functions for maintaining the event queue *
|
||||
*********************************************/
|
||||
@ -1031,22 +1027,28 @@ void
|
||||
_gdk_event_button_generate (GdkDisplay *display,
|
||||
GdkEvent *event)
|
||||
{
|
||||
if ((event->button.time < (display->button_click_time[1] + TRIPLE_CLICK_TIME (display))) &&
|
||||
if ((event->button.time < (display->button_click_time[1] + 2*display->double_click_time)) &&
|
||||
(event->button.window == display->button_window[1]) &&
|
||||
(event->button.button == display->button_number[1]))
|
||||
{
|
||||
(event->button.button == display->button_number[1]) &&
|
||||
(ABS (event->button.x - display->button_x[1]) <= display->double_click_distance) &&
|
||||
(ABS (event->button.y - display->button_y[1]) <= display->double_click_distance))
|
||||
{
|
||||
gdk_synthesize_click (display, event, 3);
|
||||
|
||||
|
||||
display->button_click_time[1] = 0;
|
||||
display->button_click_time[0] = 0;
|
||||
display->button_window[1] = NULL;
|
||||
display->button_window[0] = 0;
|
||||
display->button_number[1] = -1;
|
||||
display->button_number[0] = -1;
|
||||
display->button_x[0] = display->button_x[1] = 0;
|
||||
display->button_y[0] = display->button_y[1] = 0;
|
||||
}
|
||||
else if ((event->button.time < (display->button_click_time[0] + display->double_click_time)) &&
|
||||
(event->button.window == display->button_window[0]) &&
|
||||
(event->button.button == display->button_number[0]))
|
||||
(event->button.button == display->button_number[0]) &&
|
||||
(ABS (event->button.x - display->button_x[0]) <= display->double_click_distance) &&
|
||||
(ABS (event->button.y - display->button_y[0]) <= display->double_click_distance))
|
||||
{
|
||||
gdk_synthesize_click (display, event, 2);
|
||||
|
||||
@ -1056,6 +1058,10 @@ _gdk_event_button_generate (GdkDisplay *display,
|
||||
display->button_window[0] = event->button.window;
|
||||
display->button_number[1] = display->button_number[0];
|
||||
display->button_number[0] = event->button.button;
|
||||
display->button_x[1] = display->button_x[0];
|
||||
display->button_x[0] = event->button.x;
|
||||
display->button_y[1] = display->button_y[0];
|
||||
display->button_y[0] = event->button.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1065,6 +1071,10 @@ _gdk_event_button_generate (GdkDisplay *display,
|
||||
display->button_window[0] = event->button.window;
|
||||
display->button_number[1] = -1;
|
||||
display->button_number[0] = event->button.button;
|
||||
display->button_x[1] = 0;
|
||||
display->button_x[0] = event->button.x;
|
||||
display->button_y[1] = 0;
|
||||
display->button_y[0] = event->button.y;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1126,7 +1136,8 @@ gdk_synthesize_window_state (GdkWindow *window,
|
||||
*
|
||||
* Sets the double click time (two clicks within this time interval
|
||||
* count as a double click and result in a #GDK_2BUTTON_PRESS event).
|
||||
* Applications should NOT set this, it is a global user-configured setting.
|
||||
* Applications should <emphasis>not</emphasis> set this, it is a global
|
||||
* user-configured setting.
|
||||
*
|
||||
* Since: 2.2
|
||||
**/
|
||||
@ -1142,8 +1153,10 @@ gdk_display_set_double_click_time (GdkDisplay *display,
|
||||
* @msec: double click time in milliseconds (thousandths of a second)
|
||||
*
|
||||
* Set the double click time for the default display. See
|
||||
* gdk_display_set_double_click_time(). Applications should NOT
|
||||
* set this, it is a global user-configured setting.
|
||||
* gdk_display_set_double_click_time().
|
||||
* See also gdk_display_set_double_click_distance().
|
||||
* Applications should <emphasis>not</emphasis> set this, it is a
|
||||
* global user-configured setting.
|
||||
**/
|
||||
void
|
||||
gdk_set_double_click_time (guint msec)
|
||||
@ -1151,6 +1164,26 @@ gdk_set_double_click_time (guint msec)
|
||||
gdk_display_set_double_click_time (gdk_display_get_default (), msec);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_set_double_click_distance:
|
||||
* @display: a #GdkDisplay
|
||||
* @distance: distance in pixels
|
||||
*
|
||||
* Sets the double click distance (two clicks within this distance
|
||||
* count as a double click and result in a #GDK_2BUTTON_PRESS event).
|
||||
* See also gdk_display_set_double_click_time().
|
||||
* Applications should <emphasis>not</emphasis> set this, it is a global
|
||||
* user-configured setting.
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
void
|
||||
gdk_display_set_double_click_distance (GdkDisplay *display,
|
||||
guint distance)
|
||||
{
|
||||
display->double_click_distance = distance;
|
||||
}
|
||||
|
||||
GType
|
||||
gdk_event_get_type (void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user