Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:aaronbockover
gnome-settings-daemon
gsd-speed-mouse.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gsd-speed-mouse.patch of Package gnome-settings-daemon
diff -u -r a/plugins/mouse/gsd-locate-pointer.h b/plugins/mouse/gsd-locate-pointer.h --- a/plugins/mouse/gsd-locate-pointer.h 2008-08-04 15:25:52.000000000 +0100 +++ b/plugins/mouse/gsd-locate-pointer.h 2009-01-30 11:40:07.000000000 +0000 @@ -17,7 +17,7 @@ #ifndef LOCATE_POINTER_H #define LOCATE_POINTER_H -#include <gdk/gdkscreen.h> +#include <gdk/gdk.h> void gsd_locate_pointer (GdkScreen *screen); diff -u -r a/plugins/mouse//gsd-mouse-manager.c b/plugins/mouse//gsd-mouse-manager.c --- a/plugins/mouse/gsd-mouse-manager.c 2008-08-04 15:25:52.000000000 +0100 +++ b/plugins/mouse/gsd-mouse-manager.c 2009-01-30 11:40:07.000000000 +0000 @@ -39,7 +39,7 @@ #include <gdk/gdkkeysyms.h> #include <X11/keysym.h> -#ifdef HAVE_XINPUT +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H #include <X11/extensions/XInput.h> #endif #include <gconf/gconf.h> @@ -55,11 +55,14 @@ { guint notify; guint notify_a11y; + + gboolean mousetweaks_daemon_running; }; static void gsd_mouse_manager_class_init (GsdMouseManagerClass *klass); static void gsd_mouse_manager_init (GsdMouseManager *mouse_manager); static void gsd_mouse_manager_finalize (GObject *object); +static void set_mouse_settings (GsdMouseManager *manager); G_DEFINE_TYPE (GsdMouseManager, gsd_mouse_manager, G_TYPE_OBJECT) @@ -152,7 +155,7 @@ } -#ifdef HAVE_XINPUT +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H static gboolean supports_xinput_devices (void) { @@ -223,7 +226,7 @@ } } -#ifdef HAVE_XINPUT +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H static gboolean xinput_device_has_buttons (XDeviceInfo *device_info) { @@ -302,6 +305,49 @@ if (device_info != NULL) XFreeDeviceList (device_info); } + +static GdkFilterReturn +devicepresence_filter (GdkXEvent *xevent, + GdkEvent *event, + gpointer data) +{ + XEvent *xev = (XEvent *) xevent; + XEventClass class_presence; + int xi_presence; + + DevicePresence (gdk_x11_get_default_xdisplay (), xi_presence, class_presence); + + if (xev->type == xi_presence) + { + XDevicePresenceNotifyEvent *dpn = (XDevicePresenceNotifyEvent *) xev; + if (dpn->devchange == DeviceEnabled) + set_mouse_settings ((GsdMouseManager *) data); + } + return GDK_FILTER_CONTINUE; +} + +static void +set_devicepresence_handler (GsdMouseManager *manager) +{ + Display *display; + XEventClass class_presence; + int xi_presence; + + if (!supports_xinput_devices ()) + return; + + display = gdk_x11_get_default_xdisplay (); + + gdk_error_trap_push (); + DevicePresence (display, xi_presence, class_presence); + XSelectExtensionEvent (display, + RootWindow (display, DefaultScreen (display)), + &class_presence, 1); + + gdk_flush (); + if (!gdk_error_trap_pop ()) + gdk_window_add_filter (NULL, devicepresence_filter, manager); +} #endif static void @@ -312,7 +358,7 @@ gsize buttons_capacity = 16; gint n_buttons, i; -#ifdef HAVE_XINPUT +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H if (supports_xinput_devices ()) { set_xinput_devices_left_handed (left_handed); } @@ -544,9 +590,17 @@ { GError *error = NULL; gchar *comm; + gboolean run_daemon = dwell_enable || delay_enable; + + if (run_daemon || manager->priv->mousetweaks_daemon_running) + comm = g_strdup_printf ("mousetweaks %s", + run_daemon ? "" : "-s"); + else + return; + + if (run_daemon) + manager->priv->mousetweaks_daemon_running = TRUE; - comm = g_strdup_printf ("mousetweaks %s", - (dwell_enable || delay_enable) ? "" : "-s"); if (! g_spawn_command_line_async (comm, &error)) { if (error->code == G_SPAWN_ERROR_NOENT && @@ -585,6 +639,18 @@ } static void +set_mouse_settings (GsdMouseManager *manager) +{ + GConfClient *client = gconf_client_get_default (); + + set_left_handed (manager, gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL)); + set_motion_acceleration (manager, gconf_client_get_float (client, KEY_MOTION_ACCELERATION , NULL)); + set_motion_threshold (manager, gconf_client_get_int (client, KEY_MOTION_THRESHOLD, NULL)); + + g_object_unref (client); +} + +static void mouse_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, @@ -637,13 +703,11 @@ manager->priv = GSD_MOUSE_MANAGER_GET_PRIVATE (manager); } -gboolean -gsd_mouse_manager_start (GsdMouseManager *manager, - GError **error) +static gboolean +gsd_mouse_manager_idle_cb (GsdMouseManager *manager) { GConfClient *client; - g_debug ("Starting mouse manager"); gnome_settings_profile_start (NULL); client = gconf_client_get_default (); @@ -659,9 +723,10 @@ GCONF_MOUSE_A11Y_DIR, (GConfClientNotifyFunc) mouse_callback); - set_left_handed (manager, gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL)); - set_motion_acceleration (manager, gconf_client_get_float (client, KEY_MOTION_ACCELERATION , NULL)); - set_motion_threshold (manager, gconf_client_get_int (client, KEY_MOTION_THRESHOLD, NULL)); +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H + set_devicepresence_handler (manager); +#endif + set_mouse_settings (manager); set_locate_pointer (manager, gconf_client_get_bool (client, KEY_LOCATE_POINTER, NULL)); set_mousetweaks_daemon (manager, gconf_client_get_bool (client, KEY_DWELL_ENABLE, NULL), @@ -671,6 +736,19 @@ gnome_settings_profile_end (NULL); + return FALSE; +} + +gboolean +gsd_mouse_manager_start (GsdMouseManager *manager, + GError **error) +{ + gnome_settings_profile_start (NULL); + + g_idle_add ((GSourceFunc) gsd_mouse_manager_idle_cb, manager); + + gnome_settings_profile_end (NULL); + return TRUE; } @@ -699,6 +777,10 @@ g_object_unref (client); set_locate_pointer (manager, FALSE); + +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H + gdk_window_remove_filter (NULL, devicepresence_filter, manager); +#endif } static void
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor