rpms/gsynaptics/devel gsynaptics-0.9.14-driver-header.patch, NONE, 1.1 gsynaptics-0.9.14-fix-scrolling-checkboxes.patch, NONE, 1.1 gsynaptics-0.9.14-scrolling-checkboxes.patch, NONE, 1.1 gsynaptics-0.9.14-scrollmethods.patch, NONE, 1.1 gsynaptics.spec, 1.20, 1.21

Peter Hutterer whot at fedoraproject.org
Thu Apr 2 00:35:00 UTC 2009


Author: whot

Update of /cvs/pkgs/rpms/gsynaptics/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv31643

Modified Files:
	gsynaptics.spec 
Added Files:
	gsynaptics-0.9.14-driver-header.patch 
	gsynaptics-0.9.14-fix-scrolling-checkboxes.patch 
	gsynaptics-0.9.14-scrolling-checkboxes.patch 
	gsynaptics-0.9.14-scrollmethods.patch 
Log Message:
* Mon Apr 2 2009 Peter Hutterer <peter.hutterer at redhat.com> - 0.9.14-5
- gsynaptics-0.9.14-scrolling-checkboxes.patch: set checkboxes based on the
  scrolling enabled/disabled property, not on the delta.
- gsynaptics-0.9.14-driver-header.patch: use the driver's header file instead
  of a custom synshm.h.
- Require xorg-x11-drv-synaptics now that we use the driver header, and force
  an autoreconf to include it properly.
- gsynaptics-0.9.14-fix-scrolling-checkboxes.patch: fix scrolling
  enabled/disabled checkboxes
- gsynaptics-0.9.14-scrollmethod.patch: provide radiobuttons instead



gsynaptics-0.9.14-driver-header.patch:

--- NEW FILE gsynaptics-0.9.14-driver-header.patch ---
>From 53529e21e35efe409afc7be42553551ac89c9aa4 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri, 13 Mar 2009 10:06:50 +1000
Subject: [PATCH] Use the driver's synaptics.h file instead of our own synshm.h file.

Requires chaning a couple of constant names, but oh well, we get bonus points
for having the same SHM struct as the driver.
---
 src/Makefile.am  |    2 +
 src/gsynaptics.c |   22 ++++++------
 src/gsynaptics.h |   10 +++---
 src/main.c       |    6 ++--
 src/synshm.h     |  107 ------------------------------------------------------
 5 files changed, 21 insertions(+), 126 deletions(-)
 delete mode 100644 src/synshm.h

diff --git a/configure.ac b/configure.ac
index 085ee4e..3bd7747 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,10 @@ PKG_CHECK_MODULES(GCONF2, gconf-2.0)
 AC_SUBST(GCONF2_CFLAGS)
 AC_SUBST(GCONF2_LIBS)
 
+PKG_CHECK_MODULES(SYNAPTICS, xorg-synaptics)
+AC_SUBST(SYNAPTICS_CFLAGS)
+AC_SUBST(SYNAPTICS_LIBS)
+
 GETTEXT_PACKAGE=gsynaptics
 AC_SUBST(GETTEXT_PACKAGE)
 AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Gettext package])
diff --git a/src/Makefile.am b/src/Makefile.am
index 643fcb9..a5f9046 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,6 +5,7 @@ gsynaptics_CFLAGS =				\
 	$(GTK_CFLAGS)				\
 	$(GLADE2_CFLAGS)			\
 	$(GCONF2_CFLAGS)			\
+	$(SYNAPTICS_CFLAGS)			\
 	$(AM_CFLAGS)
 
 gsynaptics_SOURCES =			\
@@ -29,6 +30,7 @@ gsynaptics_init_CFLAGS =				\
 	$(GLIB_CFLAGS)				\
 	$(GNOME_CFLAGS)				\
 	$(GCONF2_CFLAGS)			\
+	$(SYNAPTICS_CFLAGS)			\
 	$(AM_CFLAGS)
 
 gsynaptics_init_LDADD =	\
diff --git a/src/gsynaptics.c b/src/gsynaptics.c
index 3598c18..37e6cb2 100644
--- a/src/gsynaptics.c
+++ b/src/gsynaptics.c
@@ -233,7 +233,7 @@ g_synaptics_is_tapping_enabled (GSynaptics *synaptics)
 	else
 	{
 		return SYNSHM(synaptics)->tap_time > 0 &&
-			SYNSHM(synaptics)->tap_action[OneFinger] > 0; /* F1_TAP */
+			SYNSHM(synaptics)->tap_action[F1_TAP] > 0; /* F1_TAP */
 	}
 }
 
@@ -256,7 +256,7 @@ g_synaptics_tap_time (GSynaptics *synaptics)
 
 #if 0
 gint
-g_synaptics_tap_action                 (GSynaptics *synaptics, TapType type)
+g_synaptics_tap_action                 (GSynaptics *synaptics, TapEvent type)
 {
 }
 #endif
@@ -499,7 +499,7 @@ g_synaptics_circular_scroll_trigger (GSynaptics *synaptics)
 }
 
 Button
-g_synaptics_button_for_tap (GSynaptics *synaptics, TapType tap)
+g_synaptics_button_for_tap (GSynaptics *synaptics, TapEvent tap)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
 	if (!g_synaptics_is_valid(synaptics))
