From 909bf45d2c2d567decaf57b7869e0fbdcb7c0ed4 Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Mon, 22 Oct 2012 16:44:21 +0200 Subject: port mouse applet to gsettings --- capplets/mouse/mate-mouse-properties.c | 286 ++++++++++++--------------------- 1 file changed, 103 insertions(+), 183 deletions(-) (limited to 'capplets/mouse/mate-mouse-properties.c') diff --git a/capplets/mouse/mate-mouse-properties.c b/capplets/mouse/mate-mouse-properties.c index a1311f5b..6b0f3bf2 100644 --- a/capplets/mouse/mate-mouse-properties.c +++ b/capplets/mouse/mate-mouse-properties.c @@ -27,15 +27,14 @@ #include #include -#include +#include #include #include #include "capplet-util.h" -#include "mateconf-property-editor.h" #include "activate-settings-daemon.h" #include "capplet-stock-icons.h" -#include "mate-mouse-accessibility.h" +//#include "mate-mouse-accessibility.h" #include #include @@ -56,29 +55,18 @@ enum DOUBLE_CLICK_TEST_ON }; -/* We use this in at least half a dozen places, so it makes sense just to - * define the macro */ +#define MOUSE_SCHEMA "org.mate.peripherals-mouse" +#define DOUBLE_CLICK_KEY "double-click" -#define DOUBLE_CLICK_KEY "/desktop/mate/peripherals/mouse/double_click" +#define TOUCHPAD_SCHEMA "org.mate.peripherals-touchpad" /* State in testing the double-click speed. Global for a great deal of * convenience */ static gint double_click_state = DOUBLE_CLICK_TEST_OFF; -/* normalization routines */ -/* All of our scales but double_click are on the range 1->10 as a result, we - * have a few routines to convert from whatever the mateconf key is to our range. - */ -static MateConfValue * -double_click_from_mateconf (MateConfPropertyEditor *peditor, const MateConfValue *value) -{ - MateConfValue *new_value; - - new_value = mateconf_value_new (MATECONF_VALUE_INT); - mateconf_value_set_int (new_value, CLAMP ((int) floor ((mateconf_value_get_int (value) + 50) / 100.0) * 100, 100, 1000)); - return new_value; -} +static GSettings *mouse_settings = NULL; +static GSettings *touchpad_settings = NULL; static void get_default_mouse_info (int *default_numerator, int *default_denominator, int *default_threshold) @@ -105,86 +93,6 @@ get_default_mouse_info (int *default_numerator, int *default_denominator, int *d } -static MateConfValue * -motion_acceleration_from_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) -{ - MateConfValue *new_value; - gfloat motion_acceleration; - - new_value = mateconf_value_new (MATECONF_VALUE_FLOAT); - - if (mateconf_value_get_float (value) == -1.0) { - int numerator, denominator; - - get_default_mouse_info (&numerator, &denominator, NULL); - - motion_acceleration = CLAMP ((gfloat)(numerator / denominator), 0.2, 6.0); - } - else { - motion_acceleration = CLAMP (mateconf_value_get_float (value), 0.2, 6.0); - } - - if (motion_acceleration >= 1) - mateconf_value_set_float (new_value, motion_acceleration + 4); - else - mateconf_value_set_float (new_value, motion_acceleration * 5); - - return new_value; -} - -static MateConfValue * -motion_acceleration_to_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) -{ - MateConfValue *new_value; - gfloat motion_acceleration; - - new_value = mateconf_value_new (MATECONF_VALUE_FLOAT); - motion_acceleration = CLAMP (mateconf_value_get_float (value), 1.0, 10.0); - - if (motion_acceleration < 5) - mateconf_value_set_float (new_value, motion_acceleration / 5.0); - else - mateconf_value_set_float (new_value, motion_acceleration - 4); - - return new_value; -} - -static MateConfValue * -threshold_from_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) -{ - MateConfValue *new_value; - - new_value = mateconf_value_new (MATECONF_VALUE_FLOAT); - - if (mateconf_value_get_int (value) == -1) { - int threshold; - - get_default_mouse_info (NULL, NULL, &threshold); - mateconf_value_set_float (new_value, CLAMP (threshold, 1, 10)); - } - else { - mateconf_value_set_float (new_value, CLAMP (mateconf_value_get_int (value), 1, 10)); - } - - return new_value; -} - -static MateConfValue * -drag_threshold_from_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) -{ - MateConfValue *new_value; - - new_value = mateconf_value_new (MATECONF_VALUE_FLOAT); - - mateconf_value_set_float (new_value, CLAMP (mateconf_value_get_int (value), 1, 10)); - - return new_value; -} - /* Double Click handling */ struct test_data_t @@ -213,29 +121,21 @@ test_maybe_timeout (struct test_data_t *data) static gboolean event_box_button_press_event (GtkWidget *widget, GdkEventButton *event, - MateConfChangeSet *changeset) + gpointer user_data) { gint double_click_time; - MateConfValue *value; static struct test_data_t data; static gint test_on_timeout_id = 0; static gint test_maybe_timeout_id = 0; static guint32 double_click_timestamp = 0; GtkWidget *image; - MateConfClient *client; if (event->type != GDK_BUTTON_PRESS) return FALSE; image = g_object_get_data (G_OBJECT (widget), "image"); - if (!(changeset && mateconf_change_set_check_value (changeset, DOUBLE_CLICK_KEY, &value))) { - client = mateconf_client_get_default(); - double_click_time = mateconf_client_get_int (client, DOUBLE_CLICK_KEY, NULL); - g_object_unref (client); - - } else - double_click_time = mateconf_value_get_int (value); + double_click_time = g_settings_get_int (mouse_settings, DOUBLE_CLICK_KEY); if (test_maybe_timeout_id != 0) g_source_remove (test_maybe_timeout_id); @@ -289,42 +189,53 @@ orientation_radio_button_release_event (GtkWidget *widget, gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); } -static MateConfValue * -left_handed_from_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) +static void +orientation_radio_button_toggled (GtkToggleButton *togglebutton, + GtkBuilder *dialog) { - MateConfValue *new_value; - - new_value = mateconf_value_new (MATECONF_VALUE_INT); - - mateconf_value_set_int (new_value, mateconf_value_get_bool (value)); - - return new_value; + gboolean left_handed; + left_handed = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (WID ("left_handed_radio"))); + g_settings_set_boolean (mouse_settings, "left-handed", left_handed); } -static MateConfValue * -left_handed_to_mateconf (MateConfPropertyEditor *peditor, - const MateConfValue *value) +static void +scrollmethod_gsettings_changed_event (GSettings *settings, + gchar *key, + GtkBuilder *dialog) { - MateConfValue *new_value; - - new_value = mateconf_value_new (MATECONF_VALUE_BOOL); - - mateconf_value_set_bool (new_value, mateconf_value_get_int (value) == 1); - - return new_value; + int scroll_method = g_settings_get_int (touchpad_settings, "scroll-method"); + gtk_widget_set_sensitive (WID ("scroll_disabled_radio"), + scroll_method == 0); + gtk_widget_set_sensitive (WID ("scroll_edge_radio"), + scroll_method == 1); + gtk_widget_set_sensitive (WID ("scroll_twofinger_radio"), + scroll_method == 2); } static void -scrollmethod_changed_event (MateConfPropertyEditor *peditor, - const gchar *key, - const MateConfValue *value, - GtkBuilder *dialog) +scrollmethod_clicked_event (GtkWidget *widget, + GtkBuilder *dialog) { GtkToggleButton *disabled = GTK_TOGGLE_BUTTON (WID ("scroll_disabled_radio")); gtk_widget_set_sensitive (WID ("horiz_scroll_toggle"), !gtk_toggle_button_get_active (disabled)); + + GSList *radio_group; + int new_scroll_method; + int old_scroll_method = g_settings_get_int (touchpad_settings, "scroll-method"); + + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))) + return; + + radio_group = g_slist_copy (gtk_radio_button_get_group + (GTK_RADIO_BUTTON (WID ("scroll_disabled_radio")))); + radio_group = g_slist_reverse (radio_group); + new_scroll_method = g_slist_index (radio_group, widget); + g_slist_free (radio_group); + + if (new_scroll_method != old_scroll_method) + g_settings_set_int (touchpad_settings, "scroll-method", new_scroll_method); } static void @@ -436,75 +347,85 @@ find_synaptics (void) /* Set up the property editors in the dialog. */ static void -setup_dialog (GtkBuilder *dialog, MateConfChangeSet *changeset) +setup_dialog (GtkBuilder *dialog) { GtkRadioButton *radio; - GObject *peditor; /* Orientation radio buttons */ radio = GTK_RADIO_BUTTON (WID ("left_handed_radio")); - peditor = mateconf_peditor_new_select_radio - (changeset, "/desktop/mate/peripherals/mouse/left_handed", gtk_radio_button_get_group (radio), - "conv-to-widget-cb", left_handed_from_mateconf, - "conv-from-widget-cb", left_handed_to_mateconf, - NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio), + g_settings_get_boolean(mouse_settings, "left-handed")); /* explicitly connect to button-release so that you can change orientation with either button */ g_signal_connect (WID ("right_handed_radio"), "button_release_event", G_CALLBACK (orientation_radio_button_release_event), NULL); g_signal_connect (WID ("left_handed_radio"), "button_release_event", G_CALLBACK (orientation_radio_button_release_event), NULL); + g_signal_connect (WID ("left_handed_radio"), "toggled", + G_CALLBACK (orientation_radio_button_toggled), dialog); /* Locate pointer toggle */ - peditor = mateconf_peditor_new_boolean - (changeset, "/desktop/mate/peripherals/mouse/locate_pointer", WID ("locate_pointer_toggle"), NULL); + g_settings_bind (mouse_settings, "locate-pointer", WID ("locate_pointer_toggle"), + "active", G_SETTINGS_BIND_DEFAULT); /* Double-click time */ - peditor = mateconf_peditor_new_numeric_range - (changeset, DOUBLE_CLICK_KEY, WID ("delay_scale"), - "conv-to-widget-cb", double_click_from_mateconf, - NULL); + g_settings_bind (mouse_settings, DOUBLE_CLICK_KEY, + gtk_range_get_adjustment (GTK_RANGE (WID ("delay_scale"))), "value", + G_SETTINGS_BIND_DEFAULT); + gtk_image_set_from_stock (GTK_IMAGE (WID ("double_click_image")), MOUSE_DBLCLCK_OFF, mouse_capplet_dblclck_icon_get_size ()); g_object_set_data (G_OBJECT (WID ("double_click_eventbox")), "image", WID ("double_click_image")); g_signal_connect (WID ("double_click_eventbox"), "button_press_event", - G_CALLBACK (event_box_button_press_event), changeset); + G_CALLBACK (event_box_button_press_event), NULL); /* speed */ - mateconf_peditor_new_numeric_range - (changeset, "/desktop/mate/peripherals/mouse/motion_acceleration", WID ("accel_scale"), - "conv-to-widget-cb", motion_acceleration_from_mateconf, - "conv-from-widget-cb", motion_acceleration_to_mateconf, - NULL); - - mateconf_peditor_new_numeric_range - (changeset, "/desktop/mate/peripherals/mouse/motion_threshold", WID ("sensitivity_scale"), - "conv-to-widget-cb", threshold_from_mateconf, - NULL); + g_settings_bind (mouse_settings, "motion-acceleration", + gtk_range_get_adjustment (GTK_RANGE (WID ("accel_scale"))), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (mouse_settings, "motion-threshold", + gtk_range_get_adjustment (GTK_RANGE (WID ("sensitivity_scale"))), "value", + G_SETTINGS_BIND_DEFAULT); /* DnD threshold */ - mateconf_peditor_new_numeric_range - (changeset, "/desktop/mate/peripherals/mouse/drag_threshold", WID ("drag_threshold_scale"), - "conv-to-widget-cb", drag_threshold_from_mateconf, - NULL); + g_settings_bind (mouse_settings, "drag-threshold", + gtk_range_get_adjustment (GTK_RANGE (WID ("drag_threshold_scale"))), "value", + G_SETTINGS_BIND_DEFAULT); /* Trackpad page */ if (find_synaptics () == FALSE) gtk_notebook_remove_page (GTK_NOTEBOOK (WID ("prefs_widget")), -1); else { - mateconf_peditor_new_boolean - (changeset, "/desktop/mate/peripherals/touchpad/disable_while_typing", WID ("disable_w_typing_toggle"), NULL); - mateconf_peditor_new_boolean - (changeset, "/desktop/mate/peripherals/touchpad/tap_to_click", WID ("tap_to_click_toggle"), NULL); - mateconf_peditor_new_boolean - (changeset, "/desktop/mate/peripherals/touchpad/horiz_scroll_enabled", WID ("horiz_scroll_toggle"), NULL); - radio = GTK_RADIO_BUTTON (WID ("scroll_disabled_radio")); - peditor = mateconf_peditor_new_select_radio - (changeset, "/desktop/mate/peripherals/touchpad/scroll_method", gtk_radio_button_get_group (radio), - NULL); + g_settings_bind (touchpad_settings, "disable-while-typing", + WID ("disable_w_typing_toggle"), "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (touchpad_settings, "tap-to-click", + WID ("tap_to_click_toggle"), "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (touchpad_settings, "horiz-scroll-enabled", + WID ("horiz_scroll_toggle"), "active", + G_SETTINGS_BIND_DEFAULT); + radio = GTK_RADIO_BUTTON (WID ("scroll_disabled_radio")); + GSList *radio_group = gtk_radio_button_get_group (radio); + GSList *item; + gint i; + gint scroll_method = g_settings_get_int(touchpad_settings, "scroll-method"); + for (item = radio_group; item != NULL; item = item->next) { + if (i == scroll_method) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item->data), TRUE); + break; + } + i++; + } synaptics_check_capabilities (dialog); - scrollmethod_changed_event (MATECONF_PROPERTY_EDITOR (peditor), NULL, NULL, dialog); - g_signal_connect (peditor, "value-changed", - G_CALLBACK (scrollmethod_changed_event), dialog); + for (item = radio_group; item != NULL; item = item->next) { + g_signal_connect (G_OBJECT (item->data), "clicked", + G_CALLBACK(scrollmethod_clicked_event), + dialog); + } + g_signal_connect (touchpad_settings, + "changed::scroll-method", + G_CALLBACK(scrollmethod_gsettings_changed_event), + dialog); } } @@ -564,7 +485,7 @@ create_dialog (void) /* Callback issued when a button is clicked on the dialog */ static void -dialog_response_cb (GtkDialog *dialog, gint response_id, MateConfChangeSet *changeset) +dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_HELP) capplet_help (GTK_WINDOW (dialog), @@ -576,7 +497,6 @@ dialog_response_cb (GtkDialog *dialog, gint response_id, MateConfChangeSet *chan int main (int argc, char **argv) { - MateConfClient *client; GtkBuilder *dialog; GtkWidget *dialog_win, *w; gchar *start_page = NULL; @@ -587,7 +507,7 @@ main (int argc, char **argv) G_OPTION_ARG_STRING, &start_page, /* TRANSLATORS: don't translate the terms in brackets */ - N_("Specify the name of the page to show (general|accessibility)"), + N_("Specify the name of the page to show (general)"), N_("page") }, {NULL} }; @@ -600,15 +520,14 @@ main (int argc, char **argv) activate_settings_daemon (); - client = mateconf_client_get_default (); - mateconf_client_add_dir (client, "/desktop/mate/peripherals/mouse", MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); - mateconf_client_add_dir (client, "/desktop/mate/peripherals/touchpad", MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); + mouse_settings = g_settings_new (MOUSE_SCHEMA); + touchpad_settings = g_settings_new (TOUCHPAD_SCHEMA); dialog = create_dialog (); if (dialog) { - setup_dialog (dialog, NULL); - setup_accessibility (dialog, client); + setup_dialog (dialog); + //setup_accessibility (dialog); dialog_win = WID ("mouse_properties_dialog"); g_signal_connect (dialog_win, "response", @@ -641,7 +560,8 @@ main (int argc, char **argv) g_object_unref (dialog); } - g_object_unref (client); + g_object_unref (mouse_settings); + g_object_unref (touchpad_settings); return 0; } -- cgit v1.2.1