gpointing-device-settings r106 - in trunk: data modules modules/common



Author: hiikezoe
Date: Tue Mar  3 03:37:18 2009
New Revision: 106
URL: http://svn.gnome.org/viewvc/gpointing-device-settings?rev=106&view=rev

Log:
Implement touchpad on/off feature.

Modified:
   trunk/data/touchpad.ui.in
   trunk/modules/common/gpds-touchpad-xinput.h
   trunk/modules/gpds-touchpad-ui.c

Modified: trunk/data/touchpad.ui.in
==============================================================================
--- trunk/data/touchpad.ui.in	(original)
+++ trunk/data/touchpad.ui.in	Tue Mar  3 03:37:18 2009
@@ -95,6 +95,85 @@
         <property name="scrollable">False</property>
         <property name="enable_popup">False</property>
         <child>
+          <object class="GtkVBox" id="general_vbox">
+            <property name="border_width">12</property>
+            <property name="visible">True</property>
+            <property name="homogeneous">False</property>
+            <property name="spacing">12</property>
+            <child>
+              <object class="GtkFrame" id="general_frame">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="label_yalign">0.5</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <object class="GtkListStore" id="general_use_list_store">
+                    <columns>
+                      <column type="gint"/>
+                      <column type="gchararray"/>
+                    </columns>
+                    <data>
+                       <row>
+                         <col id="0">1</col>
+                         <col id="1">Touchpad on</col>
+                       </row>
+                       <row>
+                         <col id="0">2</col>
+                         <col id="1">Touchpad off</col>
+                       </row>
+                       <row>
+                         <col id="0">3</col>
+                         <col id="1">Touchpad uses only for moving cursor</col>
+                       </row>
+                    </data>
+                  </object>
+                  <object class="GtkComboBox" id="general_use">
+                    <property name="visible">True</property>
+                    <property name="model">general_use_list_store</property>
+                    <property name="can_focus">True</property>
+                    <property name="focus_on_click">True</property>
+                    <property name="active">0</property>
+                    <child>
+                      <object class="GtkCellRendererText" id="touchpad_use_type"/>
+                      <attributes>
+                        <attribute name="text">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="padding">0</property>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="tab_expand">False</property>
+            <property name="tab_fill">True</property>
+          </packing>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">General</property>
+            <property name="use_underline">False</property>
+            <property name="use_markup">False</property>
+            <property name="justify">GTK_JUSTIFY_CENTER</property>
+            <property name="wrap">False</property>
+            <property name="selectable">False</property>
+            <property name="xalign">0.5</property>
+            <property name="yalign">0.5</property>
+            <property name="xpad">0</property>
+            <property name="ypad">0</property>
+            <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+            <property name="width_chars">-1</property>
+            <property name="single_line_mode">False</property>
+            <property name="angle">0</property>
+          </object>
+        </child>
+        <child>
           <object class="GtkVBox" id="tapping_vbox">
             <property name="border_width">12</property>
             <property name="visible">True</property>

Modified: trunk/modules/common/gpds-touchpad-xinput.h
==============================================================================
--- trunk/modules/common/gpds-touchpad-xinput.h	(original)
+++ trunk/modules/common/gpds-touchpad-xinput.h	Tue Mar  3 03:37:18 2009
@@ -68,6 +68,12 @@
     GPDS_TOUCHPAD_CIRCULAR_SCROLLING_TRIGGER_LEFT_TOP
 } GpdsTouchpadCircularScrollingTrigger;
 