@@ -617,7 +617,7 @@ g_synaptics_set_tap_time (GSynaptics *synaptics, gint time)
 
 #if 0
 void
-g_synaptics_set_tap_action (GSynaptics *synaptics, TapType type, int action)
+g_synaptics_set_tap_action (GSynaptics *synaptics, TapEvent type, int action)
 {
 	if (!g_synaptics_is_valid(synaptics))
 		return;
@@ -884,7 +884,7 @@ g_synaptics_set_circular_scroll_trigger (GSynaptics *synaptics, ScrollTrigger t)
 }
 
 void
-g_synaptics_set_button_for_tap (GSynaptics *synaptics, TapType tap, Button button)
+g_synaptics_set_button_for_tap (GSynaptics *synaptics, TapEvent tap, Button button)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
 	if (!g_synaptics_is_valid(synaptics))
@@ -894,19 +894,19 @@ g_synaptics_set_button_for_tap (GSynaptics *synaptics, TapType tap, Button butto
 	{
 	    gchar *command;
 
-	    if (tap >= OneFinger)
+	    if (tap >= F1_TAP)
 	    {
 		command = g_strdup_printf ("synclient TapButton%d=%d",
-			tap - OneFinger + 1, button);
+			tap - F1_TAP + 1, button);
 	    } else
 	    {
 		char *corner;
 		switch (tap)
 		{
-		    case RightTop: corner ="RT"; break;
-		    case LeftTop: corner ="LT"; break;
-		    case RightBottom: corner ="RB"; break;
-		    case LeftBottom: corner ="LB"; break;
+		    case RT_TAP: corner ="RT"; break;
+		    case LT_TAP: corner ="LT"; break;
+		    case RB_TAP: corner ="RB"; break;
+		    case LB_TAP: corner ="LB"; break;
 		    default:
 				     return;
 		}
diff --git a/src/gsynaptics.h b/src/gsynaptics.h
index 3b15c7e..11b8763 100644
--- a/src/gsynaptics.h
+++ b/src/gsynaptics.h
@@ -20,7 +20,7 @@
 #define __G_SYNAPTICS_H__
 
 #include <gtk/gtk.h>
-#include "synshm.h"
+#include <synaptics.h>
 
 G_BEGIN_DECLS
 
@@ -76,7 +76,7 @@ void		g_synaptics_edges                       (GSynaptics *synaptics);
 gboolean	g_synaptics_is_tapping_enabled          (GSynaptics *synaptics);
 gint		g_synaptics_tap_time                    (GSynaptics *synaptics);
 gint		g_synaptics_tap_action                  (GSynaptics *synaptics,
-							 TapType     type );
+							 TapEvent     type );
 gint		g_synaptics_sensitivity                 (GSynaptics *synaptics);
 gboolean	g_synaptics_is_horizontal_scroll_enabled(GSynaptics *synaptics);
 gint		g_synaptics_horizontal_scroll_delta     (GSynaptics *synaptics);
@@ -91,7 +91,7 @@ gboolean	g_synaptics_is_circular_scroll_enabled  (GSynaptics *synaptics);
 gint		g_synaptics_circular_scroll_delta       (GSynaptics *synaptics);
 ScrollTrigger	g_synaptics_circular_scroll_trigger     (GSynaptics *synaptics);
 Button		g_synaptics_button_for_tap              (GSynaptics *synaptics,
-							 TapType     tap );
+							 TapEvent    tap );
 gboolean	g_synaptics_are_fast_taps_enabled       (GSynaptics *synaptics);
 gint		g_synaptics_abs_coord_x                 (GSynaptics *synaptics);
 gint		g_synaptics_abs_coord_y                 (GSynaptics *synaptics);
@@ -102,7 +102,7 @@ void		g_synaptics_set_edges                   (GSynaptics *synaptics);
 void		g_synaptics_set_tap_time                (GSynaptics *synaptics,
 							 gint        time);
 void		g_synaptics_set_tap_action              (GSynaptics *synaptics,
-							 TapType     type,
+							 TapEvent    type,
 							 int         action);
 void		g_synaptics_set_sensitivity             (GSynaptics *synaptics,
 							 gint        value);
@@ -127,7 +127,7 @@ void		g_synaptics_set_circular_scroll_delta   (GSynaptics *synaptics,
 void		g_synaptics_set_circular_scroll_trigger (GSynaptics *synaptics,
 							 ScrollTrigger t);
 void		g_synaptics_set_button_for_tap          (GSynaptics *synaptics,
-							 TapType     tap,
+							 TapEvent    tap,
 							 Button      button);
 void		g_synaptics_set_fast_taps               (GSynaptics *synaptics,
 							 gboolean    enable);
diff --git a/src/main.c b/src/main.c
index 71c1570..d0cc0dd 100644
--- a/src/main.c
+++ b/src/main.c
@@ -223,9 +223,9 @@ cb_tapping_toggled (GtkToggleButton *button, GladeXML *dialog)
 
 	g_synaptics_set_tap_time (synaptics, time);
         /* Default 1/2/3 finger tap settings */
-	g_synaptics_set_button_for_tap(synaptics, OneFinger, check ? 1 : 0);
-	g_synaptics_set_button_for_tap(synaptics, TwoFingers, check ? 3 : 0);
-	g_synaptics_set_button_for_tap(synaptics, ThreeFingers, check ? 2 : 0);
+	g_synaptics_set_button_for_tap(synaptics, F1_TAP, check ? 1 : 0);
+	g_synaptics_set_button_for_tap(synaptics, F2_TAP, check ? 3 : 0);
+	g_synaptics_set_button_for_tap(synaptics, F3_TAP, check ? 2 : 0);
 	gconf_client_set_int (gconf, MAXTAPTIME_KEY, time, NULL);
 }
 
diff --git a/src/synshm.h b/src/synshm.h
deleted file mode 100644
index 59ec0f4..0000000
--- a/src/synshm.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2004 by Stefan Kombrink <katakombi at web.de>              *
- *   Copyright (C) 2004 by Nadeem Hasan <nhasan at kde.org>                   *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
- 
-#ifndef _SYNSHM_H_
-#define _SYNSHM_H_
-
-#include <X11/Xdefs.h>
-
-/***************************************************************************
- * Public definitions (from Peter Osterlunds synaptics driver)
- ***************************************************************************/
-
-typedef enum
-{
-    RightTop = 0,               /* Right top corner */
-    RightBottom,                /* Right bottom corner */
-    LeftTop,                    /* Left top corner */
-    LeftBottom,                 /* Left bottom corner */
-    OneFinger,                  /* Non-corner tap, one finger */
-    TwoFingers,                 /* Non-corner tap, two fingers */
-    ThreeFingers,               /* Non-corner tap, three fingers */
-    MaxTap
-} TapType;
-
-struct SynapticsHwInfo
-{
-    unsigned int model_id;          /* Model-ID */
-    unsigned int capabilities;      /* Capabilities */
-    unsigned int ext_cap;           /* Extended Capabilities */
-    unsigned int identity;          /* Identification */
-    Bool hasGuest;                  /* Has a guest mouse */
-};
-
-// SHM Id
-#define SHM_SYNAPTICS 23947
-
-typedef struct _SynapticsSHM
-{
-    /* Current device state */
-    int x, y;                               /* actual x, y coordinates */
-    int z;                                  /* pressure value */
-    int numFingers;                         /* number of fingers */
-    int fingerWidth;                        /* finger width value */
-    int left, right, up, down;              /* left/right/up/down buttons */
-    Bool multi[8];
-    Bool middle;
-    int guest_left, guest_mid, guest_right; /* guest device buttons */
-    int guest_dx, guest_dy;                 /* guest device movement */
-
-    /* Probed hardware properties */
-    struct SynapticsHwInfo synhw;
-
-    /* Parameter data */
-    int left_edge, right_edge, top_edge, bottom_edge; /* edge coordinates absolute */
-    int finger_low, finger_high;                      /* finger detection values in Z-values */
-    unsigned long tap_time;
-    int tap_move;                                     /* max. tapping time and movement in packets and coord. */
-    unsigned long tap_time_2;           /* max. tapping time for double taps */
-    unsigned long click_time;           /* The duration of a single click */
-    Bool fast_taps;
-    int emulate_mid_button_time;        /* Max time between left and right button presses
-to
-                           emulate a middle button press. */
-    int scroll_dist_vert;               /* Scrolling distance in absolute coordinates */
-    int scroll_dist_horiz;              /* Scrolling distance in absolute coordinates */
-    double min_speed, max_speed, accl;  /* movement parameters */
-    int edge_motion_min_z;              /* finger pressure at which minimum edge motion speed
-is set */
-    int edge_motion_max_z;              /* finger pressure at which maximum edge motion speed
-is set */
-    int edge_motion_min_speed;          /* slowest setting for edge motion speed */
-    int edge_motion_max_speed;          /* fastest setting for edge motion speed */
-    Bool edge_motion_use_always;        /* If false, egde motion is used only when dragging */
-
-    Bool updown_button_scrolling;       /* Up/Down-Button scrolling or middle/double-click */
-    int touchpad_off;               /* Switches the touchpad off */
-    Bool guestmouse_off;            /* Switches the guest mouse off */
-    Bool locked_drags;              /* Enable locked drags */
-    int tap_action[MaxTap];         /* Button to report on tap events */
-    Bool circular_scrolling;        /* Enable circular scrolling */
-    double scroll_dist_circ;        /* Scrolling angle radians */
-    int circular_trigger;           /* Trigger area for circular scrolling */
-    Bool circular_pad;              /* Edge has an oval or circular shape */
-    Bool palm_detect;               /* Enable palm detection */
-    int palm_min_width;             /* Palm detection width */
-    int palm_min_z;                 /* Palm detection pressure */
-    double coasting_speed;          /* Coasting threshold scrolling speed */
-} SynapticsSHM;
-
-#endif
-- 
1.6.0.6


gsynaptics-0.9.14-fix-scrolling-checkboxes.patch:

--- NEW FILE gsynaptics-0.9.14-fix-scrolling-checkboxes.patch ---
>From 8071f04d537f39a0feeda90b24e72f29f2f17246 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri, 13 Mar 2009 09:47:02 +1000
Subject: [PATCH] Fix up edge scrolling checkboxes.

