summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan@xfce.org>2010-12-08 14:43:13 +0100
committerOlivier Fourdan <fourdan@xfce.org>2010-12-09 20:27:41 +0100
commit7d94a9c54ec7cf17b063484846250c7a97866853 (patch)
tree70b9404b7bb6fe282d9ca8746b9f15444483085e
parentf25a5891ffa269f8c8fee1a7535e1482768db12e (diff)
downloadxfwm4-7d94a9c54ec7cf17b063484846250c7a97866853.tar.gz
Use XSettings standard double-click-distance (bug 6334)
-rw-r--r--defaults/defaults3
-rw-r--r--src/display.c3
-rw-r--r--src/display.h3
-rw-r--r--src/events.c49
-rw-r--r--src/settings.c31
-rw-r--r--src/settings.h10
6 files changed, 70 insertions, 29 deletions
diff --git a/defaults/defaults b/defaults/defaults
index fca50772d..bb428c789 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -11,7 +11,8 @@ cycle_apps_only=false
cycle_hidden=true
cycle_minimum=true
cycle_workspaces=false
-dbl_click_time=400
+double_click_time=250
+double_click_distance=5
double_click_action=maximize
easy_click=Alt
focus_delay=250
diff --git a/src/display.c b/src/display.c
index 27792eda5..201914ec9 100644
--- a/src/display.c
+++ b/src/display.c
@@ -339,7 +339,8 @@ myDisplayInit (GdkDisplay *gdisplay)
display->screens = NULL;
display->clients = NULL;
display->xgrabcount = 0;
- display->dbl_click_time = 300;
+ display->double_click_time = 250;
+ display->double_click_distance = 5;
display->nb_screens = 0;
display->current_time = CurrentTime;
diff --git a/src/display.h b/src/display.h
index a2293d495..9132b0069 100644
--- a/src/display.h
+++ b/src/display.h
@@ -312,7 +312,8 @@ struct _DisplayInfo
gboolean have_xsync;
gint shape_version;
gint shape_event_base;
- gint dbl_click_time;
+ gint double_click_time;
+ gint double_click_distance;
gint xgrabcount;
gint nb_screens;
gchar* hostname;
diff --git a/src/events.c b/src/events.c
index 167f7af01..89410f842 100644
--- a/src/events.c
+++ b/src/events.c
@@ -74,7 +74,7 @@
(win == MYWINDOW_XWINDOW(c->buttons[SHADE_BUTTON])) || \
(win == MYWINDOW_XWINDOW(c->buttons[STICK_BUTTON])))
-#define DBL_CLICK_GRAB (ButtonMotionMask | \
+#define DOUBLE_CLICK_GRAB (ButtonMotionMask | \
PointerMotionMask | \
ButtonPressMask | \
ButtonReleaseMask)
@@ -127,6 +127,7 @@ struct _XfwmButtonClickData
gint y;
gint xcurrent;
gint ycurrent;
+ gint distance;
gboolean allow_double_click;
};
@@ -134,6 +135,7 @@ static gboolean
typeOfClick_break (gpointer data)
{
XfwmButtonClickData *passdata;
+ TRACE ("Double click timeout\n");
passdata = (XfwmButtonClickData *) data;
if (passdata->timeout)
@@ -194,8 +196,8 @@ typeOfClick_event_filter (XEvent * xevent, gpointer data)
status = EVENT_FILTER_CONTINUE;
}
- if ((ABS (passdata->x - passdata->xcurrent) > 1) ||
- (ABS (passdata->y - passdata->ycurrent) > 1) ||
+ if ((ABS (passdata->x - passdata->xcurrent) > passdata->distance) ||
+ (ABS (passdata->y - passdata->ycurrent) > passdata->distance) ||
(!keep_going))
{
TRACE ("event loop now finished");
@@ -218,7 +220,7 @@ typeOfClick (ScreenInfo *screen_info, Window w, XEvent * ev, gboolean allow_doub
display_info = screen_info->display_info;
XFlush (display_info->dpy);
- g = myScreenGrabPointer (screen_info, DBL_CLICK_GRAB, None, ev->xbutton.time);
+ g = myScreenGrabPointer (screen_info, DOUBLE_CLICK_GRAB, None, ev->xbutton.time);
if (!g)
{
@@ -237,8 +239,11 @@ typeOfClick (ScreenInfo *screen_info, Window w, XEvent * ev, gboolean allow_doub
passdata.ycurrent = passdata.y;
passdata.clicks = 1;
passdata.allow_double_click = allow_double_click;
+ passdata.distance = display_info->double_click_distance;
+ TRACE ("Double click time= %i, distance=%i\n", display_info->double_click_time,
+ display_info->double_click_distance);
passdata.timeout = g_timeout_add_full (G_PRIORITY_DEFAULT,
- display_info->dbl_click_time,
+ display_info->double_click_time,
(GSourceFunc) typeOfClick_break,
(gpointer) &passdata, NULL);
@@ -662,16 +667,16 @@ button1Action (Client * c, XButtonEvent * ev)
{
switch (screen_info->params->double_click_action)
{
- case DBL_CLICK_ACTION_MAXIMIZE:
+ case DOUBLE_CLICK_ACTION_MAXIMIZE:
clientToggleMaximized (c, WIN_STATE_MAXIMIZED, TRUE);
break;
- case DBL_CLICK_ACTION_SHADE:
+ case DOUBLE_CLICK_ACTION_SHADE:
clientToggleShaded (c);
break;
- case DBL_CLICK_ACTION_FILL:
+ case DOUBLE_CLICK_ACTION_FILL:
clientFill(c, CLIENT_FILL);
break;
- case DBL_CLICK_ACTION_HIDE:
+ case DOUBLE_CLICK_ACTION_HIDE:
if (CLIENT_CAN_HIDE_WINDOW (c))
{
clientWithdraw (c, c->win_workspace, TRUE);
@@ -2674,7 +2679,7 @@ set_reload (GObject * obj, GdkEvent * ev, gpointer data)
}
static gboolean
-dbl_click_time_cb (GObject * obj, GdkEvent * ev, gpointer data)
+double_click_time_cb (GObject * obj, GdkEvent * ev, gpointer data)
{
DisplayInfo *display_info;
GValue tmp_val = { 0, };
@@ -2685,7 +2690,25 @@ dbl_click_time_cb (GObject * obj, GdkEvent * ev, gpointer data)
g_value_init (&tmp_val, G_TYPE_INT);
if (gdk_setting_get ("gtk-double-click-time", &tmp_val))
{
- display_info->dbl_click_time = abs (g_value_get_int (&tmp_val));
+ display_info->double_click_time = abs (g_value_get_int (&tmp_val));
+ }
+
+ return (TRUE);
+}
+
+static gboolean
+double_click_distance_cb (GObject * obj, GdkEvent * ev, gpointer data)
+{
+ DisplayInfo *display_info;
+ GValue tmp_val = { 0, };
+
+ display_info = (DisplayInfo *) data;
+ g_return_val_if_fail (display_info, TRUE);
+
+ g_value_init (&tmp_val, G_TYPE_INT);
+ if (gdk_setting_get ("gtk-double-click-distance", &tmp_val))
+ {
+ display_info->double_click_distance = abs (g_value_get_int (&tmp_val));
}
return (TRUE);
@@ -2815,7 +2838,9 @@ initGtkCallbacks (ScreenInfo *screen_info)
g_signal_connect (settings, "notify::gtk-font-name",
G_CALLBACK (set_reload), (gpointer) (screen_info->display_info));
g_signal_connect (settings, "notify::gtk-double-click-time",
- G_CALLBACK (dbl_click_time_cb), (gpointer) (screen_info->display_info));
+ G_CALLBACK (double_click_time_cb), (gpointer) (screen_info->display_info));
+ g_signal_connect (settings, "notify::gtk-double-click-distance",
+ G_CALLBACK (double_click_distance_cb), (gpointer) (screen_info->display_info));
g_signal_connect_after (settings, "notify::gtk-xft-antialias",
G_CALLBACK (refresh_font_cb), (gpointer) (screen_info));
g_signal_connect_after (settings, "notify::gtk-xft-dpi",
diff --git a/src/settings.c b/src/settings.c
index ca0cd7a8b..b9d57bfa7 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -439,11 +439,22 @@ loadTheme (ScreenInfo *screen_info, Settings *rc)
colsym[XPM_COLOR_SYMBOL_SIZE].name = NULL;
colsym[XPM_COLOR_SYMBOL_SIZE].value = NULL;
- display_info->dbl_click_time = abs (getIntValue ("dbl_click_time", rc));
+ /* Standard double click time ... */
+ display_info->double_click_time = abs (getIntValue ("double_click_time", rc));
g_value_init (&tmp_val, G_TYPE_INT);
if (gdk_setting_get ("gtk-double-click-time", &tmp_val))
{
- display_info->dbl_click_time = abs (g_value_get_int (&tmp_val));
+ display_info->double_click_time = abs (g_value_get_int (&tmp_val));
+ g_value_unset (&tmp_val);
+ }
+
+ /* ... and distance */
+ display_info->double_click_distance = abs (getIntValue ("double_click_distance", rc));
+ g_value_init (&tmp_val, G_TYPE_INT);
+ if (gdk_setting_get ("gtk-double-click-distance", &tmp_val))
+ {
+ display_info->double_click_distance = abs (g_value_get_int (&tmp_val));
+ g_value_unset (&tmp_val);
}
screen_info->font_height = 0;
@@ -668,7 +679,8 @@ loadSettings (ScreenInfo *screen_info)
{"cycle_hidden", NULL, G_TYPE_BOOLEAN, TRUE},
{"cycle_minimum", NULL, G_TYPE_BOOLEAN, TRUE},
{"cycle_workspaces", NULL, G_TYPE_BOOLEAN, TRUE},
- {"dbl_click_time", NULL, G_TYPE_INT, TRUE},
+ {"double_click_time", NULL, G_TYPE_INT, TRUE},
+ {"double_click_distance", NULL, G_TYPE_INT, TRUE},
{"double_click_action", NULL, G_TYPE_STRING, TRUE},
{"easy_click", NULL, G_TYPE_STRING, TRUE},
{"focus_hint", NULL, G_TYPE_BOOLEAN, TRUE},
@@ -843,23 +855,23 @@ loadSettings (ScreenInfo *screen_info)
value = getStringValue ("double_click_action", rc);
if (!g_ascii_strcasecmp ("shade", value))
{
- screen_info->params->double_click_action = DBL_CLICK_ACTION_SHADE;
+ screen_info->params->double_click_action = DOUBLE_CLICK_ACTION_SHADE;
}
else if (!g_ascii_strcasecmp ("hide", value))
{
- screen_info->params->double_click_action = DBL_CLICK_ACTION_HIDE;
+ screen_info->params->double_click_action = DOUBLE_CLICK_ACTION_HIDE;
}
else if (!g_ascii_strcasecmp ("maximize", value))
{
- screen_info->params->double_click_action = DBL_CLICK_ACTION_MAXIMIZE;
+ screen_info->params->double_click_action = DOUBLE_CLICK_ACTION_MAXIMIZE;
}
else if (!g_ascii_strcasecmp ("fill", value))
{
- screen_info->params->double_click_action = DBL_CLICK_ACTION_FILL;
+ screen_info->params->double_click_action = DOUBLE_CLICK_ACTION_FILL;
}
else
{
- screen_info->params->double_click_action = DBL_CLICK_ACTION_NONE;
+ screen_info->params->double_click_action = DOUBLE_CLICK_ACTION_NONE;
}
if (screen_info->workspace_count == 0)
@@ -1173,7 +1185,8 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_
}
else if ((!strcmp (name, "button_offset"))
|| (!strcmp (name, "button_spacing"))
- || (!strcmp (name, "dbl_click_time"))
+ || (!strcmp (name, "double_click_time"))
+ || (!strcmp (name, "double_DOUBLE_CLICKclick_distance"))
|| (!strcmp (name, "maximized_offset"))
|| (!strcmp (name, "shadow_delta_height"))
|| (!strcmp (name, "shadow_delta_width"))
diff --git a/src/settings.h b/src/settings.h
index a73383bdf..b66c60d4c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -133,11 +133,11 @@ enum
enum
{
- DBL_CLICK_ACTION_NONE,
- DBL_CLICK_ACTION_MAXIMIZE,
- DBL_CLICK_ACTION_SHADE,
- DBL_CLICK_ACTION_FILL,
- DBL_CLICK_ACTION_HIDE
+ DOUBLE_CLICK_ACTION_NONE,
+ DOUBLE_CLICK_ACTION_MAXIMIZE,
+ DOUBLE_CLICK_ACTION_SHADE,
+ DOUBLE_CLICK_ACTION_FILL,
+ DOUBLE_CLICK_ACTION_HIDE
};
enum