diff options
author | Olivier Fourdan <fourdan@xfce.org> | 2010-12-08 14:43:13 +0100 |
---|---|---|
committer | Olivier Fourdan <fourdan@xfce.org> | 2010-12-09 20:27:41 +0100 |
commit | 7d94a9c54ec7cf17b063484846250c7a97866853 (patch) | |
tree | 70b9404b7bb6fe282d9ca8746b9f15444483085e | |
parent | f25a5891ffa269f8c8fee1a7535e1482768db12e (diff) | |
download | xfwm4-7d94a9c54ec7cf17b063484846250c7a97866853.tar.gz |
Use XSettings standard double-click-distance (bug 6334)
-rw-r--r-- | defaults/defaults | 3 | ||||
-rw-r--r-- | src/display.c | 3 | ||||
-rw-r--r-- | src/display.h | 3 | ||||
-rw-r--r-- | src/events.c | 49 | ||||
-rw-r--r-- | src/settings.c | 31 | ||||
-rw-r--r-- | src/settings.h | 10 |
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 |