From 6d4493b2999055e7451c5cea9a3f9b8023b0552c Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Thu, 15 Mar 2018 14:53:50 -0400 Subject: Add auto-detect toggle switch Currently if a user changes the DPI, there is no way to reset it back to the auto-detected value from Xserver (which we store as 0 in gsettings). Adding this toggle solves that issue. I also removed a deprecated [GtkHandleBox](https://developer.gnome.org/gtk3/stable/GtkHandleBox.html) and all its associated code. --- capplets/appearance/appearance-font.c | 74 ++++++++--- capplets/appearance/appearance-ui.c | 48 ------- capplets/appearance/appearance.h | 1 - capplets/appearance/data/appearance.ui | 221 +++++++++++++++++++++------------ 4 files changed, 202 insertions(+), 142 deletions(-) (limited to 'capplets') diff --git a/capplets/appearance/appearance-font.c b/capplets/appearance/appearance-font.c index 998bfa28..f4dd0d4d 100644 --- a/capplets/appearance/appearance-font.c +++ b/capplets/appearance/appearance-font.c @@ -473,11 +473,22 @@ dpi_load (GSettings *settings, } static void -dpi_changed (GSettings *settings, - gchar *key, - gpointer user_data) +dpi_changed (GSettings *settings, + gchar *key, + AppearanceData *data) { - dpi_load (settings, user_data); + GtkWidget *spinner; + GtkWidget *toggle; + gdouble dpi; + + dpi = g_settings_get_double (data->font_settings, FONT_DPI_KEY); + spinner = appearance_capplet_get_widget (data, "dpi_spinner"); + toggle = appearance_capplet_get_widget (data, "dpi_reset_switch"); + + dpi_load (settings, GTK_SPIN_BUTTON (spinner)); + + gtk_switch_set_state (GTK_SWITCH (toggle), dpi == 0); + gtk_widget_set_sensitive (spinner, dpi != 0); } static void @@ -490,8 +501,8 @@ monitors_changed (GdkScreen *screen, } static void -dpi_value_changed (GtkSpinButton *spinner, - GSettings *settings) +dpi_value_changed (GtkSpinButton *spinner, + AppearanceData *data) { /* Like any time when using a spin button with GSettings, there is * a race condition here. When we change, we send the new @@ -503,6 +514,7 @@ dpi_value_changed (GtkSpinButton *spinner, */ if (!in_change) { GdkScreen *screen; + GtkWidget *toggle; gint scale; gdouble new_dpi; @@ -510,12 +522,34 @@ dpi_value_changed (GtkSpinButton *spinner, scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen)); new_dpi = gtk_spin_button_get_value (spinner) / (double)scale; - g_settings_set_double (settings, FONT_DPI_KEY, new_dpi); + g_settings_set_double (data->font_settings, FONT_DPI_KEY, new_dpi); - dpi_load (settings, spinner); + dpi_load (data->font_settings, spinner); + + toggle = appearance_capplet_get_widget (data, "dpi_reset_switch"); + gtk_switch_set_active (GTK_SWITCH (toggle), FALSE); } } +static gboolean +dpi_value_reset (GtkSwitch *toggle, + gboolean state, + AppearanceData *data) +{ + GtkWidget *spinner; + spinner = appearance_capplet_get_widget (data, "dpi_spinner"); + + if (state) + g_settings_set_double (data->font_settings, FONT_DPI_KEY, 0); + else + dpi_value_changed (GTK_SPIN_BUTTON (spinner), data); + + gtk_switch_set_state(toggle, state); + gtk_widget_set_sensitive (spinner, !state); + + return TRUE; +} + static void cb_details_response (GtkDialog *dialog, gint response_id) { @@ -532,27 +566,37 @@ cb_show_details (GtkWidget *button, { if (!data->font_details) { GtkAdjustment *adjustment; - GtkWidget *widget; + GtkWidget *spinner; + GtkWidget *toggle; EnumGroup *group; + gdouble dpi; data->font_details = appearance_capplet_get_widget (data, "render_details"); gtk_window_set_transient_for (GTK_WINDOW (data->font_details), GTK_WINDOW (appearance_capplet_get_widget (data, "appearance_window"))); - widget = appearance_capplet_get_widget (data, "dpi_spinner"); + spinner = appearance_capplet_get_widget (data, "dpi_spinner"); + toggle = appearance_capplet_get_widget (data, "dpi_reset_switch"); + + /* Set initial state for widgets */ + dpi = g_settings_get_double (data->font_settings, FONT_DPI_KEY); + gtk_switch_set_active (GTK_SWITCH (toggle), dpi == 0); + gtk_widget_set_sensitive (GTK_WIDGET (spinner), dpi != 0); /* pick a sensible maximum dpi */ - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); + adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spinner)); gtk_adjustment_set_lower (adjustment, DPI_LOW_REASONABLE_VALUE); gtk_adjustment_set_upper (adjustment, DPI_HIGH_REASONABLE_VALUE); gtk_adjustment_set_step_increment (adjustment, 1); - dpi_load (data->font_settings, GTK_SPIN_BUTTON (widget)); - g_signal_connect (widget, "value_changed", - G_CALLBACK (dpi_value_changed), data->font_settings); + dpi_load (data->font_settings, GTK_SPIN_BUTTON (spinner)); + g_signal_connect (spinner, "value-changed", + G_CALLBACK (dpi_value_changed), data); + g_signal_connect (toggle, "state-set", + G_CALLBACK (dpi_value_reset), data); - g_signal_connect (data->font_settings, "changed::" FONT_DPI_KEY, G_CALLBACK (dpi_changed), widget); + g_signal_connect (data->font_settings, "changed::" FONT_DPI_KEY, G_CALLBACK (dpi_changed), data); /* Update font DPI when window scaling factor is changed */ g_signal_connect (gdk_screen_get_default (), "monitors-changed", G_CALLBACK (monitors_changed), data); diff --git a/capplets/appearance/appearance-ui.c b/capplets/appearance/appearance-ui.c index 00427e96..86c61fdb 100644 --- a/capplets/appearance/appearance-ui.c +++ b/capplets/appearance/appearance-ui.c @@ -22,34 +22,6 @@ #include "appearance.h" #include "stdio.h" - -static void -show_handlebar (AppearanceData *data, gboolean show) -{ - GtkWidget *handlebox = appearance_capplet_get_widget (data, "toolbar_handlebox"); - GtkWidget *toolbar = appearance_capplet_get_widget (data, "toolbar_toolbar"); - GtkWidget *align = appearance_capplet_get_widget (data, "toolbar_align"); - - g_object_ref (handlebox); - g_object_ref (toolbar); - - if (gtk_bin_get_child (GTK_BIN (align))) - gtk_container_remove (GTK_CONTAINER (align), gtk_bin_get_child (GTK_BIN (align))); - - if (gtk_bin_get_child (GTK_BIN (handlebox))) - gtk_container_remove (GTK_CONTAINER (handlebox), gtk_bin_get_child (GTK_BIN (handlebox))); - - if (show) { - gtk_container_add (GTK_CONTAINER (align), handlebox); - gtk_container_add (GTK_CONTAINER (handlebox), toolbar); - g_object_unref (handlebox); - } else { - gtk_container_add (GTK_CONTAINER (align), toolbar); - } - - g_object_unref (toolbar); -} - static void set_have_icons (AppearanceData *data, gboolean value) { @@ -94,14 +66,6 @@ menus_have_icons_cb (GSettings *settings, set_have_icons (data, g_settings_get_boolean (settings, key)); } -static void -toolbar_detachable_cb (GSettings *settings, - gchar *key, - AppearanceData *data) -{ - show_handlebar (data, g_settings_get_boolean (settings, key)); -} - /** GUI Callbacks **/ static gint @@ -140,16 +104,4 @@ ui_init (AppearanceData *data) set_have_icons (data, g_settings_get_boolean (data->interface_settings, MENU_ICONS_KEY)); - - g_signal_connect (appearance_capplet_get_widget (data, "toolbar_handlebox"), - "button_press_event", - (GCallback) button_press_block_cb, NULL); - - show_handlebar (data, - g_settings_get_boolean (data->interface_settings, - TOOLBAR_DETACHABLE_KEY)); - - /* no ui for detachable toolbars */ - g_signal_connect (data->interface_settings, - "changed::" TOOLBAR_DETACHABLE_KEY, (GCallback) toolbar_detachable_cb, data); } diff --git a/capplets/appearance/appearance.h b/capplets/appearance/appearance.h index 37f58291..36963125 100644 --- a/capplets/appearance/appearance.h +++ b/capplets/appearance/appearance.h @@ -47,7 +47,6 @@ #define COLOR_SCHEME_KEY "gtk-color-scheme" #define ACCEL_CHANGE_KEY "can-change-accels" #define MENU_ICONS_KEY "menus-have-icons" -#define TOOLBAR_DETACHABLE_KEY "toolbar-detachable" #define TOOLBAR_STYLE_KEY "toolbar-style" #define GTK_FONT_DEFAULT_VALUE "Sans 10" diff --git a/capplets/appearance/data/appearance.ui b/capplets/appearance/data/appearance.ui index d8667193..ba20160f 100644 --- a/capplets/appearance/data/appearance.ui +++ b/capplets/appearance/data/appearance.ui @@ -1,5 +1,26 @@ - + @@ -56,23 +77,40 @@ vertical 18 - + True False - 0 - 0 + vertical + 8 - + True False - 12 + start + R_esolution + True + dpi_spinner + + + + + + False + False + 0 + + + + + True + False + center + 8 - + True False - R_esolution: - True - dpi_spinner + Dots per inch (DPI): False @@ -81,34 +119,10 @@ - + True - False - 6 - - - True - True - 1 - - - False - False - 1 - - - - - True - False - dots per inch - - - False - False - 2 - - + True + 1 False @@ -117,11 +131,53 @@ + + False + False + 1 + + + + + True + False + 8 + + + True + False + This resets the font DPI to the auto-detected value from Xserver. + Automatic detection: + + + False + True + 0 + + + + + True + True + True + + + False + True + 1 + + + + + False + False + 2 + False - False + True 0 @@ -757,6 +813,9 @@ 3 + + + False @@ -769,6 +828,9 @@ button3 + + + False @@ -1553,6 +1615,9 @@ theme_help_button theme_close_button + + + False @@ -1724,6 +1789,9 @@ save_dialog_cancel_button save_dialog_save_button + + + @@ -3085,53 +3153,47 @@ True False - + True False + both-horiz - + True False - both-horiz - - - True - False - True - gtk-new - - - False - True - - - - - True - False - gtk-open - - - False - True - - - - - True - False - gtk-save - - - False - True - - - + True + gtk-new + + + False + True + + + + + True + False + gtk-open + + False + True + + + + True + False + gtk-save + + + False + True + + + @@ -3192,5 +3254,8 @@ help_button close_button + + + -- cgit v1.2.1