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
+
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
**/