[Xfce4-commits] <xfwm4:master> Use XSettings standard double-click-distance (bug 6334)

Olivier Fourdan noreply at xfce.org
Thu Dec 9 20:28:02 CET 2010


Updating branch refs/heads/master
         to 7d94a9c54ec7cf17b063484846250c7a97866853 (commit)
       from f25a5891ffa269f8c8fee1a7535e1482768db12e (commit)

commit 7d94a9c54ec7cf17b063484846250c7a97866853
Author: Olivier Fourdan <fourdan at xfce.org>
Date:   Wed Dec 8 14:43:13 2010 +0100

    Use XSettings standard double-click-distance (bug 6334)

 defaults/defaults |    3 ++-
 src/display.c     |    3 ++-
 src/display.h     |    3 ++-
 src/events.c      |   49 +++++++++++++++++++++++++++++++++++++------------
 src/settings.c    |   31 ++++++++++++++++++++++---------
 src/settings.h    |   10 +++++-----
 6 files changed, 70 insertions(+), 29 deletions(-)

diff --git a/defaults/defaults b/defaults/defaults
index fca5077..bb428c7 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 27792ed..201914e 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 a2293d4..9132b00 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 167f7af..89410f8 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 ca0cd7a..b9d57bf 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 a73383b..b66c60d 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



More information about the Xfce4-commits mailing list