Edge scrolling toggling should set the Vert/HorizEdgeScroll property, not the
delta. And it should be stored in a separate gconf key, so the actual speed is
untouched when disabling it.
---
 src/gsynaptics-conf.h |    4 +++-
 src/gsynaptics.c      |   40 ++++++++++++++++++++++++++++++++++++++++
 src/gsynaptics.h      |    4 ++++
 src/main.c            |   25 ++++++-------------------
 4 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/src/gsynaptics-conf.h b/src/gsynaptics-conf.h
index 76999db..d2b8c17 100644
--- a/src/gsynaptics-conf.h
+++ b/src/gsynaptics-conf.h
@@ -28,6 +28,8 @@ G_BEGIN_DECLS
 #define MAXTAPTIME_KEY 		"/desktop/gnome/peripherals/touchpad/max_tap_time"
 #define HORIZSCROLLDELTA_KEY 	"/desktop/gnome/peripherals/touchpad/horiz_scroll_delta"
 #define VERTSCROLLDELTA_KEY 	"/desktop/gnome/peripherals/touchpad/vert_scroll_delta"
+#define VERTSCROLLENABLED_KEY 	"/desktop/gnome/peripherals/touchpad/vert_scroll_enabled"
+#define HORIZSCROLLENABLED_KEY 	"/desktop/gnome/peripherals/touchpad/horiz_scroll_enabled"
 #define EDGEMOTIONUSEALWAYS_KEY "/desktop/gnome/peripherals/touchpad/edge_motion_use_always"
 #define COASTENABLE_KEY 	"/desktop/gnome/peripherals/touchpad/coast_enable"
 #define CIRCULARSCROLLING_KEY 	"/desktop/gnome/peripherals/touchpad/circular_scrolling"
diff --git a/src/gsynaptics.c b/src/gsynaptics.c
index 37e6cb2..6f9b6a3 100644
--- a/src/gsynaptics.c
+++ b/src/gsynaptics.c
@@ -664,6 +664,46 @@ g_synaptics_set_sensitivity (GSynaptics *synaptics, gint value)
 }
 
 void
+g_synaptics_set_horizontal_scroll_enabled(GSynaptics *synaptics, gint enabled)
+{
+	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
+	if (!g_synaptics_is_valid(synaptics))
+		return;
+	if (priv->synclient)
+	{
+		gchar *command;
+		command = g_strdup_printf ("synclient HorizEdgeScroll=%d",
+					   enabled);
+		g_spawn_command_line_async (command, NULL);
+		g_free (command);
+	}
+	else
+	{
+		SYNSHM(synaptics)->scroll_edge_horiz = enabled;
+	}
+}
+
+void
+g_synaptics_set_vertical_scroll_enabled(GSynaptics *synaptics, gint enabled)
+{
+	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
+	if (!g_synaptics_is_valid(synaptics))
+		return;
+	if (priv->synclient)
+	{
+		gchar *command;
+		command = g_strdup_printf ("synclient VertEdgeScroll=%d",
+					   enabled);
+		g_spawn_command_line_async (command, NULL);
+		g_free (command);
+	}
+	else
+	{
+		SYNSHM(synaptics)->scroll_edge_vert = enabled;
+	}
+}
+
+void
 g_synaptics_set_horizontal_scroll_delta (GSynaptics *synaptics, gint delta)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
diff --git a/src/gsynaptics.h b/src/gsynaptics.h
index 11b8763..8fced65 100644
--- a/src/gsynaptics.h
+++ b/src/gsynaptics.h
@@ -106,6 +106,10 @@ void		g_synaptics_set_tap_action              (GSynaptics *synaptics,
 							 int         action);
 void		g_synaptics_set_sensitivity             (GSynaptics *synaptics,
 							 gint        value);
+void		g_synaptics_set_horizontal_scroll_enabled(GSynaptics *synaptics,
+							  gint enabled);
+void		g_synaptics_set_vertical_scroll_enabled	(GSynaptics *synaptics,
+							 gint enabled);
 void		g_synaptics_set_horizontal_scroll_delta (GSynaptics *synaptics,
 							 gint        delta);
 void		g_synaptics_set_vertical_scroll_delta   (GSynaptics *synaptics,
diff --git a/src/main.c b/src/main.c
index d0cc0dd..c7089f3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -136,22 +136,15 @@ cb_vertical_scroll_toggled (GtkToggleButton *button, GladeXML *dialog)
 	GtkWidget *widget;
 	GSynaptics *synaptics;
 	gboolean check;
-	gint value;
 
 	widget = WID ("vertical_scroll_box");
 	check = gtk_toggle_button_get_active (button);
 	gtk_widget_set_sensitive (widget, check);
 
-	widget = WID ("vertical_scroll_scale");
-	value = (gint) gtk_range_get_value (GTK_RANGE(widget));
-	
 	synaptics = g_object_get_qdata (G_OBJECT(dialog), synaptics_quark);
 
-	if (!check)
-		value = 0;
-
-	g_synaptics_set_vertical_scroll_delta (synaptics, value * -1);
-	gconf_client_set_int (gconf, VERTSCROLLDELTA_KEY, value * -1, NULL);
+        g_synaptics_set_vertical_scroll_enabled(synaptics, check);
+	gconf_client_set_int (gconf, VERTSCROLLENABLED_KEY, check, NULL);
 }
 
 static void
