gpointing-device-settings r192 - in trunk: . data modules modules/common modules/gnome-settings-daemon-plugins



Author: hiikezoe
Date: Mon Mar  9 06:55:34 2009
New Revision: 192
URL: http://svn.gnome.org/viewvc/gpointing-device-settings?rev=192&view=rev

Log:
two finger scrolling support.

Modified:
   trunk/NEWS
   trunk/data/touchpad.ui.in
   trunk/modules/common/gpds-touchpad-definitions.h
   trunk/modules/gnome-settings-daemon-plugins/gsd-touchpad-manager.c
   trunk/modules/gpds-touchpad-ui.c

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Mon Mar  9 06:55:34 2009
@@ -1,11 +1,19 @@
 ============================
+GPointinDeviceSettings 1.0.1
+============================
+
+* Touchpad
+ - Continuous edge scrolling on/off
+ - Two finger scrolling on/off
+
+============================
 GPointinDeviceSettings 1.0.0
 ============================
 
 * Overrall 
  - Try to show all XExtensionPointer
  - Unify plugins for gnome-settings-daemon
-* Touchpad
+* TrackPoint
  - Wheel emulation button support
 
 ============================

Modified: trunk/data/touchpad.ui.in
==============================================================================
--- trunk/data/touchpad.ui.in	(original)
+++ trunk/data/touchpad.ui.in	Mon Mar  9 06:55:34 2009
@@ -890,6 +890,42 @@
                             <property name="fill">True</property>
                           </packing>
                         </child>
+                        <child>
+                          <object class="GtkCheckButton" id="two_finger_vertical_scrolling">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Enable vertical scrolling when dragging with two fingers</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>
+                          </object>
+                          <packing>
+                            <property name="padding">0</property>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkCheckButton" id="two_finger_horizontal_scrolling">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Enable horizontal scrolling when dragging with two fingers</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>
+                          </object>
+                          <packing>
+                            <property name="padding">0</property>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                          </packing>
+                        </child>
                       </object>
                     </child>
                   </object>

Modified: trunk/modules/common/gpds-touchpad-definitions.h
==============================================================================
--- trunk/modules/common/gpds-touchpad-definitions.h	(original)
+++ trunk/modules/common/gpds-touchpad-definitions.h	Mon Mar  9 06:55:34 2009
@@ -20,19 +20,21 @@
 #ifndef __GPDS_TOUCHPAD_GCONF_H__
 #define __GPDS_TOUCHPAD_GCONF_H__
 
