diff --git a/common/xfpm-brightness.c b/common/xfpm-brightness.c index 066e44c..8eae4e7 100644 --- a/common/xfpm-brightness.c +++ b/common/xfpm-brightness.c @@ -699,6 +699,19 @@ gboolean xfpm_brightness_set_level (XfpmBrightness *brightness, gint32 level) return ret; } +gboolean xfpm_brightness_set_step_count (XfpmBrightness *brightness, guint32 count) +{ + gboolean ret = FALSE; + + if ( xfpm_brightness_has_hw (brightness) ) { + gint32 delta = brightness->priv->max_level - brightness->priv->min_level; + brightness->priv->step = (delta < (count * 2)) ? 1 : (delta / count); + ret = TRUE; + } + + return ret; +} + gboolean xfpm_brightness_dim_down (XfpmBrightness *brightness) { gboolean ret = FALSE; diff --git a/common/xfpm-brightness.h b/common/xfpm-brightness.h index 990927d..aecf5ab 100644 --- a/common/xfpm-brightness.h +++ b/common/xfpm-brightness.h @@ -66,6 +66,9 @@ gboolean xfpm_brightness_get_level (XfpmBrightness *brightness, gboolean xfpm_brightness_set_level (XfpmBrightness *brightness, gint32 level); +gboolean xfpm_brightness_set_step_count (XfpmBrightness *brightness, + guint32 count); + gboolean xfpm_brightness_dim_down (XfpmBrightness *brightness); gboolean xfpm_brightness_get_switch (XfpmBrightness *brightness, diff --git a/common/xfpm-config.h b/common/xfpm-config.h index da0ff89..fd1dad5 100644 --- a/common/xfpm-config.h +++ b/common/xfpm-config.h @@ -73,6 +73,7 @@ G_BEGIN_DECLS #define BRIGHTNESS_LEVEL_ON_AC "brightness-level-on-ac" #define BRIGHTNESS_LEVEL_ON_BATTERY "brightness-level-on-battery" #define BRIGHTNESS_SLIDER_MIN_LEVEL "brightness-slider-min-level" +#define BRIGHTNESS_STEP_COUNT "brightness-step-count" #define BRIGHTNESS_SWITCH "brightness-switch" #define BRIGHTNESS_SWITCH_SAVE "brightness-switch-restore-on-exit" #define HANDLE_BRIGHTNESS_KEYS "handle-brightness-keys" diff --git a/data/interfaces/xfpm-settings.ui b/data/interfaces/xfpm-settings.ui index b766920..d9a5440 100644 --- a/data/interfaces/xfpm-settings.ui +++ b/data/interfaces/xfpm-settings.ui @@ -29,6 +29,12 @@ 1 10 + + 2 + 100 + 10 + 5 + 1 20 @@ -422,6 +428,45 @@ 3 + + + True + False + 6 + + + True + True + False + + False + False + brightness-step-count-spin-adjustment + + + + False + True + + + + + 1 + 4 + + + + + True + False + 0 + Brightness step count: + + + 0 + 4 + + True diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c index 0d1d04f..96831af 100644 --- a/settings/xfpm-settings.c +++ b/settings/xfpm-settings.c @@ -194,6 +194,9 @@ void on_ac_sleep_mode_changed_cb (GtkWidget *w, void on_battery_sleep_mode_changed_cb (GtkWidget *w, XfconfChannel *channel); +void brightness_step_count_value_changed_cb (GtkSpinButton *w, + XfconfChannel *channel); + /* Light Locker Integration */ gchar *format_light_locker_value_cb (GtkScale *scale, gdouble value, @@ -773,6 +776,17 @@ critical_level_value_changed_cb (GtkSpinButton *w, XfconfChannel *channel) } void +brightness_step_count_value_changed_cb (GtkSpinButton *w, XfconfChannel *channel) +{ + guint val = (guint) gtk_spin_button_get_value (w); + + if (!xfconf_channel_set_uint (channel, PROPERTIES_PREFIX BRIGHTNESS_STEP_COUNT, val) ) + { + g_critical ("Unable to set value %d for property %s\n", val, BRIGHTNESS_STEP_COUNT); + } +} + +void lock_screen_toggled_cb (GtkWidget *w, XfconfChannel *channel) { XfconfChannel *session_channel = xfconf_channel_get ("xfce4-session"); @@ -1233,6 +1247,7 @@ xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend, GtkWidget *sleep_w; GtkWidget *sleep_label; GtkWidget *dpms; + GtkWidget *brightness_step_count; guint value; guint list_value; @@ -1409,6 +1424,21 @@ xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend, gtk_widget_hide (sleep_w); gtk_widget_hide (sleep_label); } + + /* + * Brightness step count + */ + brightness_step_count = GTK_WIDGET (gtk_builder_get_object (xml, "brightness-step-count-spin")); + gtk_widget_set_tooltip_text (brightness_step_count, + _("Number of brightness steps available using keys")); + val = xfconf_channel_get_uint (channel, PROPERTIES_PREFIX BRIGHTNESS_STEP_COUNT, 10); + if ( val > 100 || val < 2) + { + g_critical ("Value %d if out of range for property %s\n", val, BRIGHTNESS_STEP_COUNT); + gtk_spin_button_set_value (GTK_SPIN_BUTTON(brightness_step_count), 10); + } + else + gtk_spin_button_set_value (GTK_SPIN_BUTTON(brightness_step_count), val); } static void diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c index 3ca25f5..9661cac 100644 --- a/src/xfpm-backlight.c +++ b/src/xfpm-backlight.c @@ -81,6 +81,8 @@ struct XfpmBacklightPrivate gint32 last_level; gint32 max_level; + guint brightness_step_count; + gint brightness_switch; gint brightness_switch_save; gboolean brightness_switch_initialized; @@ -223,10 +225,12 @@ xfpm_backlight_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBa gboolean ret = TRUE; gboolean handle_brightness_keys, show_popup; + guint brightness_step_count; g_object_get (G_OBJECT (backlight->priv->conf), HANDLE_BRIGHTNESS_KEYS, &handle_brightness_keys, SHOW_BRIGHTNESS_POPUP, &show_popup, + BRIGHTNESS_STEP_COUNT, &brightness_step_count, NULL); if ( type != BUTTON_MON_BRIGHTNESS_UP && type != BUTTON_MON_BRIGHTNESS_DOWN ) @@ -237,6 +241,8 @@ xfpm_backlight_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBa ret = xfpm_brightness_get_level (backlight->priv->brightness, &level); else { + xfpm_brightness_set_step_count(backlight->priv->brightness, + brightness_step_count); if ( type == BUTTON_MON_BRIGHTNESS_UP ) ret = xfpm_brightness_up (backlight->priv->brightness, &level); else @@ -347,6 +353,7 @@ xfpm_backlight_init (XfpmBacklight *backlight) backlight->priv->power = NULL; backlight->priv->dimmed = FALSE; backlight->priv->block = FALSE; + backlight->priv->brightness_step_count = 10; backlight->priv->brightness_switch_initialized = FALSE; if ( !backlight->priv->has_hw ) @@ -439,6 +446,12 @@ xfpm_backlight_init (XfpmBacklight *backlight) NULL); xfpm_brightness_get_level (backlight->priv->brightness, &backlight->priv->last_level); xfpm_backlight_set_timeouts (backlight); + + /* setup step count */ + backlight->priv->brightness_step_count = + xfconf_channel_get_int (xfpm_xfconf_get_channel(backlight->priv->conf), + PROPERTIES_PREFIX BRIGHTNESS_STEP_COUNT, + 10); } } diff --git a/src/xfpm-xfconf.c b/src/xfpm-xfconf.c index 48ec992..6b30ad6 100644 --- a/src/xfpm-xfconf.c +++ b/src/xfpm-xfconf.c @@ -60,6 +60,7 @@ enum PROP_CRITICAL_LEVEL, PROP_SHOW_BRIGHTNESS_POPUP, PROP_HANDLE_BRIGHTNESS_KEYS, + PROP_BRIGHTNESS_STEP_COUNT, PROP_TRAY_ICON, PROP_CRITICAL_BATTERY_ACTION, PROP_POWER_BUTTON, @@ -290,6 +291,19 @@ xfpm_xfconf_class_init (XfpmXfconfClass *klass) NULL, NULL, TRUE, G_PARAM_READWRITE)); + + /** + * XfpmXfconf::brightness-step-count + **/ + g_object_class_install_property (object_class, + PROP_BRIGHTNESS_STEP_COUNT, + g_param_spec_uint (BRIGHTNESS_STEP_COUNT, + NULL, NULL, + 2, + 100, + 10, + G_PARAM_READWRITE)); + /** * XfpmXfconf::show-tray-icon **/