@@ -160,22 +153,16 @@ cb_horizontal_scroll_toggled (GtkToggleButton *button, GladeXML *dialog)
 	GtkWidget *widget;
 	GSynaptics *synaptics;
 	gboolean check;
-	gint value;
 
 	widget = WID ("horizontal_scroll_box");
 	check = gtk_toggle_button_get_active (button);
 	gtk_widget_set_sensitive (widget, check);
-	
-	widget = WID ("horizontal_scroll_scale");
-	value = (gint) gtk_range_get_value (GTK_RANGE(widget));
-	
-	synaptics = g_object_get_qdata (G_OBJECT(dialog), synaptics_quark);
 
-	if (!check)
-		value = 0;
 
-	g_synaptics_set_horizontal_scroll_delta (synaptics, value * -1);
-	gconf_client_set_int (gconf, HORIZSCROLLDELTA_KEY, value * -1, NULL);
+	synaptics = g_object_get_qdata (G_OBJECT(dialog), synaptics_quark);
+
+        g_synaptics_set_horizontal_scroll_enabled(synaptics, check);
+        gconf_client_set_int (gconf, HORIZSCROLLENABLED_KEY, check, NULL);
 }
 
 static void
-- 
1.6.0.6


gsynaptics-0.9.14-scrolling-checkboxes.patch:

--- NEW FILE gsynaptics-0.9.14-scrolling-checkboxes.patch ---
>From 216e4904913e709532e88e2030831d3b8d8b0c2f Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri, 13 Mar 2009 09:27:39 +1000
Subject: [PATCH] Set the scrolling checkboxes based on the Vert/HorizEdgeScroll property.

---
 src/gsynaptics.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gsynaptics.c b/src/gsynaptics.c
index 64755aa..3598c18 100644
--- a/src/gsynaptics.c
+++ b/src/gsynaptics.c
@@ -299,7 +299,7 @@ g_synaptics_is_horizontal_scroll_enabled (GSynaptics *synaptics)
 
 	if (priv->synclient)
 	{
-		return g_synaptics_get_value_from_synclient ("HorizScrollDelta") > 0;
+		return g_synaptics_get_value_from_synclient ("HorizEdgeScroll") > 0;
 	}
 	else
 	{
@@ -334,7 +334,7 @@ g_synaptics_is_vertical_scroll_enabled (GSynaptics *synaptics)
 	if (priv->synclient)
 	{
 
-		return g_synaptics_get_value_from_synclient ("VertScrollDelta") > 0;
+		return g_synaptics_get_value_from_synclient ("VertEdgeScroll") > 0;
 	}
 	else
 	{
-- 
1.6.0.6


gsynaptics-0.9.14-scrollmethods.patch:

--- NEW FILE gsynaptics-0.9.14-scrollmethods.patch ---
>From ed0ff114f059eab1c18e354b665fe858b5022301 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer at who-t.net>
Date: Wed, 1 Apr 2009 13:39:12 +1000
Subject: [PATCH] Add radiobuttons for twofinger/edge scrolling

---
 data/gsynaptics.glade |   74 +++++++++++++++++++++++++++++++++++++++-------
 src/gsynaptics-conf.h |    2 +-
 src/gsynaptics.c      |   78 ++++++++++++++++++++++++++++++++++++++++--------
 src/gsynaptics.h      |   12 +++++--
 src/main.c            |   54 ++++++++++++++++++++++++---------
 5 files changed, 176 insertions(+), 44 deletions(-)

diff --git a/data/gsynaptics.glade b/data/gsynaptics.glade
index c3fa58d..b8a7a13 100644
--- a/data/gsynaptics.glade
+++ b/data/gsynaptics.glade
@@ -558,16 +558,69 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="vertical_scroll_check">
+			    <widget class="GtkHBox" id="hbox29">
 			      <property name="visible">True</property>
-			      <property name="can_focus">True</property>
-			      <property name="label" translatable="yes">Enable _vertical scrolling</property>
-			      <property name="use_underline">True</property>
-			      <property name="relief">GTK_RELIEF_NORMAL</property>
-			      <property name="focus_on_click">True</property>
-			      <property name="active">False</property>
-			      <property name="inconsistent">False</property>
-			      <property name="draw_indicator">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="disable_scroll_radio">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">disabled</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">True</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkRadioButton" id="edge_scroll_radio">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">edge scrolling</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">disable_scroll_radio</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkRadioButton" id="twofinger_scroll_radio">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">two-finger scrolling</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">disable_scroll_radio</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
 			    </widget>
 			    <packing>
 			      <property name="padding">0</property>
diff --git a/src/gsynaptics-conf.h b/src/gsynaptics-conf.h
index 8dc788b..df58daf 100644
--- a/src/gsynaptics-conf.h
+++ b/src/gsynaptics-conf.h
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
 #define MAXTAPTIME_KEY 		"/desktop/gnome/peripherals/touchpad/max_tap_time"
 #define HORIZSCROLLDELTA_KEY 	"/desktop/gnome/peripherals/touchpad/horiz_scroll_delta"
 #define VERTSCROLLDELTA_KEY 	"/desktop/gnome/peripherals/touchpad/vert_scroll_delta"
-#define VERTSCROLLENABLED_KEY 	"/desktop/gnome/peripherals/touchpad/vert_scroll_enabled"
+#define SCROLLMETHOD_KEY 	"/desktop/gnome/peripherals/touchpad/scroll_method"
 #define HORIZSCROLLENABLED_KEY 	"/desktop/gnome/peripherals/touchpad/horiz_scroll_enabled"
 #define EDGEMOTIONUSEALWAYS_KEY "/desktop/gnome/peripherals/touchpad/edge_motion_use_always"
 #define COASTENABLE_KEY 	"/desktop/gnome/peripherals/touchpad/coast_enable"
diff --git a/src/gsynaptics.c b/src/gsynaptics.c
index 6f9b6a3..93706f5 100644
--- a/src/gsynaptics.c
+++ b/src/gsynaptics.c
@@ -299,11 +299,13 @@ g_synaptics_is_horizontal_scroll_enabled (GSynaptics *synaptics)
 
 	if (priv->synclient)
 	{
-		return g_synaptics_get_value_from_synclient ("HorizEdgeScroll") > 0;
+		return (g_synaptics_get_value_from_synclient("HorizEdgeScroll") ||
+		        g_synaptics_get_value_from_synclient("HorizTwoFingerScroll"));
 	}
 	else
 	{
-		return SYNSHM(synaptics)->scroll_dist_horiz > 0;
+		return SYNSHM(synaptics)->scroll_edge_horiz ||
+                    SYNSHM(synaptics)->scroll_twofinger_horiz;
 	}
 }
 
@@ -324,22 +326,33 @@ g_synaptics_horizontal_scroll_delta (GSynaptics *synaptics)
 	}
 }
 
