summaryrefslogtreecommitdiff
path: root/plugins/keyboard
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/keyboard')
-rw-r--r--plugins/keyboard/modmap-dialog.ui16
-rw-r--r--plugins/keyboard/msd-keyboard-manager.c154
-rw-r--r--plugins/keyboard/msd-keyboard-xkb.c314
-rw-r--r--plugins/keyboard/msd-keyboard-xkb.h5
-rw-r--r--plugins/keyboard/msd-xmodmap.c142
5 files changed, 208 insertions, 423 deletions
diff --git a/plugins/keyboard/modmap-dialog.ui b/plugins/keyboard/modmap-dialog.ui
index 12c34a6..73d5a57 100644
--- a/plugins/keyboard/modmap-dialog.ui
+++ b/plugins/keyboard/modmap-dialog.ui
@@ -202,22 +202,6 @@
<property name="position">1</property>
</packing>
</child>
- <child>
- <object class="GtkCheckButton" id="checkbutton1">
- <property name="label" translatable="yes">_Do not show this message again</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
</object>
<packing>
<property name="position">2</property>
diff --git a/plugins/keyboard/msd-keyboard-manager.c b/plugins/keyboard/msd-keyboard-manager.c
index 0969459..d4a25b3 100644
--- a/plugins/keyboard/msd-keyboard-manager.c
+++ b/plugins/keyboard/msd-keyboard-manager.c
@@ -59,23 +59,26 @@
#define HOST_NAME_MAX 255
#endif
-#define MSD_KEYBOARD_KEY "/desktop/mate/peripherals/keyboard"
+#define MSD_KEYBOARD_SCHEMA "org.mate.peripherals-keyboard"
-#define KEY_REPEAT MSD_KEYBOARD_KEY "/repeat"
-#define KEY_CLICK MSD_KEYBOARD_KEY "/click"
-#define KEY_RATE MSD_KEYBOARD_KEY "/rate"
-#define KEY_DELAY MSD_KEYBOARD_KEY "/delay"
-#define KEY_CLICK_VOLUME MSD_KEYBOARD_KEY "/click_volume"
+#define KEY_REPEAT "repeat"
+#define KEY_CLICK "click"
+#define KEY_RATE "rate"
+#define KEY_DELAY "delay"
+#define KEY_CLICK_VOLUME "click-volume"
-#define KEY_BELL_VOLUME MSD_KEYBOARD_KEY "/bell_volume"
-#define KEY_BELL_PITCH MSD_KEYBOARD_KEY "/bell_pitch"
-#define KEY_BELL_DURATION MSD_KEYBOARD_KEY "/bell_duration"
-#define KEY_BELL_MODE MSD_KEYBOARD_KEY "/bell_mode"
+#define KEY_BELL_VOLUME "bell-volume"
+#define KEY_BELL_PITCH "bell-pitch"
+#define KEY_BELL_DURATION "bell-duration"
+#define KEY_BELL_MODE "bell-mode"
+
+#define KEY_NUMLOCK_STATE "numlock-state"
+#define KEY_NUMLOCK_REMEMBER "remember-numlock-state"
struct MsdKeyboardManagerPrivate {
- gboolean have_xkb;
- gint xkb_event_base;
- guint notify;
+ gboolean have_xkb;
+ gint xkb_event_base;
+ GSettings *settings;
};
static void msd_keyboard_manager_class_init (MsdKeyboardManagerClass* klass);
@@ -126,29 +129,6 @@ static gboolean xkb_set_keyboard_autorepeat_rate(int delay, int rate)
}
#endif
-static char* msd_keyboard_get_hostname_key (const char *subkey)
-{
- char hostname[HOST_NAME_MAX + 1];
-
- if (gethostname (hostname, sizeof (hostname)) == 0 &&
- strcmp (hostname, "localhost") != 0 &&
- strcmp (hostname, "localhost.localdomain") != 0) {
- char *escaped;
- char *key;
-
- escaped = mateconf_escape_key (hostname, -1);
- key = g_strconcat (MSD_KEYBOARD_KEY
- "/host-",
- escaped,
- "/0/",
- subkey,
- NULL);
- g_free (escaped);
- return key;
- } else
- return NULL;
-}
-
#ifdef HAVE_X11_EXTENSIONS_XKB_H
typedef enum {
@@ -203,52 +183,20 @@ numlock_set_xkb_state (NumLockState new_state)
XkbLockModifiers (dpy, XkbUseCoreKbd, num_mask, new_state ? num_mask : 0);
}
-static char *
-numlock_mateconf_state_key (void)
-{
- char *key = msd_keyboard_get_hostname_key ("numlock_on");
- if (!key) {
- g_message ("NumLock remembering disabled because hostname is set to \"localhost\"");
- }
- return key;
-}
-
static NumLockState
-numlock_get_mateconf_state (MateConfClient *client)
+numlock_get_settings_state (GSettings *settings)
{
int curr_state;
- GError *err = NULL;
- char *key = numlock_mateconf_state_key ();
-
- if (!key) {
- return NUMLOCK_STATE_UNKNOWN;
- }
-
- curr_state = mateconf_client_get_bool (client, key, &err);
- if (err) {
- curr_state = NUMLOCK_STATE_UNKNOWN;
- g_error_free (err);
- }
-
- g_free (key);
+ curr_state = g_settings_get_enum (settings, KEY_NUMLOCK_STATE);
return curr_state;
}
-static void numlock_set_mateconf_state(MateConfClient *client, NumLockState new_state)
+static void numlock_set_settings_state(GSettings *settings, NumLockState new_state)
{
- //printf("numlock_set_mateconf_state\n");
- char* key;
-
if (new_state != NUMLOCK_STATE_ON && new_state != NUMLOCK_STATE_OFF) {
return;
}
-
- key = numlock_mateconf_state_key ();
-
- if (key) {
- mateconf_client_set_bool (client, key, new_state, NULL);
- g_free (key);
- }
+ g_settings_set_enum (settings, KEY_NUMLOCK_STATE, new_state);
}
static GdkFilterReturn
@@ -265,9 +213,9 @@ numlock_xkb_callback (GdkXEvent *xev_,
unsigned num_mask = numlock_NumLock_modifier_mask ();
unsigned locked_mods = xkbev->state.locked_mods;
int numlock_state = !! (num_mask & locked_mods);
- MateConfClient *client = mateconf_client_get_default ();
- numlock_set_mateconf_state (client, numlock_state);
- g_object_unref (client);
+ GSettings *settings = g_settings_new (MSD_KEYBOARD_SCHEMA);
+ numlock_set_settings_state (settings, numlock_state);
+ g_object_unref (settings);
}
}
return GDK_FILTER_CONTINUE;
@@ -287,9 +235,8 @@ numlock_install_xkb_callback (MsdKeyboardManager *manager)
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
static void
-apply_settings (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
+apply_settings (GSettings *settings,
+ gchar *key,
MsdKeyboardManager *manager)
{
XKeyboardControl kbdcontrol;
@@ -306,23 +253,23 @@ apply_settings (MateConfClient *client,
gboolean rnumlock;
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
- repeat = mateconf_client_get_bool (client, KEY_REPEAT, NULL);
- click = mateconf_client_get_bool (client, KEY_CLICK, NULL);
- rate = mateconf_client_get_int (client, KEY_RATE, NULL);
- delay = mateconf_client_get_int (client, KEY_DELAY, NULL);
- click_volume = mateconf_client_get_int (client, KEY_CLICK_VOLUME, NULL);
+ repeat = g_settings_get_boolean (settings, KEY_REPEAT);
+ click = g_settings_get_boolean (settings, KEY_CLICK);
+ rate = g_settings_get_int (settings, KEY_RATE);
+ delay = g_settings_get_int (settings, KEY_DELAY);
+ click_volume = g_settings_get_int (settings, KEY_CLICK_VOLUME);
#if 0
- bell_volume = mateconf_client_get_int (client, KEY_BELL_VOLUME, NULL);
+ bell_volume = g_settings_get_int (settings, KEY_BELL_VOLUME);
#endif
- bell_pitch = mateconf_client_get_int (client, KEY_BELL_PITCH, NULL);
- bell_duration = mateconf_client_get_int (client, KEY_BELL_DURATION, NULL);
+ bell_pitch = g_settings_get_int (settings, KEY_BELL_PITCH);
+ bell_duration = g_settings_get_int (settings, KEY_BELL_DURATION);
- volume_string = mateconf_client_get_string (client, KEY_BELL_MODE, NULL);
+ volume_string = g_settings_get_string (settings, KEY_BELL_MODE);
bell_volume = (volume_string && !strcmp (volume_string, "on")) ? 50 : 0;
g_free (volume_string);
#ifdef HAVE_X11_EXTENSIONS_XKB_H
- rnumlock = mateconf_client_get_bool (client, MSD_KEYBOARD_KEY "/remember_numlock_state", NULL);
+ rnumlock = g_settings_get_boolean (settings, KEY_NUMLOCK_REMEMBER);
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
gdk_error_trap_push ();
@@ -361,7 +308,7 @@ apply_settings (MateConfClient *client,
#ifdef HAVE_X11_EXTENSIONS_XKB_H
if (manager->priv->have_xkb && rnumlock) {
- numlock_set_xkb_state (numlock_get_mateconf_state (client));
+ numlock_set_xkb_state (numlock_get_settings_state (settings));
}
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
@@ -372,30 +319,22 @@ apply_settings (MateConfClient *client,
void
msd_keyboard_manager_apply_settings (MsdKeyboardManager *manager)
{
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
- apply_settings (client, 0, NULL, manager);
- g_object_unref (client);
+ apply_settings (manager->priv->settings, NULL, manager);
}
static gboolean
start_keyboard_idle_cb (MsdKeyboardManager *manager)
{
- MateConfClient *client;
-
mate_settings_profile_start (NULL);
g_debug ("Starting keyboard manager");
manager->priv->have_xkb = 0;
- client = mateconf_client_get_default ();
-
- mateconf_client_add_dir (client, MSD_KEYBOARD_KEY, MATECONF_CLIENT_PRELOAD_RECURSIVE, NULL);
+ manager->priv->settings = g_settings_new (MSD_KEYBOARD_SCHEMA);
/* Essential - xkb initialization should happen before */
msd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) msd_load_modmap_files, NULL);
- msd_keyboard_xkb_init (client, manager);
+ msd_keyboard_xkb_init (manager);
#ifdef HAVE_X11_EXTENSIONS_XKB_H
numlock_xkb_init (manager);
@@ -404,11 +343,7 @@ start_keyboard_idle_cb (MsdKeyboardManager *manager)
/* apply current settings before we install the callback */
msd_keyboard_manager_apply_settings (manager);
- manager->priv->notify = mateconf_client_notify_add (client, MSD_KEYBOARD_KEY,
- (MateConfClientNotifyFunc) apply_settings, manager,
- NULL, NULL);
-
- g_object_unref (client);
+ g_signal_connect (manager->priv->settings, "changed", G_CALLBACK (apply_settings), manager);
#ifdef HAVE_X11_EXTENSIONS_XKB_H
numlock_install_xkb_callback (manager);
@@ -439,12 +374,9 @@ msd_keyboard_manager_stop (MsdKeyboardManager *manager)
g_debug ("Stopping keyboard manager");
- if (p->notify != 0) {
- MateConfClient *client = mateconf_client_get_default ();
- mateconf_client_remove_dir (client, MSD_KEYBOARD_KEY, NULL);
- mateconf_client_notify_remove (client, p->notify);
- g_object_unref (client);
- p->notify = 0;
+ if (p->settings != NULL) {
+ g_object_unref (p->settings);
+ p->settings = NULL;
}
#if HAVE_X11_EXTENSIONS_XKB_H
diff --git a/plugins/keyboard/msd-keyboard-xkb.c b/plugins/keyboard/msd-keyboard-xkb.c
index 9042f03..546c3d8 100644
--- a/plugins/keyboard/msd-keyboard-xkb.c
+++ b/plugins/keyboard/msd-keyboard-xkb.c
@@ -29,7 +29,7 @@
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
-#include <mateconf/mateconf-client.h>
+#include <gio/gio.h>
#include <libmatekbd/matekbd-status.h>
#include <libmatekbd/matekbd-keyboard-drawing.h>
@@ -44,8 +44,16 @@
#define GTK_RESPONSE_PRINT 2
+#define MATEKBD_DESKTOP_SCHEMA "org.mate.peripherals-keyboard-xkb.general"
+#define MATEKBD_KBD_SCHEMA "org.mate.peripherals-keyboard-xkb.kbd"
+
+#define KNOWN_FILES_KEY "known-file-list"
+
static MsdKeyboardManager* manager = NULL;
+static GSettings* settings_desktop;
+static GSettings* settings_kbd;
+
static XklEngine* xkl_engine;
static XklConfigRegistry* xkl_registry = NULL;
@@ -57,20 +65,9 @@ static MatekbdKeyboardConfig initial_sys_kbd_config;
static gboolean inited_ok = FALSE;
-static guint notify_desktop = 0;
-static guint notify_keyboard = 0;
-
static PostActivationCallback pa_callback = NULL;
static void *pa_callback_user_data = NULL;
-static const char KNOWN_FILES_KEY[] = "/desktop/mate/peripherals/keyboard/general/known_file_list";
-
-static const char DISABLE_INDICATOR_KEY[] = "/desktop/mate/peripherals/keyboard/general/disable_indicator";
-
-static const char DUPLICATE_LEDS_KEY[] = "/desktop/mate/peripherals/keyboard/general/duplicate_leds";
-
-static const char* mdm_keyboard_layout = NULL;
-
static GtkStatusIcon* icon = NULL;
static GHashTable* preview_dialogs = NULL;
@@ -107,6 +104,24 @@ static void msd_keyboard_log_appender(const char file[], const char function[],
}
#endif
+static void g_strv_delete_str (gchar **a, gchar *str)
+{
+ int i;
+ int j;
+ gchar **b;
+ b = g_new0 (gchar *, g_strv_length (a) - 1);
+
+ j = 0;
+ for (i = 0; a[i] != NULL; i++) {
+ if (g_strcmp0 (a[i], str) != 0) {
+ b[j] = g_strdup (a[i]);
+ j++;
+ }
+ }
+ g_strfreev (a);
+ a = b;
+}
+
static void
activation_error (void)
{
@@ -147,7 +162,7 @@ activation_error (void)
"Try using a simpler configuration or using a later version of the XFree software.")
: "",
"xprop -root | grep XKB",
- "mateconftool-2 -R /desktop/mate/peripherals/keyboard/kbd");
+ "gsettings list-keys org.mate.peripherals-keyboard-xkb.kbd");
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
msd_delayed_show_dialog (dialog);
@@ -156,22 +171,19 @@ activation_error (void)
static void
apply_desktop_settings (void)
{
- MateConfClient *conf_client;
gboolean show_leds;
int i;
if (!inited_ok)
return;
msd_keyboard_manager_apply_settings (manager);
- matekbd_desktop_config_load_from_mateconf (&current_config);
+ matekbd_desktop_config_load_from_gsettings (&current_config);
/* again, probably it would be nice to compare things
before activating them */
matekbd_desktop_config_activate (&current_config);
- conf_client = mateconf_client_get_default ();
- show_leds =
- mateconf_client_get_bool (conf_client, DUPLICATE_LEDS_KEY, NULL);
- g_object_unref (conf_client);
+ /* FIXME add an option to GSettings to duplicate leds? */
+ show_leds = FALSE;
for (i = sizeof (indicator_icons) / sizeof (indicator_icons[0]);
--i >= 0;) {
gtk_status_icon_set_visible (indicator_icons[i],
@@ -180,6 +192,12 @@ apply_desktop_settings (void)
}
static void
+apply_desktop_settings_cb (GSettings *settings, gchar *key, gpointer user_data)
+{
+ apply_desktop_settings ();
+}
+
+static void
popup_menu_launch_capplet ()
{
GError *error = NULL;
@@ -326,15 +344,10 @@ status_icon_popup_menu_cb (GtkStatusIcon * icon, guint button, guint time)
static void
show_hide_icon ()
{
- if (g_slist_length (current_kbd_config.layouts_variants) > 1) {
+ if (g_strv_length (current_kbd_config.layouts_variants) > 1) {
if (icon == NULL) {
- MateConfClient *conf_client =
- mateconf_client_get_default ();
- gboolean disable =
- mateconf_client_get_bool (conf_client,
- DISABLE_INDICATOR_KEY,
- NULL);
- g_object_unref (conf_client);
+ /* FIXME add an option to GSettings to disable this? */
+ gboolean disable = FALSE;
if (disable)
return;
@@ -380,8 +393,8 @@ filter_xkb_config (void)
XklConfigItem *item;
gchar *lname;
gchar *vname;
- GSList *lv;
- GSList *filtered;
+ gchar **lv;
+ int i;
gboolean any_change = FALSE;
xkl_debug (100, "Filtering configuration against the registry\n");
@@ -395,25 +408,20 @@ filter_xkb_config (void)
return FALSE;
}
}
- lv = current_kbd_config.layouts_variants;
+ lv = g_strdupv(current_kbd_config.layouts_variants);
item = xkl_config_item_new ();
- while (lv) {
- xkl_debug (100, "Checking [%s]\n", lv->data);
+ for (lv = 0; lv[i] != NULL; i++) {
+ xkl_debug (100, "Checking [%s]\n", lv[i]);
if (matekbd_keyboard_config_split_items
- (lv->data, &lname, &vname)) {
+ (lv[i], &lname, &vname)) {
g_snprintf (item->name, sizeof (item->name), "%s",
lname);
if (!xkl_config_registry_find_layout
(xkl_registry, item)) {
xkl_debug (100, "Bad layout [%s]\n",
lname);
- filtered = lv;
- lv = lv->next;
- g_free (filtered->data);
- current_kbd_config.layouts_variants =
- g_slist_delete_link
- (current_kbd_config.layouts_variants,
- filtered);
+ g_strv_delete_str (current_kbd_config.layouts_variants,
+ lv[i]);
any_change = TRUE;
continue;
}
@@ -426,20 +434,14 @@ filter_xkb_config (void)
xkl_debug (100,
"Bad variant [%s(%s)]\n",
lname, vname);
- filtered = lv;
- lv = lv->next;
- g_free (filtered->data);
- current_kbd_config.layouts_variants
- =
- g_slist_delete_link
+ g_strv_delete_str
(current_kbd_config.layouts_variants,
- filtered);
+ lv[i]);
any_change = TRUE;
continue;
}
}
}
- lv = lv->next;
}
g_object_unref (item);
return any_change;
@@ -448,108 +450,14 @@ filter_xkb_config (void)
static void
apply_xkb_settings (void)
{
- MateConfClient *conf_client;
MatekbdKeyboardConfig current_sys_kbd_config;
- int group_to_activate = -1;
- char *mdm_layout;
- char *s;
if (!inited_ok)
return;
- conf_client = mateconf_client_get_default ();
-
- /* With MDM the user can already set a layout from the login
- * screen. Try to keep that setting.
- * We clear mdm_keyboard_layout early, so we don't risk
- * recursion from mateconf notification.
- */
- mdm_layout = g_strdup (mdm_keyboard_layout);
- mdm_keyboard_layout = NULL;
-
- /* mdm's configuration and $MDM_KEYBOARD_LAYOUT separates layout and
- * variant with a space, but mateconf uses tabs; so convert to be robust
- * with both */
- for (s = mdm_layout; s && *s; ++s) {
- if (*s == ' ') {
- *s = '\t';
- }
- }
+ matekbd_keyboard_config_init (&current_sys_kbd_config, xkl_engine);
- if (mdm_layout != NULL) {
- GSList *layouts;
- GSList *found_node;
- int max_groups;
-
- max_groups =
- MAX (xkl_engine_get_max_num_groups (xkl_engine), 1);
- layouts =
- mateconf_client_get_list (conf_client,
- MATEKBD_KEYBOARD_CONFIG_KEY_LAYOUTS,
- MATECONF_VALUE_STRING, NULL);
-
- /* Use system layouts as a default if we do not have
- * user configuration */
- if (layouts == NULL) {
- GSList *i;
- int len;
-
- for (i = initial_sys_kbd_config.layouts_variants;
- i; i = g_slist_next (i)) {
- s = g_strdup (i->data);
-
- /* chop off empty variants to avoid duplicates */
- len = strlen (s);
- if (s[len - 1] == '\t')
- s[len - 1] = '\0';
- layouts = g_slist_append (layouts, s);
- }
- }
-
- /* Add the layout if it doesn't already exist. XKB limits the
- * total number of layouts. If we already have the maximum
- * number of layouts configured, we replace the last one. This
- * prevents the list from becoming full if the user has a habit
- * of selecting many different keyboard layouts in MDM. */
-
- found_node =
- g_slist_find_custom (layouts, mdm_layout,
- (GCompareFunc) g_strcmp0);
-
- if (!found_node) {
- /* Insert at the last valid place, or at the end of
- * list, whichever comes first */
- layouts =
- g_slist_insert (layouts, g_strdup (mdm_layout),
- max_groups - 1);
- if (g_slist_length (layouts) > max_groups) {
- GSList *last;
- GSList *free_layouts;
-
- last =
- g_slist_nth (layouts, max_groups - 1);
- free_layouts = last->next;
- last->next = NULL;
-
- g_slist_foreach (free_layouts,
- (GFunc) g_free, NULL);
- g_slist_free (free_layouts);
- }
-
- mateconf_client_set_list (conf_client,
- MATEKBD_KEYBOARD_CONFIG_KEY_LAYOUTS,
- MATECONF_VALUE_STRING, layouts,
- NULL);
- }
-
- g_slist_foreach (layouts, (GFunc) g_free, NULL);
- g_slist_free (layouts);
- }
-
- matekbd_keyboard_config_init (&current_sys_kbd_config,
- conf_client, xkl_engine);
-
- matekbd_keyboard_config_load_from_mateconf (&current_kbd_config,
+ matekbd_keyboard_config_load_from_gsettings (&current_kbd_config,
&initial_sys_kbd_config);
matekbd_keyboard_config_load_from_x_current (&current_sys_kbd_config,
@@ -572,47 +480,25 @@ apply_xkb_settings (void)
xkl_debug (100,
"Actual KBD configuration was not changed: redundant notification\n");
- if (mdm_layout != NULL) {
- /* If there are multiple layouts,
- * try to find the one closest to the mdm layout
- */
- GSList *l;
- int i;
- size_t len = strlen (mdm_layout);
- for (i = 0, l = current_kbd_config.layouts_variants; l;
- i++, l = l->next) {
- char *lv = l->data;
- if (strncmp (lv, mdm_layout, len) == 0
- && (lv[len] == '\0' || lv[len] == '\t')) {
- group_to_activate = i;
- break;
- }
- }
- }
-
- g_free (mdm_layout);
-
- if (group_to_activate != -1)
- xkl_engine_lock_group (current_config.engine,
- group_to_activate);
matekbd_keyboard_config_term (&current_sys_kbd_config);
show_hide_icon ();
}
static void
-msd_keyboard_xkb_analyze_sysconfig (void)
+apply_xkb_settings_cb (GSettings *settings, gchar *key, gpointer user_data)
{
- MateConfClient *conf_client;
+ apply_xkb_settings ();
+}
+static void
+msd_keyboard_xkb_analyze_sysconfig (void)
+{
if (!inited_ok)
return;
- conf_client = mateconf_client_get_default ();
- matekbd_keyboard_config_init (&initial_sys_kbd_config,
- conf_client, xkl_engine);
+ matekbd_keyboard_config_init (&initial_sys_kbd_config, xkl_engine);
matekbd_keyboard_config_load_from_x_initial (&initial_sys_kbd_config,
NULL);
- g_object_unref (conf_client);
}
static gboolean
@@ -625,7 +511,6 @@ msd_chk_file_list (void)
GSList *tmp = NULL;
GSList *tmp_l = NULL;
gboolean new_file_exist = FALSE;
- MateConfClient *conf_client;
home_dir = g_dir_open (g_get_home_dir (), 0, NULL);
while ((fname = g_dir_read_name (home_dir)) != NULL) {
@@ -636,12 +521,17 @@ msd_chk_file_list (void)
}
g_dir_close (home_dir);
- conf_client = mateconf_client_get_default ();
-
- last_login_file_list = mateconf_client_get_list (conf_client,
- KNOWN_FILES_KEY,
- MATECONF_VALUE_STRING,
- NULL);
+ gchar **settings_list;
+ settings_list = g_settings_get_strv (settings_desktop, KNOWN_FILES_KEY);
+ if (settings_list != NULL) {
+ gint i;
+ for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+ if (settings_list[i] != NULL)
+ last_login_file_list =
+ g_slist_append (last_login_file_list, g_strdup (settings_list[i]));
+ }
+ g_strfreev (settings_list);
+ }
/* Compare between the two file list, currently available modmap files
and the files available in the last log in */
@@ -665,14 +555,15 @@ msd_chk_file_list (void)
}
if (new_file_exist) {
- mateconf_client_set_list (conf_client,
- KNOWN_FILES_KEY,
- MATECONF_VALUE_STRING,
- file_list, NULL);
+ GSList *l;
+ GPtrArray *array = g_ptr_array_new ();
+ for (l = file_list; l != NULL; l = l->next)
+ g_ptr_array_add (array, l->data);
+ g_ptr_array_add (array, NULL);
+ g_settings_set_strv (settings_desktop, KNOWN_FILES_KEY, (const gchar **) array->pdata);
+ g_ptr_array_free (array, FALSE);
}
- g_object_unref (conf_client);
-
g_slist_foreach (file_list, (GFunc) g_free, NULL);
g_slist_free (file_list);
@@ -708,16 +599,6 @@ msd_keyboard_xkb_evt_filter (GdkXEvent * xev, GdkEvent * event)
return GDK_FILTER_CONTINUE;
}
-static guint
-register_config_callback (MateConfClient * client,
- const char *path, MateConfClientNotifyFunc func)
-{
- mateconf_client_add_dir (client, path, MATECONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- return mateconf_client_notify_add (client, path, func, NULL, NULL,
- NULL);
-}
-
/* When new Keyboard is plugged in - reload the settings */
static void
msd_keyboard_new_device (XklEngine * engine)
@@ -770,8 +651,7 @@ msd_keyboard_state_changed (XklEngine * engine, XklEngineStateChange type,
}
void
-msd_keyboard_xkb_init (MateConfClient * client,
- MsdKeyboardManager * kbd_manager)
+msd_keyboard_xkb_init (MsdKeyboardManager * kbd_manager)
{
int i;
Display *display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
@@ -806,12 +686,13 @@ msd_keyboard_xkb_init (MateConfClient * client,
if (xkl_engine) {
inited_ok = TRUE;
- mdm_keyboard_layout = g_getenv ("MDM_KEYBOARD_LAYOUT");
+ settings_desktop = g_settings_new (MATEKBD_DESKTOP_SCHEMA);
+ settings_kbd = g_settings_new (MATEKBD_KBD_SCHEMA);
matekbd_desktop_config_init (&current_config,
- client, xkl_engine);
+ xkl_engine);
matekbd_keyboard_config_init (&current_kbd_config,
- client, xkl_engine);
+ xkl_engine);
xkl_engine_backup_names_prop (xkl_engine);
msd_keyboard_xkb_analyze_sysconfig ();
mate_settings_profile_start
@@ -820,17 +701,8 @@ msd_keyboard_xkb_init (MateConfClient * client,
mate_settings_profile_end
("msd_keyboard_xkb_chk_lcl_xmm");
- notify_desktop =
- register_config_callback (client,
- MATEKBD_DESKTOP_CONFIG_DIR,
- (MateConfClientNotifyFunc)
- apply_desktop_settings);
-
- notify_keyboard =
- register_config_callback (client,
- MATEKBD_KEYBOARD_CONFIG_DIR,
- (MateConfClientNotifyFunc)
- apply_xkb_settings);
+ g_signal_connect (settings_desktop, "changed", G_CALLBACK(apply_desktop_settings_cb), NULL);
+ g_signal_connect (settings_kbd, "changed", G_CALLBACK(apply_xkb_settings_cb), NULL);
gdk_window_add_filter (NULL, (GdkFilterFunc)
msd_keyboard_xkb_evt_filter, NULL);
@@ -865,7 +737,6 @@ msd_keyboard_xkb_init (MateConfClient * client,
void
msd_keyboard_xkb_shutdown (void)
{
- MateConfClient *client;
int i;
pa_callback = NULL;
@@ -890,27 +761,18 @@ msd_keyboard_xkb_shutdown (void)
gdk_window_remove_filter (NULL, (GdkFilterFunc)
msd_keyboard_xkb_evt_filter, NULL);
- client = mateconf_client_get_default ();
-
- if (notify_desktop != 0) {
- mateconf_client_remove_dir (client, MATEKBD_DESKTOP_CONFIG_DIR,
- NULL);
- mateconf_client_notify_remove (client, notify_desktop);
- notify_desktop = 0;
+ if (settings_desktop != NULL) {
+ g_object_unref (settings_desktop);
}
- if (notify_keyboard != 0) {
- mateconf_client_remove_dir (client, MATEKBD_KEYBOARD_CONFIG_DIR,
- NULL);
- mateconf_client_notify_remove (client, notify_keyboard);
- notify_keyboard = 0;
+ if (settings_kbd != NULL) {
+ g_object_unref (settings_kbd);
}
if (xkl_registry) {
g_object_unref (xkl_registry);
}
- g_object_unref (client);
g_object_unref (xkl_engine);
xkl_engine = NULL;
diff --git a/plugins/keyboard/msd-keyboard-xkb.h b/plugins/keyboard/msd-keyboard-xkb.h
index 7d2d558..816e341 100644
--- a/plugins/keyboard/msd-keyboard-xkb.h
+++ b/plugins/keyboard/msd-keyboard-xkb.h
@@ -24,13 +24,10 @@
#ifndef __MSD_KEYBOARD_XKB_H
#define __MSD_KEYBOARD_XKB_H
-#include <mateconf/mateconf.h>
-#include <mateconf/mateconf-client.h>
-
#include <libxklavier/xklavier.h>
#include "msd-keyboard-manager.h"
-void msd_keyboard_xkb_init(MateConfClient* client, MsdKeyboardManager* manager);
+void msd_keyboard_xkb_init(MsdKeyboardManager* manager);
void msd_keyboard_xkb_shutdown(void);
typedef void (*PostActivationCallback) (void* userData);
diff --git a/plugins/keyboard/msd-xmodmap.c b/plugins/keyboard/msd-xmodmap.c
index 5baf37c..7539382 100644
--- a/plugins/keyboard/msd-xmodmap.c
+++ b/plugins/keyboard/msd-xmodmap.c
@@ -26,43 +26,33 @@
#include <glib.h>
#include <gtk/gtk.h>
-#include <mateconf/mateconf-client.h>
+#include <gio/gio.h>
#include "msd-xmodmap.h"
-static const char DISABLE_XMM_WARNING_KEY[] =
- "/desktop/mate/peripherals/keyboard/disable_xmm_and_xkb_warning";
-
-static const char LOADED_FILES_KEY[] =
- "/desktop/mate/peripherals/keyboard/general/update_handlers";
-
-
-static void
-check_button_callback (GtkWidget *chk_button,
- gpointer data)
-{
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
-
- mateconf_client_set_bool (client,
- DISABLE_XMM_WARNING_KEY,
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chk_button)),
- NULL);
-
- g_object_unref (client);
-}
+#define KEYBOARD_SCHEMA "org.mate.peripherals-keyboard-xkb.general"
+#define LOADED_FILES_KEY "update-handlers"
void
msd_load_modmap_files (void)
{
- MateConfClient *client;
+ GSettings *settings;
GSList *tmp;
GSList *loaded_file_list;
- client = mateconf_client_get_default ();
+ settings = g_settings_new (KEYBOARD_SCHEMA);
- loaded_file_list = mateconf_client_get_list (client, LOADED_FILES_KEY, MATECONF_VALUE_STRING, NULL);
+ gchar **settings_list;
+ settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY);
+ if (settings_list != NULL) {
+ gint i;
+ for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+ if (settings_list[i] != NULL)
+ loaded_file_list =
+ g_slist_append (loaded_file_list, g_strdup (settings_list[i]));
+ }
+ g_strfreev (settings_list);
+ }
for (tmp = loaded_file_list; tmp != NULL; tmp = tmp->next) {
gchar *file;
@@ -79,7 +69,7 @@ msd_load_modmap_files (void)
}
g_slist_free (loaded_file_list);
- g_object_unref (client);
+ g_object_unref (settings);
}
static void
@@ -88,8 +78,6 @@ response_callback (GtkWidget *dialog,
void *data)
{
if (id == GTK_RESPONSE_OK) {
- GtkWidget *chk_button = g_object_get_data (G_OBJECT (dialog), "check_button");
- check_button_callback (chk_button, NULL);
msd_load_modmap_files ();
}
gtk_widget_destroy (dialog);
@@ -140,7 +128,7 @@ remove_button_clicked_callback (GtkWidget *button,
GtkListStore *tree = NULL;
GtkTreeSelection *selection;
GtkWidget *treeview;
- MateConfClient *client;
+ GSettings *settings;
GSList *filenames = NULL;
GSList *tmp = NULL;
GSList *loaded_files = NULL;
@@ -159,20 +147,31 @@ remove_button_clicked_callback (GtkWidget *button,
/* Remove the selected file */
- client = mateconf_client_get_default ();
+ settings = g_settings_new (KEYBOARD_SCHEMA);
+
+ gchar **settings_list;
+ settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY);
+ if (settings_list != NULL) {
+ gint i;
+ for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+ if (settings_list[i] != NULL)
+ loaded_files =
+ g_slist_append (loaded_files, g_strdup (settings_list[i]));
+ }
+ g_strfreev (settings_list);
+ }
- loaded_files = mateconf_client_get_list (client,
- LOADED_FILES_KEY,
- MATECONF_VALUE_STRING,
- NULL);
loaded_files = remove_string_from_list (loaded_files, (char *)filenames->data);
- mateconf_client_set_list (client,
- LOADED_FILES_KEY,
- MATECONF_VALUE_STRING,
- loaded_files,
- NULL);
- g_object_unref (client);
+ GSList *l;
+ GPtrArray *array = g_ptr_array_new ();
+ for (l = loaded_files; l != NULL; l = l->next)
+ g_ptr_array_add (array, l->data);
+ g_ptr_array_add (array, NULL);
+ g_settings_set_strv (settings, LOADED_FILES_KEY, (const gchar **) array->pdata);
+ g_ptr_array_free (array, FALSE);
+
+ g_object_unref (settings);
tree = g_object_get_data (G_OBJECT (dialog), "tree");
@@ -201,7 +200,7 @@ load_button_clicked_callback (GtkWidget *button,
GSList *filenames = NULL;
GSList *tmp = NULL;
GSList *loaded_files = NULL;
- MateConfClient *client;
+ GSettings *settings;
dialog = data;
@@ -216,12 +215,19 @@ load_button_clicked_callback (GtkWidget *button,
return;
/* Add the files to left-tree-view */
- client = mateconf_client_get_default ();
-
- loaded_files = mateconf_client_get_list (client,
- LOADED_FILES_KEY,
- MATECONF_VALUE_STRING,
- NULL);
+ settings = g_settings_new (KEYBOARD_SCHEMA);
+
+ gchar **settings_list;
+ settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY);
+ if (settings_list != NULL) {
+ gint i;
+ for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+ if (settings_list[i] != NULL)
+ loaded_files =
+ g_slist_append (loaded_files, g_strdup (settings_list[i]));
+ }
+ g_strfreev (settings_list);
+ }
if (g_slist_find_custom (loaded_files, filenames->data, (GCompareFunc) strcmp)) {
g_free (filenames->data);
@@ -230,12 +236,14 @@ load_button_clicked_callback (GtkWidget *button,
}
loaded_files = g_slist_append (loaded_files, filenames->data);
- mateconf_client_set_list (client,
- LOADED_FILES_KEY,
- MATECONF_VALUE_STRING,
- loaded_files,
- NULL);
+ GSList *l;
+ GPtrArray *array = g_ptr_array_new ();
+ for (l = loaded_files; l != NULL; l = l->next)
+ g_ptr_array_add (array, l->data);
+ g_ptr_array_add (array, NULL);
+ g_settings_set_strv (settings, LOADED_FILES_KEY, (const gchar **) array->pdata);
+ g_ptr_array_free (array, FALSE);
tree = g_object_get_data (G_OBJECT (dialog), "tree");
@@ -250,7 +258,7 @@ load_button_clicked_callback (GtkWidget *button,
}
out:
- g_object_unref (client);
+ g_object_unref (settings);
g_slist_foreach (loaded_files, (GFunc) g_free, NULL);
g_slist_free (loaded_files);
}
@@ -273,12 +281,11 @@ msd_modmap_dialog_call (void)
GtkTreeViewColumn *column;
GtkWidget *add_button;
GtkWidget *remove_button;
- GtkWidget *chk_button;
GSList *tmp;
GDir *homeDir;
GSList *loaded_files;
const char *fname;
- MateConfClient *client;
+ GSettings *settings;
homeDir = g_dir_open (g_get_home_dir (), 0, NULL);
if (homeDir == NULL)
@@ -315,13 +322,6 @@ msd_modmap_dialog_call (void)
"clicked",
G_CALLBACK (remove_button_clicked_callback),
load_dialog);
- chk_button = GTK_WIDGET (gtk_builder_get_object (builder,
- "checkbutton1"));
- g_signal_connect (chk_button,
- "toggled",
- G_CALLBACK (check_button_callback),
- NULL);
- g_object_set_data (G_OBJECT (load_dialog), "check_button", chk_button);
treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview1"));
g_object_set_data (G_OBJECT (load_dialog), "treeview1", treeview);
treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview2"));
@@ -369,9 +369,19 @@ msd_modmap_dialog_call (void)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview1), column);
gtk_tree_view_column_set_sort_column_id (column, 0);
- client = mateconf_client_get_default ();
- loaded_files = mateconf_client_get_list (client, LOADED_FILES_KEY, MATECONF_VALUE_STRING, NULL);
- g_object_unref (client);
+ settings = g_settings_new (KEYBOARD_SCHEMA);
+
+ gchar **settings_list;
+ settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY);
+ if (settings_list != NULL) {
+ gint i;
+ for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+ if (settings_list[i] != NULL)
+ loaded_files =
+ g_slist_append (loaded_files, g_strdup (settings_list[i]));
+ }
+ g_strfreev (settings_list);
+ }
/* Add the data */
for (tmp = loaded_files; tmp != NULL; tmp = tmp->next) {