gpointing-device-settings r73 - trunk/modules



Author: hiikezoe
Date: Sun Mar  1 06:59:59 2009
New Revision: 73
URL: http://svn.gnome.org/viewvc/gpointing-device-settings?rev=73&view=rev

Log:
touchpad plugin for gnome-settings-daemon.

Added:
   trunk/modules/gpds-touchpad-definitions.h
   trunk/modules/gsd-touchpad-manager.c
   trunk/modules/gsd-touchpad-manager.h
Removed:
   trunk/modules/gpds-touchpad-gconf.h
Modified:
   trunk/modules/Makefile.am
   trunk/modules/gpds-touchpad-ui.c
   trunk/modules/gsd-touchpad-plugin.c

Modified: trunk/modules/Makefile.am
==============================================================================
--- trunk/modules/Makefile.am	(original)
+++ trunk/modules/Makefile.am	Sun Mar  1 06:59:59 2009
@@ -50,8 +50,10 @@
 	gsd-trackpoint-manager.c
 
 libtouchpad_la_CFLAGS = $(gsd_plugin_CFLAGS)
-libtouchpad_la_SOURCES = 	\
-	gsd-touchpad-plugin.c
+libtouchpad_la_SOURCES = 		\
+	gsd-touchpad-plugin.c		\
+	gsd-touchpad-manager.h		\
+	gsd-touchpad-manager.c
 
 gsd_plugin_in_files =	 			\
 	trackpoint.gnome-settings-plugin.in	\