-gboolean
-g_synaptics_is_vertical_scroll_enabled (GSynaptics *synaptics)
+ScrollMethod
+g_synaptics_get_scroll_method (GSynaptics *synaptics)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
+	gboolean edge = 0, twofinger = 0;
+
 	if (!g_synaptics_is_valid(synaptics))
-		return FALSE;
+		return ScrollingDisabled;
 
 	if (priv->synclient)
 	{
-
-		return g_synaptics_get_value_from_synclient ("VertEdgeScroll") > 0;
+		edge = g_synaptics_get_value_from_synclient ("VertEdgeScroll");
+		twofinger = g_synaptics_get_value_from_synclient ("VertTwoFingerScroll");
 	}
 	else
 	{
-		return SYNSHM(synaptics)->scroll_dist_vert > 0;
+		edge = SYNSHM(synaptics)->scroll_edge_vert;
+		twofinger = SYNSHM(synaptics)->scroll_twofinger_vert;
 	}
+
+        if (edge)
+            return EdgeScrolling;
+
+        if (twofinger)
+            return TwoFingerScrolling;
+
+        return ScrollingDisabled;
 }
 
 gint
@@ -667,40 +680,79 @@ void
 g_synaptics_set_horizontal_scroll_enabled(GSynaptics *synaptics, gint enabled)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
+	gboolean edge = 0, twofinger = 0;
+
 	if (!g_synaptics_is_valid(synaptics))
 		return;
+
+	switch (g_synaptics_get_scroll_method (synaptics))
+	{
+	    case EdgeScrolling: edge = 1; break;
+	    case TwoFingerScrolling: twofinger = 1; break;
+	    default:
+		 break;
+	}
+
 	if (priv->synclient)
 	{
 		gchar *command;
 		command = g_strdup_printf ("synclient HorizEdgeScroll=%d",
-					   enabled);
+					   edge && enabled);
+		g_spawn_command_line_async (command, NULL);
+		g_free (command);
+
+		command = g_strdup_printf ("synclient HorizTwoFingerScroll=%d",
+					   twofinger && enabled);
 		g_spawn_command_line_async (command, NULL);
 		g_free (command);
 	}
 	else
 	{
-		SYNSHM(synaptics)->scroll_edge_horiz = enabled;
+		SYNSHM(synaptics)->scroll_edge_horiz = edge && enabled;
+		SYNSHM(synaptics)->scroll_twofinger_horiz = twofinger &&
+		    enabled;
 	}
 }
 
 void
-g_synaptics_set_vertical_scroll_enabled(GSynaptics *synaptics, gint enabled)
+g_synaptics_set_scroll_method (GSynaptics *synaptics, ScrollMethod method)
 {
 	GSynapticsPrivate *priv = G_SYNAPTICS_GET_PRIVATE (synaptics);
+	gboolean edge = 0, twofinger = 0;
+
 	if (!g_synaptics_is_valid(synaptics))
 		return;
+
+	switch(method)
+	{
+	    case EdgeScrolling:         edge = 1; break;
+	    case TwoFingerScrolling:    twofinger = 1; break;
+	    default:
+		break;
+	}
+
 	if (priv->synclient)
 	{
 		gchar *command;
+
 		command = g_strdup_printf ("synclient VertEdgeScroll=%d",
-					   enabled);
+					   edge);
+		g_spawn_command_line_async (command, NULL);
+		g_free (command);
+
+		command = g_strdup_printf ("synclient VertTwoFingerScroll=%d",
+					   twofinger);
 		g_spawn_command_line_async (command, NULL);
 		g_free (command);
 	}
 	else
 	{
-		SYNSHM(synaptics)->scroll_edge_vert = enabled;
+		SYNSHM(synaptics)->scroll_edge_vert = edge;
+		SYNSHM(synaptics)->scroll_twofinger_vert = twofinger;
 	}
+
+		g_synaptics_set_horizontal_scroll_enabled(synaptics,
+		g_synaptics_is_horizontal_scroll_enabled(synaptics));
 }
 
 void
diff --git a/src/gsynaptics.h b/src/gsynaptics.h
index 8fced65..30bb3af 100644
--- a/src/gsynaptics.h
+++ b/src/gsynaptics.h
@@ -58,6 +58,12 @@ typedef enum
 	TopLeftCorner
 } ScrollTrigger;
 
+typedef enum {
+    ScrollingDisabled = 0,
+    EdgeScrolling = 1,
+    TwoFingerScrolling = 2
+} ScrollMethod;
+
 typedef enum
 {
 	None=0,
@@ -80,7 +86,7 @@ gint		g_synaptics_tap_action                  (GSynaptics *synaptics,
 gint		g_synaptics_sensitivity                 (GSynaptics *synaptics);
 gboolean	g_synaptics_is_horizontal_scroll_enabled(GSynaptics *synaptics);
 gint		g_synaptics_horizontal_scroll_delta     (GSynaptics *synaptics);
-gboolean	g_synaptics_is_vertical_scroll_enabled  (GSynaptics *synaptics);
+ScrollMethod	g_synaptics_get_scroll_method		(GSynaptics *synaptics);
 gint		g_synaptics_vertical_scroll_delta       (GSynaptics *synaptics);
 gboolean	g_synaptics_is_edge_motion_enabled      (GSynaptics *synaptics);
 gboolean	g_synaptics_is_coasting_enabled         (GSynaptics *synaptics);
@@ -108,8 +114,8 @@ void		g_synaptics_set_sensitivity             (GSynaptics *synaptics,
 							 gint        value);
 void		g_synaptics_set_horizontal_scroll_enabled(GSynaptics *synaptics,
 							  gint enabled);
-void		g_synaptics_set_vertical_scroll_enabled	(GSynaptics *synaptics,
-							 gint enabled);
+void		g_synaptics_set_scroll_method		(GSynaptics *synaptics,
+							 ScrollMethod method);
 void		g_synaptics_set_horizontal_scroll_delta (GSynaptics *synaptics,
 							 gint        delta);
 void		g_synaptics_set_vertical_scroll_delta   (GSynaptics *synaptics,
diff --git a/src/main.c b/src/main.c
index c7089f3..fbbb19b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -131,20 +131,30 @@ cb_touchpad_toggled (GtkToggleButton *button, GladeXML *dialog)
 }
 
 static void
-cb_vertical_scroll_toggled (GtkToggleButton *button, GladeXML *dialog)
+rd_scroll_method_toggled (GtkToggleButton *button, GladeXML *dialog)
 {
 	GtkWidget *widget;
 	GSynaptics *synaptics;
-	gboolean check;
-
-	widget = WID ("vertical_scroll_box");
-	check = gtk_toggle_button_get_active (button);
-	gtk_widget_set_sensitive (widget, check);
+	ScrollMethod method = ScrollingDisabled;
+
+	widget = WID ("twofinger_scroll_radio");
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)))
+	    method = TwoFingerScrolling;
+	else {
+	    widget = WID("edge_scroll_radio");
+	    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+		method = EdgeScrolling;
+	}
 
 	synaptics = g_object_get_qdata (G_OBJECT(dialog), synaptics_quark);
 
-        g_synaptics_set_vertical_scroll_enabled(synaptics, check);
-	gconf_client_set_int (gconf, VERTSCROLLENABLED_KEY, check, NULL);
+	g_synaptics_set_scroll_method(synaptics, method);
+	gconf_client_set_int (gconf, SCROLLMETHOD_KEY, method, NULL);
+
+	widget = WID("horizontal_scroll_check");
+	gtk_widget_set_sensitive(widget, (method != ScrollingDisabled));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
+		g_synaptics_is_horizontal_scroll_enabled(synaptics));
 }
 
 static void