+typedef enum {
+    GPDS_TOUCHPAD_USE_TYPE_NORMAL,
+    GPDS_TOUCHPAD_USE_TYPE_OFF,
+    GPDS_TOUCHPAD_USE_TYPE_CURSOR_MOVE_ONLY,
+} GpdsTouchpadUseType;
+
 typedef struct _GpdsTouchpadXInputProperty GpdsTouchpadXInputProperty;
 struct _GpdsTouchpadXInputProperty
 {

Modified: trunk/modules/gpds-touchpad-ui.c
==============================================================================
--- trunk/modules/gpds-touchpad-ui.c	(original)
+++ trunk/modules/gpds-touchpad-ui.c	Tue Mar  3 03:37:18 2009
@@ -287,11 +287,8 @@
 cb_tapping_time_scale_value_changed (GtkRange *range, gpointer user_data)
 {
     GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
-    GtkBuilder *builder;
     gdouble time;
 
-    builder = gpds_ui_get_builder(GPDS_UI(user_data));
-
     set_range_property(ui->xinput, range, GPDS_TOUCHPAD_TAP_TIME);
 
     time = gtk_range_get_value(range);
@@ -302,11 +299,8 @@
 cb_faster_tapping_check_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_toggle_property(ui->xinput, button, GPDS_TOUCHPAD_TAP_FAST_TAP);
     check = gtk_toggle_button_get_active(button);
     gconf_client_set_bool(ui->gconf, GPDS_TOUCHPAD_TAP_FAST_TAP_KEY, check, NULL);
@@ -471,6 +465,41 @@
 #undef DEFINE_CIRCULAR_SCROLLING_TRIGGER_CALLBACK
 
 static void
+set_touchpad_use_type_combo_state (GpdsTouchpadUI *ui, 
+                                   GpdsTouchpadUseType use_type)
+{
+    GtkComboBox *combo;
+    GtkBuilder *builder;
+
+    builder = gpds_ui_get_builder(GPDS_UI(ui));
+
+    combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "touchpad_use_type"));
+    gtk_combo_box_set_active(combo, (gint)use_type);
+}
+
+static void
+cb_touchpad_use_type_changed (GtkComboBox *combo, gpointer user_data)
+{
+    GpdsTouchpadUI *ui = GPDS_TOUCHPAD_UI(user_data);
+    gint properties[1];
+    GError *error = NULL;
+
+    properties[0] = gtk_combo_box_get_active(combo);
+    if (!gpds_xinput_set_int_properties(ui->xinput,
+                                        gpds_touchpad_xinput_get_name(GPDS_TOUCHPAD_OFF),
+                                        gpds_touchpad_xinput_get_format_type(GPDS_TOUCHPAD_OFF),
+                                        &error,
+                                        properties,
+                                        1)) {
+        if (error) {
+            show_error(error);
+            g_error_free(error);
+        }
+    }
+    gconf_client_set_bool(ui->gconf, GPDS_TOUCHPAD_OFF_KEY, properties[0], NULL);
+}
+
+static void
 setup_signals (GpdsUI *ui, GtkBuilder *builder)
 {
     GObject *object;
@@ -481,6 +510,7 @@
                      G_CALLBACK(cb_ ## object_name ## _ ## signal_name),\
                      ui)
 
+    CONNECT(touchpad_use_type, changed);
     CONNECT(tapping_time_scale, value_changed);
     CONNECT(faster_tapping_check, toggled);
     CONNECT(circular_scrolling, toggled);
@@ -682,6 +712,31 @@
 }
 
 static void
+set_touchpad_use_type_property_from_preference (GpdsTouchpadUI *ui,
+                                                GtkBuilder *builder)
+{
+    GError *error = NULL;
+    gint *values;
+    gulong n_values;
+    GpdsTouchpadUseType type;
+
+    if (!get_integer_property(ui->xinput,
+                              GPDS_TOUCHPAD_OFF,
+                              &values, &n_values)) {
+        return;
+    }
+
+    type = gconf_client_get_int(ui->gconf,
+                                GPDS_TOUCHPAD_OFF_KEY,
+                                &error);
+    set_touchpad_use_type_combo_state(ui, error ? values[0] : type);
+    if (error)
+        g_clear_error(&error);
+
+    g_free(values);
+}
+
+static void
 setup_current_values (GpdsUI *ui, GtkBuilder *builder)
 {
     GpdsTouchpadUI *touchpad_ui = GPDS_TOUCHPAD_UI(ui);
@@ -704,6 +759,8 @@
     set_edge_scroll_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_touchpad_use_type_property_from_preference(touchpad_ui, builder);
 }
 
 static gboolean



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