Added: trunk/modules/gpds-touchpad-definitions.h
==============================================================================
--- (empty file)
+++ trunk/modules/gpds-touchpad-definitions.h	Sun Mar  1 06:59:59 2009
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ *  Copyright (C) 2009 Hiroyuki Ikezoe  <poincare ikezoe net>
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library 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 Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __GPDS_TOUCHPAD_GCONF_H__
+#define __GPDS_TOUCHPAD_GCONF_H__
+
+#define GPDS_TOUCHPAD_DEVICE_NAME "SynPS/2 Synaptics TouchPad"
+
+#define GPDS_TOUCHPAD_EDGES                       "Synaptics Edges"
+#define GPDS_TOUCHPAD_FINGER                      "Synaptics Finger"
+#define GPDS_TOUCHPAD_TAP_TIME                    "Synaptics Tap Time"
+#define GPDS_TOUCHPAD_TAP_MOVE                    "Synaptics Tap Move"
+#define GPDS_TOUCHPAD_TAP_DURATIONS               "Synaptics Tap Durations"
+#define GPDS_TOUCHPAD_TAP_FAST_TAP                "Synaptics Tap FastTap"
+#define GPDS_TOUCHPAD_MIDDLE_BUTTON_TIMEOUT       "Synaptics Middle Button Timeout"
+#define GPDS_TOUCHPAD_TWO_FINGER_PRESSURE         "Synaptics Two-Finger Pressure"
+#define GPDS_TOUCHPAD_SCROLLING_DISTANCE          "Synaptics Scrolling Distance"
+#define GPDS_TOUCHPAD_EDGE_SCROLLING              "Synaptics Edge Scrolling"
+#define GPDS_TOUCHPAD_TWO_FINGER_SCROLLING        "Synaptics Two-Finger Scrolling"
+#define GPDS_TOUCHPAD_EDGE_MOTION_PRESSURE        "Synaptics Edge Motion Pressure"
+#define GPDS_TOUCHPAD_EDGE_MOTION_SPEED           "Synaptics Edge Motion Speed"
+#define GPDS_TOUCHPAD_EDGE_MOTION_ALWAYS          "Synaptics Edge Motion Always"
+#define GPDS_TOUCHPAD_BUTTON_SCROLLING            "Synaptics Button Scrolling"
+#define GPDS_TOUCHPAD_BUTTON_SCROLLING_REPEAT     "Synaptics Button Scrolling Repeat"
+#define GPDS_TOUCHPAD_SCROLLING_TIME              "Synaptics Button Scrolling Time"
+#define GPDS_TOUCHPAD_OFF                         "Synaptics Off"
+#define GPDS_TOUCHPAD_GUESTMOUSE_OFF              "Synaptics Guestmouse Off"
+#define GPDS_TOUCHPAD_LOCKED_DRAGS                "Synaptics Locked Drags"
+#define GPDS_TOUCHPAD_LOCKED_DRAGS_TIMEOUT        "Synaptics Locked Drags Timeout"
+#define GPDS_TOUCHPAD_TAP_ACTION                  "Synaptics Tap Action"
+#define GPDS_TOUCHPAD_CLICK_ACTION                "Synaptics Click Action"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING          "Synaptics Circular Scrolling"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_TRIGGER  "Synaptics Circular Scrolling Trigger"
+#define GPDS_TOUCHPAD_CIRCULAR_PAD                "Synaptics Circular Pad"
+#define GPDS_TOUCHPAD_PALM_DETECTION              "Synaptics Palm Detection"
+#define GPDS_TOUCHPAD_PALM_DIMENSIONS             "Synaptics Palm Dimensions"
+#define GPDS_TOUCHPAD_PRESSURE_MOTION             "Synaptics Pressure Motion"
+#define GPDS_TOUCHPAD_GRAB_EVENT_DEVICE           "Synaptics Grab Event Device"
+
+#define GPDS_TOUCHPAD_GCONF_DIR                   "/desktop/gnome/peripherals/touchpad"
+
+#define GPDS_TOUCHPAD_EDGES_KEY                         GPDS_TOUCHPAD_GCONF_DIR "/edges"
+#define GPDS_TOUCHPAD_OFF_KEY                           GPDS_TOUCHPAD_GCONF_DIR "/off"
+#define GPDS_TOUCHPAD_TAP_TIME_KEY                      GPDS_TOUCHPAD_GCONF_DIR "/tap_time"
+#define GPDS_TOUCHPAD_TAP_FAST_TAP_KEY                  GPDS_TOUCHPAD_GCONF_DIR "/tap_fast_tap"
+#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY GPDS_TOUCHPAD_GCONF_DIR "/horizontal_scrolling_distance"
+#define GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY          GPDS_TOUCHPAD_GCONF_DIR "/horizontal_scrolling"
+#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY   GPDS_TOUCHPAD_GCONF_DIR "/vertical_scrolling_distance"
+#define GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY            GPDS_TOUCHPAD_GCONF_DIR "/vertical_scrolling"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_KEY            GPDS_TOUCHPAD_GCONF_DIR "/circular_scrolling"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_DISTANCE_KEY   GPDS_TOUCHPAD_GCONF_DIR "/circular_scrolling_distance"
+#define GPDS_TOUCHPAD_CIRCULAR_SCROLLING_TRIGGER_KEY    GPDS_TOUCHPAD_GCONF_DIR "/circular_scrolling_trigger"
+
+#endif /* __GPDS_TOUCHPAD_GCONF_H__ */
+/*
+vi:ts=4:nowrap:ai:expandtab:sw=4
+*/

Modified: trunk/modules/gpds-touchpad-ui.c
==============================================================================
--- trunk/modules/gpds-touchpad-ui.c	(original)
+++ trunk/modules/gpds-touchpad-ui.c	Sun Mar  1 06:59:59 2009
@@ -27,40 +27,8 @@
 #include <gpds-xinput.h>
 #include <gconf/gconf-client.h>
 
-#include "gpds-touchpad-gconf.h"
+#include "gpds-touchpad-definitions.h"
 
-#define DEVICE_NAME "SynPS/2 Synaptics TouchPad"
-
-#define EDGES                       "Synaptics Edges"
-#define FINGER                      "Synaptics Finger"
-#define TAP_TIME                    "Synaptics Tap Time"
-#define TAP_MOVE                    "Synaptics Tap Move"
-#define TAP_DURATIONS               "Synaptics Tap Durations"
-#define TAP_FAST_TAP                "Synaptics Tap FastTap"
-#define MIDDLE_BUTTON_TIMEOUT       "Synaptics Middle Button Timeout"
-#define TWO_FINGER_PRESSURE         "Synaptics Two-Finger Pressure"
-#define SCROLLING_DISTANCE          "Synaptics Scrolling Distance"
-#define EDGE_SCROLLING              "Synaptics Edge Scrolling"
-#define TWO_FINGER_SCROLLING        "Synaptics Two-Finger Scrolling"
-#define EDGE_MOTION_PRESSURE        "Synaptics Edge Motion Pressure"
-#define EDGE_MOTION_SPEED           "Synaptics Edge Motion Speed"
-#define EDGE_MOTION_ALWAYS          "Synaptics Edge Motion Always"
-#define BUTTON_SCROLLING            "Synaptics Button Scrolling"
-#define BUTTON_SCROLLING_REPEAT     "Synaptics Button Scrolling Repeat"
-#define SCROLLING_TIME              "Synaptics Button Scrolling Time"
-#define OFF                         "Synaptics Off"
-#define GUESTMOUSE_OFF              "Synaptics Guestmouse Off"
-#define LOCKED_DRAGS                "Synaptics Locked Drags"
-#define LOCKED_DRAGS_TIMEOUT        "Synaptics Locked Drags Timeout"
-#define TAP_ACTION                  "Synaptics Tap Action"
-#define CLICK_ACTION                "Synaptics Click Action"
-#define CIRCULAR_SCROLLING          "Synaptics Circular Scrolling"
-#define CIRCULAR_SCROLLING_TRIGGER  "Synaptics Circular Scrolling Trigger"
-#define CIRCULAR_PAD                "Synaptics Circular Pad"
-#define PALM_DETECTION              "Synaptics Palm Detection"
-#define PALM_DIMENSIONS             "Synaptics Palm Dimensions"
-#define PRESSURE_MOTION             "Synaptics Pressure Motion"
-#define GRAB_EVENT_DEVICE           "Synaptics Grab Event Device"
 
 static const gchar *touchpad_device_names[] =
 {
@@ -241,7 +209,7 @@
     set_widget_sensitivity(builder, "horizontal_scroll_box", GTK_TOGGLE_BUTTON(object));
 
     if (!gpds_xinput_set_property(xinput,
-                                  EDGE_SCROLLING,
+                                  GPDS_TOUCHPAD_EDGE_SCROLLING,
                                   &error,
                                   vertical_scrolling_active ? 1 : 0,
                                   horizontal_scrolling_active ? 1 : 0,
@@ -287,7 +255,7 @@
     horizontal_scrolling_distance = gtk_range_get_value(GTK_RANGE(object));
 
     if (!gpds_xinput_set_property(xinput,
-                                  SCROLLING_DISTANCE,
+                                  GPDS_TOUCHPAD_SCROLLING_DISTANCE,
                                   &error,
                                   (gint)vertical_scrolling_distance,
                                   (gint)horizontal_scrolling_distance,
@@ -308,10 +276,10 @@
 
     builder = gpds_ui_get_builder(GPDS_UI(user_data));
 
-    set_range_property(ui->xinput, range, TAP_TIME);
+    set_range_property(ui->xinput, range, GPDS_TOUCHPAD_TAP_TIME);
 
     time = gtk_range_get_value(range);
-    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_MAX_TAP_TIME_KEY, (gint)time, NULL);
+    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_TAP_TIME_KEY, (gint)time, NULL);
 }
 
 static void
@@ -323,9 +291,9 @@
 
     builder = gpds_ui_get_builder(GPDS_UI(user_data));
 
-    set_toggle_property(ui->xinput, button, TAP_FAST_TAP);
+    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_FASTTAPS_KEY, check, NULL);
+    gconf_client_set_bool(ui->gconf, GPDS_TOUCHPAD_TAP_FAST_TAP_KEY, check, NULL);
 }
 
 static void
@@ -337,7 +305,7 @@
 
     builder = gpds_ui_get_builder(GPDS_UI(user_data));
 
-    set_toggle_property(ui->xinput, button, CIRCULAR_SCROLLING);
+    set_toggle_property(ui->xinput, button, GPDS_TOUCHPAD_CIRCULAR_SCROLLING);
     set_widget_sensitivity(builder, "circular_scroll_box", button);
 
     check = gtk_toggle_button_get_active(button);
@@ -386,7 +354,7 @@
     set_scrolling_distance_range_property(ui->xinput, builder);
 
     distance = gtk_range_get_value(range);
-    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_HORIZONTAL_SCROLL_DELTA_KEY, (gint)distance, NULL);
+    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY, (gint)distance, NULL);
 }
 
 static void
@@ -401,7 +369,7 @@
     set_scrolling_distance_range_property(ui->xinput, builder);
 
     distance = gtk_range_get_value(range);
-    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_VERTICAL_SCROLL_DELTA_KEY, (gint)distance, NULL);
+    gconf_client_set_int(ui->gconf, GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY, (gint)distance, NULL);
 }
 
 static void
@@ -511,7 +479,7 @@
     gulong n_values;
     gboolean enable, dir_exists;
 
-    if (!get_integer_property(ui->xinput, EDGE_SCROLLING,
+    if (!get_integer_property(ui->xinput, GPDS_TOUCHPAD_EDGE_SCROLLING,
                               &values, &n_values)) {
         return;
     }
@@ -550,7 +518,7 @@
     gint distance;
 
     if (!get_integer_property(ui->xinput,
-                              SCROLLING_DISTANCE,
+                              GPDS_TOUCHPAD_SCROLLING_DISTANCE,
                               &values, &n_values)) {
         return;
     }
@@ -560,13 +528,17 @@
         return;
     }
 
-    distance = gconf_client_get_int(ui->gconf, GPDS_TOUCHPAD_VERTICAL_SCROLL_DELTA_KEY, &error);
+    distance = gconf_client_get_int(ui->gconf,
+                                    GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY,
+                                    &error);
     object = gtk_builder_get_object(builder, "vertical_scroll_scale");
     gtk_range_set_value(GTK_RANGE(object), error ? values[0] : distance);
     if (error)
         g_clear_error(&error);
 
-    distance = gconf_client_get_int(ui->gconf, GPDS_TOUCHPAD_HORIZONTAL_SCROLL_DELTA_KEY, &error);
+    distance = gconf_client_get_int(ui->gconf,
+                                    GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY,
+                                    &error);
     object = gtk_builder_get_object(builder, "horizontal_scroll_scale");
     gtk_range_set_value(GTK_RANGE(object), error ? values[1] : distance);
     if (error)
@@ -581,17 +553,17 @@
     GpdsTouchpadUI *touchpad_ui = GPDS_TOUCHPAD_UI(ui);
 
     set_integer_property_from_preference(touchpad_ui,
-                                         TAP_TIME,
-                                         GPDS_TOUCHPAD_MAX_TAP_TIME_KEY,
+                                         GPDS_TOUCHPAD_TAP_TIME,
+                                         GPDS_TOUCHPAD_TAP_TIME_KEY,
                                          builder,
                                          "tapping_time_scale");
     set_boolean_property_from_preference(touchpad_ui,
-                                         TAP_FAST_TAP, 
-                                         GPDS_TOUCHPAD_FASTTAPS_KEY,
+                                         GPDS_TOUCHPAD_TAP_FAST_TAP, 
+                                         GPDS_TOUCHPAD_TAP_FAST_TAP_KEY,
                                          builder,
                                          "faster_tapping_check");
     set_boolean_property_from_preference(touchpad_ui,
-                                         CIRCULAR_SCROLLING,
+                                         GPDS_TOUCHPAD_CIRCULAR_SCROLLING,
                                          GPDS_TOUCHPAD_CIRCULAR_SCROLLING_KEY, 
                                          builder,
                                          "circular_scroll_check");

Added: trunk/modules/gsd-touchpad-manager.c
==============================================================================
--- (empty file)
+++ trunk/modules/gsd-touchpad-manager.c	Sun Mar  1 06:59:59 2009
@@ -0,0 +1,206 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ *  Copyright (C) 2009 Hiroyuki Ikezoe  <poincare ikezoe net>
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library 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 Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include "gsd-touchpad-manager.h"
+#include <glib/gi18n.h>
+#include <gconf/gconf-client.h>
+#include <gpds-xinput.h>
+
+#include "gpds-touchpad-definitions.h"
+
+#define GSD_TOUCHPAD_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), GSD_TYPE_TOUCHPAD_MANAGER, GsdTouchpadManagerPrivate))
+
+typedef struct _GsdTouchpadManagerPrivate  GsdTouchpadManagerPrivate;
+struct _GsdTouchpadManagerPrivate
+{
+    GConfClient *gconf;
+    guint notify_id;
+};
+
+G_DEFINE_TYPE (GsdTouchpadManager, gsd_touchpad_manager, G_TYPE_OBJECT)
+
+static gpointer manager_object = NULL;
+
+static void
+gsd_touchpad_manager_init (GsdTouchpadManager *manager)
+{
+    GsdTouchpadManagerPrivate *priv;
+
+    priv = GSD_TOUCHPAD_MANAGER_GET_PRIVATE(manager);
+
+    priv->gconf = NULL;
+    priv->notify_id = 0;
+}
+
+static void
+gsd_touchpad_manager_class_init (GsdTouchpadManagerClass *klass)
+{
+    GObjectClass   *gobject_class = G_OBJECT_CLASS(klass);
+
+    g_type_class_add_private(gobject_class, sizeof(GsdTouchpadManagerPrivate));
+}
+
+GsdTouchpadManager *
+gsd_touchpad_manager_new (void)
+{
+    if (manager_object != NULL) {
+        g_object_ref(manager_object);
+    } else {
+        manager_object = g_object_new(GSD_TYPE_TOUCHPAD_MANAGER, NULL);
+        g_object_add_weak_pointer(manager_object, (gpointer *)&manager_object);
+    }
+
+    return GSD_TOUCHPAD_MANAGER(manager_object);
+}
+
+static void
+cb_gconf_client_notify (GConfClient *client,
+                        guint cnxn_id,
+                        GConfEntry *entry,
+                        gpointer user_data)
+{
+    GConfValue *value;
+    const gchar *key;
+    GpdsXInput *xinput;
+
+    if (!gpds_xinput_exist_device(GPDS_TOUCHPAD_DEVICE_NAME))
+        return;
+
+    xinput = gpds_xinput_new(GPDS_TOUCHPAD_DEVICE_NAME);
+
+    value = gconf_entry_get_value(entry);
+    key = gconf_entry_get_key(entry);
+
+    switch (value->type) {
+    case GCONF_VALUE_BOOL:
+        if (!strcmp(key, GPDS_TOUCHPAD_TAP_FAST_TAP_KEY)) {
+            gpds_xinput_set_property(xinput,
+                                     GPDS_TOUCHPAD_TAP_FAST_TAP,
+                                     NULL,
+                                     gconf_value_get_bool(value),
+                                     NULL);
+        } else  if (!strcmp(key, GPDS_TOUCHPAD_CIRCULAR_SCROLLING_KEY)) {
+            gpds_xinput_set_property(xinput,
+                                     GPDS_TOUCHPAD_CIRCULAR_SCROLLING,
+                                     NULL,
+                                     gconf_value_get_bool(value),
+                                     NULL);
+        } else  if (!strcmp(key, GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY) ||
+                    !strcmp(key, GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY)) {
+            gboolean enable_vertical, enable_horizontal;
+            enable_vertical = gconf_client_get_bool(client,
+                                                    GPDS_TOUCHPAD_VERTICAL_SCROLLING_KEY,
+                                                    NULL);
+            enable_horizontal = gconf_client_get_bool(client,
+                                                      GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_KEY,
+                                                      NULL);
+
+            gpds_xinput_set_property(xinput,
+                                     GPDS_TOUCHPAD_EDGE_SCROLLING,
+                                     NULL,
+                                     enable_vertical ? 1 : 0,
+                                     enable_horizontal ? 1 : 0,
+                                     NULL);
+        }
+        break;
+    case GCONF_VALUE_INT:
+        if (!strcmp(key, GPDS_TOUCHPAD_TAP_TIME_KEY)) {
+            gpds_xinput_set_property(xinput,
+                                     GPDS_TOUCHPAD_TAP_TIME,
+                                     NULL,
+                                     gconf_value_get_int(value),
+                                     NULL);
+        } else if (!strcmp(key, GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY) ||
+                   !strcmp(key, GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY)) {
+            gint vertical_scrolling_distance;
+            gint horizontal_scrolling_distance;
+
+            vertical_scrolling_distance =
+                gconf_client_get_int(client,
+                                     GPDS_TOUCHPAD_VERTICAL_SCROLLING_DISTANCE_KEY,
+                                     NULL);
+            horizontal_scrolling_distance =
+                gconf_client_get_int(client,
+                                     GPDS_TOUCHPAD_HORIZONTAL_SCROLLING_DISTANCE_KEY,
+                                     NULL);
+            gpds_xinput_set_property(xinput,
+                                     GPDS_TOUCHPAD_SCROLLING_DISTANCE,
+                                     NULL,
+                                     vertical_scrolling_distance,
+                                     horizontal_scrolling_distance,
+                                     NULL);
+        }
+        break;
+    default:
+        break;
+    }
+
+    g_object_unref(xinput);
+}
+
+gboolean
+gsd_touchpad_manager_start (GsdTouchpadManager *manager,
+                               GError              **error)
+{
+    GsdTouchpadManagerPrivate *priv;
+
+    priv = GSD_TOUCHPAD_MANAGER_GET_PRIVATE(manager);
+    priv->gconf = gconf_client_get_default();
+
+    gconf_client_add_dir(priv->gconf,
+                         GPDS_TOUCHPAD_GCONF_DIR,
+                         GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+    priv->notify_id = gconf_client_notify_add(priv->gconf,
+                                              GPDS_TOUCHPAD_GCONF_DIR,
+                                              cb_gconf_client_notify,
+                                              manager,
+                                              NULL,
+                                              NULL);
+
+    return TRUE;
+}
+
+void
+gsd_touchpad_manager_stop (GsdTouchpadManager *manager)
+{
+    GsdTouchpadManagerPrivate *priv;
+
+    priv = GSD_TOUCHPAD_MANAGER_GET_PRIVATE(manager);
+
+    if (priv->notify_id) {
+        gconf_client_remove_dir(priv->gconf,
+                                GPDS_TOUCHPAD_GCONF_DIR,
+                                NULL);
+        gconf_client_notify_remove(priv->gconf, priv->notify_id);
+        priv->notify_id = 0;
+    }
+
+    if (priv->gconf) {
+        g_object_unref(priv->gconf);
+        priv->gconf = NULL;
+    }
+}
+
+/*
+vi:ts=4:nowrap:ai:expandtab:sw=4
+*/

Added: trunk/modules/gsd-touchpad-manager.h
==============================================================================
--- (empty file)
+++ trunk/modules/gsd-touchpad-manager.h	Sun Mar  1 06:59:59 2009
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ *  Copyright (C) 2009 Hiroyuki Ikezoe  <poincare ikezoe net>
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library 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 Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __GSD_TOUCHPAD_MANAGER_H__
+#define __GSD_TOUCHPAD_MANAGER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GSD_TYPE_TOUCHPAD_MANAGER            (gsd_touchpad_manager_get_type ())
+#define GSD_TOUCHPAD_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSD_TYPE_TOUCHPAD_MANAGER, GsdTouchpadManager))
+#define GSD_TOUCHPAD_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GSD_TYPE_TOUCHPAD_MANAGER, GsdTracklassPointManagerClass))
+#define GSD_IS_TOUCHPAD_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSD_TYPE_TOUCHPAD_MANAGER))
+#define GSD_IS_TOUCHPAD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSD_TYPE_TOUCHPAD_MANAGER))
+#define GSD_TOUCHPAD_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GSD_TYPE_TOUCHPAD_MANAGER, GsdTracklassPointManagerClass))
+
+typedef struct _GsdTouchpadManager GsdTouchpadManager;
+typedef struct _GsdTouchpadManagerClass GsdTouchpadManagerClass;
+
+struct _GsdTouchpadManager
+{
+    GObject parent;
+};
+
+struct _GsdTouchpadManagerClass
+{
+    GObjectClass parent_class;
+}; 
+
+GType gsd_touchpad_manager_get_type (void) G_GNUC_CONST;
+
+GsdTouchpadManager *gsd_touchpad_manager_new   (void);
+gboolean            gsd_touchpad_manager_start (GsdTouchpadManager *manager,
+                                                GError            **error);
+void                gsd_touchpad_manager_stop  (GsdTouchpadManager *manager);
+
+G_END_DECLS
+
+#endif /* __GSD_TOUCHPAD_MANAGER_H__ */
+/*
+vi:ts=4:nowrap:ai:expandtab:sw=4
+*/

Modified: trunk/modules/gsd-touchpad-plugin.c
==============================================================================
--- trunk/modules/gsd-touchpad-plugin.c	(original)
+++ trunk/modules/gsd-touchpad-plugin.c	Sun Mar  1 06:59:59 2009
@@ -25,12 +25,14 @@
 #include "gnome-settings-plugin.h"
 #include <glib/gi18n.h>
 
+#include "gsd-touchpad-manager.h"
+
 #define GSD_TYPE_TOUCHPAD_PLUGIN            (gsd_touchpad_plugin_get_type ())
-#define GSD_TOUCHPAD_PLUGIN(jbj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTrackPobjintPlugin))
-#define GSD_TOUCHPAD_PLUGIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTracklassPobjintPluginClass))
+#define GSD_TOUCHPAD_PLUGIN(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTouchpadPlugin))
+#define GSD_TOUCHPAD_PLUGIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTracklassPointPluginClass))
 #define GSD_IS_TOUCHPAD_PLUGIN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSD_TYPE_TOUCHPAD_PLUGIN))
 #define GSD_IS_TOUCHPAD_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSD_TYPE_TOUCHPAD_PLUGIN))
-#define GSD_TOUCHPAD_PLUGIN_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTracklassPobjintPluginClass))
+#define GSD_TOUCHPAD_PLUGIN_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GSD_TYPE_TOUCHPAD_PLUGIN, GsdTracklassPointPluginClass))
 
 typedef struct _GsdTouchpadPlugin GsdTouchpadPlugin;
 typedef struct _GsdTouchpadPluginClass GsdTouchpadPluginClass;
@@ -38,6 +40,7 @@
 struct _GsdTouchpadPlugin
 {
     GnomeSettingsPlugin parent;
+    GsdTouchpadManager *manager;
 };
 
 struct _GsdTouchpadPluginClass
@@ -53,16 +56,30 @@
 static void
 gsd_touchpad_plugin_init (GsdTouchpadPlugin *plugin)
 {
+    plugin->manager = NULL;
 }
 
 static void
 activate (GnomeSettingsPlugin *plugin)
 {
+    GsdTouchpadPlugin *touchpad_plugin;
+
+    touchpad_plugin = GSD_TOUCHPAD_PLUGIN(plugin); 
+    touchpad_plugin->manager = gsd_touchpad_manager_new();
+    gsd_touchpad_manager_start(touchpad_plugin->manager, NULL);
 }
 
 static void
 deactivate (GnomeSettingsPlugin *plugin)
 {
+    GsdTouchpadPlugin *touchpad_plugin;
+
+    touchpad_plugin = GSD_TOUCHPAD_PLUGIN(plugin); 
+    if (touchpad_plugin->manager) {
+        gsd_touchpad_manager_stop(touchpad_plugin->manager);
+        g_object_unref(touchpad_plugin->manager);
+        touchpad_plugin->manager = NULL;
+    }
 }
 
 static void



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