@@ -517,7 +527,7 @@ setup_dialog (GladeXML *dialog)
 {
 	GdkPixbuf *icon_pixbuf = NULL;
 	GtkWidget *widget, *button;
-	GtkWidget *check, *scale;
+	GtkWidget *check, *scale, *radio;
 	GSynaptics *synaptics;
 	
 	gchar *path;
@@ -571,12 +581,25 @@ setup_dialog (GladeXML *dialog)
 	g_signal_connect (G_OBJECT (scale), "change-value",
 			  G_CALLBACK (cb_vertical_scroll_change), dialog);
 
-	check = WID ("vertical_scroll_check");
-	value = g_synaptics_is_vertical_scroll_enabled (synaptics);
-	g_signal_connect (G_OBJECT (check), "toggled",
-			  G_CALLBACK (cb_vertical_scroll_toggled), dialog);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
-	    			      value);
+	value = g_synaptics_get_scroll_method(synaptics);
+
+	radio = WID ("disable_scroll_radio");
+	g_signal_connect (G_OBJECT (radio), "toggled",
+			  G_CALLBACK (rd_scroll_method_toggled), dialog);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio),
+				      value == ScrollingDisabled);
+
+	radio = WID ("twofinger_scroll_radio");
+	g_signal_connect (G_OBJECT (radio), "toggled",
+			  G_CALLBACK (rd_scroll_method_toggled), dialog);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio),
+				      value == TwoFingerScrolling);
+
+	radio = WID ("edge_scroll_radio");
+	g_signal_connect (G_OBJECT (radio), "toggled",
+			  G_CALLBACK (rd_scroll_method_toggled), dialog);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio),
+				      value == EdgeScrolling);
 
 	scale = WID ("horizontal_scroll_scale");
 	num = g_synaptics_horizontal_scroll_delta (synaptics);
@@ -585,6 +608,7 @@ setup_dialog (GladeXML *dialog)
 			  G_CALLBACK (cb_horizontal_scroll_change), dialog);
 
 	check = WID ("horizontal_scroll_check");
+	gtk_widget_set_sensitive(check, (value != ScrollingDisabled));
 	value = g_synaptics_is_horizontal_scroll_enabled (synaptics);
 	g_signal_connect (G_OBJECT (check), "toggled",
 			  G_CALLBACK (cb_horizontal_scroll_toggled), dialog);
-- 
1.6.0.6



Index: gsynaptics.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gsynaptics/devel/gsynaptics.spec,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- gsynaptics.spec	28 Feb 2009 23:51:50 -0000	1.20
+++ gsynaptics.spec	2 Apr 2009 00:34:30 -0000	1.21
@@ -1,6 +1,6 @@
 Name:           gsynaptics
 Version:        0.9.14
-Release:        4%{?dist}
+Release:        5%{?dist}
 Summary:        Settings tool for Synaptics touchpad driver
 
 Group:          Applications/System
@@ -12,9 +12,14 @@
 Patch0:         gsynaptics-0.9.14-dot-fixes.patch
 Patch1:         gsynaptics-0.9.14-do-not-set-zero.patch
 Patch2:         gsynaptics-0.9.14-pixmap.patch
+# 3 4 5 are merged upstream
 Patch3:         gsynaptics-0.9.14-fix-tap-statecheck.patch
 Patch4:         gsynaptics-0.9.14-enable-tapping.patch
 Patch5:         gsynaptics-0.9.14-dont-reset-taptime.patch
+Patch6:         gsynaptics-0.9.14-scrolling-checkboxes.patch
+Patch7:         gsynaptics-0.9.14-driver-header.patch
+Patch8:         gsynaptics-0.9.14-fix-scrolling-checkboxes.patch
+Patch9:         gsynaptics-0.9.14-scrollmethods.patch
 
 Source1:        %{name}-touchpad.png
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -24,8 +29,10 @@
 BuildRequires:  libglade2-devel
 BuildRequires:  desktop-file-utils gettext
 BuildRequires:  gnome-doc-utils
+BuildRequires:  xorg-x11-drv-synaptics-devel
+BuildRequires:  libtool pkgconfig intltool
 
-Requires:       synaptics
+Requires:       xorg-x11-drv-synaptics
 
 # Use ExclusiveArch just as synaptics does; see
 # http://cvs.fedora.redhat.com/viewcvs/rpms/synaptics/devel/synaptics.spec?root=extras&view=markup
@@ -49,8 +56,13 @@
 %patch3 -p1 -b .tap-checkbox
 %patch4 -p1 -b .tapping
 %patch5 -p1 -b .taptime
+%patch6 -p1 -b .scrl-chkbx
+%patch7 -p1 -b .header
+%patch8 -p1 -b .scrl-chkbx-fix
+%patch9 -p1 -b .scrollmethods
 
 %build
+autoreconf -v --install --force || exit 1
 %configure
 make %{?_smp_mflags}
 
@@ -91,6 +103,18 @@
 
 
 %changelog
+* Mon Apr 2 2009 Peter Hutterer <peter.hutterer at redhat.com> - 0.9.14-5
+- gsynaptics-0.9.14-scrolling-checkboxes.patch: set checkboxes based on the
+  scrolling enabled/disabled property, not on the delta.
+- gsynaptics-0.9.14-driver-header.patch: use the driver's header file instead
+  of a custom synshm.h.
+- Require xorg-x11-drv-synaptics now that we use the driver header, and force
+  an autoreconf to include it properly.
+- gsynaptics-0.9.14-fix-scrolling-checkboxes.patch: fix scrolling
+  enabled/disabled checkboxes
+- gsynaptics-0.9.14-scrollmethod.patch: provide radiobuttons instead
+  of a checkbox for scrolling methods.
+
 * Sun Mar 01 2009 Peter Hutterer <peter.hutterer at redhat.com> - 0.9.14-4
 - gsynaptics-0.9.14-fix-tap-statecheck.patch: fix check for tapping enabled or
   disabled, should take TapButton1 into account.




More information about the scm-commits mailing list