summaryrefslogtreecommitdiff
path: root/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c')
-rw-r--r--plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c975
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);
-}