diff options
Diffstat (limited to 'plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c')
-rw-r--r-- | plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c | 975 |
1 files changed, 0 insertions, 975 deletions
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 <[email protected]> - * - * 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 <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <glib-object.h> -#include <gtk/gtk.h> - -#include <dbus/dbus-glib.h> - -#include <mateconf/mateconf-client.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 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); -} |