From ddaceb232c8b537a7d29a9708928d3a3671b98e5 Mon Sep 17 00:00:00 2001 From: haxar Date: Tue, 21 Feb 2012 20:13:04 -0800 Subject: gsd to msd complete rename patch by NiceandGently; code changes commit --- plugins/a11y-keyboard/Makefile.am | 22 +-- plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c | 156 ++++++++++----------- plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h | 34 ++--- plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c | 42 +++--- plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h | 28 ++-- .../a11y-keyboard/gsd-a11y-preferences-dialog.c | 112 +++++++-------- .../a11y-keyboard/gsd-a11y-preferences-dialog.h | 30 ++-- .../a11y-keyboard/test-a11y-preferences-dialog.c | 4 +- 8 files changed, 214 insertions(+), 214 deletions(-) (limited to 'plugins/a11y-keyboard') diff --git a/plugins/a11y-keyboard/Makefile.am b/plugins/a11y-keyboard/Makefile.am index 8396513..78737a0 100644 --- a/plugins/a11y-keyboard/Makefile.am +++ b/plugins/a11y-keyboard/Makefile.am @@ -2,7 +2,7 @@ NULL = gtkbuilderdir = $(pkgdatadir) gtkbuilder_DATA = \ - gsd-a11y-preferences-dialog.ui \ + msd-a11y-preferences-dialog.ui \ $(NULL) noinst_PROGRAMS = \ @@ -10,8 +10,8 @@ noinst_PROGRAMS = \ $(NULL) test_a11y_preferences_dialog_SOURCES = \ - gsd-a11y-preferences-dialog.c \ - gsd-a11y-preferences-dialog.h \ + msd-a11y-preferences-dialog.c \ + msd-a11y-preferences-dialog.h \ test-a11y-preferences-dialog.c \ $(NULL) @@ -36,12 +36,12 @@ plugin_LTLIBRARIES = \ $(NULL) liba11y_keyboard_la_SOURCES = \ - gsd-a11y-keyboard-plugin.h \ - gsd-a11y-keyboard-plugin.c \ - gsd-a11y-keyboard-manager.h \ - gsd-a11y-keyboard-manager.c \ - gsd-a11y-preferences-dialog.h \ - gsd-a11y-preferences-dialog.c \ + msd-a11y-keyboard-plugin.h \ + msd-a11y-keyboard-plugin.c \ + msd-a11y-keyboard-manager.h \ + msd-a11y-keyboard-manager.c \ + msd-a11y-preferences-dialog.h \ + msd-a11y-preferences-dialog.c \ $(NULL) liba11y_keyboard_la_CPPFLAGS = \ @@ -56,7 +56,7 @@ liba11y_keyboard_la_CFLAGS = \ $(AM_CFLAGS) liba11y_keyboard_la_LDFLAGS = \ - $(GSD_PLUGIN_LDFLAGS) \ + $(MSD_PLUGIN_LDFLAGS) \ $(NULL) liba11y_keyboard_la_LIBADD = \ @@ -84,4 +84,4 @@ DISTCLEANFILES = \ $(plugin_DATA) \ $(NULL) -@GSD_INTLTOOL_PLUGIN_RULE@ +@MSD_INTLTOOL_PLUGIN_RULE@ diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c index 668fddc..7505b14 100644 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c +++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c @@ -51,15 +51,15 @@ #endif /* HAVE_LIBMATENOTIFY */ #include "mate-settings-profile.h" -#include "gsd-a11y-keyboard-manager.h" -#include "gsd-a11y-preferences-dialog.h" +#include "msd-a11y-keyboard-manager.h" +#include "msd-a11y-preferences-dialog.h" #define CONFIG_ROOT "/desktop/mate/accessibility/keyboard" #define NOTIFICATION_TIMEOUT 30 -#define GSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_A11Y_KEYBOARD_MANAGER, GsdA11yKeyboardManagerPrivate)) +#define MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerPrivate)) -struct GsdA11yKeyboardManagerPrivate +struct MsdA11yKeyboardManagerPrivate { int xkbEventBase; gboolean stickykeys_shortcut_val; @@ -77,14 +77,14 @@ struct GsdA11yKeyboardManagerPrivate #endif /* HAVE_LIBMATENOTIFY */ }; -static void gsd_a11y_keyboard_manager_class_init (GsdA11yKeyboardManagerClass *klass); -static void gsd_a11y_keyboard_manager_init (GsdA11yKeyboardManager *a11y_keyboard_manager); -static void gsd_a11y_keyboard_manager_finalize (GObject *object); -static void gsd_a11y_keyboard_manager_ensure_status_icon (GsdA11yKeyboardManager *manager); -static void set_server_from_mateconf (GsdA11yKeyboardManager *manager, +static void msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass); +static void msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *a11y_keyboard_manager); +static void msd_a11y_keyboard_manager_finalize (GObject *object); +static void msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager); +static void set_server_from_mateconf (MsdA11yKeyboardManager *manager, MateConfClient *client); -G_DEFINE_TYPE (GsdA11yKeyboardManager, gsd_a11y_keyboard_manager, G_TYPE_OBJECT) +G_DEFINE_TYPE (MsdA11yKeyboardManager, msd_a11y_keyboard_manager, G_TYPE_OBJECT) static gpointer manager_object = NULL; @@ -133,7 +133,7 @@ supports_xinput_devices (void) } static void -set_devicepresence_handler (GsdA11yKeyboardManager *manager) +set_devicepresence_handler (MsdA11yKeyboardManager *manager) { Display *display; XEventClass class_presence; @@ -161,7 +161,7 @@ set_devicepresence_handler (GsdA11yKeyboardManager *manager) #endif static gboolean -xkb_enabled (GsdA11yKeyboardManager *manager) +xkb_enabled (MsdA11yKeyboardManager *manager) { gboolean have_xkb; int opcode, errorBase, major, minor; @@ -178,7 +178,7 @@ xkb_enabled (GsdA11yKeyboardManager *manager) } static XkbDescRec * -get_xkb_desc_rec (GsdA11yKeyboardManager *manager) +get_xkb_desc_rec (MsdA11yKeyboardManager *manager) { XkbDescRec *desc; Status status = Success; @@ -265,7 +265,7 @@ set_ctrl_from_mateconf (XkbDescRec *desc, } static void -set_server_from_mateconf (GsdA11yKeyboardManager *manager, +set_server_from_mateconf (MsdA11yKeyboardManager *manager, MateConfClient *client) { XkbDescRec *desc; @@ -404,7 +404,7 @@ set_server_from_mateconf (GsdA11yKeyboardManager *manager, } static gboolean -ax_response_callback (GsdA11yKeyboardManager *manager, +ax_response_callback (MsdA11yKeyboardManager *manager, GtkWindow *parent, gint response_id, guint revert_controls_mask, @@ -475,7 +475,7 @@ ax_response_callback (GsdA11yKeyboardManager *manager, static void ax_stickykeys_response (GtkDialog *dialog, gint response_id, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { if (ax_response_callback (manager, GTK_WINDOW (dialog), response_id, XkbStickyKeysMask, @@ -487,7 +487,7 @@ ax_stickykeys_response (GtkDialog *dialog, static void ax_slowkeys_response (GtkDialog *dialog, gint response_id, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { if (ax_response_callback (manager, GTK_WINDOW (dialog), response_id, XkbSlowKeysMask, @@ -497,7 +497,7 @@ ax_slowkeys_response (GtkDialog *dialog, } static void -maybe_show_status_icon (GsdA11yKeyboardManager *manager) +maybe_show_status_icon (MsdA11yKeyboardManager *manager) { gboolean show; MateConfClient *client; @@ -510,14 +510,14 @@ maybe_show_status_icon (GsdA11yKeyboardManager *manager) if (!show && manager->priv->status_icon == NULL) return; - gsd_a11y_keyboard_manager_ensure_status_icon (manager); + msd_a11y_keyboard_manager_ensure_status_icon (manager); gtk_status_icon_set_visible (manager->priv->status_icon, show); } #ifdef HAVE_LIBMATENOTIFY static void on_notification_closed (NotifyNotification *notification, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { g_object_unref (manager->priv->notification); manager->priv->notification = NULL; @@ -526,7 +526,7 @@ on_notification_closed (NotifyNotification *notification, static void on_slow_keys_action (NotifyNotification *notification, const char *action, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { gboolean res; int response_id; @@ -552,7 +552,7 @@ on_slow_keys_action (NotifyNotification *notification, static void on_sticky_keys_action (NotifyNotification *notification, const char *action, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { gboolean res; int response_id; @@ -578,7 +578,7 @@ on_sticky_keys_action (NotifyNotification *notification, #endif /* HAVE_LIBMATENOTIFY */ static gboolean -ax_slowkeys_warning_post_bubble (GsdA11yKeyboardManager *manager, +ax_slowkeys_warning_post_bubble (MsdA11yKeyboardManager *manager, gboolean enabled) { #ifdef HAVE_LIBMATENOTIFY @@ -605,7 +605,7 @@ ax_slowkeys_warning_post_bubble (GsdA11yKeyboardManager *manager, notify_notification_close (manager->priv->notification, NULL); } - gsd_a11y_keyboard_manager_ensure_status_icon (manager); + msd_a11y_keyboard_manager_ensure_status_icon (manager); manager->priv->notification = notify_notification_new (title, message, "preferences-desktop-accessibility", @@ -634,7 +634,7 @@ ax_slowkeys_warning_post_bubble (GsdA11yKeyboardManager *manager, error = NULL; res = notify_notification_show (manager->priv->notification, &error); if (! res) { - g_warning ("GsdA11yKeyboardManager: unable to show notification: %s", error->message); + g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); g_error_free (error); notify_notification_close (manager->priv->notification, NULL); } @@ -647,7 +647,7 @@ ax_slowkeys_warning_post_bubble (GsdA11yKeyboardManager *manager, static void -ax_slowkeys_warning_post_dialog (GsdA11yKeyboardManager *manager, +ax_slowkeys_warning_post_dialog (MsdA11yKeyboardManager *manager, gboolean enabled) { const char *title; @@ -701,7 +701,7 @@ ax_slowkeys_warning_post_dialog (GsdA11yKeyboardManager *manager, } static void -ax_slowkeys_warning_post (GsdA11yKeyboardManager *manager, +ax_slowkeys_warning_post (MsdA11yKeyboardManager *manager, gboolean enabled) { @@ -714,7 +714,7 @@ ax_slowkeys_warning_post (GsdA11yKeyboardManager *manager, } static gboolean -ax_stickykeys_warning_post_bubble (GsdA11yKeyboardManager *manager, +ax_stickykeys_warning_post_bubble (MsdA11yKeyboardManager *manager, gboolean enabled) { #ifdef HAVE_LIBMATENOTIFY @@ -744,7 +744,7 @@ ax_stickykeys_warning_post_bubble (GsdA11yKeyboardManager *manager, notify_notification_close (manager->priv->notification, NULL); } - gsd_a11y_keyboard_manager_ensure_status_icon (manager); + msd_a11y_keyboard_manager_ensure_status_icon (manager); manager->priv->notification = notify_notification_new (title, message, "preferences-desktop-accessibility", @@ -773,7 +773,7 @@ ax_stickykeys_warning_post_bubble (GsdA11yKeyboardManager *manager, error = NULL; res = notify_notification_show (manager->priv->notification, &error); if (! res) { - g_warning ("GsdA11yKeyboardManager: unable to show notification: %s", error->message); + g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); g_error_free (error); notify_notification_close (manager->priv->notification, NULL); } @@ -785,7 +785,7 @@ ax_stickykeys_warning_post_bubble (GsdA11yKeyboardManager *manager, } static void -ax_stickykeys_warning_post_dialog (GsdA11yKeyboardManager *manager, +ax_stickykeys_warning_post_dialog (MsdA11yKeyboardManager *manager, gboolean enabled) { const char *title; @@ -842,7 +842,7 @@ ax_stickykeys_warning_post_dialog (GsdA11yKeyboardManager *manager, } static void -ax_stickykeys_warning_post (GsdA11yKeyboardManager *manager, +ax_stickykeys_warning_post (MsdA11yKeyboardManager *manager, gboolean enabled) { @@ -855,7 +855,7 @@ ax_stickykeys_warning_post (GsdA11yKeyboardManager *manager, } static void -set_mateconf_from_server (GsdA11yKeyboardManager *manager) +set_mateconf_from_server (MsdA11yKeyboardManager *manager) { MateConfClient *client; MateConfChangeSet *cs; @@ -1003,7 +1003,7 @@ set_mateconf_from_server (GsdA11yKeyboardManager *manager) static GdkFilterReturn cb_xkb_event_filter (GdkXEvent *xevent, GdkEvent *ignored1, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { XEvent *xev = (XEvent *) xevent; XkbEvent *xkbEv = (XkbEvent *) xevent; @@ -1031,14 +1031,14 @@ static void keyboard_callback (MateConfClient *client, guint cnxn_id, MateConfEntry *entry, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { set_server_from_mateconf (manager, client); maybe_show_status_icon (manager); } static void -register_config_callback (GsdA11yKeyboardManager *manager, +register_config_callback (MsdA11yKeyboardManager *manager, MateConfClient *client, const char *path, MateConfClientNotifyFunc func, @@ -1049,7 +1049,7 @@ register_config_callback (GsdA11yKeyboardManager *manager, } static gboolean -start_a11y_keyboard_idle_cb (GsdA11yKeyboardManager *manager) +start_a11y_keyboard_idle_cb (MsdA11yKeyboardManager *manager) { guint event_mask; MateConfClient *client; @@ -1104,7 +1104,7 @@ start_a11y_keyboard_idle_cb (GsdA11yKeyboardManager *manager) gboolean -gsd_a11y_keyboard_manager_start (GsdA11yKeyboardManager *manager, +msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, GError **error) { mate_settings_profile_start (NULL); @@ -1117,7 +1117,7 @@ gsd_a11y_keyboard_manager_start (GsdA11yKeyboardManager *manager, } static void -restore_server_xkb_config (GsdA11yKeyboardManager *manager) +restore_server_xkb_config (MsdA11yKeyboardManager *manager) { gdk_error_trap_push (); XkbSetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), @@ -1142,9 +1142,9 @@ restore_server_xkb_config (GsdA11yKeyboardManager *manager) } void -gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager) +msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager) { - GsdA11yKeyboardManagerPrivate *p = manager->priv; + MsdA11yKeyboardManagerPrivate *p = manager->priv; g_debug ("Stopping a11y_keyboard manager"); @@ -1182,14 +1182,14 @@ gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager) } static void -gsd_a11y_keyboard_manager_set_property (GObject *object, +msd_a11y_keyboard_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - GsdA11yKeyboardManager *self; + MsdA11yKeyboardManager *self; - self = GSD_A11Y_KEYBOARD_MANAGER (object); + self = MSD_A11Y_KEYBOARD_MANAGER (object); switch (prop_id) { default: @@ -1199,14 +1199,14 @@ gsd_a11y_keyboard_manager_set_property (GObject *object, } static void -gsd_a11y_keyboard_manager_get_property (GObject *object, +msd_a11y_keyboard_manager_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - GsdA11yKeyboardManager *self; + MsdA11yKeyboardManager *self; - self = GSD_A11Y_KEYBOARD_MANAGER (object); + self = MSD_A11Y_KEYBOARD_MANAGER (object); switch (prop_id) { default: @@ -1216,16 +1216,16 @@ gsd_a11y_keyboard_manager_get_property (GObject *object, } static GObject * -gsd_a11y_keyboard_manager_constructor (GType type, +msd_a11y_keyboard_manager_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { - GsdA11yKeyboardManager *a11y_keyboard_manager; - GsdA11yKeyboardManagerClass *klass; + MsdA11yKeyboardManager *a11y_keyboard_manager; + MsdA11yKeyboardManagerClass *klass; - klass = GSD_A11Y_KEYBOARD_MANAGER_CLASS (g_type_class_peek (GSD_TYPE_A11Y_KEYBOARD_MANAGER)); + klass = MSD_A11Y_KEYBOARD_MANAGER_CLASS (g_type_class_peek (MSD_TYPE_A11Y_KEYBOARD_MANAGER)); - a11y_keyboard_manager = GSD_A11Y_KEYBOARD_MANAGER (G_OBJECT_CLASS (gsd_a11y_keyboard_manager_parent_class)->constructor (type, + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->constructor (type, n_construct_properties, construct_properties)); @@ -1233,33 +1233,33 @@ gsd_a11y_keyboard_manager_constructor (GType type, } static void -gsd_a11y_keyboard_manager_dispose (GObject *object) +msd_a11y_keyboard_manager_dispose (GObject *object) { - GsdA11yKeyboardManager *a11y_keyboard_manager; + MsdA11yKeyboardManager *a11y_keyboard_manager; - a11y_keyboard_manager = GSD_A11Y_KEYBOARD_MANAGER (object); + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); - G_OBJECT_CLASS (gsd_a11y_keyboard_manager_parent_class)->dispose (object); + G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->dispose (object); } static void -gsd_a11y_keyboard_manager_class_init (GsdA11yKeyboardManagerClass *klass) +msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->get_property = gsd_a11y_keyboard_manager_get_property; - object_class->set_property = gsd_a11y_keyboard_manager_set_property; - object_class->constructor = gsd_a11y_keyboard_manager_constructor; - object_class->dispose = gsd_a11y_keyboard_manager_dispose; - object_class->finalize = gsd_a11y_keyboard_manager_finalize; + object_class->get_property = msd_a11y_keyboard_manager_get_property; + object_class->set_property = msd_a11y_keyboard_manager_set_property; + object_class->constructor = msd_a11y_keyboard_manager_constructor; + object_class->dispose = msd_a11y_keyboard_manager_dispose; + object_class->finalize = msd_a11y_keyboard_manager_finalize; - g_type_class_add_private (klass, sizeof (GsdA11yKeyboardManagerPrivate)); + g_type_class_add_private (klass, sizeof (MsdA11yKeyboardManagerPrivate)); } static void on_preferences_dialog_response (GtkDialog *dialog, int response, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { g_signal_handlers_disconnect_by_func (dialog, on_preferences_dialog_response, @@ -1271,10 +1271,10 @@ on_preferences_dialog_response (GtkDialog *dialog, static void on_status_icon_activate (GtkStatusIcon *status_icon, - GsdA11yKeyboardManager *manager) + MsdA11yKeyboardManager *manager) { if (manager->priv->preferences_dialog == NULL) { - manager->priv->preferences_dialog = gsd_a11y_preferences_dialog_new (); + manager->priv->preferences_dialog = msd_a11y_preferences_dialog_new (); g_signal_connect (manager->priv->preferences_dialog, "response", G_CALLBACK (on_preferences_dialog_response), @@ -1291,7 +1291,7 @@ on_status_icon_activate (GtkStatusIcon *status_icon, } static void -gsd_a11y_keyboard_manager_ensure_status_icon (GsdA11yKeyboardManager *manager) +msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager) { mate_settings_profile_start (NULL); @@ -1308,9 +1308,9 @@ gsd_a11y_keyboard_manager_ensure_status_icon (GsdA11yKeyboardManager *manager) } static void -gsd_a11y_keyboard_manager_init (GsdA11yKeyboardManager *manager) +msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *manager) { - manager->priv = GSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE (manager); + manager->priv = MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE (manager); #ifdef HAVE_LIBMATENOTIFY notify_init ("mate-settings-daemon"); @@ -1318,30 +1318,30 @@ gsd_a11y_keyboard_manager_init (GsdA11yKeyboardManager *manager) } static void -gsd_a11y_keyboard_manager_finalize (GObject *object) +msd_a11y_keyboard_manager_finalize (GObject *object) { - GsdA11yKeyboardManager *a11y_keyboard_manager; + MsdA11yKeyboardManager *a11y_keyboard_manager; g_return_if_fail (object != NULL); - g_return_if_fail (GSD_IS_A11Y_KEYBOARD_MANAGER (object)); + g_return_if_fail (MSD_IS_A11Y_KEYBOARD_MANAGER (object)); - a11y_keyboard_manager = GSD_A11Y_KEYBOARD_MANAGER (object); + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); g_return_if_fail (a11y_keyboard_manager->priv != NULL); - G_OBJECT_CLASS (gsd_a11y_keyboard_manager_parent_class)->finalize (object); + G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->finalize (object); } -GsdA11yKeyboardManager * -gsd_a11y_keyboard_manager_new (void) +MsdA11yKeyboardManager * +msd_a11y_keyboard_manager_new (void) { if (manager_object != NULL) { g_object_ref (manager_object); } else { - manager_object = g_object_new (GSD_TYPE_A11Y_KEYBOARD_MANAGER, NULL); + manager_object = g_object_new (MSD_TYPE_A11Y_KEYBOARD_MANAGER, NULL); g_object_add_weak_pointer (manager_object, (gpointer *) &manager_object); } - return GSD_A11Y_KEYBOARD_MANAGER (manager_object); + return MSD_A11Y_KEYBOARD_MANAGER (manager_object); } diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h index 4fb817f..1869cf4 100644 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h +++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h @@ -18,8 +18,8 @@ * */ -#ifndef __GSD_A11Y_KEYBOARD_MANAGER_H -#define __GSD_A11Y_KEYBOARD_MANAGER_H +#ifndef __MSD_A11Y_KEYBOARD_MANAGER_H +#define __MSD_A11Y_KEYBOARD_MANAGER_H #include @@ -27,35 +27,35 @@ extern "C" { #endif -#define GSD_TYPE_A11Y_KEYBOARD_MANAGER (gsd_a11y_keyboard_manager_get_type ()) -#define GSD_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_TYPE_A11Y_KEYBOARD_MANAGER, GsdA11yKeyboardManager)) -#define GSD_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_A11Y_KEYBOARD_MANAGER, GsdA11yKeyboardManagerClass)) -#define GSD_IS_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_TYPE_A11Y_KEYBOARD_MANAGER)) -#define GSD_IS_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_TYPE_A11Y_KEYBOARD_MANAGER)) -#define GSD_A11Y_KEYBOARD_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_TYPE_A11Y_KEYBOARD_MANAGER, GsdA11yKeyboardManagerClass)) +#define MSD_TYPE_A11Y_KEYBOARD_MANAGER (msd_a11y_keyboard_manager_get_type ()) +#define MSD_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManager)) +#define MSD_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) +#define MSD_IS_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) +#define MSD_IS_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) +#define MSD_A11Y_KEYBOARD_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) -typedef struct GsdA11yKeyboardManagerPrivate GsdA11yKeyboardManagerPrivate; +typedef struct MsdA11yKeyboardManagerPrivate MsdA11yKeyboardManagerPrivate; typedef struct { GObject parent; - GsdA11yKeyboardManagerPrivate *priv; -} GsdA11yKeyboardManager; + MsdA11yKeyboardManagerPrivate *priv; +} MsdA11yKeyboardManager; typedef struct { GObjectClass parent_class; -} GsdA11yKeyboardManagerClass; +} MsdA11yKeyboardManagerClass; -GType gsd_a11y_keyboard_manager_get_type (void); +GType msd_a11y_keyboard_manager_get_type (void); -GsdA11yKeyboardManager *gsd_a11y_keyboard_manager_new (void); -gboolean gsd_a11y_keyboard_manager_start (GsdA11yKeyboardManager *manager, +MsdA11yKeyboardManager *msd_a11y_keyboard_manager_new (void); +gboolean msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, GError **error); -void gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager); +void msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager); #ifdef __cplusplus } #endif -#endif /* __GSD_A11Y_KEYBOARD_MANAGER_H */ +#endif /* __MSD_A11Y_KEYBOARD_MANAGER_H */ diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c index 7846ba6..7eed1c4 100644 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c +++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c @@ -24,38 +24,38 @@ #include #include "mate-settings-plugin.h" -#include "gsd-a11y-keyboard-plugin.h" -#include "gsd-a11y-keyboard-manager.h" +#include "msd-a11y-keyboard-plugin.h" +#include "msd-a11y-keyboard-manager.h" -struct GsdA11yKeyboardPluginPrivate { - GsdA11yKeyboardManager *manager; +struct MsdA11yKeyboardPluginPrivate { + MsdA11yKeyboardManager *manager; }; -#define GSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), GSD_TYPE_A11Y_KEYBOARD_PLUGIN, GsdA11yKeyboardPluginPrivate)) +#define MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginPrivate)) -MATE_SETTINGS_PLUGIN_REGISTER (GsdA11yKeyboardPlugin, gsd_a11y_keyboard_plugin) +MATE_SETTINGS_PLUGIN_REGISTER (MsdA11yKeyboardPlugin, msd_a11y_keyboard_plugin) static void -gsd_a11y_keyboard_plugin_init (GsdA11yKeyboardPlugin *plugin) +msd_a11y_keyboard_plugin_init (MsdA11yKeyboardPlugin *plugin) { - plugin->priv = GSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE (plugin); + plugin->priv = MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE (plugin); - g_debug ("GsdA11yKeyboardPlugin initializing"); + g_debug ("MsdA11yKeyboardPlugin initializing"); - plugin->priv->manager = gsd_a11y_keyboard_manager_new (); + plugin->priv->manager = msd_a11y_keyboard_manager_new (); } static void -gsd_a11y_keyboard_plugin_finalize (GObject *object) +msd_a11y_keyboard_plugin_finalize (GObject *object) { - GsdA11yKeyboardPlugin *plugin; + MsdA11yKeyboardPlugin *plugin; g_return_if_fail (object != NULL); - g_return_if_fail (GSD_IS_A11Y_KEYBOARD_PLUGIN (object)); + g_return_if_fail (MSD_IS_A11Y_KEYBOARD_PLUGIN (object)); - g_debug ("GsdA11yKeyboardPlugin finalizing"); + g_debug ("MsdA11yKeyboardPlugin finalizing"); - plugin = GSD_A11Y_KEYBOARD_PLUGIN (object); + plugin = MSD_A11Y_KEYBOARD_PLUGIN (object); g_return_if_fail (plugin->priv != NULL); @@ -63,7 +63,7 @@ gsd_a11y_keyboard_plugin_finalize (GObject *object) g_object_unref (plugin->priv->manager); } - G_OBJECT_CLASS (gsd_a11y_keyboard_plugin_parent_class)->finalize (object); + G_OBJECT_CLASS (msd_a11y_keyboard_plugin_parent_class)->finalize (object); } static void @@ -75,7 +75,7 @@ impl_activate (MateSettingsPlugin *plugin) g_debug ("Activating a11y_keyboard plugin"); error = NULL; - res = gsd_a11y_keyboard_manager_start (GSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager, &error); + res = msd_a11y_keyboard_manager_start (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager, &error); if (! res) { g_warning ("Unable to start a11y_keyboard manager: %s", error->message); g_error_free (error); @@ -86,19 +86,19 @@ static void impl_deactivate (MateSettingsPlugin *plugin) { g_debug ("Deactivating a11y_keyboard plugin"); - gsd_a11y_keyboard_manager_stop (GSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager); + msd_a11y_keyboard_manager_stop (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager); } static void -gsd_a11y_keyboard_plugin_class_init (GsdA11yKeyboardPluginClass *klass) +msd_a11y_keyboard_plugin_class_init (MsdA11yKeyboardPluginClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); MateSettingsPluginClass *plugin_class = MATE_SETTINGS_PLUGIN_CLASS (klass); - object_class->finalize = gsd_a11y_keyboard_plugin_finalize; + object_class->finalize = msd_a11y_keyboard_plugin_finalize; plugin_class->activate = impl_activate; plugin_class->deactivate = impl_deactivate; - g_type_class_add_private (klass, sizeof (GsdA11yKeyboardPluginPrivate)); + g_type_class_add_private (klass, sizeof (MsdA11yKeyboardPluginPrivate)); } diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h index ebf246c..f4b8320 100644 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h +++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h @@ -18,8 +18,8 @@ * */ -#ifndef __GSD_A11Y_KEYBOARD_PLUGIN_H__ -#define __GSD_A11Y_KEYBOARD_PLUGIN_H__ +#ifndef __MSD_A11Y_KEYBOARD_PLUGIN_H__ +#define __MSD_A11Y_KEYBOARD_PLUGIN_H__ #include #include @@ -31,27 +31,27 @@ extern "C" { #endif -#define GSD_TYPE_A11Y_KEYBOARD_PLUGIN (gsd_a11y_keyboard_plugin_get_type ()) -#define GSD_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_TYPE_A11Y_KEYBOARD_PLUGIN, GsdA11yKeyboardPlugin)) -#define GSD_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_A11Y_KEYBOARD_PLUGIN, GsdA11yKeyboardPluginClass)) -#define GSD_IS_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_TYPE_A11Y_KEYBOARD_PLUGIN)) -#define GSD_IS_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_TYPE_A11Y_KEYBOARD_PLUGIN)) -#define GSD_A11Y_KEYBOARD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_TYPE_A11Y_KEYBOARD_PLUGIN, GsdA11yKeyboardPluginClass)) +#define MSD_TYPE_A11Y_KEYBOARD_PLUGIN (msd_a11y_keyboard_plugin_get_type ()) +#define MSD_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPlugin)) +#define MSD_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) +#define MSD_IS_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) +#define MSD_IS_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) +#define MSD_A11Y_KEYBOARD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) -typedef struct GsdA11yKeyboardPluginPrivate GsdA11yKeyboardPluginPrivate; +typedef struct MsdA11yKeyboardPluginPrivate MsdA11yKeyboardPluginPrivate; typedef struct { MateSettingsPlugin parent; - GsdA11yKeyboardPluginPrivate *priv; -} GsdA11yKeyboardPlugin; + MsdA11yKeyboardPluginPrivate *priv; +} MsdA11yKeyboardPlugin; typedef struct { MateSettingsPluginClass parent_class; -} GsdA11yKeyboardPluginClass; +} MsdA11yKeyboardPluginClass; -GType gsd_a11y_keyboard_plugin_get_type (void) G_GNUC_CONST; +GType msd_a11y_keyboard_plugin_get_type (void) G_GNUC_CONST; /* All the plugins must implement this function */ G_MODULE_EXPORT GType register_mate_settings_plugin (GTypeModule *module); @@ -60,4 +60,4 @@ G_MODULE_EXPORT GType register_mate_settings_plugin (GTypeModule *module); } #endif -#endif /* __GSD_A11Y_KEYBOARD_PLUGIN_H__ */ +#endif /* __MSD_A11Y_KEYBOARD_PLUGIN_H__ */ diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c index 752ee18..a5db11c 100644 --- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c +++ b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c @@ -34,16 +34,16 @@ #include -#include "gsd-a11y-preferences-dialog.h" +#include "msd-a11y-preferences-dialog.h" #define SM_DBUS_NAME "org.mate.SessionManager" #define SM_DBUS_PATH "/org/mate/SessionManager" #define SM_DBUS_INTERFACE "org.mate.SessionManager" -#define GSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_A11Y_PREFERENCES_DIALOG, GsdA11yPreferencesDialogPrivate)) +#define MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogPrivate)) -#define GTKBUILDER_UI_FILE "gsd-a11y-preferences-dialog.ui" +#define GTKBUILDER_UI_FILE "msd-a11y-preferences-dialog.ui" #define KEY_A11Y_DIR "/desktop/mate/accessibility" #define KEY_STICKY_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/stickykeys_enable" @@ -83,7 +83,7 @@ #define HIGH_CONTRAST_THEME "HighContrast" -struct GsdA11yPreferencesDialogPrivate +struct MsdA11yPreferencesDialogPrivate { GtkWidget *sticky_keys_checkbutton; GtkWidget *slow_keys_checkbutton; @@ -97,21 +97,21 @@ struct GsdA11yPreferencesDialogPrivate GtkWidget *screen_magnifier_checkbutton; guint a11y_dir_cnxn; - guint gsd_a11y_dir_cnxn; + guint msd_a11y_dir_cnxn; }; enum { PROP_0, }; -static void gsd_a11y_preferences_dialog_class_init (GsdA11yPreferencesDialogClass *klass); -static void gsd_a11y_preferences_dialog_init (GsdA11yPreferencesDialog *a11y_preferences_dialog); -static void gsd_a11y_preferences_dialog_finalize (GObject *object); +static void msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass); +static void msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *a11y_preferences_dialog); +static void msd_a11y_preferences_dialog_finalize (GObject *object); -G_DEFINE_TYPE (GsdA11yPreferencesDialog, gsd_a11y_preferences_dialog, GTK_TYPE_DIALOG) +G_DEFINE_TYPE (MsdA11yPreferencesDialog, msd_a11y_preferences_dialog, GTK_TYPE_DIALOG) static void -gsd_a11y_preferences_dialog_set_property (GObject *object, +msd_a11y_preferences_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) @@ -124,7 +124,7 @@ gsd_a11y_preferences_dialog_set_property (GObject *object, } static void -gsd_a11y_preferences_dialog_get_property (GObject *object, +msd_a11y_preferences_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) @@ -137,13 +137,13 @@ gsd_a11y_preferences_dialog_get_property (GObject *object, } static GObject * -gsd_a11y_preferences_dialog_constructor (GType type, +msd_a11y_preferences_dialog_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { - GsdA11yPreferencesDialog *a11y_preferences_dialog; + MsdA11yPreferencesDialog *a11y_preferences_dialog; - a11y_preferences_dialog = GSD_A11Y_PREFERENCES_DIALOG (G_OBJECT_CLASS (gsd_a11y_preferences_dialog_parent_class)->constructor (type, + a11y_preferences_dialog = MSD_A11Y_PREFERENCES_DIALOG (G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->constructor (type, n_construct_properties, construct_properties)); @@ -151,27 +151,27 @@ gsd_a11y_preferences_dialog_constructor (GType type, } static void -gsd_a11y_preferences_dialog_dispose (GObject *object) +msd_a11y_preferences_dialog_dispose (GObject *object) { - G_OBJECT_CLASS (gsd_a11y_preferences_dialog_parent_class)->dispose (object); + G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->dispose (object); } static void -gsd_a11y_preferences_dialog_class_init (GsdA11yPreferencesDialogClass *klass) +msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->get_property = gsd_a11y_preferences_dialog_get_property; - object_class->set_property = gsd_a11y_preferences_dialog_set_property; - object_class->constructor = gsd_a11y_preferences_dialog_constructor; - object_class->dispose = gsd_a11y_preferences_dialog_dispose; - object_class->finalize = gsd_a11y_preferences_dialog_finalize; + object_class->get_property = msd_a11y_preferences_dialog_get_property; + object_class->set_property = msd_a11y_preferences_dialog_set_property; + object_class->constructor = msd_a11y_preferences_dialog_constructor; + object_class->dispose = msd_a11y_preferences_dialog_dispose; + object_class->finalize = msd_a11y_preferences_dialog_finalize; - g_type_class_add_private (klass, sizeof (GsdA11yPreferencesDialogPrivate)); + g_type_class_add_private (klass, sizeof (MsdA11yPreferencesDialogPrivate)); } static void -on_response (GsdA11yPreferencesDialog *dialog, +on_response (MsdA11yPreferencesDialog *dialog, gint response_id) { switch (response_id) { @@ -293,7 +293,7 @@ config_get_large_print (gboolean *is_writable) g_object_unref (client); - g_debug ("GsdA11yPreferences: got x-dpi=%f user-dpi=%f", x_dpi, u_dpi); + g_debug ("MsdA11yPreferences: got x-dpi=%f user-dpi=%f", x_dpi, u_dpi); ret = (((double)DPI_FACTOR_LARGE * x_dpi) < u_dpi); @@ -314,7 +314,7 @@ config_set_large_print (gboolean enabled) x_dpi = get_dpi_from_x_server (); u_dpi = (double)DPI_FACTOR_LARGER * x_dpi; - g_debug ("GsdA11yPreferences: setting x-dpi=%f user-dpi=%f", x_dpi, u_dpi); + g_debug ("MsdA11yPreferences: setting x-dpi=%f user-dpi=%f", x_dpi, u_dpi); mateconf_client_set_float (client, KEY_FONT_DPI, u_dpi, NULL); } else { @@ -501,62 +501,62 @@ config_set_at_screen_magnifier (gboolean enabled) static void on_sticky_keys_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_sticky_keys (gtk_toggle_button_get_active (button)); } static void on_bounce_keys_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_bounce_keys (gtk_toggle_button_get_active (button)); } static void on_slow_keys_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_slow_keys (gtk_toggle_button_get_active (button)); } static void on_high_contrast_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_high_contrast (gtk_toggle_button_get_active (button)); } static void on_at_screen_reader_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_at_screen_reader (gtk_toggle_button_get_active (button)); } static void on_at_screen_keyboard_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_at_screen_keyboard (gtk_toggle_button_get_active (button)); } static void on_at_screen_magnifier_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_at_screen_magnifier (gtk_toggle_button_get_active (button)); } static void on_large_print_checkbutton_toggled (GtkToggleButton *button, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { config_set_large_print (gtk_toggle_button_get_active (button)); } static void -ui_set_sticky_keys (GsdA11yPreferencesDialog *dialog, +ui_set_sticky_keys (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -568,7 +568,7 @@ ui_set_sticky_keys (GsdA11yPreferencesDialog *dialog, } static void -ui_set_bounce_keys (GsdA11yPreferencesDialog *dialog, +ui_set_bounce_keys (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -580,7 +580,7 @@ ui_set_bounce_keys (GsdA11yPreferencesDialog *dialog, } static void -ui_set_slow_keys (GsdA11yPreferencesDialog *dialog, +ui_set_slow_keys (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -592,7 +592,7 @@ ui_set_slow_keys (GsdA11yPreferencesDialog *dialog, } static void -ui_set_high_contrast (GsdA11yPreferencesDialog *dialog, +ui_set_high_contrast (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -604,7 +604,7 @@ ui_set_high_contrast (GsdA11yPreferencesDialog *dialog, } static void -ui_set_at_screen_reader (GsdA11yPreferencesDialog *dialog, +ui_set_at_screen_reader (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -616,7 +616,7 @@ ui_set_at_screen_reader (GsdA11yPreferencesDialog *dialog, } static void -ui_set_at_screen_keyboard (GsdA11yPreferencesDialog *dialog, +ui_set_at_screen_keyboard (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -628,7 +628,7 @@ ui_set_at_screen_keyboard (GsdA11yPreferencesDialog *dialog, } static void -ui_set_at_screen_magnifier (GsdA11yPreferencesDialog *dialog, +ui_set_at_screen_magnifier (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -640,7 +640,7 @@ ui_set_at_screen_magnifier (GsdA11yPreferencesDialog *dialog, } static void -ui_set_large_print (GsdA11yPreferencesDialog *dialog, +ui_set_large_print (MsdA11yPreferencesDialog *dialog, gboolean enabled) { gboolean active; @@ -655,7 +655,7 @@ static void key_changed_cb (MateConfClient *client, guint cnxn_id, MateConfEntry *entry, - GsdA11yPreferencesDialog *dialog) + MsdA11yPreferencesDialog *dialog) { const char *key; MateConfValue *value; @@ -729,7 +729,7 @@ key_changed_cb (MateConfClient *client, } static void -setup_dialog (GsdA11yPreferencesDialog *dialog, +setup_dialog (MsdA11yPreferencesDialog *dialog, GtkBuilder *builder) { GtkWidget *widget; @@ -876,7 +876,7 @@ setup_dialog (GsdA11yPreferencesDialog *dialog, KEY_AT_DIR, MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); - dialog->priv->gsd_a11y_dir_cnxn = mateconf_client_notify_add (client, + dialog->priv->msd_a11y_dir_cnxn = mateconf_client_notify_add (client, KEY_AT_DIR, (MateConfClientNotifyFunc)key_changed_cb, dialog, @@ -887,14 +887,14 @@ setup_dialog (GsdA11yPreferencesDialog *dialog, } static void -gsd_a11y_preferences_dialog_init (GsdA11yPreferencesDialog *dialog) +msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *dialog) { static const gchar *ui_file_path = GTKBUILDERDIR "/" GTKBUILDER_UI_FILE; gchar *objects[] = {"main_box", NULL}; GError *error = NULL; GtkBuilder *builder; - dialog->priv = GSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE (dialog); + dialog->priv = MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE (dialog); builder = gtk_builder_new (); gtk_builder_set_translation_domain (builder, PACKAGE); @@ -937,15 +937,15 @@ gsd_a11y_preferences_dialog_init (GsdA11yPreferencesDialog *dialog) } static void -gsd_a11y_preferences_dialog_finalize (GObject *object) +msd_a11y_preferences_dialog_finalize (GObject *object) { - GsdA11yPreferencesDialog *dialog; + MsdA11yPreferencesDialog *dialog; MateConfClient *client; g_return_if_fail (object != NULL); - g_return_if_fail (GSD_IS_A11Y_PREFERENCES_DIALOG (object)); + g_return_if_fail (MSD_IS_A11Y_PREFERENCES_DIALOG (object)); - dialog = GSD_A11Y_PREFERENCES_DIALOG (object); + dialog = MSD_A11Y_PREFERENCES_DIALOG (object); g_return_if_fail (dialog->priv != NULL); @@ -954,21 +954,21 @@ gsd_a11y_preferences_dialog_finalize (GObject *object) if (dialog->priv->a11y_dir_cnxn > 0) { mateconf_client_notify_remove (client, dialog->priv->a11y_dir_cnxn); } - if (dialog->priv->gsd_a11y_dir_cnxn > 0) { - mateconf_client_notify_remove (client, dialog->priv->gsd_a11y_dir_cnxn); + if (dialog->priv->msd_a11y_dir_cnxn > 0) { + mateconf_client_notify_remove (client, dialog->priv->msd_a11y_dir_cnxn); } g_object_unref (client); - G_OBJECT_CLASS (gsd_a11y_preferences_dialog_parent_class)->finalize (object); + G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->finalize (object); } GtkWidget * -gsd_a11y_preferences_dialog_new (void) +msd_a11y_preferences_dialog_new (void) { GObject *object; - object = g_object_new (GSD_TYPE_A11Y_PREFERENCES_DIALOG, + object = g_object_new (MSD_TYPE_A11Y_PREFERENCES_DIALOG, NULL); return GTK_WIDGET (object); diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h index 2be096a..967a94e 100644 --- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h +++ b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h @@ -18,8 +18,8 @@ * */ -#ifndef __GSD_A11Y_PREFERENCES_DIALOG_H -#define __GSD_A11Y_PREFERENCES_DIALOG_H +#ifndef __MSD_A11Y_PREFERENCES_DIALOG_H +#define __MSD_A11Y_PREFERENCES_DIALOG_H #include #include @@ -28,32 +28,32 @@ extern "C" { #endif -#define GSD_TYPE_A11Y_PREFERENCES_DIALOG (gsd_a11y_preferences_dialog_get_type ()) -#define GSD_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_TYPE_A11Y_PREFERENCES_DIALOG, GsdA11yPreferencesDialog)) -#define GSD_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_A11Y_PREFERENCES_DIALOG, GsdA11yPreferencesDialogClass)) -#define GSD_IS_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_TYPE_A11Y_PREFERENCES_DIALOG)) -#define GSD_IS_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_TYPE_A11Y_PREFERENCES_DIALOG)) -#define GSD_A11Y_PREFERENCES_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_TYPE_A11Y_PREFERENCES_DIALOG, GsdA11yPreferencesDialogClass)) +#define MSD_TYPE_A11Y_PREFERENCES_DIALOG (msd_a11y_preferences_dialog_get_type ()) +#define MSD_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialog)) +#define MSD_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) +#define MSD_IS_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) +#define MSD_IS_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) +#define MSD_A11Y_PREFERENCES_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) -typedef struct GsdA11yPreferencesDialogPrivate GsdA11yPreferencesDialogPrivate; +typedef struct MsdA11yPreferencesDialogPrivate MsdA11yPreferencesDialogPrivate; typedef struct { GtkDialog parent; - GsdA11yPreferencesDialogPrivate *priv; -} GsdA11yPreferencesDialog; + MsdA11yPreferencesDialogPrivate *priv; +} MsdA11yPreferencesDialog; typedef struct { GtkDialogClass parent_class; -} GsdA11yPreferencesDialogClass; +} MsdA11yPreferencesDialogClass; -GType gsd_a11y_preferences_dialog_get_type (void); +GType msd_a11y_preferences_dialog_get_type (void); -GtkWidget * gsd_a11y_preferences_dialog_new (void); +GtkWidget * msd_a11y_preferences_dialog_new (void); #ifdef __cplusplus } #endif -#endif /* __GSD_A11Y_PREFERENCES_DIALOG_H */ +#endif /* __MSD_A11Y_PREFERENCES_DIALOG_H */ diff --git a/plugins/a11y-keyboard/test-a11y-preferences-dialog.c b/plugins/a11y-keyboard/test-a11y-preferences-dialog.c index 343f61c..0325a36 100644 --- a/plugins/a11y-keyboard/test-a11y-preferences-dialog.c +++ b/plugins/a11y-keyboard/test-a11y-preferences-dialog.c @@ -27,14 +27,14 @@ #include #include -#include "gsd-a11y-preferences-dialog.h" +#include "msd-a11y-preferences-dialog.h" static void test_window (void) { GtkWidget *window; - window = gsd_a11y_preferences_dialog_new (); + window = msd_a11y_preferences_dialog_new (); gtk_dialog_run (GTK_DIALOG (window)); } -- cgit v1.2.1 From e46b4adef5c6c6805b3ca6dbfbe99a4299252514 Mon Sep 17 00:00:00 2001 From: haxar Date: Tue, 21 Feb 2012 20:14:01 -0800 Subject: gsd to msd complete rename patch by NiceandGently; file rename commit --- plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c | 1347 -------------------- plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h | 61 - plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c | 104 -- plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h | 63 - .../a11y-keyboard/gsd-a11y-preferences-dialog.c | 975 -------------- .../a11y-keyboard/gsd-a11y-preferences-dialog.h | 59 - .../a11y-keyboard/gsd-a11y-preferences-dialog.ui | 199 --- plugins/a11y-keyboard/msd-a11y-keyboard-manager.c | 1347 ++++++++++++++++++++ plugins/a11y-keyboard/msd-a11y-keyboard-manager.h | 61 + plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c | 104 ++ plugins/a11y-keyboard/msd-a11y-keyboard-plugin.h | 63 + .../a11y-keyboard/msd-a11y-preferences-dialog.c | 975 ++++++++++++++ .../a11y-keyboard/msd-a11y-preferences-dialog.h | 59 + .../a11y-keyboard/msd-a11y-preferences-dialog.ui | 199 +++ 14 files changed, 2808 insertions(+), 2808 deletions(-) delete mode 100644 plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c delete mode 100644 plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h delete mode 100644 plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c delete mode 100644 plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h delete mode 100644 plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c delete mode 100644 plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h delete mode 100644 plugins/a11y-keyboard/gsd-a11y-preferences-dialog.ui create mode 100644 plugins/a11y-keyboard/msd-a11y-keyboard-manager.c create mode 100644 plugins/a11y-keyboard/msd-a11y-keyboard-manager.h create mode 100644 plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c create mode 100644 plugins/a11y-keyboard/msd-a11y-keyboard-plugin.h create mode 100644 plugins/a11y-keyboard/msd-a11y-preferences-dialog.c create mode 100644 plugins/a11y-keyboard/msd-a11y-preferences-dialog.h create mode 100644 plugins/a11y-keyboard/msd-a11y-preferences-dialog.ui (limited to 'plugins/a11y-keyboard') diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c deleted file mode 100644 index 7505b14..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c +++ /dev/null @@ -1,1347 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright © 2001 Ximian, Inc. - * Copyright (C) 2007 William Jon McCann - * - * 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. - * - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifdef HAVE_X11_EXTENSIONS_XINPUT_H -#include -#include -#endif - -#ifdef HAVE_LIBMATENOTIFY -#include -#endif /* HAVE_LIBMATENOTIFY */ - -#include "mate-settings-profile.h" -#include "msd-a11y-keyboard-manager.h" -#include "msd-a11y-preferences-dialog.h" - -#define CONFIG_ROOT "/desktop/mate/accessibility/keyboard" -#define NOTIFICATION_TIMEOUT 30 - -#define MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerPrivate)) - -struct MsdA11yKeyboardManagerPrivate -{ - int xkbEventBase; - gboolean stickykeys_shortcut_val; - gboolean slowkeys_shortcut_val; - GtkWidget *stickykeys_alert; - GtkWidget *slowkeys_alert; - GtkWidget *preferences_dialog; - GtkStatusIcon *status_icon; - XkbDescRec *original_xkb_desc; - - guint mateconf_notify; - -#ifdef HAVE_LIBMATENOTIFY - NotifyNotification *notification; -#endif /* HAVE_LIBMATENOTIFY */ -}; - -static void msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass); -static void msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *a11y_keyboard_manager); -static void msd_a11y_keyboard_manager_finalize (GObject *object); -static void msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager); -static void set_server_from_mateconf (MsdA11yKeyboardManager *manager, - MateConfClient *client); - -G_DEFINE_TYPE (MsdA11yKeyboardManager, msd_a11y_keyboard_manager, G_TYPE_OBJECT) - -static gpointer manager_object = NULL; - -#undef DEBUG_ACCESSIBILITY -#ifdef DEBUG_ACCESSIBILITY -#define d(str) g_debug (str) -#else -#define d(str) do { } while (0) -#endif - -#ifdef HAVE_X11_EXTENSIONS_XINPUT_H -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) { - MateConfClient *client; - client = mateconf_client_get_default (); - set_server_from_mateconf (data, client); - g_object_unref (client); - } - } - return GDK_FILTER_CONTINUE; -} - -static gboolean -supports_xinput_devices (void) -{ - gint op_code, event, error; - - return XQueryExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), - "XInputExtension", - &op_code, - &event, - &error); -} - -static void -set_devicepresence_handler (MsdA11yKeyboardManager *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); - /* FIXME: - * Note that this might overwrite other events, see: - * https://bugzilla.gnome.org/show_bug.cgi?id=610245#c2 - **/ - 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 gboolean -xkb_enabled (MsdA11yKeyboardManager *manager) -{ - gboolean have_xkb; - int opcode, errorBase, major, minor; - - have_xkb = XkbQueryExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), - &opcode, - &manager->priv->xkbEventBase, - &errorBase, - &major, - &minor) - && XkbUseExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), &major, &minor); - - return have_xkb; -} - -static XkbDescRec * -get_xkb_desc_rec (MsdA11yKeyboardManager *manager) -{ - XkbDescRec *desc; - Status status = Success; - - gdk_error_trap_push (); - desc = XkbGetMap (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbAllMapComponentsMask, XkbUseCoreKbd); - if (desc != NULL) { - desc->ctrls = NULL; - status = XkbGetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbAllControlsMask, desc); - } - gdk_error_trap_pop (); - - g_return_val_if_fail (desc != NULL, NULL); - g_return_val_if_fail (desc->ctrls != NULL, NULL); - g_return_val_if_fail (status == Success, NULL); - - return desc; -} - -static int -get_int (MateConfClient *client, - char const *key) -{ - int res = mateconf_client_get_int (client, key, NULL); - if (res <= 0) { - res = 1; - } - return res; -} - -static gboolean -set_int (MateConfClient *client, - MateConfChangeSet *cs, - char const *key, - int val) -{ - mateconf_change_set_set_int (cs, key, val); -#ifdef DEBUG_ACCESSIBILITY - if (val != mateconf_client_get_int (client, key, NULL)) { - g_warning ("%s changed", key); - } -#endif - return val != mateconf_client_get_int (client, key, NULL); -} - -static gboolean -set_bool (MateConfClient *client, - MateConfChangeSet *cs, - char const *key, - int val) -{ - gboolean bval = (val != 0); - - mateconf_change_set_set_bool (cs, key, bval ? TRUE : FALSE); -#ifdef DEBUG_ACCESSIBILITY - if (bval != mateconf_client_get_bool (client, key, NULL)) { - d ("%s changed", key); - return TRUE; - } -#endif - return (bval != mateconf_client_get_bool (client, key, NULL)); -} - -static unsigned long -set_clear (gboolean flag, - unsigned long value, - unsigned long mask) -{ - if (flag) { - return value | mask; - } - return value & ~mask; -} - -static gboolean -set_ctrl_from_mateconf (XkbDescRec *desc, - MateConfClient *client, - char const *key, - unsigned long mask) -{ - gboolean result = mateconf_client_get_bool (client, key, NULL); - desc->ctrls->enabled_ctrls = set_clear (result, desc->ctrls->enabled_ctrls, mask); - return result; -} - -static void -set_server_from_mateconf (MsdA11yKeyboardManager *manager, - MateConfClient *client) -{ - XkbDescRec *desc; - gboolean enable_accessX; - - mate_settings_profile_start (NULL); - - desc = get_xkb_desc_rec (manager); - if (!desc) { - return; - } - - /* general */ - enable_accessX = mateconf_client_get_bool (client, CONFIG_ROOT "/enable", NULL); - - desc->ctrls->enabled_ctrls = set_clear (enable_accessX, - desc->ctrls->enabled_ctrls, - XkbAccessXKeysMask); - - if (set_ctrl_from_mateconf (desc, client, CONFIG_ROOT "/timeout_enable", - XkbAccessXTimeoutMask)) { - desc->ctrls->ax_timeout = get_int (client, - CONFIG_ROOT "/timeout"); - /* disable only the master flag via the server we will disable - * the rest on the rebound without affecting mateconf state - * don't change the option flags at all. - */ - desc->ctrls->axt_ctrls_mask = XkbAccessXKeysMask | XkbAccessXFeedbackMask; - desc->ctrls->axt_ctrls_values = 0; - desc->ctrls->axt_opts_mask = 0; - } - - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/feature_state_change_beep", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); - - /* bounce keys */ - if (set_ctrl_from_mateconf (desc, - client, - CONFIG_ROOT "/bouncekeys_enable", - XkbBounceKeysMask)) { - desc->ctrls->debounce_delay = get_int (client, - CONFIG_ROOT "/bouncekeys_delay"); - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/bouncekeys_beep_reject", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_BKRejectFBMask); - } - - /* mouse keys */ - if (set_ctrl_from_mateconf (desc, - client, - CONFIG_ROOT "/mousekeys_enable", - XkbMouseKeysMask | XkbMouseKeysAccelMask)) { - desc->ctrls->mk_interval = 100; /* msec between mousekey events */ - desc->ctrls->mk_curve = 50; - - /* We store pixels / sec, XKB wants pixels / event */ - desc->ctrls->mk_max_speed = get_int (client, - CONFIG_ROOT "/mousekeys_max_speed") / (1000 / desc->ctrls->mk_interval); - if (desc->ctrls->mk_max_speed <= 0) - desc->ctrls->mk_max_speed = 1; - - desc->ctrls->mk_time_to_max = get_int (client, /* events before max */ - CONFIG_ROOT "/mousekeys_accel_time") / desc->ctrls->mk_interval; - if (desc->ctrls->mk_time_to_max <= 0) - desc->ctrls->mk_time_to_max = 1; - - desc->ctrls->mk_delay = get_int (client, /* ms before 1st event */ - CONFIG_ROOT "/mousekeys_init_delay"); - } - - /* slow keys */ - if (set_ctrl_from_mateconf (desc, - client, - CONFIG_ROOT "/slowkeys_enable", - XkbSlowKeysMask)) { - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_press", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_SKPressFBMask); - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_accept", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_SKAcceptFBMask); - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_reject", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_SKRejectFBMask); - desc->ctrls->slow_keys_delay = get_int (client, - CONFIG_ROOT "/slowkeys_delay"); - /* anything larger than 500 seems to loose all keyboard input */ - if (desc->ctrls->slow_keys_delay > 500) - desc->ctrls->slow_keys_delay = 500; - } - - /* sticky keys */ - if (set_ctrl_from_mateconf (desc, - client, - CONFIG_ROOT "/stickykeys_enable", - XkbStickyKeysMask)) { - desc->ctrls->ax_options |= XkbAX_LatchToLockMask; - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/stickykeys_two_key_off", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_TwoKeysMask); - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/stickykeys_modifier_beep", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_StickyKeysFBMask); - } - - /* toggle keys */ - desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/togglekeys_enable", NULL), - desc->ctrls->ax_options, - XkbAccessXFeedbackMask | XkbAX_IndicatorFBMask); - - /* - g_debug ("CHANGE to : 0x%x", desc->ctrls->enabled_ctrls); - g_debug ("CHANGE to : 0x%x (2)", desc->ctrls->ax_options); - */ - - gdk_error_trap_push (); - XkbSetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), - XkbSlowKeysMask | - XkbBounceKeysMask | - XkbStickyKeysMask | - XkbMouseKeysMask | - XkbMouseKeysAccelMask | - XkbAccessXKeysMask | - XkbAccessXTimeoutMask | - XkbAccessXFeedbackMask | - XkbControlsEnabledMask, - desc); - - XkbFreeKeyboard (desc, XkbAllComponentsMask, True); - - XSync (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), FALSE); - gdk_error_trap_pop (); - - mate_settings_profile_end (NULL); -} - -static gboolean -ax_response_callback (MsdA11yKeyboardManager *manager, - GtkWindow *parent, - gint response_id, - guint revert_controls_mask, - gboolean enabled) -{ - MateConfClient *client; - GdkScreen *screen; - GError *err; - - switch (response_id) { - case GTK_RESPONSE_DELETE_EVENT: - case GTK_RESPONSE_REJECT: - case GTK_RESPONSE_CANCEL: - - client = mateconf_client_get_default (); - - /* we're reverting, so we invert sense of 'enabled' flag */ - d ("cancelling AccessX request"); - if (revert_controls_mask == XkbStickyKeysMask) { - mateconf_client_set_bool (client, - CONFIG_ROOT "/stickykeys_enable", - !enabled, - NULL); - } - else if (revert_controls_mask == XkbSlowKeysMask) { - mateconf_client_set_bool (client, - CONFIG_ROOT "/slowkeys_enable", - !enabled, - NULL); - } - mateconf_client_suggest_sync (client, NULL); - set_server_from_mateconf (manager, client); - - g_object_unref (client); - - break; - - case GTK_RESPONSE_HELP: - if (!parent) - screen = gdk_screen_get_default (); - else - screen = gtk_widget_get_screen (GTK_WIDGET (parent)); - - err = NULL; - if (!gtk_show_uri (screen, - "ghelp:user-guide#goscustaccess-6", - gtk_get_current_event_time(), - &err)) { - GtkWidget *error_dialog = gtk_message_dialog_new (parent, - 0, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("There was an error displaying help: %s"), - err->message); - g_signal_connect (error_dialog, "response", - G_CALLBACK (gtk_widget_destroy), NULL); - gtk_window_set_resizable (GTK_WINDOW (error_dialog), FALSE); - gtk_widget_show (error_dialog); - g_error_free (err); - } - return FALSE; - default: - break; - } - return TRUE; -} - -static void -ax_stickykeys_response (GtkDialog *dialog, - gint response_id, - MsdA11yKeyboardManager *manager) -{ - if (ax_response_callback (manager, GTK_WINDOW (dialog), - response_id, XkbStickyKeysMask, - manager->priv->stickykeys_shortcut_val)) { - gtk_widget_destroy (GTK_WIDGET (dialog)); - } -} - -static void -ax_slowkeys_response (GtkDialog *dialog, - gint response_id, - MsdA11yKeyboardManager *manager) -{ - if (ax_response_callback (manager, GTK_WINDOW (dialog), - response_id, XkbSlowKeysMask, - manager->priv->slowkeys_shortcut_val)) { - gtk_widget_destroy (GTK_WIDGET (dialog)); - } -} - -static void -maybe_show_status_icon (MsdA11yKeyboardManager *manager) -{ - gboolean show; - MateConfClient *client; - - /* for now, show if accessx is enabled */ - client = mateconf_client_get_default (); - show = mateconf_client_get_bool (client, CONFIG_ROOT "/enable", NULL); - g_object_unref (client); - - if (!show && manager->priv->status_icon == NULL) - return; - - msd_a11y_keyboard_manager_ensure_status_icon (manager); - gtk_status_icon_set_visible (manager->priv->status_icon, show); -} - -#ifdef HAVE_LIBMATENOTIFY -static void -on_notification_closed (NotifyNotification *notification, - MsdA11yKeyboardManager *manager) -{ - g_object_unref (manager->priv->notification); - manager->priv->notification = NULL; -} - -static void -on_slow_keys_action (NotifyNotification *notification, - const char *action, - MsdA11yKeyboardManager *manager) -{ - gboolean res; - int response_id; - - g_assert (action != NULL); - - if (strcmp (action, "accept") == 0) { - response_id = GTK_RESPONSE_ACCEPT; - } else if (strcmp (action, "reject") == 0) { - response_id = GTK_RESPONSE_REJECT; - } else { - return; - } - - res = ax_response_callback (manager, NULL, - response_id, XkbSlowKeysMask, - manager->priv->slowkeys_shortcut_val); - if (res) { - notify_notification_close (manager->priv->notification, NULL); - } -} - -static void -on_sticky_keys_action (NotifyNotification *notification, - const char *action, - MsdA11yKeyboardManager *manager) -{ - gboolean res; - int response_id; - - g_assert (action != NULL); - - if (strcmp (action, "accept") == 0) { - response_id = GTK_RESPONSE_ACCEPT; - } else if (strcmp (action, "reject") == 0) { - response_id = GTK_RESPONSE_REJECT; - } else { - return; - } - - res = ax_response_callback (manager, NULL, - response_id, XkbStickyKeysMask, - manager->priv->stickykeys_shortcut_val); - if (res) { - notify_notification_close (manager->priv->notification, NULL); - } -} - -#endif /* HAVE_LIBMATENOTIFY */ - -static gboolean -ax_slowkeys_warning_post_bubble (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ -#ifdef HAVE_LIBMATENOTIFY - gboolean res; - const char *title; - const char *message; - GError *error; - - title = enabled ? - _("Do you want to activate Slow Keys?") : - _("Do you want to deactivate Slow Keys?"); - message = _("You just held down the Shift key for 8 seconds. This is the shortcut " - "for the Slow Keys feature, which affects the way your keyboard works."); - - if (manager->priv->status_icon == NULL || ! gtk_status_icon_is_embedded (manager->priv->status_icon)) { - return FALSE; - } - - if (manager->priv->slowkeys_alert != NULL) { - gtk_widget_destroy (manager->priv->slowkeys_alert); - } - - if (manager->priv->notification != NULL) { - notify_notification_close (manager->priv->notification, NULL); - } - - msd_a11y_keyboard_manager_ensure_status_icon (manager); - manager->priv->notification = notify_notification_new (title, - message, - "preferences-desktop-accessibility", - NULL); - notify_notification_attach_to_status_icon (manager->priv->notification, manager->priv->status_icon); - notify_notification_set_timeout (manager->priv->notification, NOTIFICATION_TIMEOUT * 1000); - - notify_notification_add_action (manager->priv->notification, - "reject", - enabled ? _("Don't activate") : _("Don't deactivate"), - (NotifyActionCallback) on_slow_keys_action, - manager, - NULL); - notify_notification_add_action (manager->priv->notification, - "accept", - enabled ? _("Activate") : _("Deactivate"), - (NotifyActionCallback) on_slow_keys_action, - manager, - NULL); - - g_signal_connect (manager->priv->notification, - "closed", - G_CALLBACK (on_notification_closed), - manager); - - error = NULL; - res = notify_notification_show (manager->priv->notification, &error); - if (! res) { - g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); - g_error_free (error); - notify_notification_close (manager->priv->notification, NULL); - } - - return res; -#else - return FALSE; -#endif /* HAVE_LIBMATENOTIFY */ -} - - -static void -ax_slowkeys_warning_post_dialog (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ - const char *title; - const char *message; - - title = enabled ? - _("Do you want to activate Slow Keys?") : - _("Do you want to deactivate Slow Keys?"); - message = _("You just held down the Shift key for 8 seconds. This is the shortcut " - "for the Slow Keys feature, which affects the way your keyboard works."); - - if (manager->priv->slowkeys_alert != NULL) { - gtk_widget_show (manager->priv->slowkeys_alert); - return; - } - - manager->priv->slowkeys_alert = gtk_message_dialog_new (NULL, - 0, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_NONE, - "%s", title); - - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (manager->priv->slowkeys_alert), - "%s", message); - - gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), - GTK_STOCK_HELP, - GTK_RESPONSE_HELP); - gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), - enabled ? _("Do_n't activate") : _("Do_n't deactivate"), - GTK_RESPONSE_REJECT); - gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), - enabled ? _("_Activate") : _("_Deactivate"), - GTK_RESPONSE_ACCEPT); - - gtk_window_set_title (GTK_WINDOW (manager->priv->slowkeys_alert), - _("Slow Keys Alert")); - gtk_window_set_icon_name (GTK_WINDOW (manager->priv->slowkeys_alert), - "input-keyboard"); - gtk_dialog_set_default_response (GTK_DIALOG (manager->priv->slowkeys_alert), - GTK_RESPONSE_ACCEPT); - - g_signal_connect (manager->priv->slowkeys_alert, - "response", - G_CALLBACK (ax_slowkeys_response), - manager); - gtk_widget_show (manager->priv->slowkeys_alert); - - g_object_add_weak_pointer (G_OBJECT (manager->priv->slowkeys_alert), - (gpointer*) &manager->priv->slowkeys_alert); -} - -static void -ax_slowkeys_warning_post (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ - - manager->priv->slowkeys_shortcut_val = enabled; - - /* alway try to show something */ - if (! ax_slowkeys_warning_post_bubble (manager, enabled)) { - ax_slowkeys_warning_post_dialog (manager, enabled); - } -} - -static gboolean -ax_stickykeys_warning_post_bubble (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ -#ifdef HAVE_LIBMATENOTIFY - gboolean res; - const char *title; - const char *message; - GError *error; - - title = enabled ? - _("Do you want to activate Sticky Keys?") : - _("Do you want to deactivate Sticky Keys?"); - message = enabled ? - _("You just pressed the Shift key 5 times in a row. This is the shortcut " - "for the Sticky Keys feature, which affects the way your keyboard works.") : - _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " - "This turns off the Sticky Keys feature, which affects the way your keyboard works."); - - if (manager->priv->status_icon == NULL || ! gtk_status_icon_is_embedded (manager->priv->status_icon)) { - return FALSE; - } - - if (manager->priv->slowkeys_alert != NULL) { - gtk_widget_destroy (manager->priv->slowkeys_alert); - } - - if (manager->priv->notification != NULL) { - notify_notification_close (manager->priv->notification, NULL); - } - - msd_a11y_keyboard_manager_ensure_status_icon (manager); - manager->priv->notification = notify_notification_new (title, - message, - "preferences-desktop-accessibility", - NULL); - notify_notification_attach_to_status_icon (manager->priv->notification, manager->priv->status_icon); - notify_notification_set_timeout (manager->priv->notification, NOTIFICATION_TIMEOUT * 1000); - - notify_notification_add_action (manager->priv->notification, - "reject", - enabled ? _("Don't activate") : _("Don't deactivate"), - (NotifyActionCallback) on_sticky_keys_action, - manager, - NULL); - notify_notification_add_action (manager->priv->notification, - "accept", - enabled ? _("Activate") : _("Deactivate"), - (NotifyActionCallback) on_sticky_keys_action, - manager, - NULL); - - g_signal_connect (manager->priv->notification, - "closed", - G_CALLBACK (on_notification_closed), - manager); - - error = NULL; - res = notify_notification_show (manager->priv->notification, &error); - if (! res) { - g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); - g_error_free (error); - notify_notification_close (manager->priv->notification, NULL); - } - - return res; -#else - return FALSE; -#endif /* HAVE_LIBMATENOTIFY */ -} - -static void -ax_stickykeys_warning_post_dialog (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ - const char *title; - const char *message; - - title = enabled ? - _("Do you want to activate Sticky Keys?") : - _("Do you want to deactivate Sticky Keys?"); - message = enabled ? - _("You just pressed the Shift key 5 times in a row. This is the shortcut " - "for the Sticky Keys feature, which affects the way your keyboard works.") : - _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " - "This turns off the Sticky Keys feature, which affects the way your keyboard works."); - - if (manager->priv->stickykeys_alert != NULL) { - gtk_widget_show (manager->priv->stickykeys_alert); - return; - } - - manager->priv->stickykeys_alert = gtk_message_dialog_new (NULL, - 0, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_NONE, - "%s", title); - - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (manager->priv->stickykeys_alert), - "%s", message); - - gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), - GTK_STOCK_HELP, - GTK_RESPONSE_HELP); - gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), - enabled ? _("Do_n't activate") : _("Do_n't deactivate"), - GTK_RESPONSE_REJECT); - gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), - enabled ? _("_Activate") : _("_Deactivate"), - GTK_RESPONSE_ACCEPT); - - gtk_window_set_title (GTK_WINDOW (manager->priv->stickykeys_alert), - _("Sticky Keys Alert")); - gtk_window_set_icon_name (GTK_WINDOW (manager->priv->stickykeys_alert), - "input-keyboard"); - gtk_dialog_set_default_response (GTK_DIALOG (manager->priv->stickykeys_alert), - GTK_RESPONSE_ACCEPT); - - g_signal_connect (manager->priv->stickykeys_alert, - "response", - G_CALLBACK (ax_stickykeys_response), - manager); - gtk_widget_show (manager->priv->stickykeys_alert); - - g_object_add_weak_pointer (G_OBJECT (manager->priv->stickykeys_alert), - (gpointer*) &manager->priv->stickykeys_alert); -} - -static void -ax_stickykeys_warning_post (MsdA11yKeyboardManager *manager, - gboolean enabled) -{ - - manager->priv->stickykeys_shortcut_val = enabled; - - /* alway try to show something */ - if (! ax_stickykeys_warning_post_bubble (manager, enabled)) { - ax_stickykeys_warning_post_dialog (manager, enabled); - } -} - -static void -set_mateconf_from_server (MsdA11yKeyboardManager *manager) -{ - MateConfClient *client; - MateConfChangeSet *cs; - XkbDescRec *desc; - gboolean changed = FALSE; - gboolean slowkeys_changed; - gboolean stickykeys_changed; - - cs = mateconf_change_set_new (); - desc = get_xkb_desc_rec (manager); - if (! desc) { - return; - } - - client = mateconf_client_get_default (); - - /* - fprintf (stderr, "changed to : 0x%x\n", desc->ctrls->enabled_ctrls); - fprintf (stderr, "changed to : 0x%x (2)\n", desc->ctrls->ax_options); - */ - - changed |= set_bool (client, - cs, - CONFIG_ROOT "/enable", - desc->ctrls->enabled_ctrls & XkbAccessXKeysMask); - - changed |= set_bool (client, - cs, - CONFIG_ROOT "/feature_state_change_beep", - desc->ctrls->ax_options & (XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask)); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/timeout_enable", - desc->ctrls->enabled_ctrls & XkbAccessXTimeoutMask); - changed |= set_int (client, - cs, - CONFIG_ROOT "/timeout", - desc->ctrls->ax_timeout); - - changed |= set_bool (client, - cs, - CONFIG_ROOT "/bouncekeys_enable", - desc->ctrls->enabled_ctrls & XkbBounceKeysMask); - changed |= set_int (client, - cs, - CONFIG_ROOT "/bouncekeys_delay", - desc->ctrls->debounce_delay); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/bouncekeys_beep_reject", - desc->ctrls->ax_options & XkbAX_BKRejectFBMask); - - changed |= set_bool (client, - cs, - CONFIG_ROOT "/mousekeys_enable", - desc->ctrls->enabled_ctrls & XkbMouseKeysMask); - changed |= set_int (client, - cs, - CONFIG_ROOT "/mousekeys_max_speed", - desc->ctrls->mk_max_speed * (1000 / desc->ctrls->mk_interval)); - /* NOTE : mk_time_to_max is measured in events not time */ - changed |= set_int (client, - cs, - CONFIG_ROOT "/mousekeys_accel_time", - desc->ctrls->mk_time_to_max * desc->ctrls->mk_interval); - changed |= set_int (client, - cs, - CONFIG_ROOT "/mousekeys_init_delay", - desc->ctrls->mk_delay); - - slowkeys_changed = set_bool (client, - cs, - CONFIG_ROOT "/slowkeys_enable", - desc->ctrls->enabled_ctrls & XkbSlowKeysMask); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/slowkeys_beep_press", - desc->ctrls->ax_options & XkbAX_SKPressFBMask); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/slowkeys_beep_accept", - desc->ctrls->ax_options & XkbAX_SKAcceptFBMask); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/slowkeys_beep_reject", - desc->ctrls->ax_options & XkbAX_SKRejectFBMask); - changed |= set_int (client, - cs, - CONFIG_ROOT "/slowkeys_delay", - desc->ctrls->slow_keys_delay); - - stickykeys_changed = set_bool (client, - cs, - CONFIG_ROOT "/stickykeys_enable", - desc->ctrls->enabled_ctrls & XkbStickyKeysMask); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/stickykeys_two_key_off", - desc->ctrls->ax_options & XkbAX_TwoKeysMask); - changed |= set_bool (client, - cs, - CONFIG_ROOT "/stickykeys_modifier_beep", - desc->ctrls->ax_options & XkbAX_StickyKeysFBMask); - - changed |= set_bool (client, - cs, - CONFIG_ROOT "/togglekeys_enable", - desc->ctrls->ax_options & XkbAX_IndicatorFBMask); - - if (!changed && stickykeys_changed ^ slowkeys_changed) { - /* - * sticky or slowkeys has changed, singly, without our intervention. - * 99% chance this is due to a keyboard shortcut being used. - * we need to detect via this hack until we get - * XkbAXN_AXKWarning notifications working (probable XKB bug), - * at which time we can directly intercept such shortcuts instead. - * See cb_xkb_event_filter () below. - */ - - /* sanity check: are keyboard shortcuts available? */ - if (desc->ctrls->enabled_ctrls & XkbAccessXKeysMask) { - if (slowkeys_changed) { - ax_slowkeys_warning_post (manager, - desc->ctrls->enabled_ctrls & XkbSlowKeysMask); - } else { - ax_stickykeys_warning_post (manager, - desc->ctrls->enabled_ctrls & XkbStickyKeysMask); - } - } - } - - XkbFreeKeyboard (desc, XkbAllComponentsMask, True); - - changed |= (stickykeys_changed | slowkeys_changed); - - if (changed) { - mateconf_client_commit_change_set (client, cs, FALSE, NULL); - mateconf_client_suggest_sync (client, NULL); - } - mateconf_change_set_unref (cs); - - g_object_unref (client); -} - -static GdkFilterReturn -cb_xkb_event_filter (GdkXEvent *xevent, - GdkEvent *ignored1, - MsdA11yKeyboardManager *manager) -{ - XEvent *xev = (XEvent *) xevent; - XkbEvent *xkbEv = (XkbEvent *) xevent; - - if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && - xkbEv->any.xkb_type == XkbControlsNotify) { - d ("XKB state changed"); - set_mateconf_from_server (manager); - } else if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && - xkbEv->any.xkb_type == XkbAccessXNotify) { - if (xkbEv->accessx.detail == XkbAXN_AXKWarning) { - d ("About to turn on an AccessX feature from the keyboard!"); - /* - * TODO: when XkbAXN_AXKWarnings start working, we need to - * invoke ax_keys_warning_dialog_run here instead of in - * set_mateconf_from_server(). - */ - } - } - - return GDK_FILTER_CONTINUE; -} - -static void -keyboard_callback (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, - MsdA11yKeyboardManager *manager) -{ - set_server_from_mateconf (manager, client); - maybe_show_status_icon (manager); -} - -static void -register_config_callback (MsdA11yKeyboardManager *manager, - MateConfClient *client, - const char *path, - MateConfClientNotifyFunc func, - guint *notify) -{ - mateconf_client_add_dir (client, path, MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); - *notify = mateconf_client_notify_add (client, path, func, manager, NULL, NULL); -} - -static gboolean -start_a11y_keyboard_idle_cb (MsdA11yKeyboardManager *manager) -{ - guint event_mask; - MateConfClient *client; - - g_debug ("Starting a11y_keyboard manager"); - mate_settings_profile_start (NULL); - - if (!xkb_enabled (manager)) - goto out; - - client = mateconf_client_get_default (); - - register_config_callback (manager, - client, - CONFIG_ROOT, - (MateConfClientNotifyFunc) keyboard_callback, - &manager->priv->mateconf_notify); - -#ifdef HAVE_X11_EXTENSIONS_XINPUT_H - set_devicepresence_handler (manager); -#endif - - /* Save current xkb state so we can restore it on exit - */ - manager->priv->original_xkb_desc = get_xkb_desc_rec (manager); - - event_mask = XkbControlsNotifyMask; -#ifdef DEBUG_ACCESSIBILITY - event_mask |= XkbAccessXNotifyMask; /* make default when AXN_AXKWarning works */ -#endif - - /* be sure to init before starting to monitor the server */ - set_server_from_mateconf (manager, client); - g_object_unref (client); - - XkbSelectEvents (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), - XkbUseCoreKbd, - event_mask, - event_mask); - - gdk_window_add_filter (NULL, - (GdkFilterFunc) cb_xkb_event_filter, - manager); - - maybe_show_status_icon (manager); - - out: - mate_settings_profile_end (NULL); - - return FALSE; -} - - -gboolean -msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, - GError **error) -{ - mate_settings_profile_start (NULL); - - g_idle_add ((GSourceFunc) start_a11y_keyboard_idle_cb, manager); - - mate_settings_profile_end (NULL); - - return TRUE; -} - -static void -restore_server_xkb_config (MsdA11yKeyboardManager *manager) -{ - gdk_error_trap_push (); - XkbSetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), - XkbSlowKeysMask | - XkbBounceKeysMask | - XkbStickyKeysMask | - XkbMouseKeysMask | - XkbMouseKeysAccelMask | - XkbAccessXKeysMask | - XkbAccessXTimeoutMask | - XkbAccessXFeedbackMask | - XkbControlsEnabledMask, - manager->priv->original_xkb_desc); - - XkbFreeKeyboard (manager->priv->original_xkb_desc, - XkbAllComponentsMask, True); - - XSync (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), FALSE); - gdk_error_trap_pop (); - - manager->priv->original_xkb_desc = NULL; -} - -void -msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager) -{ - MsdA11yKeyboardManagerPrivate *p = manager->priv; - - g_debug ("Stopping a11y_keyboard manager"); - -#ifdef HAVE_X11_EXTENSIONS_XINPUT_H - gdk_window_remove_filter (NULL, devicepresence_filter, manager); -#endif - - if (p->status_icon) - gtk_status_icon_set_visible (p->status_icon, FALSE); - - if (p->mateconf_notify != 0) { - MateConfClient *client = mateconf_client_get_default (); - mateconf_client_remove_dir (client, CONFIG_ROOT, NULL); - mateconf_client_notify_remove (client, p->mateconf_notify); - g_object_unref (client); - p->mateconf_notify = 0; - } - - gdk_window_remove_filter (NULL, - (GdkFilterFunc) cb_xkb_event_filter, - manager); - - /* Disable all the AccessX bits - */ - restore_server_xkb_config (manager); - - if (p->slowkeys_alert != NULL) - gtk_widget_destroy (p->slowkeys_alert); - - if (p->stickykeys_alert != NULL) - gtk_widget_destroy (p->stickykeys_alert); - - p->slowkeys_shortcut_val = FALSE; - p->stickykeys_shortcut_val = FALSE; -} - -static void -msd_a11y_keyboard_manager_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MsdA11yKeyboardManager *self; - - self = MSD_A11Y_KEYBOARD_MANAGER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -msd_a11y_keyboard_manager_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MsdA11yKeyboardManager *self; - - self = MSD_A11Y_KEYBOARD_MANAGER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static GObject * -msd_a11y_keyboard_manager_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - MsdA11yKeyboardManager *a11y_keyboard_manager; - MsdA11yKeyboardManagerClass *klass; - - klass = MSD_A11Y_KEYBOARD_MANAGER_CLASS (g_type_class_peek (MSD_TYPE_A11Y_KEYBOARD_MANAGER)); - - a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->constructor (type, - n_construct_properties, - construct_properties)); - - return G_OBJECT (a11y_keyboard_manager); -} - -static void -msd_a11y_keyboard_manager_dispose (GObject *object) -{ - MsdA11yKeyboardManager *a11y_keyboard_manager; - - a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); - - G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->dispose (object); -} - -static void -msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = msd_a11y_keyboard_manager_get_property; - object_class->set_property = msd_a11y_keyboard_manager_set_property; - object_class->constructor = msd_a11y_keyboard_manager_constructor; - object_class->dispose = msd_a11y_keyboard_manager_dispose; - object_class->finalize = msd_a11y_keyboard_manager_finalize; - - g_type_class_add_private (klass, sizeof (MsdA11yKeyboardManagerPrivate)); -} - -static void -on_preferences_dialog_response (GtkDialog *dialog, - int response, - MsdA11yKeyboardManager *manager) -{ - g_signal_handlers_disconnect_by_func (dialog, - on_preferences_dialog_response, - manager); - - gtk_widget_destroy (GTK_WIDGET (dialog)); - manager->priv->preferences_dialog = NULL; -} - -static void -on_status_icon_activate (GtkStatusIcon *status_icon, - MsdA11yKeyboardManager *manager) -{ - if (manager->priv->preferences_dialog == NULL) { - manager->priv->preferences_dialog = msd_a11y_preferences_dialog_new (); - g_signal_connect (manager->priv->preferences_dialog, - "response", - G_CALLBACK (on_preferences_dialog_response), - manager); - - gtk_window_present (GTK_WINDOW (manager->priv->preferences_dialog)); - } else { - g_signal_handlers_disconnect_by_func (manager->priv->preferences_dialog, - on_preferences_dialog_response, - manager); - gtk_widget_destroy (GTK_WIDGET (manager->priv->preferences_dialog)); - manager->priv->preferences_dialog = NULL; - } -} - -static void -msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager) -{ - mate_settings_profile_start (NULL); - - if (!manager->priv->status_icon) { - - manager->priv->status_icon = gtk_status_icon_new_from_icon_name ("preferences-desktop-accessibility"); - g_signal_connect (manager->priv->status_icon, - "activate", - G_CALLBACK (on_status_icon_activate), - manager); - } - - mate_settings_profile_end (NULL); -} - -static void -msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *manager) -{ - manager->priv = MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE (manager); - -#ifdef HAVE_LIBMATENOTIFY - notify_init ("mate-settings-daemon"); -#endif /* HAVE_LIBMATENOTIFY */ -} - -static void -msd_a11y_keyboard_manager_finalize (GObject *object) -{ - MsdA11yKeyboardManager *a11y_keyboard_manager; - - g_return_if_fail (object != NULL); - g_return_if_fail (MSD_IS_A11Y_KEYBOARD_MANAGER (object)); - - a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); - - g_return_if_fail (a11y_keyboard_manager->priv != NULL); - - G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->finalize (object); -} - -MsdA11yKeyboardManager * -msd_a11y_keyboard_manager_new (void) -{ - if (manager_object != NULL) { - g_object_ref (manager_object); - } else { - manager_object = g_object_new (MSD_TYPE_A11Y_KEYBOARD_MANAGER, NULL); - g_object_add_weak_pointer (manager_object, - (gpointer *) &manager_object); - } - - return MSD_A11Y_KEYBOARD_MANAGER (manager_object); -} diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h deleted file mode 100644 index 1869cf4..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann - * - * 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 __MSD_A11Y_KEYBOARD_MANAGER_H -#define __MSD_A11Y_KEYBOARD_MANAGER_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_TYPE_A11Y_KEYBOARD_MANAGER (msd_a11y_keyboard_manager_get_type ()) -#define MSD_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManager)) -#define MSD_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) -#define MSD_IS_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) -#define MSD_IS_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) -#define MSD_A11Y_KEYBOARD_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) - -typedef struct MsdA11yKeyboardManagerPrivate MsdA11yKeyboardManagerPrivate; - -typedef struct -{ - GObject parent; - MsdA11yKeyboardManagerPrivate *priv; -} MsdA11yKeyboardManager; - -typedef struct -{ - GObjectClass parent_class; -} MsdA11yKeyboardManagerClass; - -GType msd_a11y_keyboard_manager_get_type (void); - -MsdA11yKeyboardManager *msd_a11y_keyboard_manager_new (void); -gboolean msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, - GError **error); -void msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager); - -#ifdef __cplusplus -} -#endif - -#endif /* __MSD_A11Y_KEYBOARD_MANAGER_H */ diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c deleted file mode 100644 index 7eed1c4..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann - * - * 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, 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. - * - */ - -#include "config.h" - -#include -#include - -#include "mate-settings-plugin.h" -#include "msd-a11y-keyboard-plugin.h" -#include "msd-a11y-keyboard-manager.h" - -struct MsdA11yKeyboardPluginPrivate { - MsdA11yKeyboardManager *manager; -}; - -#define MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginPrivate)) - -MATE_SETTINGS_PLUGIN_REGISTER (MsdA11yKeyboardPlugin, msd_a11y_keyboard_plugin) - -static void -msd_a11y_keyboard_plugin_init (MsdA11yKeyboardPlugin *plugin) -{ - plugin->priv = MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE (plugin); - - g_debug ("MsdA11yKeyboardPlugin initializing"); - - plugin->priv->manager = msd_a11y_keyboard_manager_new (); -} - -static void -msd_a11y_keyboard_plugin_finalize (GObject *object) -{ - MsdA11yKeyboardPlugin *plugin; - - g_return_if_fail (object != NULL); - g_return_if_fail (MSD_IS_A11Y_KEYBOARD_PLUGIN (object)); - - g_debug ("MsdA11yKeyboardPlugin finalizing"); - - plugin = MSD_A11Y_KEYBOARD_PLUGIN (object); - - g_return_if_fail (plugin->priv != NULL); - - if (plugin->priv->manager != NULL) { - g_object_unref (plugin->priv->manager); - } - - G_OBJECT_CLASS (msd_a11y_keyboard_plugin_parent_class)->finalize (object); -} - -static void -impl_activate (MateSettingsPlugin *plugin) -{ - gboolean res; - GError *error; - - g_debug ("Activating a11y_keyboard plugin"); - - error = NULL; - res = msd_a11y_keyboard_manager_start (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager, &error); - if (! res) { - g_warning ("Unable to start a11y_keyboard manager: %s", error->message); - g_error_free (error); - } -} - -static void -impl_deactivate (MateSettingsPlugin *plugin) -{ - g_debug ("Deactivating a11y_keyboard plugin"); - msd_a11y_keyboard_manager_stop (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager); -} - -static void -msd_a11y_keyboard_plugin_class_init (MsdA11yKeyboardPluginClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - MateSettingsPluginClass *plugin_class = MATE_SETTINGS_PLUGIN_CLASS (klass); - - object_class->finalize = msd_a11y_keyboard_plugin_finalize; - - plugin_class->activate = impl_activate; - plugin_class->deactivate = impl_deactivate; - - g_type_class_add_private (klass, sizeof (MsdA11yKeyboardPluginPrivate)); -} diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h b/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h deleted file mode 100644 index f4b8320..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann - * - * 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, 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 __MSD_A11Y_KEYBOARD_PLUGIN_H__ -#define __MSD_A11Y_KEYBOARD_PLUGIN_H__ - -#include -#include -#include - -#include "mate-settings-plugin.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_TYPE_A11Y_KEYBOARD_PLUGIN (msd_a11y_keyboard_plugin_get_type ()) -#define MSD_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPlugin)) -#define MSD_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) -#define MSD_IS_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) -#define MSD_IS_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) -#define MSD_A11Y_KEYBOARD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) - -typedef struct MsdA11yKeyboardPluginPrivate MsdA11yKeyboardPluginPrivate; - -typedef struct -{ - MateSettingsPlugin parent; - MsdA11yKeyboardPluginPrivate *priv; -} MsdA11yKeyboardPlugin; - -typedef struct -{ - MateSettingsPluginClass parent_class; -} MsdA11yKeyboardPluginClass; - -GType msd_a11y_keyboard_plugin_get_type (void) G_GNUC_CONST; - -/* All the plugins must implement this function */ -G_MODULE_EXPORT GType register_mate_settings_plugin (GTypeModule *module); - -#ifdef __cplusplus -} -#endif - -#endif /* __MSD_A11Y_KEYBOARD_PLUGIN_H__ */ diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c deleted file mode 100644 index a5db11c..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c +++ /dev/null @@ -1,975 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 William Jon McCann - * - * 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. - * - */ - -#include "config.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -#include "msd-a11y-preferences-dialog.h" - -#define SM_DBUS_NAME "org.mate.SessionManager" -#define SM_DBUS_PATH "/org/mate/SessionManager" -#define SM_DBUS_INTERFACE "org.mate.SessionManager" - - -#define MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogPrivate)) - -#define GTKBUILDER_UI_FILE "msd-a11y-preferences-dialog.ui" - -#define KEY_A11Y_DIR "/desktop/mate/accessibility" -#define KEY_STICKY_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/stickykeys_enable" -#define KEY_BOUNCE_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/bouncekeys_enable" -#define KEY_SLOW_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/slowkeys_enable" -#define KEY_MOUSE_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/mousekeys_enable" - -#define KEY_AT_DIR "/desktop/mate/applications/at" -#define KEY_AT_SCREEN_KEYBOARD_ENABLED KEY_AT_DIR "/screen_keyboard_enabled" -#define KEY_AT_SCREEN_MAGNIFIER_ENABLED KEY_AT_DIR "/screen_magnifier_enabled" -#define KEY_AT_SCREEN_READER_ENABLED KEY_AT_DIR "/screen_reader_enabled" - -#define FONT_RENDER_DIR "/desktop/mate/font_rendering" -#define KEY_FONT_DPI FONT_RENDER_DIR "/dpi" -/* X servers sometimes lie about the screen's physical dimensions, so we cannot - * compute an accurate DPI value. When this happens, the user gets fonts that - * are too huge or too tiny. So, we see what the server returns: if it reports - * something outside of the range [DPI_LOW_REASONABLE_VALUE, - * DPI_HIGH_REASONABLE_VALUE], then we assume that it is lying and we use - * DPI_FALLBACK instead. - * - * See get_dpi_from_mateconf_or_server() below, and also - * https://bugzilla.novell.com/show_bug.cgi?id=217790 - */ -#define DPI_LOW_REASONABLE_VALUE 50 -#define DPI_HIGH_REASONABLE_VALUE 500 - -#define DPI_FACTOR_LARGE 1.25 -#define DPI_FACTOR_LARGER 1.5 -#define DPI_FACTOR_LARGEST 2.0 -#define DPI_DEFAULT 96 - -#define KEY_GTK_THEME "/desktop/mate/interface/gtk_theme" -#define KEY_COLOR_SCHEME "/desktop/mate/interface/gtk_color_scheme" -#define KEY_MARCO_THEME "/apps/marco/general/theme" -#define KEY_ICON_THEME "/desktop/mate/interface/icon_theme" - -#define HIGH_CONTRAST_THEME "HighContrast" - -struct MsdA11yPreferencesDialogPrivate -{ - GtkWidget *sticky_keys_checkbutton; - GtkWidget *slow_keys_checkbutton; - GtkWidget *bounce_keys_checkbutton; - - GtkWidget *large_print_checkbutton; - GtkWidget *high_contrast_checkbutton; - - GtkWidget *screen_reader_checkbutton; - GtkWidget *screen_keyboard_checkbutton; - GtkWidget *screen_magnifier_checkbutton; - - guint a11y_dir_cnxn; - guint msd_a11y_dir_cnxn; -}; - -enum { - PROP_0, -}; - -static void msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass); -static void msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *a11y_preferences_dialog); -static void msd_a11y_preferences_dialog_finalize (GObject *object); - -G_DEFINE_TYPE (MsdA11yPreferencesDialog, msd_a11y_preferences_dialog, GTK_TYPE_DIALOG) - -static void -msd_a11y_preferences_dialog_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -msd_a11y_preferences_dialog_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static GObject * -msd_a11y_preferences_dialog_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - MsdA11yPreferencesDialog *a11y_preferences_dialog; - - a11y_preferences_dialog = MSD_A11Y_PREFERENCES_DIALOG (G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->constructor (type, - n_construct_properties, - construct_properties)); - - return G_OBJECT (a11y_preferences_dialog); -} - -static void -msd_a11y_preferences_dialog_dispose (GObject *object) -{ - G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->dispose (object); -} - -static void -msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = msd_a11y_preferences_dialog_get_property; - object_class->set_property = msd_a11y_preferences_dialog_set_property; - object_class->constructor = msd_a11y_preferences_dialog_constructor; - object_class->dispose = msd_a11y_preferences_dialog_dispose; - object_class->finalize = msd_a11y_preferences_dialog_finalize; - - g_type_class_add_private (klass, sizeof (MsdA11yPreferencesDialogPrivate)); -} - -static void -on_response (MsdA11yPreferencesDialog *dialog, - gint response_id) -{ - switch (response_id) { - default: - break; - } -} - -static char * -config_get_string (const char *key, - gboolean *is_writable) -{ - char *str; - MateConfClient *client; - - client = mateconf_client_get_default (); - - if (is_writable) { - *is_writable = mateconf_client_key_is_writable (client, - key, - NULL); - } - - str = mateconf_client_get_string (client, key, NULL); - - g_object_unref (client); - - return str; -} - -static gboolean -config_get_bool (const char *key, - gboolean *is_writable) -{ - int enabled; - MateConfClient *client; - - client = mateconf_client_get_default (); - - if (is_writable) { - *is_writable = mateconf_client_key_is_writable (client, - key, - NULL); - } - - enabled = mateconf_client_get_bool (client, key, NULL); - - g_object_unref (client); - - return enabled; -} - -static double -dpi_from_pixels_and_mm (int pixels, - int mm) -{ - double dpi; - - if (mm >= 1) { - dpi = pixels / (mm / 25.4); - } else { - dpi = 0; - } - - return dpi; -} - -static double -get_dpi_from_x_server (void) -{ - GdkScreen *screen; - double dpi; - - screen = gdk_screen_get_default (); - if (screen != NULL) { - double width_dpi; - double height_dpi; - - width_dpi = dpi_from_pixels_and_mm (gdk_screen_get_width (screen), - gdk_screen_get_width_mm (screen)); - height_dpi = dpi_from_pixels_and_mm (gdk_screen_get_height (screen), - gdk_screen_get_height_mm (screen)); - if (width_dpi < DPI_LOW_REASONABLE_VALUE - || width_dpi > DPI_HIGH_REASONABLE_VALUE - || height_dpi < DPI_LOW_REASONABLE_VALUE - || height_dpi > DPI_HIGH_REASONABLE_VALUE) { - dpi = DPI_DEFAULT; - } else { - dpi = (width_dpi + height_dpi) / 2.0; - } - } else { - /* Huh!? No screen? */ - dpi = DPI_DEFAULT; - } - - return dpi; -} - -static gboolean -config_get_large_print (gboolean *is_writable) -{ - gboolean ret; - MateConfClient *client; - MateConfValue *value; - gdouble x_dpi; - gdouble u_dpi; - - client = mateconf_client_get_default (); - value = mateconf_client_get_without_default (client, KEY_FONT_DPI, NULL); - - if (value != NULL) { - u_dpi = mateconf_value_get_float (value); - mateconf_value_free (value); - } else { - u_dpi = DPI_DEFAULT; - } - - x_dpi = get_dpi_from_x_server (); - - g_object_unref (client); - - g_debug ("MsdA11yPreferences: got x-dpi=%f user-dpi=%f", x_dpi, u_dpi); - - ret = (((double)DPI_FACTOR_LARGE * x_dpi) < u_dpi); - - return ret; -} - -static void -config_set_large_print (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - - if (enabled) { - gdouble x_dpi; - gdouble u_dpi; - - x_dpi = get_dpi_from_x_server (); - u_dpi = (double)DPI_FACTOR_LARGER * x_dpi; - - g_debug ("MsdA11yPreferences: setting x-dpi=%f user-dpi=%f", x_dpi, u_dpi); - - mateconf_client_set_float (client, KEY_FONT_DPI, u_dpi, NULL); - } else { - mateconf_client_unset (client, KEY_FONT_DPI, NULL); - } - - g_object_unref (client); -} - -static gboolean -config_get_high_contrast (gboolean *is_writable) -{ - gboolean ret; - char *gtk_theme; - - ret = FALSE; - - gtk_theme = config_get_string (KEY_GTK_THEME, is_writable); - if (gtk_theme != NULL && strcmp (gtk_theme, HIGH_CONTRAST_THEME) == 0) { - ret = TRUE; - } - g_free (gtk_theme); - - return ret; -} - -static void -config_set_high_contrast (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - - if (enabled) { - mateconf_client_set_string (client, KEY_GTK_THEME, HIGH_CONTRAST_THEME, NULL); - mateconf_client_set_string (client, KEY_ICON_THEME, HIGH_CONTRAST_THEME, NULL); - /* there isn't a high contrast marco theme afaik */ - } else { - mateconf_client_unset (client, KEY_GTK_THEME, NULL); - mateconf_client_unset (client, KEY_ICON_THEME, NULL); - mateconf_client_unset (client, KEY_MARCO_THEME, NULL); - } - - g_object_unref (client); -} - -static gboolean -config_get_sticky_keys (gboolean *is_writable) -{ - return config_get_bool (KEY_STICKY_KEYS_ENABLED, is_writable); -} - -static void -config_set_sticky_keys (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_STICKY_KEYS_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static gboolean -config_get_bounce_keys (gboolean *is_writable) -{ - return config_get_bool (KEY_BOUNCE_KEYS_ENABLED, is_writable); -} - -static void -config_set_bounce_keys (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_BOUNCE_KEYS_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static gboolean -config_get_slow_keys (gboolean *is_writable) -{ - return config_get_bool (KEY_SLOW_KEYS_ENABLED, is_writable); -} - -static void -config_set_slow_keys (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_SLOW_KEYS_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static gboolean -config_have_at_mateconf_condition (const char *condition) -{ - DBusGProxy *sm_proxy; - DBusGConnection *connection; - GError *error; - gboolean res; - gboolean is_handled; - - error = NULL; - connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (connection == NULL) { - g_warning ("Unable to connect to session bus: %s", error->message); - return FALSE; - } - sm_proxy = dbus_g_proxy_new_for_name (connection, - SM_DBUS_NAME, - SM_DBUS_PATH, - SM_DBUS_INTERFACE); - if (sm_proxy == NULL) { - return FALSE; - } - - is_handled = FALSE; - res = dbus_g_proxy_call (sm_proxy, - "IsAutostartConditionHandled", - &error, - G_TYPE_STRING, condition, - G_TYPE_INVALID, - G_TYPE_BOOLEAN, &is_handled, - G_TYPE_INVALID); - if (! res) { - g_warning ("Unable to call IsAutostartConditionHandled (%s): %s", - condition, - error->message); - } - - g_object_unref (sm_proxy); - - return is_handled; -} - -static gboolean -config_get_at_screen_reader (gboolean *is_writable) -{ - return config_get_bool (KEY_AT_SCREEN_READER_ENABLED, is_writable); -} - -static gboolean -config_get_at_screen_keyboard (gboolean *is_writable) -{ - return config_get_bool (KEY_AT_SCREEN_KEYBOARD_ENABLED, is_writable); -} - -static gboolean -config_get_at_screen_magnifier (gboolean *is_writable) -{ - return config_get_bool (KEY_AT_SCREEN_MAGNIFIER_ENABLED, is_writable); -} - -static void -config_set_at_screen_reader (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_AT_SCREEN_READER_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static void -config_set_at_screen_keyboard (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_AT_SCREEN_KEYBOARD_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static void -config_set_at_screen_magnifier (gboolean enabled) -{ - MateConfClient *client; - - client = mateconf_client_get_default (); - mateconf_client_set_bool (client, KEY_AT_SCREEN_MAGNIFIER_ENABLED, enabled, NULL); - g_object_unref (client); -} - -static void -on_sticky_keys_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_sticky_keys (gtk_toggle_button_get_active (button)); -} - -static void -on_bounce_keys_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_bounce_keys (gtk_toggle_button_get_active (button)); -} - -static void -on_slow_keys_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_slow_keys (gtk_toggle_button_get_active (button)); -} - -static void -on_high_contrast_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_high_contrast (gtk_toggle_button_get_active (button)); -} - -static void -on_at_screen_reader_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_at_screen_reader (gtk_toggle_button_get_active (button)); -} - -static void -on_at_screen_keyboard_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_at_screen_keyboard (gtk_toggle_button_get_active (button)); -} - -static void -on_at_screen_magnifier_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_at_screen_magnifier (gtk_toggle_button_get_active (button)); -} - -static void -on_large_print_checkbutton_toggled (GtkToggleButton *button, - MsdA11yPreferencesDialog *dialog) -{ - config_set_large_print (gtk_toggle_button_get_active (button)); -} - -static void -ui_set_sticky_keys (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->sticky_keys_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->sticky_keys_checkbutton), enabled); - } -} - -static void -ui_set_bounce_keys (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->bounce_keys_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->bounce_keys_checkbutton), enabled); - } -} - -static void -ui_set_slow_keys (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->slow_keys_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->slow_keys_checkbutton), enabled); - } -} - -static void -ui_set_high_contrast (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->high_contrast_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->high_contrast_checkbutton), enabled); - } -} - -static void -ui_set_at_screen_reader (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_reader_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_reader_checkbutton), enabled); - } -} - -static void -ui_set_at_screen_keyboard (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_keyboard_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_keyboard_checkbutton), enabled); - } -} - -static void -ui_set_at_screen_magnifier (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_magnifier_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_magnifier_checkbutton), enabled); - } -} - -static void -ui_set_large_print (MsdA11yPreferencesDialog *dialog, - gboolean enabled) -{ - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->large_print_checkbutton)); - if (active != enabled) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->large_print_checkbutton), enabled); - } -} - -static void -key_changed_cb (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, - MsdA11yPreferencesDialog *dialog) -{ - const char *key; - MateConfValue *value; - - key = mateconf_entry_get_key (entry); - value = mateconf_entry_get_value (entry); - - if (strcmp (key, KEY_STICKY_KEYS_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_sticky_keys (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else if (strcmp (key, KEY_BOUNCE_KEYS_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_bounce_keys (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else if (strcmp (key, KEY_SLOW_KEYS_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_slow_keys (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else if (strcmp (key, KEY_AT_SCREEN_READER_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_at_screen_reader (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else if (strcmp (key, KEY_AT_SCREEN_KEYBOARD_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_at_screen_keyboard (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else if (strcmp (key, KEY_AT_SCREEN_MAGNIFIER_ENABLED) == 0) { - if (value->type == MATECONF_VALUE_BOOL) { - gboolean enabled; - - enabled = mateconf_value_get_bool (value); - ui_set_at_screen_magnifier (dialog, enabled); - } else { - g_warning ("Error retrieving configuration key '%s': Invalid type", - key); - } - } else { - g_debug ("Config key not handled: %s", key); - } -} - -static void -setup_dialog (MsdA11yPreferencesDialog *dialog, - GtkBuilder *builder) -{ - GtkWidget *widget; - gboolean enabled; - gboolean is_writable; - MateConfClient *client; - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "sticky_keys_checkbutton")); - dialog->priv->sticky_keys_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_sticky_keys_checkbutton_toggled), - NULL); - enabled = config_get_sticky_keys (&is_writable); - ui_set_sticky_keys (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "bounce_keys_checkbutton")); - dialog->priv->bounce_keys_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_bounce_keys_checkbutton_toggled), - NULL); - enabled = config_get_bounce_keys (&is_writable); - ui_set_bounce_keys (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "slow_keys_checkbutton")); - dialog->priv->slow_keys_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_slow_keys_checkbutton_toggled), - NULL); - enabled = config_get_slow_keys (&is_writable); - ui_set_slow_keys (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "high_contrast_checkbutton")); - dialog->priv->high_contrast_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_high_contrast_checkbutton_toggled), - NULL); - enabled = config_get_high_contrast (&is_writable); - ui_set_high_contrast (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "at_screen_keyboard_checkbutton")); - dialog->priv->screen_keyboard_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_at_screen_keyboard_checkbutton_toggled), - NULL); - enabled = config_get_at_screen_keyboard (&is_writable); - ui_set_at_screen_keyboard (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - gtk_widget_set_no_show_all (widget, TRUE); - if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_KEYBOARD_ENABLED)) { - gtk_widget_show_all (widget); - } else { - gtk_widget_hide (widget); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "at_screen_reader_checkbutton")); - dialog->priv->screen_reader_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_at_screen_reader_checkbutton_toggled), - NULL); - enabled = config_get_at_screen_reader (&is_writable); - ui_set_at_screen_reader (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - gtk_widget_set_no_show_all (widget, TRUE); - if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_READER_ENABLED)) { - gtk_widget_show_all (widget); - } else { - gtk_widget_hide (widget); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "at_screen_magnifier_checkbutton")); - dialog->priv->screen_magnifier_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_at_screen_magnifier_checkbutton_toggled), - NULL); - enabled = config_get_at_screen_magnifier (&is_writable); - ui_set_at_screen_magnifier (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - gtk_widget_set_no_show_all (widget, TRUE); - if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_MAGNIFIER_ENABLED)) { - gtk_widget_show_all (widget); - } else { - gtk_widget_hide (widget); - } - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "large_print_checkbutton")); - dialog->priv->large_print_checkbutton = widget; - g_signal_connect (widget, - "toggled", - G_CALLBACK (on_large_print_checkbutton_toggled), - NULL); - enabled = config_get_large_print (&is_writable); - ui_set_large_print (dialog, enabled); - if (! is_writable) { - gtk_widget_set_sensitive (widget, FALSE); - } - - - client = mateconf_client_get_default (); - mateconf_client_add_dir (client, - KEY_A11Y_DIR, - MATECONF_CLIENT_PRELOAD_ONELEVEL, - NULL); - dialog->priv->a11y_dir_cnxn = mateconf_client_notify_add (client, - KEY_A11Y_DIR, - (MateConfClientNotifyFunc)key_changed_cb, - dialog, - NULL, - NULL); - - mateconf_client_add_dir (client, - KEY_AT_DIR, - MATECONF_CLIENT_PRELOAD_ONELEVEL, - NULL); - dialog->priv->msd_a11y_dir_cnxn = mateconf_client_notify_add (client, - KEY_AT_DIR, - (MateConfClientNotifyFunc)key_changed_cb, - dialog, - NULL, - NULL); - - g_object_unref (client); -} - -static void -msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *dialog) -{ - static const gchar *ui_file_path = GTKBUILDERDIR "/" GTKBUILDER_UI_FILE; - gchar *objects[] = {"main_box", NULL}; - GError *error = NULL; - GtkBuilder *builder; - - dialog->priv = MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE (dialog); - - builder = gtk_builder_new (); - gtk_builder_set_translation_domain (builder, PACKAGE); - if (gtk_builder_add_objects_from_file (builder, ui_file_path, objects, - &error) == 0) { - g_warning ("Could not load A11Y-UI: %s", error->message); - g_error_free (error); - } else { - GtkWidget *widget; - - widget = GTK_WIDGET (gtk_builder_get_object (builder, - "main_box")); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - widget); - gtk_container_set_border_width (GTK_CONTAINER (widget), 12); - setup_dialog (dialog, builder); - } - - g_object_unref (builder); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); - gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); - gtk_window_set_title (GTK_WINDOW (dialog), _("Universal Access Preferences")); - gtk_window_set_icon_name (GTK_WINDOW (dialog), "preferences-desktop-accessibility"); - g_object_set (dialog, - "allow-shrink", FALSE, - "allow-grow", FALSE, - NULL); - - gtk_dialog_add_buttons (GTK_DIALOG (dialog), - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, - NULL); - g_signal_connect (dialog, - "response", - G_CALLBACK (on_response), - dialog); - - - gtk_widget_show_all (GTK_WIDGET (dialog)); -} - -static void -msd_a11y_preferences_dialog_finalize (GObject *object) -{ - MsdA11yPreferencesDialog *dialog; - MateConfClient *client; - - g_return_if_fail (object != NULL); - g_return_if_fail (MSD_IS_A11Y_PREFERENCES_DIALOG (object)); - - dialog = MSD_A11Y_PREFERENCES_DIALOG (object); - - g_return_if_fail (dialog->priv != NULL); - - client = mateconf_client_get_default (); - - if (dialog->priv->a11y_dir_cnxn > 0) { - mateconf_client_notify_remove (client, dialog->priv->a11y_dir_cnxn); - } - if (dialog->priv->msd_a11y_dir_cnxn > 0) { - mateconf_client_notify_remove (client, dialog->priv->msd_a11y_dir_cnxn); - } - - g_object_unref (client); - - G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->finalize (object); -} - -GtkWidget * -msd_a11y_preferences_dialog_new (void) -{ - GObject *object; - - object = g_object_new (MSD_TYPE_A11Y_PREFERENCES_DIALOG, - NULL); - - return GTK_WIDGET (object); -} diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h deleted file mode 100644 index 967a94e..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 William Jon McCann - * - * 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 __MSD_A11Y_PREFERENCES_DIALOG_H -#define __MSD_A11Y_PREFERENCES_DIALOG_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_TYPE_A11Y_PREFERENCES_DIALOG (msd_a11y_preferences_dialog_get_type ()) -#define MSD_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialog)) -#define MSD_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) -#define MSD_IS_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) -#define MSD_IS_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) -#define MSD_A11Y_PREFERENCES_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) - -typedef struct MsdA11yPreferencesDialogPrivate MsdA11yPreferencesDialogPrivate; - -typedef struct -{ - GtkDialog parent; - MsdA11yPreferencesDialogPrivate *priv; -} MsdA11yPreferencesDialog; - -typedef struct -{ - GtkDialogClass parent_class; -} MsdA11yPreferencesDialogClass; - -GType msd_a11y_preferences_dialog_get_type (void); - -GtkWidget * msd_a11y_preferences_dialog_new (void); - -#ifdef __cplusplus -} -#endif - -#endif /* __MSD_A11Y_PREFERENCES_DIALOG_H */ diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.ui b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.ui deleted file mode 100644 index 6a0fcb0..0000000 --- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.ui +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - Universal Access Preferences - center-on-parent - preferences-desktop-accessibility - dialog - False - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 2 - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - 10 - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - preferences-desktop-accessibility - 6 - - - 0 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - 6 - - - Use on-screen _keyboard - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 0 - - - - - Use screen _reader - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 1 - - - - - Use screen _magnifier - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 2 - - - - - Enhance _contrast in colors - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 3 - - - - - Make _text larger and easier to read - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 4 - - - - - _Press keyboard shortcuts one key at a time (Sticky Keys) - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 5 - - - - - _Ignore duplicate keypresses (Bounce Keys) - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 6 - - - - - Press and _hold keys to accept them (Slow Keys) - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - True - - - 7 - - - - - False - False - 1 - - - - - 1 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - end - - - gtk-close - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - - - False - False - 0 - - - - - False - end - 0 - - - - - - button1 - - - diff --git a/plugins/a11y-keyboard/msd-a11y-keyboard-manager.c b/plugins/a11y-keyboard/msd-a11y-keyboard-manager.c new file mode 100644 index 0000000..7505b14 --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-keyboard-manager.c @@ -0,0 +1,1347 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright © 2001 Ximian, Inc. + * Copyright (C) 2007 William Jon McCann + * + * 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. + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H +#include +#include +#endif + +#ifdef HAVE_LIBMATENOTIFY +#include +#endif /* HAVE_LIBMATENOTIFY */ + +#include "mate-settings-profile.h" +#include "msd-a11y-keyboard-manager.h" +#include "msd-a11y-preferences-dialog.h" + +#define CONFIG_ROOT "/desktop/mate/accessibility/keyboard" +#define NOTIFICATION_TIMEOUT 30 + +#define MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerPrivate)) + +struct MsdA11yKeyboardManagerPrivate +{ + int xkbEventBase; + gboolean stickykeys_shortcut_val; + gboolean slowkeys_shortcut_val; + GtkWidget *stickykeys_alert; + GtkWidget *slowkeys_alert; + GtkWidget *preferences_dialog; + GtkStatusIcon *status_icon; + XkbDescRec *original_xkb_desc; + + guint mateconf_notify; + +#ifdef HAVE_LIBMATENOTIFY + NotifyNotification *notification; +#endif /* HAVE_LIBMATENOTIFY */ +}; + +static void msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass); +static void msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *a11y_keyboard_manager); +static void msd_a11y_keyboard_manager_finalize (GObject *object); +static void msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager); +static void set_server_from_mateconf (MsdA11yKeyboardManager *manager, + MateConfClient *client); + +G_DEFINE_TYPE (MsdA11yKeyboardManager, msd_a11y_keyboard_manager, G_TYPE_OBJECT) + +static gpointer manager_object = NULL; + +#undef DEBUG_ACCESSIBILITY +#ifdef DEBUG_ACCESSIBILITY +#define d(str) g_debug (str) +#else +#define d(str) do { } while (0) +#endif + +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H +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) { + MateConfClient *client; + client = mateconf_client_get_default (); + set_server_from_mateconf (data, client); + g_object_unref (client); + } + } + return GDK_FILTER_CONTINUE; +} + +static gboolean +supports_xinput_devices (void) +{ + gint op_code, event, error; + + return XQueryExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + "XInputExtension", + &op_code, + &event, + &error); +} + +static void +set_devicepresence_handler (MsdA11yKeyboardManager *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); + /* FIXME: + * Note that this might overwrite other events, see: + * https://bugzilla.gnome.org/show_bug.cgi?id=610245#c2 + **/ + 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 gboolean +xkb_enabled (MsdA11yKeyboardManager *manager) +{ + gboolean have_xkb; + int opcode, errorBase, major, minor; + + have_xkb = XkbQueryExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + &opcode, + &manager->priv->xkbEventBase, + &errorBase, + &major, + &minor) + && XkbUseExtension (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), &major, &minor); + + return have_xkb; +} + +static XkbDescRec * +get_xkb_desc_rec (MsdA11yKeyboardManager *manager) +{ + XkbDescRec *desc; + Status status = Success; + + gdk_error_trap_push (); + desc = XkbGetMap (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbAllMapComponentsMask, XkbUseCoreKbd); + if (desc != NULL) { + desc->ctrls = NULL; + status = XkbGetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbAllControlsMask, desc); + } + gdk_error_trap_pop (); + + g_return_val_if_fail (desc != NULL, NULL); + g_return_val_if_fail (desc->ctrls != NULL, NULL); + g_return_val_if_fail (status == Success, NULL); + + return desc; +} + +static int +get_int (MateConfClient *client, + char const *key) +{ + int res = mateconf_client_get_int (client, key, NULL); + if (res <= 0) { + res = 1; + } + return res; +} + +static gboolean +set_int (MateConfClient *client, + MateConfChangeSet *cs, + char const *key, + int val) +{ + mateconf_change_set_set_int (cs, key, val); +#ifdef DEBUG_ACCESSIBILITY + if (val != mateconf_client_get_int (client, key, NULL)) { + g_warning ("%s changed", key); + } +#endif + return val != mateconf_client_get_int (client, key, NULL); +} + +static gboolean +set_bool (MateConfClient *client, + MateConfChangeSet *cs, + char const *key, + int val) +{ + gboolean bval = (val != 0); + + mateconf_change_set_set_bool (cs, key, bval ? TRUE : FALSE); +#ifdef DEBUG_ACCESSIBILITY + if (bval != mateconf_client_get_bool (client, key, NULL)) { + d ("%s changed", key); + return TRUE; + } +#endif + return (bval != mateconf_client_get_bool (client, key, NULL)); +} + +static unsigned long +set_clear (gboolean flag, + unsigned long value, + unsigned long mask) +{ + if (flag) { + return value | mask; + } + return value & ~mask; +} + +static gboolean +set_ctrl_from_mateconf (XkbDescRec *desc, + MateConfClient *client, + char const *key, + unsigned long mask) +{ + gboolean result = mateconf_client_get_bool (client, key, NULL); + desc->ctrls->enabled_ctrls = set_clear (result, desc->ctrls->enabled_ctrls, mask); + return result; +} + +static void +set_server_from_mateconf (MsdA11yKeyboardManager *manager, + MateConfClient *client) +{ + XkbDescRec *desc; + gboolean enable_accessX; + + mate_settings_profile_start (NULL); + + desc = get_xkb_desc_rec (manager); + if (!desc) { + return; + } + + /* general */ + enable_accessX = mateconf_client_get_bool (client, CONFIG_ROOT "/enable", NULL); + + desc->ctrls->enabled_ctrls = set_clear (enable_accessX, + desc->ctrls->enabled_ctrls, + XkbAccessXKeysMask); + + if (set_ctrl_from_mateconf (desc, client, CONFIG_ROOT "/timeout_enable", + XkbAccessXTimeoutMask)) { + desc->ctrls->ax_timeout = get_int (client, + CONFIG_ROOT "/timeout"); + /* disable only the master flag via the server we will disable + * the rest on the rebound without affecting mateconf state + * don't change the option flags at all. + */ + desc->ctrls->axt_ctrls_mask = XkbAccessXKeysMask | XkbAccessXFeedbackMask; + desc->ctrls->axt_ctrls_values = 0; + desc->ctrls->axt_opts_mask = 0; + } + + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/feature_state_change_beep", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); + + /* bounce keys */ + if (set_ctrl_from_mateconf (desc, + client, + CONFIG_ROOT "/bouncekeys_enable", + XkbBounceKeysMask)) { + desc->ctrls->debounce_delay = get_int (client, + CONFIG_ROOT "/bouncekeys_delay"); + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/bouncekeys_beep_reject", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_BKRejectFBMask); + } + + /* mouse keys */ + if (set_ctrl_from_mateconf (desc, + client, + CONFIG_ROOT "/mousekeys_enable", + XkbMouseKeysMask | XkbMouseKeysAccelMask)) { + desc->ctrls->mk_interval = 100; /* msec between mousekey events */ + desc->ctrls->mk_curve = 50; + + /* We store pixels / sec, XKB wants pixels / event */ + desc->ctrls->mk_max_speed = get_int (client, + CONFIG_ROOT "/mousekeys_max_speed") / (1000 / desc->ctrls->mk_interval); + if (desc->ctrls->mk_max_speed <= 0) + desc->ctrls->mk_max_speed = 1; + + desc->ctrls->mk_time_to_max = get_int (client, /* events before max */ + CONFIG_ROOT "/mousekeys_accel_time") / desc->ctrls->mk_interval; + if (desc->ctrls->mk_time_to_max <= 0) + desc->ctrls->mk_time_to_max = 1; + + desc->ctrls->mk_delay = get_int (client, /* ms before 1st event */ + CONFIG_ROOT "/mousekeys_init_delay"); + } + + /* slow keys */ + if (set_ctrl_from_mateconf (desc, + client, + CONFIG_ROOT "/slowkeys_enable", + XkbSlowKeysMask)) { + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_press", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_SKPressFBMask); + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_accept", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_SKAcceptFBMask); + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/slowkeys_beep_reject", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_SKRejectFBMask); + desc->ctrls->slow_keys_delay = get_int (client, + CONFIG_ROOT "/slowkeys_delay"); + /* anything larger than 500 seems to loose all keyboard input */ + if (desc->ctrls->slow_keys_delay > 500) + desc->ctrls->slow_keys_delay = 500; + } + + /* sticky keys */ + if (set_ctrl_from_mateconf (desc, + client, + CONFIG_ROOT "/stickykeys_enable", + XkbStickyKeysMask)) { + desc->ctrls->ax_options |= XkbAX_LatchToLockMask; + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/stickykeys_two_key_off", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_TwoKeysMask); + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/stickykeys_modifier_beep", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_StickyKeysFBMask); + } + + /* toggle keys */ + desc->ctrls->ax_options = set_clear (mateconf_client_get_bool (client, CONFIG_ROOT "/togglekeys_enable", NULL), + desc->ctrls->ax_options, + XkbAccessXFeedbackMask | XkbAX_IndicatorFBMask); + + /* + g_debug ("CHANGE to : 0x%x", desc->ctrls->enabled_ctrls); + g_debug ("CHANGE to : 0x%x (2)", desc->ctrls->ax_options); + */ + + gdk_error_trap_push (); + XkbSetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + XkbSlowKeysMask | + XkbBounceKeysMask | + XkbStickyKeysMask | + XkbMouseKeysMask | + XkbMouseKeysAccelMask | + XkbAccessXKeysMask | + XkbAccessXTimeoutMask | + XkbAccessXFeedbackMask | + XkbControlsEnabledMask, + desc); + + XkbFreeKeyboard (desc, XkbAllComponentsMask, True); + + XSync (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), FALSE); + gdk_error_trap_pop (); + + mate_settings_profile_end (NULL); +} + +static gboolean +ax_response_callback (MsdA11yKeyboardManager *manager, + GtkWindow *parent, + gint response_id, + guint revert_controls_mask, + gboolean enabled) +{ + MateConfClient *client; + GdkScreen *screen; + GError *err; + + switch (response_id) { + case GTK_RESPONSE_DELETE_EVENT: + case GTK_RESPONSE_REJECT: + case GTK_RESPONSE_CANCEL: + + client = mateconf_client_get_default (); + + /* we're reverting, so we invert sense of 'enabled' flag */ + d ("cancelling AccessX request"); + if (revert_controls_mask == XkbStickyKeysMask) { + mateconf_client_set_bool (client, + CONFIG_ROOT "/stickykeys_enable", + !enabled, + NULL); + } + else if (revert_controls_mask == XkbSlowKeysMask) { + mateconf_client_set_bool (client, + CONFIG_ROOT "/slowkeys_enable", + !enabled, + NULL); + } + mateconf_client_suggest_sync (client, NULL); + set_server_from_mateconf (manager, client); + + g_object_unref (client); + + break; + + case GTK_RESPONSE_HELP: + if (!parent) + screen = gdk_screen_get_default (); + else + screen = gtk_widget_get_screen (GTK_WIDGET (parent)); + + err = NULL; + if (!gtk_show_uri (screen, + "ghelp:user-guide#goscustaccess-6", + gtk_get_current_event_time(), + &err)) { + GtkWidget *error_dialog = gtk_message_dialog_new (parent, + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("There was an error displaying help: %s"), + err->message); + g_signal_connect (error_dialog, "response", + G_CALLBACK (gtk_widget_destroy), NULL); + gtk_window_set_resizable (GTK_WINDOW (error_dialog), FALSE); + gtk_widget_show (error_dialog); + g_error_free (err); + } + return FALSE; + default: + break; + } + return TRUE; +} + +static void +ax_stickykeys_response (GtkDialog *dialog, + gint response_id, + MsdA11yKeyboardManager *manager) +{ + if (ax_response_callback (manager, GTK_WINDOW (dialog), + response_id, XkbStickyKeysMask, + manager->priv->stickykeys_shortcut_val)) { + gtk_widget_destroy (GTK_WIDGET (dialog)); + } +} + +static void +ax_slowkeys_response (GtkDialog *dialog, + gint response_id, + MsdA11yKeyboardManager *manager) +{ + if (ax_response_callback (manager, GTK_WINDOW (dialog), + response_id, XkbSlowKeysMask, + manager->priv->slowkeys_shortcut_val)) { + gtk_widget_destroy (GTK_WIDGET (dialog)); + } +} + +static void +maybe_show_status_icon (MsdA11yKeyboardManager *manager) +{ + gboolean show; + MateConfClient *client; + + /* for now, show if accessx is enabled */ + client = mateconf_client_get_default (); + show = mateconf_client_get_bool (client, CONFIG_ROOT "/enable", NULL); + g_object_unref (client); + + if (!show && manager->priv->status_icon == NULL) + return; + + msd_a11y_keyboard_manager_ensure_status_icon (manager); + gtk_status_icon_set_visible (manager->priv->status_icon, show); +} + +#ifdef HAVE_LIBMATENOTIFY +static void +on_notification_closed (NotifyNotification *notification, + MsdA11yKeyboardManager *manager) +{ + g_object_unref (manager->priv->notification); + manager->priv->notification = NULL; +} + +static void +on_slow_keys_action (NotifyNotification *notification, + const char *action, + MsdA11yKeyboardManager *manager) +{ + gboolean res; + int response_id; + + g_assert (action != NULL); + + if (strcmp (action, "accept") == 0) { + response_id = GTK_RESPONSE_ACCEPT; + } else if (strcmp (action, "reject") == 0) { + response_id = GTK_RESPONSE_REJECT; + } else { + return; + } + + res = ax_response_callback (manager, NULL, + response_id, XkbSlowKeysMask, + manager->priv->slowkeys_shortcut_val); + if (res) { + notify_notification_close (manager->priv->notification, NULL); + } +} + +static void +on_sticky_keys_action (NotifyNotification *notification, + const char *action, + MsdA11yKeyboardManager *manager) +{ + gboolean res; + int response_id; + + g_assert (action != NULL); + + if (strcmp (action, "accept") == 0) { + response_id = GTK_RESPONSE_ACCEPT; + } else if (strcmp (action, "reject") == 0) { + response_id = GTK_RESPONSE_REJECT; + } else { + return; + } + + res = ax_response_callback (manager, NULL, + response_id, XkbStickyKeysMask, + manager->priv->stickykeys_shortcut_val); + if (res) { + notify_notification_close (manager->priv->notification, NULL); + } +} + +#endif /* HAVE_LIBMATENOTIFY */ + +static gboolean +ax_slowkeys_warning_post_bubble (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ +#ifdef HAVE_LIBMATENOTIFY + gboolean res; + const char *title; + const char *message; + GError *error; + + title = enabled ? + _("Do you want to activate Slow Keys?") : + _("Do you want to deactivate Slow Keys?"); + message = _("You just held down the Shift key for 8 seconds. This is the shortcut " + "for the Slow Keys feature, which affects the way your keyboard works."); + + if (manager->priv->status_icon == NULL || ! gtk_status_icon_is_embedded (manager->priv->status_icon)) { + return FALSE; + } + + if (manager->priv->slowkeys_alert != NULL) { + gtk_widget_destroy (manager->priv->slowkeys_alert); + } + + if (manager->priv->notification != NULL) { + notify_notification_close (manager->priv->notification, NULL); + } + + msd_a11y_keyboard_manager_ensure_status_icon (manager); + manager->priv->notification = notify_notification_new (title, + message, + "preferences-desktop-accessibility", + NULL); + notify_notification_attach_to_status_icon (manager->priv->notification, manager->priv->status_icon); + notify_notification_set_timeout (manager->priv->notification, NOTIFICATION_TIMEOUT * 1000); + + notify_notification_add_action (manager->priv->notification, + "reject", + enabled ? _("Don't activate") : _("Don't deactivate"), + (NotifyActionCallback) on_slow_keys_action, + manager, + NULL); + notify_notification_add_action (manager->priv->notification, + "accept", + enabled ? _("Activate") : _("Deactivate"), + (NotifyActionCallback) on_slow_keys_action, + manager, + NULL); + + g_signal_connect (manager->priv->notification, + "closed", + G_CALLBACK (on_notification_closed), + manager); + + error = NULL; + res = notify_notification_show (manager->priv->notification, &error); + if (! res) { + g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); + g_error_free (error); + notify_notification_close (manager->priv->notification, NULL); + } + + return res; +#else + return FALSE; +#endif /* HAVE_LIBMATENOTIFY */ +} + + +static void +ax_slowkeys_warning_post_dialog (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ + const char *title; + const char *message; + + title = enabled ? + _("Do you want to activate Slow Keys?") : + _("Do you want to deactivate Slow Keys?"); + message = _("You just held down the Shift key for 8 seconds. This is the shortcut " + "for the Slow Keys feature, which affects the way your keyboard works."); + + if (manager->priv->slowkeys_alert != NULL) { + gtk_widget_show (manager->priv->slowkeys_alert); + return; + } + + manager->priv->slowkeys_alert = gtk_message_dialog_new (NULL, + 0, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_NONE, + "%s", title); + + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (manager->priv->slowkeys_alert), + "%s", message); + + gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), + GTK_STOCK_HELP, + GTK_RESPONSE_HELP); + gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), + enabled ? _("Do_n't activate") : _("Do_n't deactivate"), + GTK_RESPONSE_REJECT); + gtk_dialog_add_button (GTK_DIALOG (manager->priv->slowkeys_alert), + enabled ? _("_Activate") : _("_Deactivate"), + GTK_RESPONSE_ACCEPT); + + gtk_window_set_title (GTK_WINDOW (manager->priv->slowkeys_alert), + _("Slow Keys Alert")); + gtk_window_set_icon_name (GTK_WINDOW (manager->priv->slowkeys_alert), + "input-keyboard"); + gtk_dialog_set_default_response (GTK_DIALOG (manager->priv->slowkeys_alert), + GTK_RESPONSE_ACCEPT); + + g_signal_connect (manager->priv->slowkeys_alert, + "response", + G_CALLBACK (ax_slowkeys_response), + manager); + gtk_widget_show (manager->priv->slowkeys_alert); + + g_object_add_weak_pointer (G_OBJECT (manager->priv->slowkeys_alert), + (gpointer*) &manager->priv->slowkeys_alert); +} + +static void +ax_slowkeys_warning_post (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ + + manager->priv->slowkeys_shortcut_val = enabled; + + /* alway try to show something */ + if (! ax_slowkeys_warning_post_bubble (manager, enabled)) { + ax_slowkeys_warning_post_dialog (manager, enabled); + } +} + +static gboolean +ax_stickykeys_warning_post_bubble (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ +#ifdef HAVE_LIBMATENOTIFY + gboolean res; + const char *title; + const char *message; + GError *error; + + title = enabled ? + _("Do you want to activate Sticky Keys?") : + _("Do you want to deactivate Sticky Keys?"); + message = enabled ? + _("You just pressed the Shift key 5 times in a row. This is the shortcut " + "for the Sticky Keys feature, which affects the way your keyboard works.") : + _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " + "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + + if (manager->priv->status_icon == NULL || ! gtk_status_icon_is_embedded (manager->priv->status_icon)) { + return FALSE; + } + + if (manager->priv->slowkeys_alert != NULL) { + gtk_widget_destroy (manager->priv->slowkeys_alert); + } + + if (manager->priv->notification != NULL) { + notify_notification_close (manager->priv->notification, NULL); + } + + msd_a11y_keyboard_manager_ensure_status_icon (manager); + manager->priv->notification = notify_notification_new (title, + message, + "preferences-desktop-accessibility", + NULL); + notify_notification_attach_to_status_icon (manager->priv->notification, manager->priv->status_icon); + notify_notification_set_timeout (manager->priv->notification, NOTIFICATION_TIMEOUT * 1000); + + notify_notification_add_action (manager->priv->notification, + "reject", + enabled ? _("Don't activate") : _("Don't deactivate"), + (NotifyActionCallback) on_sticky_keys_action, + manager, + NULL); + notify_notification_add_action (manager->priv->notification, + "accept", + enabled ? _("Activate") : _("Deactivate"), + (NotifyActionCallback) on_sticky_keys_action, + manager, + NULL); + + g_signal_connect (manager->priv->notification, + "closed", + G_CALLBACK (on_notification_closed), + manager); + + error = NULL; + res = notify_notification_show (manager->priv->notification, &error); + if (! res) { + g_warning ("MsdA11yKeyboardManager: unable to show notification: %s", error->message); + g_error_free (error); + notify_notification_close (manager->priv->notification, NULL); + } + + return res; +#else + return FALSE; +#endif /* HAVE_LIBMATENOTIFY */ +} + +static void +ax_stickykeys_warning_post_dialog (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ + const char *title; + const char *message; + + title = enabled ? + _("Do you want to activate Sticky Keys?") : + _("Do you want to deactivate Sticky Keys?"); + message = enabled ? + _("You just pressed the Shift key 5 times in a row. This is the shortcut " + "for the Sticky Keys feature, which affects the way your keyboard works.") : + _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " + "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + + if (manager->priv->stickykeys_alert != NULL) { + gtk_widget_show (manager->priv->stickykeys_alert); + return; + } + + manager->priv->stickykeys_alert = gtk_message_dialog_new (NULL, + 0, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_NONE, + "%s", title); + + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (manager->priv->stickykeys_alert), + "%s", message); + + gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), + GTK_STOCK_HELP, + GTK_RESPONSE_HELP); + gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), + enabled ? _("Do_n't activate") : _("Do_n't deactivate"), + GTK_RESPONSE_REJECT); + gtk_dialog_add_button (GTK_DIALOG (manager->priv->stickykeys_alert), + enabled ? _("_Activate") : _("_Deactivate"), + GTK_RESPONSE_ACCEPT); + + gtk_window_set_title (GTK_WINDOW (manager->priv->stickykeys_alert), + _("Sticky Keys Alert")); + gtk_window_set_icon_name (GTK_WINDOW (manager->priv->stickykeys_alert), + "input-keyboard"); + gtk_dialog_set_default_response (GTK_DIALOG (manager->priv->stickykeys_alert), + GTK_RESPONSE_ACCEPT); + + g_signal_connect (manager->priv->stickykeys_alert, + "response", + G_CALLBACK (ax_stickykeys_response), + manager); + gtk_widget_show (manager->priv->stickykeys_alert); + + g_object_add_weak_pointer (G_OBJECT (manager->priv->stickykeys_alert), + (gpointer*) &manager->priv->stickykeys_alert); +} + +static void +ax_stickykeys_warning_post (MsdA11yKeyboardManager *manager, + gboolean enabled) +{ + + manager->priv->stickykeys_shortcut_val = enabled; + + /* alway try to show something */ + if (! ax_stickykeys_warning_post_bubble (manager, enabled)) { + ax_stickykeys_warning_post_dialog (manager, enabled); + } +} + +static void +set_mateconf_from_server (MsdA11yKeyboardManager *manager) +{ + MateConfClient *client; + MateConfChangeSet *cs; + XkbDescRec *desc; + gboolean changed = FALSE; + gboolean slowkeys_changed; + gboolean stickykeys_changed; + + cs = mateconf_change_set_new (); + desc = get_xkb_desc_rec (manager); + if (! desc) { + return; + } + + client = mateconf_client_get_default (); + + /* + fprintf (stderr, "changed to : 0x%x\n", desc->ctrls->enabled_ctrls); + fprintf (stderr, "changed to : 0x%x (2)\n", desc->ctrls->ax_options); + */ + + changed |= set_bool (client, + cs, + CONFIG_ROOT "/enable", + desc->ctrls->enabled_ctrls & XkbAccessXKeysMask); + + changed |= set_bool (client, + cs, + CONFIG_ROOT "/feature_state_change_beep", + desc->ctrls->ax_options & (XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask)); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/timeout_enable", + desc->ctrls->enabled_ctrls & XkbAccessXTimeoutMask); + changed |= set_int (client, + cs, + CONFIG_ROOT "/timeout", + desc->ctrls->ax_timeout); + + changed |= set_bool (client, + cs, + CONFIG_ROOT "/bouncekeys_enable", + desc->ctrls->enabled_ctrls & XkbBounceKeysMask); + changed |= set_int (client, + cs, + CONFIG_ROOT "/bouncekeys_delay", + desc->ctrls->debounce_delay); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/bouncekeys_beep_reject", + desc->ctrls->ax_options & XkbAX_BKRejectFBMask); + + changed |= set_bool (client, + cs, + CONFIG_ROOT "/mousekeys_enable", + desc->ctrls->enabled_ctrls & XkbMouseKeysMask); + changed |= set_int (client, + cs, + CONFIG_ROOT "/mousekeys_max_speed", + desc->ctrls->mk_max_speed * (1000 / desc->ctrls->mk_interval)); + /* NOTE : mk_time_to_max is measured in events not time */ + changed |= set_int (client, + cs, + CONFIG_ROOT "/mousekeys_accel_time", + desc->ctrls->mk_time_to_max * desc->ctrls->mk_interval); + changed |= set_int (client, + cs, + CONFIG_ROOT "/mousekeys_init_delay", + desc->ctrls->mk_delay); + + slowkeys_changed = set_bool (client, + cs, + CONFIG_ROOT "/slowkeys_enable", + desc->ctrls->enabled_ctrls & XkbSlowKeysMask); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/slowkeys_beep_press", + desc->ctrls->ax_options & XkbAX_SKPressFBMask); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/slowkeys_beep_accept", + desc->ctrls->ax_options & XkbAX_SKAcceptFBMask); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/slowkeys_beep_reject", + desc->ctrls->ax_options & XkbAX_SKRejectFBMask); + changed |= set_int (client, + cs, + CONFIG_ROOT "/slowkeys_delay", + desc->ctrls->slow_keys_delay); + + stickykeys_changed = set_bool (client, + cs, + CONFIG_ROOT "/stickykeys_enable", + desc->ctrls->enabled_ctrls & XkbStickyKeysMask); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/stickykeys_two_key_off", + desc->ctrls->ax_options & XkbAX_TwoKeysMask); + changed |= set_bool (client, + cs, + CONFIG_ROOT "/stickykeys_modifier_beep", + desc->ctrls->ax_options & XkbAX_StickyKeysFBMask); + + changed |= set_bool (client, + cs, + CONFIG_ROOT "/togglekeys_enable", + desc->ctrls->ax_options & XkbAX_IndicatorFBMask); + + if (!changed && stickykeys_changed ^ slowkeys_changed) { + /* + * sticky or slowkeys has changed, singly, without our intervention. + * 99% chance this is due to a keyboard shortcut being used. + * we need to detect via this hack until we get + * XkbAXN_AXKWarning notifications working (probable XKB bug), + * at which time we can directly intercept such shortcuts instead. + * See cb_xkb_event_filter () below. + */ + + /* sanity check: are keyboard shortcuts available? */ + if (desc->ctrls->enabled_ctrls & XkbAccessXKeysMask) { + if (slowkeys_changed) { + ax_slowkeys_warning_post (manager, + desc->ctrls->enabled_ctrls & XkbSlowKeysMask); + } else { + ax_stickykeys_warning_post (manager, + desc->ctrls->enabled_ctrls & XkbStickyKeysMask); + } + } + } + + XkbFreeKeyboard (desc, XkbAllComponentsMask, True); + + changed |= (stickykeys_changed | slowkeys_changed); + + if (changed) { + mateconf_client_commit_change_set (client, cs, FALSE, NULL); + mateconf_client_suggest_sync (client, NULL); + } + mateconf_change_set_unref (cs); + + g_object_unref (client); +} + +static GdkFilterReturn +cb_xkb_event_filter (GdkXEvent *xevent, + GdkEvent *ignored1, + MsdA11yKeyboardManager *manager) +{ + XEvent *xev = (XEvent *) xevent; + XkbEvent *xkbEv = (XkbEvent *) xevent; + + if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && + xkbEv->any.xkb_type == XkbControlsNotify) { + d ("XKB state changed"); + set_mateconf_from_server (manager); + } else if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && + xkbEv->any.xkb_type == XkbAccessXNotify) { + if (xkbEv->accessx.detail == XkbAXN_AXKWarning) { + d ("About to turn on an AccessX feature from the keyboard!"); + /* + * TODO: when XkbAXN_AXKWarnings start working, we need to + * invoke ax_keys_warning_dialog_run here instead of in + * set_mateconf_from_server(). + */ + } + } + + return GDK_FILTER_CONTINUE; +} + +static void +keyboard_callback (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + MsdA11yKeyboardManager *manager) +{ + set_server_from_mateconf (manager, client); + maybe_show_status_icon (manager); +} + +static void +register_config_callback (MsdA11yKeyboardManager *manager, + MateConfClient *client, + const char *path, + MateConfClientNotifyFunc func, + guint *notify) +{ + mateconf_client_add_dir (client, path, MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); + *notify = mateconf_client_notify_add (client, path, func, manager, NULL, NULL); +} + +static gboolean +start_a11y_keyboard_idle_cb (MsdA11yKeyboardManager *manager) +{ + guint event_mask; + MateConfClient *client; + + g_debug ("Starting a11y_keyboard manager"); + mate_settings_profile_start (NULL); + + if (!xkb_enabled (manager)) + goto out; + + client = mateconf_client_get_default (); + + register_config_callback (manager, + client, + CONFIG_ROOT, + (MateConfClientNotifyFunc) keyboard_callback, + &manager->priv->mateconf_notify); + +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H + set_devicepresence_handler (manager); +#endif + + /* Save current xkb state so we can restore it on exit + */ + manager->priv->original_xkb_desc = get_xkb_desc_rec (manager); + + event_mask = XkbControlsNotifyMask; +#ifdef DEBUG_ACCESSIBILITY + event_mask |= XkbAccessXNotifyMask; /* make default when AXN_AXKWarning works */ +#endif + + /* be sure to init before starting to monitor the server */ + set_server_from_mateconf (manager, client); + g_object_unref (client); + + XkbSelectEvents (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + XkbUseCoreKbd, + event_mask, + event_mask); + + gdk_window_add_filter (NULL, + (GdkFilterFunc) cb_xkb_event_filter, + manager); + + maybe_show_status_icon (manager); + + out: + mate_settings_profile_end (NULL); + + return FALSE; +} + + +gboolean +msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, + GError **error) +{ + mate_settings_profile_start (NULL); + + g_idle_add ((GSourceFunc) start_a11y_keyboard_idle_cb, manager); + + mate_settings_profile_end (NULL); + + return TRUE; +} + +static void +restore_server_xkb_config (MsdA11yKeyboardManager *manager) +{ + gdk_error_trap_push (); + XkbSetControls (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + XkbSlowKeysMask | + XkbBounceKeysMask | + XkbStickyKeysMask | + XkbMouseKeysMask | + XkbMouseKeysAccelMask | + XkbAccessXKeysMask | + XkbAccessXTimeoutMask | + XkbAccessXFeedbackMask | + XkbControlsEnabledMask, + manager->priv->original_xkb_desc); + + XkbFreeKeyboard (manager->priv->original_xkb_desc, + XkbAllComponentsMask, True); + + XSync (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), FALSE); + gdk_error_trap_pop (); + + manager->priv->original_xkb_desc = NULL; +} + +void +msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager) +{ + MsdA11yKeyboardManagerPrivate *p = manager->priv; + + g_debug ("Stopping a11y_keyboard manager"); + +#ifdef HAVE_X11_EXTENSIONS_XINPUT_H + gdk_window_remove_filter (NULL, devicepresence_filter, manager); +#endif + + if (p->status_icon) + gtk_status_icon_set_visible (p->status_icon, FALSE); + + if (p->mateconf_notify != 0) { + MateConfClient *client = mateconf_client_get_default (); + mateconf_client_remove_dir (client, CONFIG_ROOT, NULL); + mateconf_client_notify_remove (client, p->mateconf_notify); + g_object_unref (client); + p->mateconf_notify = 0; + } + + gdk_window_remove_filter (NULL, + (GdkFilterFunc) cb_xkb_event_filter, + manager); + + /* Disable all the AccessX bits + */ + restore_server_xkb_config (manager); + + if (p->slowkeys_alert != NULL) + gtk_widget_destroy (p->slowkeys_alert); + + if (p->stickykeys_alert != NULL) + gtk_widget_destroy (p->stickykeys_alert); + + p->slowkeys_shortcut_val = FALSE; + p->stickykeys_shortcut_val = FALSE; +} + +static void +msd_a11y_keyboard_manager_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + MsdA11yKeyboardManager *self; + + self = MSD_A11Y_KEYBOARD_MANAGER (object); + + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +msd_a11y_keyboard_manager_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + MsdA11yKeyboardManager *self; + + self = MSD_A11Y_KEYBOARD_MANAGER (object); + + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static GObject * +msd_a11y_keyboard_manager_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + MsdA11yKeyboardManager *a11y_keyboard_manager; + MsdA11yKeyboardManagerClass *klass; + + klass = MSD_A11Y_KEYBOARD_MANAGER_CLASS (g_type_class_peek (MSD_TYPE_A11Y_KEYBOARD_MANAGER)); + + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); + + return G_OBJECT (a11y_keyboard_manager); +} + +static void +msd_a11y_keyboard_manager_dispose (GObject *object) +{ + MsdA11yKeyboardManager *a11y_keyboard_manager; + + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); + + G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->dispose (object); +} + +static void +msd_a11y_keyboard_manager_class_init (MsdA11yKeyboardManagerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = msd_a11y_keyboard_manager_get_property; + object_class->set_property = msd_a11y_keyboard_manager_set_property; + object_class->constructor = msd_a11y_keyboard_manager_constructor; + object_class->dispose = msd_a11y_keyboard_manager_dispose; + object_class->finalize = msd_a11y_keyboard_manager_finalize; + + g_type_class_add_private (klass, sizeof (MsdA11yKeyboardManagerPrivate)); +} + +static void +on_preferences_dialog_response (GtkDialog *dialog, + int response, + MsdA11yKeyboardManager *manager) +{ + g_signal_handlers_disconnect_by_func (dialog, + on_preferences_dialog_response, + manager); + + gtk_widget_destroy (GTK_WIDGET (dialog)); + manager->priv->preferences_dialog = NULL; +} + +static void +on_status_icon_activate (GtkStatusIcon *status_icon, + MsdA11yKeyboardManager *manager) +{ + if (manager->priv->preferences_dialog == NULL) { + manager->priv->preferences_dialog = msd_a11y_preferences_dialog_new (); + g_signal_connect (manager->priv->preferences_dialog, + "response", + G_CALLBACK (on_preferences_dialog_response), + manager); + + gtk_window_present (GTK_WINDOW (manager->priv->preferences_dialog)); + } else { + g_signal_handlers_disconnect_by_func (manager->priv->preferences_dialog, + on_preferences_dialog_response, + manager); + gtk_widget_destroy (GTK_WIDGET (manager->priv->preferences_dialog)); + manager->priv->preferences_dialog = NULL; + } +} + +static void +msd_a11y_keyboard_manager_ensure_status_icon (MsdA11yKeyboardManager *manager) +{ + mate_settings_profile_start (NULL); + + if (!manager->priv->status_icon) { + + manager->priv->status_icon = gtk_status_icon_new_from_icon_name ("preferences-desktop-accessibility"); + g_signal_connect (manager->priv->status_icon, + "activate", + G_CALLBACK (on_status_icon_activate), + manager); + } + + mate_settings_profile_end (NULL); +} + +static void +msd_a11y_keyboard_manager_init (MsdA11yKeyboardManager *manager) +{ + manager->priv = MSD_A11Y_KEYBOARD_MANAGER_GET_PRIVATE (manager); + +#ifdef HAVE_LIBMATENOTIFY + notify_init ("mate-settings-daemon"); +#endif /* HAVE_LIBMATENOTIFY */ +} + +static void +msd_a11y_keyboard_manager_finalize (GObject *object) +{ + MsdA11yKeyboardManager *a11y_keyboard_manager; + + g_return_if_fail (object != NULL); + g_return_if_fail (MSD_IS_A11Y_KEYBOARD_MANAGER (object)); + + a11y_keyboard_manager = MSD_A11Y_KEYBOARD_MANAGER (object); + + g_return_if_fail (a11y_keyboard_manager->priv != NULL); + + G_OBJECT_CLASS (msd_a11y_keyboard_manager_parent_class)->finalize (object); +} + +MsdA11yKeyboardManager * +msd_a11y_keyboard_manager_new (void) +{ + if (manager_object != NULL) { + g_object_ref (manager_object); + } else { + manager_object = g_object_new (MSD_TYPE_A11Y_KEYBOARD_MANAGER, NULL); + g_object_add_weak_pointer (manager_object, + (gpointer *) &manager_object); + } + + return MSD_A11Y_KEYBOARD_MANAGER (manager_object); +} diff --git a/plugins/a11y-keyboard/msd-a11y-keyboard-manager.h b/plugins/a11y-keyboard/msd-a11y-keyboard-manager.h new file mode 100644 index 0000000..1869cf4 --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-keyboard-manager.h @@ -0,0 +1,61 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 William Jon McCann + * + * 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 __MSD_A11Y_KEYBOARD_MANAGER_H +#define __MSD_A11Y_KEYBOARD_MANAGER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MSD_TYPE_A11Y_KEYBOARD_MANAGER (msd_a11y_keyboard_manager_get_type ()) +#define MSD_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManager)) +#define MSD_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) +#define MSD_IS_A11Y_KEYBOARD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) +#define MSD_IS_A11Y_KEYBOARD_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_MANAGER)) +#define MSD_A11Y_KEYBOARD_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_MANAGER, MsdA11yKeyboardManagerClass)) + +typedef struct MsdA11yKeyboardManagerPrivate MsdA11yKeyboardManagerPrivate; + +typedef struct +{ + GObject parent; + MsdA11yKeyboardManagerPrivate *priv; +} MsdA11yKeyboardManager; + +typedef struct +{ + GObjectClass parent_class; +} MsdA11yKeyboardManagerClass; + +GType msd_a11y_keyboard_manager_get_type (void); + +MsdA11yKeyboardManager *msd_a11y_keyboard_manager_new (void); +gboolean msd_a11y_keyboard_manager_start (MsdA11yKeyboardManager *manager, + GError **error); +void msd_a11y_keyboard_manager_stop (MsdA11yKeyboardManager *manager); + +#ifdef __cplusplus +} +#endif + +#endif /* __MSD_A11Y_KEYBOARD_MANAGER_H */ diff --git a/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c new file mode 100644 index 0000000..7eed1c4 --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c @@ -0,0 +1,104 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 William Jon McCann + * + * 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, 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. + * + */ + +#include "config.h" + +#include +#include + +#include "mate-settings-plugin.h" +#include "msd-a11y-keyboard-plugin.h" +#include "msd-a11y-keyboard-manager.h" + +struct MsdA11yKeyboardPluginPrivate { + MsdA11yKeyboardManager *manager; +}; + +#define MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginPrivate)) + +MATE_SETTINGS_PLUGIN_REGISTER (MsdA11yKeyboardPlugin, msd_a11y_keyboard_plugin) + +static void +msd_a11y_keyboard_plugin_init (MsdA11yKeyboardPlugin *plugin) +{ + plugin->priv = MSD_A11Y_KEYBOARD_PLUGIN_GET_PRIVATE (plugin); + + g_debug ("MsdA11yKeyboardPlugin initializing"); + + plugin->priv->manager = msd_a11y_keyboard_manager_new (); +} + +static void +msd_a11y_keyboard_plugin_finalize (GObject *object) +{ + MsdA11yKeyboardPlugin *plugin; + + g_return_if_fail (object != NULL); + g_return_if_fail (MSD_IS_A11Y_KEYBOARD_PLUGIN (object)); + + g_debug ("MsdA11yKeyboardPlugin finalizing"); + + plugin = MSD_A11Y_KEYBOARD_PLUGIN (object); + + g_return_if_fail (plugin->priv != NULL); + + if (plugin->priv->manager != NULL) { + g_object_unref (plugin->priv->manager); + } + + G_OBJECT_CLASS (msd_a11y_keyboard_plugin_parent_class)->finalize (object); +} + +static void +impl_activate (MateSettingsPlugin *plugin) +{ + gboolean res; + GError *error; + + g_debug ("Activating a11y_keyboard plugin"); + + error = NULL; + res = msd_a11y_keyboard_manager_start (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager, &error); + if (! res) { + g_warning ("Unable to start a11y_keyboard manager: %s", error->message); + g_error_free (error); + } +} + +static void +impl_deactivate (MateSettingsPlugin *plugin) +{ + g_debug ("Deactivating a11y_keyboard plugin"); + msd_a11y_keyboard_manager_stop (MSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager); +} + +static void +msd_a11y_keyboard_plugin_class_init (MsdA11yKeyboardPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + MateSettingsPluginClass *plugin_class = MATE_SETTINGS_PLUGIN_CLASS (klass); + + object_class->finalize = msd_a11y_keyboard_plugin_finalize; + + plugin_class->activate = impl_activate; + plugin_class->deactivate = impl_deactivate; + + g_type_class_add_private (klass, sizeof (MsdA11yKeyboardPluginPrivate)); +} diff --git a/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.h b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.h new file mode 100644 index 0000000..f4b8320 --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.h @@ -0,0 +1,63 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 William Jon McCann + * + * 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, 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 __MSD_A11Y_KEYBOARD_PLUGIN_H__ +#define __MSD_A11Y_KEYBOARD_PLUGIN_H__ + +#include +#include +#include + +#include "mate-settings-plugin.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MSD_TYPE_A11Y_KEYBOARD_PLUGIN (msd_a11y_keyboard_plugin_get_type ()) +#define MSD_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPlugin)) +#define MSD_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) +#define MSD_IS_A11Y_KEYBOARD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) +#define MSD_IS_A11Y_KEYBOARD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_KEYBOARD_PLUGIN)) +#define MSD_A11Y_KEYBOARD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_KEYBOARD_PLUGIN, MsdA11yKeyboardPluginClass)) + +typedef struct MsdA11yKeyboardPluginPrivate MsdA11yKeyboardPluginPrivate; + +typedef struct +{ + MateSettingsPlugin parent; + MsdA11yKeyboardPluginPrivate *priv; +} MsdA11yKeyboardPlugin; + +typedef struct +{ + MateSettingsPluginClass parent_class; +} MsdA11yKeyboardPluginClass; + +GType msd_a11y_keyboard_plugin_get_type (void) G_GNUC_CONST; + +/* All the plugins must implement this function */ +G_MODULE_EXPORT GType register_mate_settings_plugin (GTypeModule *module); + +#ifdef __cplusplus +} +#endif + +#endif /* __MSD_A11Y_KEYBOARD_PLUGIN_H__ */ diff --git a/plugins/a11y-keyboard/msd-a11y-preferences-dialog.c b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.c new file mode 100644 index 0000000..a5db11c --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.c @@ -0,0 +1,975 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2008 William Jon McCann + * + * 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. + * + */ + +#include "config.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include "msd-a11y-preferences-dialog.h" + +#define SM_DBUS_NAME "org.mate.SessionManager" +#define SM_DBUS_PATH "/org/mate/SessionManager" +#define SM_DBUS_INTERFACE "org.mate.SessionManager" + + +#define MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogPrivate)) + +#define GTKBUILDER_UI_FILE "msd-a11y-preferences-dialog.ui" + +#define KEY_A11Y_DIR "/desktop/mate/accessibility" +#define KEY_STICKY_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/stickykeys_enable" +#define KEY_BOUNCE_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/bouncekeys_enable" +#define KEY_SLOW_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/slowkeys_enable" +#define KEY_MOUSE_KEYS_ENABLED KEY_A11Y_DIR "/keyboard/mousekeys_enable" + +#define KEY_AT_DIR "/desktop/mate/applications/at" +#define KEY_AT_SCREEN_KEYBOARD_ENABLED KEY_AT_DIR "/screen_keyboard_enabled" +#define KEY_AT_SCREEN_MAGNIFIER_ENABLED KEY_AT_DIR "/screen_magnifier_enabled" +#define KEY_AT_SCREEN_READER_ENABLED KEY_AT_DIR "/screen_reader_enabled" + +#define FONT_RENDER_DIR "/desktop/mate/font_rendering" +#define KEY_FONT_DPI FONT_RENDER_DIR "/dpi" +/* X servers sometimes lie about the screen's physical dimensions, so we cannot + * compute an accurate DPI value. When this happens, the user gets fonts that + * are too huge or too tiny. So, we see what the server returns: if it reports + * something outside of the range [DPI_LOW_REASONABLE_VALUE, + * DPI_HIGH_REASONABLE_VALUE], then we assume that it is lying and we use + * DPI_FALLBACK instead. + * + * See get_dpi_from_mateconf_or_server() below, and also + * https://bugzilla.novell.com/show_bug.cgi?id=217790 + */ +#define DPI_LOW_REASONABLE_VALUE 50 +#define DPI_HIGH_REASONABLE_VALUE 500 + +#define DPI_FACTOR_LARGE 1.25 +#define DPI_FACTOR_LARGER 1.5 +#define DPI_FACTOR_LARGEST 2.0 +#define DPI_DEFAULT 96 + +#define KEY_GTK_THEME "/desktop/mate/interface/gtk_theme" +#define KEY_COLOR_SCHEME "/desktop/mate/interface/gtk_color_scheme" +#define KEY_MARCO_THEME "/apps/marco/general/theme" +#define KEY_ICON_THEME "/desktop/mate/interface/icon_theme" + +#define HIGH_CONTRAST_THEME "HighContrast" + +struct MsdA11yPreferencesDialogPrivate +{ + GtkWidget *sticky_keys_checkbutton; + GtkWidget *slow_keys_checkbutton; + GtkWidget *bounce_keys_checkbutton; + + GtkWidget *large_print_checkbutton; + GtkWidget *high_contrast_checkbutton; + + GtkWidget *screen_reader_checkbutton; + GtkWidget *screen_keyboard_checkbutton; + GtkWidget *screen_magnifier_checkbutton; + + guint a11y_dir_cnxn; + guint msd_a11y_dir_cnxn; +}; + +enum { + PROP_0, +}; + +static void msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass); +static void msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *a11y_preferences_dialog); +static void msd_a11y_preferences_dialog_finalize (GObject *object); + +G_DEFINE_TYPE (MsdA11yPreferencesDialog, msd_a11y_preferences_dialog, GTK_TYPE_DIALOG) + +static void +msd_a11y_preferences_dialog_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +msd_a11y_preferences_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static GObject * +msd_a11y_preferences_dialog_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + MsdA11yPreferencesDialog *a11y_preferences_dialog; + + a11y_preferences_dialog = MSD_A11Y_PREFERENCES_DIALOG (G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); + + return G_OBJECT (a11y_preferences_dialog); +} + +static void +msd_a11y_preferences_dialog_dispose (GObject *object) +{ + G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->dispose (object); +} + +static void +msd_a11y_preferences_dialog_class_init (MsdA11yPreferencesDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = msd_a11y_preferences_dialog_get_property; + object_class->set_property = msd_a11y_preferences_dialog_set_property; + object_class->constructor = msd_a11y_preferences_dialog_constructor; + object_class->dispose = msd_a11y_preferences_dialog_dispose; + object_class->finalize = msd_a11y_preferences_dialog_finalize; + + g_type_class_add_private (klass, sizeof (MsdA11yPreferencesDialogPrivate)); +} + +static void +on_response (MsdA11yPreferencesDialog *dialog, + gint response_id) +{ + switch (response_id) { + default: + break; + } +} + +static char * +config_get_string (const char *key, + gboolean *is_writable) +{ + char *str; + MateConfClient *client; + + client = mateconf_client_get_default (); + + if (is_writable) { + *is_writable = mateconf_client_key_is_writable (client, + key, + NULL); + } + + str = mateconf_client_get_string (client, key, NULL); + + g_object_unref (client); + + return str; +} + +static gboolean +config_get_bool (const char *key, + gboolean *is_writable) +{ + int enabled; + MateConfClient *client; + + client = mateconf_client_get_default (); + + if (is_writable) { + *is_writable = mateconf_client_key_is_writable (client, + key, + NULL); + } + + enabled = mateconf_client_get_bool (client, key, NULL); + + g_object_unref (client); + + return enabled; +} + +static double +dpi_from_pixels_and_mm (int pixels, + int mm) +{ + double dpi; + + if (mm >= 1) { + dpi = pixels / (mm / 25.4); + } else { + dpi = 0; + } + + return dpi; +} + +static double +get_dpi_from_x_server (void) +{ + GdkScreen *screen; + double dpi; + + screen = gdk_screen_get_default (); + if (screen != NULL) { + double width_dpi; + double height_dpi; + + width_dpi = dpi_from_pixels_and_mm (gdk_screen_get_width (screen), + gdk_screen_get_width_mm (screen)); + height_dpi = dpi_from_pixels_and_mm (gdk_screen_get_height (screen), + gdk_screen_get_height_mm (screen)); + if (width_dpi < DPI_LOW_REASONABLE_VALUE + || width_dpi > DPI_HIGH_REASONABLE_VALUE + || height_dpi < DPI_LOW_REASONABLE_VALUE + || height_dpi > DPI_HIGH_REASONABLE_VALUE) { + dpi = DPI_DEFAULT; + } else { + dpi = (width_dpi + height_dpi) / 2.0; + } + } else { + /* Huh!? No screen? */ + dpi = DPI_DEFAULT; + } + + return dpi; +} + +static gboolean +config_get_large_print (gboolean *is_writable) +{ + gboolean ret; + MateConfClient *client; + MateConfValue *value; + gdouble x_dpi; + gdouble u_dpi; + + client = mateconf_client_get_default (); + value = mateconf_client_get_without_default (client, KEY_FONT_DPI, NULL); + + if (value != NULL) { + u_dpi = mateconf_value_get_float (value); + mateconf_value_free (value); + } else { + u_dpi = DPI_DEFAULT; + } + + x_dpi = get_dpi_from_x_server (); + + g_object_unref (client); + + g_debug ("MsdA11yPreferences: got x-dpi=%f user-dpi=%f", x_dpi, u_dpi); + + ret = (((double)DPI_FACTOR_LARGE * x_dpi) < u_dpi); + + return ret; +} + +static void +config_set_large_print (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + + if (enabled) { + gdouble x_dpi; + gdouble u_dpi; + + x_dpi = get_dpi_from_x_server (); + u_dpi = (double)DPI_FACTOR_LARGER * x_dpi; + + g_debug ("MsdA11yPreferences: setting x-dpi=%f user-dpi=%f", x_dpi, u_dpi); + + mateconf_client_set_float (client, KEY_FONT_DPI, u_dpi, NULL); + } else { + mateconf_client_unset (client, KEY_FONT_DPI, NULL); + } + + g_object_unref (client); +} + +static gboolean +config_get_high_contrast (gboolean *is_writable) +{ + gboolean ret; + char *gtk_theme; + + ret = FALSE; + + gtk_theme = config_get_string (KEY_GTK_THEME, is_writable); + if (gtk_theme != NULL && strcmp (gtk_theme, HIGH_CONTRAST_THEME) == 0) { + ret = TRUE; + } + g_free (gtk_theme); + + return ret; +} + +static void +config_set_high_contrast (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + + if (enabled) { + mateconf_client_set_string (client, KEY_GTK_THEME, HIGH_CONTRAST_THEME, NULL); + mateconf_client_set_string (client, KEY_ICON_THEME, HIGH_CONTRAST_THEME, NULL); + /* there isn't a high contrast marco theme afaik */ + } else { + mateconf_client_unset (client, KEY_GTK_THEME, NULL); + mateconf_client_unset (client, KEY_ICON_THEME, NULL); + mateconf_client_unset (client, KEY_MARCO_THEME, NULL); + } + + g_object_unref (client); +} + +static gboolean +config_get_sticky_keys (gboolean *is_writable) +{ + return config_get_bool (KEY_STICKY_KEYS_ENABLED, is_writable); +} + +static void +config_set_sticky_keys (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_STICKY_KEYS_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static gboolean +config_get_bounce_keys (gboolean *is_writable) +{ + return config_get_bool (KEY_BOUNCE_KEYS_ENABLED, is_writable); +} + +static void +config_set_bounce_keys (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_BOUNCE_KEYS_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static gboolean +config_get_slow_keys (gboolean *is_writable) +{ + return config_get_bool (KEY_SLOW_KEYS_ENABLED, is_writable); +} + +static void +config_set_slow_keys (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_SLOW_KEYS_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static gboolean +config_have_at_mateconf_condition (const char *condition) +{ + DBusGProxy *sm_proxy; + DBusGConnection *connection; + GError *error; + gboolean res; + gboolean is_handled; + + error = NULL; + connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (connection == NULL) { + g_warning ("Unable to connect to session bus: %s", error->message); + return FALSE; + } + sm_proxy = dbus_g_proxy_new_for_name (connection, + SM_DBUS_NAME, + SM_DBUS_PATH, + SM_DBUS_INTERFACE); + if (sm_proxy == NULL) { + return FALSE; + } + + is_handled = FALSE; + res = dbus_g_proxy_call (sm_proxy, + "IsAutostartConditionHandled", + &error, + G_TYPE_STRING, condition, + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &is_handled, + G_TYPE_INVALID); + if (! res) { + g_warning ("Unable to call IsAutostartConditionHandled (%s): %s", + condition, + error->message); + } + + g_object_unref (sm_proxy); + + return is_handled; +} + +static gboolean +config_get_at_screen_reader (gboolean *is_writable) +{ + return config_get_bool (KEY_AT_SCREEN_READER_ENABLED, is_writable); +} + +static gboolean +config_get_at_screen_keyboard (gboolean *is_writable) +{ + return config_get_bool (KEY_AT_SCREEN_KEYBOARD_ENABLED, is_writable); +} + +static gboolean +config_get_at_screen_magnifier (gboolean *is_writable) +{ + return config_get_bool (KEY_AT_SCREEN_MAGNIFIER_ENABLED, is_writable); +} + +static void +config_set_at_screen_reader (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_AT_SCREEN_READER_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static void +config_set_at_screen_keyboard (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_AT_SCREEN_KEYBOARD_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static void +config_set_at_screen_magnifier (gboolean enabled) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, KEY_AT_SCREEN_MAGNIFIER_ENABLED, enabled, NULL); + g_object_unref (client); +} + +static void +on_sticky_keys_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_sticky_keys (gtk_toggle_button_get_active (button)); +} + +static void +on_bounce_keys_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_bounce_keys (gtk_toggle_button_get_active (button)); +} + +static void +on_slow_keys_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_slow_keys (gtk_toggle_button_get_active (button)); +} + +static void +on_high_contrast_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_high_contrast (gtk_toggle_button_get_active (button)); +} + +static void +on_at_screen_reader_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_at_screen_reader (gtk_toggle_button_get_active (button)); +} + +static void +on_at_screen_keyboard_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_at_screen_keyboard (gtk_toggle_button_get_active (button)); +} + +static void +on_at_screen_magnifier_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_at_screen_magnifier (gtk_toggle_button_get_active (button)); +} + +static void +on_large_print_checkbutton_toggled (GtkToggleButton *button, + MsdA11yPreferencesDialog *dialog) +{ + config_set_large_print (gtk_toggle_button_get_active (button)); +} + +static void +ui_set_sticky_keys (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->sticky_keys_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->sticky_keys_checkbutton), enabled); + } +} + +static void +ui_set_bounce_keys (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->bounce_keys_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->bounce_keys_checkbutton), enabled); + } +} + +static void +ui_set_slow_keys (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->slow_keys_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->slow_keys_checkbutton), enabled); + } +} + +static void +ui_set_high_contrast (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->high_contrast_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->high_contrast_checkbutton), enabled); + } +} + +static void +ui_set_at_screen_reader (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_reader_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_reader_checkbutton), enabled); + } +} + +static void +ui_set_at_screen_keyboard (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_keyboard_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_keyboard_checkbutton), enabled); + } +} + +static void +ui_set_at_screen_magnifier (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_magnifier_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->screen_magnifier_checkbutton), enabled); + } +} + +static void +ui_set_large_print (MsdA11yPreferencesDialog *dialog, + gboolean enabled) +{ + gboolean active; + + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->large_print_checkbutton)); + if (active != enabled) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->large_print_checkbutton), enabled); + } +} + +static void +key_changed_cb (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + MsdA11yPreferencesDialog *dialog) +{ + const char *key; + MateConfValue *value; + + key = mateconf_entry_get_key (entry); + value = mateconf_entry_get_value (entry); + + if (strcmp (key, KEY_STICKY_KEYS_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_sticky_keys (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else if (strcmp (key, KEY_BOUNCE_KEYS_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_bounce_keys (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else if (strcmp (key, KEY_SLOW_KEYS_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_slow_keys (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else if (strcmp (key, KEY_AT_SCREEN_READER_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_at_screen_reader (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else if (strcmp (key, KEY_AT_SCREEN_KEYBOARD_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_at_screen_keyboard (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else if (strcmp (key, KEY_AT_SCREEN_MAGNIFIER_ENABLED) == 0) { + if (value->type == MATECONF_VALUE_BOOL) { + gboolean enabled; + + enabled = mateconf_value_get_bool (value); + ui_set_at_screen_magnifier (dialog, enabled); + } else { + g_warning ("Error retrieving configuration key '%s': Invalid type", + key); + } + } else { + g_debug ("Config key not handled: %s", key); + } +} + +static void +setup_dialog (MsdA11yPreferencesDialog *dialog, + GtkBuilder *builder) +{ + GtkWidget *widget; + gboolean enabled; + gboolean is_writable; + MateConfClient *client; + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "sticky_keys_checkbutton")); + dialog->priv->sticky_keys_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_sticky_keys_checkbutton_toggled), + NULL); + enabled = config_get_sticky_keys (&is_writable); + ui_set_sticky_keys (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "bounce_keys_checkbutton")); + dialog->priv->bounce_keys_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_bounce_keys_checkbutton_toggled), + NULL); + enabled = config_get_bounce_keys (&is_writable); + ui_set_bounce_keys (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "slow_keys_checkbutton")); + dialog->priv->slow_keys_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_slow_keys_checkbutton_toggled), + NULL); + enabled = config_get_slow_keys (&is_writable); + ui_set_slow_keys (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "high_contrast_checkbutton")); + dialog->priv->high_contrast_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_high_contrast_checkbutton_toggled), + NULL); + enabled = config_get_high_contrast (&is_writable); + ui_set_high_contrast (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "at_screen_keyboard_checkbutton")); + dialog->priv->screen_keyboard_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_at_screen_keyboard_checkbutton_toggled), + NULL); + enabled = config_get_at_screen_keyboard (&is_writable); + ui_set_at_screen_keyboard (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + gtk_widget_set_no_show_all (widget, TRUE); + if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_KEYBOARD_ENABLED)) { + gtk_widget_show_all (widget); + } else { + gtk_widget_hide (widget); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "at_screen_reader_checkbutton")); + dialog->priv->screen_reader_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_at_screen_reader_checkbutton_toggled), + NULL); + enabled = config_get_at_screen_reader (&is_writable); + ui_set_at_screen_reader (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + gtk_widget_set_no_show_all (widget, TRUE); + if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_READER_ENABLED)) { + gtk_widget_show_all (widget); + } else { + gtk_widget_hide (widget); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "at_screen_magnifier_checkbutton")); + dialog->priv->screen_magnifier_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_at_screen_magnifier_checkbutton_toggled), + NULL); + enabled = config_get_at_screen_magnifier (&is_writable); + ui_set_at_screen_magnifier (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + gtk_widget_set_no_show_all (widget, TRUE); + if (config_have_at_mateconf_condition ("MATE " KEY_AT_SCREEN_MAGNIFIER_ENABLED)) { + gtk_widget_show_all (widget); + } else { + gtk_widget_hide (widget); + } + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "large_print_checkbutton")); + dialog->priv->large_print_checkbutton = widget; + g_signal_connect (widget, + "toggled", + G_CALLBACK (on_large_print_checkbutton_toggled), + NULL); + enabled = config_get_large_print (&is_writable); + ui_set_large_print (dialog, enabled); + if (! is_writable) { + gtk_widget_set_sensitive (widget, FALSE); + } + + + client = mateconf_client_get_default (); + mateconf_client_add_dir (client, + KEY_A11Y_DIR, + MATECONF_CLIENT_PRELOAD_ONELEVEL, + NULL); + dialog->priv->a11y_dir_cnxn = mateconf_client_notify_add (client, + KEY_A11Y_DIR, + (MateConfClientNotifyFunc)key_changed_cb, + dialog, + NULL, + NULL); + + mateconf_client_add_dir (client, + KEY_AT_DIR, + MATECONF_CLIENT_PRELOAD_ONELEVEL, + NULL); + dialog->priv->msd_a11y_dir_cnxn = mateconf_client_notify_add (client, + KEY_AT_DIR, + (MateConfClientNotifyFunc)key_changed_cb, + dialog, + NULL, + NULL); + + g_object_unref (client); +} + +static void +msd_a11y_preferences_dialog_init (MsdA11yPreferencesDialog *dialog) +{ + static const gchar *ui_file_path = GTKBUILDERDIR "/" GTKBUILDER_UI_FILE; + gchar *objects[] = {"main_box", NULL}; + GError *error = NULL; + GtkBuilder *builder; + + dialog->priv = MSD_A11Y_PREFERENCES_DIALOG_GET_PRIVATE (dialog); + + builder = gtk_builder_new (); + gtk_builder_set_translation_domain (builder, PACKAGE); + if (gtk_builder_add_objects_from_file (builder, ui_file_path, objects, + &error) == 0) { + g_warning ("Could not load A11Y-UI: %s", error->message); + g_error_free (error); + } else { + GtkWidget *widget; + + widget = GTK_WIDGET (gtk_builder_get_object (builder, + "main_box")); + gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + widget); + gtk_container_set_border_width (GTK_CONTAINER (widget), 12); + setup_dialog (dialog, builder); + } + + g_object_unref (builder); + + gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); + gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); + gtk_window_set_title (GTK_WINDOW (dialog), _("Universal Access Preferences")); + gtk_window_set_icon_name (GTK_WINDOW (dialog), "preferences-desktop-accessibility"); + g_object_set (dialog, + "allow-shrink", FALSE, + "allow-grow", FALSE, + NULL); + + gtk_dialog_add_buttons (GTK_DIALOG (dialog), + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, + NULL); + g_signal_connect (dialog, + "response", + G_CALLBACK (on_response), + dialog); + + + gtk_widget_show_all (GTK_WIDGET (dialog)); +} + +static void +msd_a11y_preferences_dialog_finalize (GObject *object) +{ + MsdA11yPreferencesDialog *dialog; + MateConfClient *client; + + g_return_if_fail (object != NULL); + g_return_if_fail (MSD_IS_A11Y_PREFERENCES_DIALOG (object)); + + dialog = MSD_A11Y_PREFERENCES_DIALOG (object); + + g_return_if_fail (dialog->priv != NULL); + + client = mateconf_client_get_default (); + + if (dialog->priv->a11y_dir_cnxn > 0) { + mateconf_client_notify_remove (client, dialog->priv->a11y_dir_cnxn); + } + if (dialog->priv->msd_a11y_dir_cnxn > 0) { + mateconf_client_notify_remove (client, dialog->priv->msd_a11y_dir_cnxn); + } + + g_object_unref (client); + + G_OBJECT_CLASS (msd_a11y_preferences_dialog_parent_class)->finalize (object); +} + +GtkWidget * +msd_a11y_preferences_dialog_new (void) +{ + GObject *object; + + object = g_object_new (MSD_TYPE_A11Y_PREFERENCES_DIALOG, + NULL); + + return GTK_WIDGET (object); +} diff --git a/plugins/a11y-keyboard/msd-a11y-preferences-dialog.h b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.h new file mode 100644 index 0000000..967a94e --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.h @@ -0,0 +1,59 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2008 William Jon McCann + * + * 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 __MSD_A11Y_PREFERENCES_DIALOG_H +#define __MSD_A11Y_PREFERENCES_DIALOG_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MSD_TYPE_A11Y_PREFERENCES_DIALOG (msd_a11y_preferences_dialog_get_type ()) +#define MSD_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialog)) +#define MSD_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) +#define MSD_IS_A11Y_PREFERENCES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) +#define MSD_IS_A11Y_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_A11Y_PREFERENCES_DIALOG)) +#define MSD_A11Y_PREFERENCES_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_A11Y_PREFERENCES_DIALOG, MsdA11yPreferencesDialogClass)) + +typedef struct MsdA11yPreferencesDialogPrivate MsdA11yPreferencesDialogPrivate; + +typedef struct +{ + GtkDialog parent; + MsdA11yPreferencesDialogPrivate *priv; +} MsdA11yPreferencesDialog; + +typedef struct +{ + GtkDialogClass parent_class; +} MsdA11yPreferencesDialogClass; + +GType msd_a11y_preferences_dialog_get_type (void); + +GtkWidget * msd_a11y_preferences_dialog_new (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MSD_A11Y_PREFERENCES_DIALOG_H */ diff --git a/plugins/a11y-keyboard/msd-a11y-preferences-dialog.ui b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.ui new file mode 100644 index 0000000..6a0fcb0 --- /dev/null +++ b/plugins/a11y-keyboard/msd-a11y-preferences-dialog.ui @@ -0,0 +1,199 @@ + + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + Universal Access Preferences + center-on-parent + preferences-desktop-accessibility + dialog + False + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 10 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + preferences-desktop-accessibility + 6 + + + 0 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 6 + + + Use on-screen _keyboard + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 0 + + + + + Use screen _reader + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 1 + + + + + Use screen _magnifier + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 2 + + + + + Enhance _contrast in colors + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 3 + + + + + Make _text larger and easier to read + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 4 + + + + + _Press keyboard shortcuts one key at a time (Sticky Keys) + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 5 + + + + + _Ignore duplicate keypresses (Bounce Keys) + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 6 + + + + + Press and _hold keys to accept them (Slow Keys) + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 7 + + + + + False + False + 1 + + + + + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + end + + + gtk-close + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + + + False + False + 0 + + + + + False + end + 0 + + + + + + button1 + + + -- cgit v1.2.1