-#define GPDS_TOUCHPAD_EDGES_KEY                         "edges"
-#define GPDS_TOUCHPAD_FINGER_KEY                        "finger"
-#define GPDS_TOUCHPAD_OFF_KEY                           "off"
-#define GPDS_TOUCHPAD_TAP_TIME_KEY                      "tap_time"
-#define GPDS_TOUCHPAD_TAP_FAST_TAP_KEY                  "tap_fast_tap"
-#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY "horizontal_scrolling_distance"
-#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY          "horizontal_scrolling"
-#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY   "vertical_scrolling_distance"
-#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY            "vertical_scrolling"
-#define GPDS_TOUCHPAD_CONTINUOUS_EDGE_SCROLLING_KEY     "continuous_edge_scrolling"
-#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_KEY            "circular_scrolling"
-#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_DISTANCE_KEY   "circular_scrolling_distance"
-#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_TRIGGER_KEY    "circular_scrolling_trigger"
+#define GPDS_TOUCHPAD_EDGES_KEY                           "edges"
+#define GPDS_TOUCHPAD_FINGER_KEY                          "finger"
+#define GPDS_TOUCHPAD_OFF_KEY                             "off"
+#define GPDS_TOUCHPAD_TAP_TIME_KEY                        "tap_time"
+#define GPDS_TOUCHPAD_TAP_FAST_TAP_KEY                    "tap_fast_tap"
+#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY   "horizontal_scrolling_distance"
+#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY            "horizontal_scrolling"
+#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY     "vertical_scrolling_distance"
+#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY              "vertical_scrolling"
+#define GPDS_TOUCHPAD_TWO_FINGER_VERTICAL_SCROLLING_KEY   "two_finger_vertical_scrolling"
+#define GPDS_TOUCHPAD_TWO_FINGER_HORIZONTAL_SCROLLING_KEY "two_finger_horizontal_scrolling"
+#define GPDS_TOUCHPAD_CONTINUOUS_EDGE_SCROLLING_KEY       "continuous_edge_scrolling"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_KEY              "circular_scrolling"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_DISTANCE_KEY     "circular_scrolling_distance"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_TRIGGER_KEY      "circular_scrolling_trigger"
 
 #endif /* __GPDS_TOUCHPAD_GCONF_H__ */
 /*

Modified: trunk/modules/gnome-settings-daemon-plugins/gsd-touchpad-manager.c
==============================================================================
--- trunk/modules/gnome-settings-daemon-plugins/gsd-touchpad-manager.c	(original)
+++ trunk/modules/gnome-settings-daemon-plugins/gsd-touchpad-manager.c	Mon Mar  9 06:55:34 2009
@@ -134,6 +134,30 @@
 }
 
 static void
+set_two_finger_scrolling (GsdPointingDeviceManager *manager,
+                          GpdsXInput *xinput,
+                          GConfClient *gconf)
+{
+    gboolean h_enable, v_enable;
+    gint properties[2];
+
+    if (!gpds_gconf_get_boolean(gconf, GPDS_TOUCHPAD_TWO_FINGER_VERTICAL_SCROLLING_KEY, &v_enable))
+        return;
+    if (!gpds_gconf_get_boolean(gconf, GPDS_TOUCHPAD_TWO_FINGER_HORIZONTAL_SCROLLING_KEY, &h_enable))
+        return;
+
+    properties[0] = v_enable ? 1 : 0;
+    properties[1] = h_enable ? 1 : 0;
+
+    gpds_xinput_set_int_properties(xinput,
+                                   gpds_touchpad_xinput_get_name(GPDS_TOUCHPAD_TWO_FINGER_SCROLLING),
+                                   gpds_touchpad_xinput_get_format_type(GPDS_TOUCHPAD_TWO_FINGER_SCROLLING),
+                                   NULL,
+                                   properties,
+                                   2);
+}
+
+static void
 set_horizontal_and_vertical_scrolling_distance (GsdPointingDeviceManager *manager,
                                                 GpdsXInput *xinput,
                                                 GConfClient *gconf)
@@ -180,6 +204,7 @@
     set_horizontal_and_vertical_scrolling_distance(manager, xinput, gconf);
     set_circular_scrolling(manager, xinput, gconf);
     set_circular_scrolling_trigger(manager, xinput, gconf);
+    set_two_finger_scrolling(manager, xinput, gconf);
 
     g_object_unref(gconf);
     g_object_unref(xinput);
@@ -219,6 +244,9 @@
                    !strcmp(key, GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY) ||
                    !strcmp(key, GPDS_TOUCHPAD_CONTINUOUS_EDGE_SCROLLING_KEY)) {
             set_edge_scrolling(manager, xinput, client);
+        } else if (!strcmp(key, GPDS_TOUCHPAD_TWO_FINGER_VERTICAL_SCROLLING_KEY) ||
+                   !strcmp(key, GPDS_TOUCHPAD_TWO_FINGER_HORIZONTAL_SCROLLING_KEY)) {
+            set_two_finger_scrolling(manager, xinput, client);
         }
         break;
     case GCONF_VALUE_INT:

Modified: trunk/modules/gpds-touchpad-ui.c
==============================================================================
--- trunk/modules/gpds-touchpad-ui.c	(original)
+++ trunk/modules/gpds-touchpad-ui.c	Mon Mar  9 06:55:34 2009
@@ -164,7 +164,7 @@
 }
 
 static void
-set_edge_scroll_toggle_property (GpdsXInput *xinput, GtkBuilder *builder)
+set_edge_scrolling_toggle_property (GpdsXInput *xinput, GtkBuilder *builder)
 {
     GError *error = NULL;
     GObject *object;
@@ -195,6 +195,35 @@
 }
 
 static void
+set_two_finger_scrolling_toggle_property (GpdsXInput *xinput, GtkBuilder *builder)
+{
+    GError *error = NULL;
+    GObject *object;
+    gint properties[2];
+
+    object = gtk_builder_get_object(builder, "two_finger_vertical_scrolling");
+    properties[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)) ? 1 :0;
+
+    object = gtk_builder_get_object(builder, "two_finger_horizontal_scrolling");
+    properties[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)) ? 1 :0;
+
+    object = gtk_builder_get_object(builder, "continuous_edge_scrolling");
+    properties[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)) ? 1 :0;
+
+    if (!gpds_xinput_set_int_properties(xinput,
+                                        gpds_touchpad_xinput_get_name(GPDS_TOUCHPAD_TWO_FINGER_SCROLLING),
+                                        gpds_touchpad_xinput_get_format_type(GPDS_TOUCHPAD_TWO_FINGER_SCROLLING),
+                                        &error,
+                                        properties,
+                                        2)) {
+        if (error) {
+            show_error(error);
+            g_error_free(error);
+        }
+    }
+}
+
+static void
 set_range_property (GpdsXInput *xinput, GtkRange *range, GpdsTouchpadProperty property)
 {
     GError *error = NULL;
@@ -301,36 +330,6 @@
 }
 
 static void
-cb_vertical_scrolling_toggled (GtkToggleButton *button, gpointer user_data)
-{
-    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
-    GtkBuilder *builder;
-    gboolean check;
-
-    builder = gpds_ui_get_builder(GPDS_UI(user_data));
-
-    set_edge_scroll_toggle_property(ui->xinput, builder);
-
-    check = gtk_toggle_button_get_active(button);
-    gpds_ui_set_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY, check);
-}
-
-static void
-cb_horizontal_scrolling_toggled (GtkToggleButton *button, gpointer user_data)
-{
-    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
-    GtkBuilder *builder;
-    gboolean check;
-
-    builder = gpds_ui_get_builder(GPDS_UI(user_data));
-
-    set_edge_scroll_toggle_property(ui->xinput, builder);
-
-    check = gtk_toggle_button_get_active(button);
-    gpds_ui_set_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY, check);
-}
-
-static void
 cb_vertical_scrolling_scale_value_changed (GtkRange *range, gpointer user_data)
 {
     GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
@@ -360,21 +359,41 @@
     gpds_ui_set_gconf_int(GPDS_UI(ui), GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY, (gint)distance);
 }
 
-static void
-cb_continuous_edge_scrolling_toggled (GtkToggleButton *button, gpointer user_data)
-{
-    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
-    GtkBuilder *builder;
-    gboolean check;
-
-    builder = gpds_ui_get_builder(GPDS_UI(user_data));
-
-    set_edge_scroll_toggle_property(ui->xinput, builder);
-
-    check = gtk_toggle_button_get_active(button);
-    gpds_ui_set_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_CONTINUOUS_EDGE_SCROLLING_KEY, check);
+#define DEFINE_EDGE_SCROLLING_CALLBACK(type, TYPE)                                          \
+static void                                                                                 \
+cb_ ## type ## _scrolling_toggled (GtkToggleButton *button,                                 \
+                                   gpointer user_data)                                      \
+{                                                                                           \
+    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);                                       \
+    GtkBuilder *builder;                                                                    \
+    gboolean check;                                                                         \
+    builder = gpds_ui_get_builder(GPDS_UI(user_data));                                      \
+    set_edge_scrolling_toggle_property(ui->xinput, builder);                                \
+    check = gtk_toggle_button_get_active(button);                                           \
+    gpds_ui_set_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_ ## TYPE ## _SCROLLING_KEY, check);   \
+}
+
+DEFINE_EDGE_SCROLLING_CALLBACK(vertical, VERTICAL)
+DEFINE_EDGE_SCROLLING_CALLBACK(horizontal, HORIZONTAL)
+DEFINE_EDGE_SCROLLING_CALLBACK(continuous_edge, CONTINUOUS_EDGE)
+
+#define DEFINE_TWO_FINGER_SCROLLING_CALLBACK(direction, DIRECTION)                                          \
+static void                                                                                                 \
+cb_two_finger_ ## direction ## _scrolling_toggled (GtkToggleButton *button,                                 \
+                                                   gpointer user_data)                                      \
+{                                                                                                           \
+    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);                                                       \
+    GtkBuilder *builder;                                                                                    \
+    gboolean check;                                                                                         \
+    builder = gpds_ui_get_builder(GPDS_UI(user_data));                                                      \
+    set_two_finger_scrolling_toggle_property(ui->xinput, builder);                                          \
+    check = gtk_toggle_button_get_active(button);                                                           \
+    gpds_ui_set_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_TWO_FINGER_ ## DIRECTION ## _SCROLLING_KEY, check);   \
 }
 
+DEFINE_TWO_FINGER_SCROLLING_CALLBACK(vertical, VERTICAL)
+DEFINE_TWO_FINGER_SCROLLING_CALLBACK(horizontal, HORIZONTAL)
+
 static void
 set_circular_scrolling_trigger_button_state (GpdsTouchpadUI *ui, 
                                              GpdsTouchpadCircularScrollingTrigger trigger)
@@ -536,6 +555,8 @@
     CONNECT(vertical_scrolling_scale, value_changed);
     CONNECT(horizontal_scrolling, toggled);
     CONNECT(horizontal_scrolling_scale, value_changed);
+    CONNECT(two_finger_vertical_scrolling, toggled);
+    CONNECT(two_finger_horizontal_scrolling, toggled);
 
     /* cirlular scrolling trigger */
     CONNECT(trigger_top_toggle, button_press_event);
@@ -623,8 +644,8 @@
 }
 
 static void
-set_edge_scroll_property_from_preference (GpdsTouchpadUI *ui,
-                                          GtkBuilder *builder)
+set_edge_scrolling_property_from_preference (GpdsTouchpadUI *ui,
+                                             GtkBuilder *builder)
 {
     GObject *object;
     gint *values;
@@ -662,6 +683,38 @@
 }
 
 static void
+set_two_finger_scrolling_property_from_preference (GpdsTouchpadUI *ui,
+                                                   GtkBuilder *builder)
+{
+    GObject *object;
+    gint *values;
+    gulong n_values;
+    gboolean enable;
+
+    if (!get_integer_properties(ui->xinput, GPDS_TOUCHPAD_TWO_FINGER_SCROLLING,
+                                &values, &n_values)) {
+        return;
+    }
+
+    if (n_values != 2) {
+        g_free(values);
+        return;
+    }
+
+    if (!gpds_ui_get_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_TWO_FINGER_VERTICAL_SCROLLING_KEY, &enable))
+        enable = (values[0] == 1);
+    object = gtk_builder_get_object(builder, "two_finger_vertical_scrolling");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(object), enable);
+
+    if (!gpds_ui_get_gconf_bool(GPDS_UI(ui), GPDS_TOUCHPAD_TWO_FINGER_HORIZONTAL_SCROLLING_KEY, &enable))
+        enable = (values[0] == 1);
+    object = gtk_builder_get_object(builder, "two_finger_horizontal_scrolling");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(object), enable);
+
+    g_free(values);
+}
+
+static void
 set_scroll_distance_property_from_preference (GpdsTouchpadUI *ui,
                                               GtkBuilder *builder)
 {
@@ -767,9 +820,10 @@
                                          builder,
                                          "faster_tapping_check");
     set_circular_scrolling_property_from_preference(touchpad_ui, builder);
-    set_edge_scroll_property_from_preference(touchpad_ui, builder);
+    set_edge_scrolling_property_from_preference(touchpad_ui, builder);
     set_scroll_distance_property_from_preference(touchpad_ui, builder);
     set_circular_scrolling_trigger_property_from_preference(touchpad_ui, builder);
+    set_two_finger_scrolling_property_from_preference(touchpad_ui, builder);
 
     set_touchpad_use_type_property_from_preference(touchpad_ui, builder);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]