You have been requested to review the proposed merge of 
lp:~kaihengfeng/unity-settings-daemon/add-brightness-limit-mechanism into 
lp:unity-settings-daemon.

For more details, see:
https://code.launchpad.net/~kaihengfeng/unity-settings-daemon/add-brightness-limit-mechanism/+merge/277416

Add a mechanism that can make user to choose the minimum/maximum adjustable 
brightness level.

-- 
Your team Ubuntu Desktop is requested to review the proposed merge of 
lp:~kaihengfeng/unity-settings-daemon/add-brightness-limit-mechanism into 
lp:unity-settings-daemon.
=== modified file 'plugins/power/gpm-common.c'
--- plugins/power/gpm-common.c	2014-06-26 00:02:19 +0000
+++ plugins/power/gpm-common.c	2015-11-13 07:45:35 +0000
@@ -1414,7 +1414,10 @@
 }
 
 int
-backlight_get_percentage (GsdRRScreen *rr_screen, GError **error)
+backlight_get_percentage (GsdRRScreen *rr_screen,
+                          gfloat min_percentage,
+                          gfloat max_percentage,
+                          GError **error)
 {
         GsdRROutput *output;
         gint now;
@@ -1429,6 +1432,8 @@
                 min = gsd_rr_output_get_backlight_min (output);
                 max = gsd_rr_output_get_backlight_max (output);
                 now = gsd_rr_output_get_backlight (output, error);
+                min = MAX (min, max * min_percentage);
+                max = max * max_percentage;
                 if (now < 0)
                         goto out;
                 value = ABS_TO_PERCENTAGE (min, max, now);
@@ -1442,6 +1447,8 @@
         now = backlight_helper_get_value ("get-brightness", error);
         if (now < 0)
                 goto out;
+        min = MAX (min, max * min_percentage);
+        max = max * max_percentage;
         value = ABS_TO_PERCENTAGE (min, max, now);
 out:
         return value;
@@ -1488,6 +1495,8 @@
 gboolean
 backlight_set_percentage (GsdRRScreen *rr_screen,
                           guint value,
+                          gfloat min_percentage,
+                          gfloat max_percentage,
                           GError **error)
 {
         GsdRROutput *output;
@@ -1505,6 +1514,8 @@
                         g_warning ("no xrandr backlight capability");
                         return ret;
                 }
+                min = MAX (min, max * min_percentage);
+                max = max * max_percentage;
                 discrete = PERCENTAGE_TO_ABS (min, max, value);
                 ret = gsd_rr_output_set_backlight (output,
                                                      discrete,
@@ -1516,6 +1527,8 @@
         max = backlight_helper_get_value ("get-max-brightness", error);
         if (max < 0)
                 return ret;
+        min = MAX (min, max * min_percentage);
+        max = max * max_percentage;
         discrete = PERCENTAGE_TO_ABS (min, max, value);
         ret = backlight_helper_set_value ("set-brightness",
                                           discrete,
@@ -1525,7 +1538,10 @@
 }
 
 int
-backlight_step_up (GsdRRScreen *rr_screen, GError **error)
+backlight_step_up (GsdRRScreen *rr_screen,
+                   gfloat min_percentage,
+                   gfloat max_percentage,
+                   GError **error)
 {
         GsdRROutput *output;
         gboolean ret = FALSE;
@@ -1555,6 +1571,8 @@
                 now = gsd_rr_output_get_backlight (output, error);
                 if (now < 0)
                        return percentage_value;
+                min = MAX (min, max * min_percentage);
+                max = max * max_percentage;
                 step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
                 discrete = MIN (now + step, max);
                 ret = gsd_rr_output_set_backlight (output,
@@ -1572,6 +1590,8 @@
         max = backlight_helper_get_value ("get-max-brightness", error);
         if (max < 0)
                 return percentage_value;
+        min = MAX (min, max * min_percentage);
+        max = max * max_percentage;
         step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
         discrete = MIN (now + step, max);
         ret = backlight_helper_set_value ("set-brightness",
@@ -1584,7 +1604,10 @@
 }
 
 int
-backlight_step_down (GsdRRScreen *rr_screen, GError **error)
+backlight_step_down (GsdRRScreen *rr_screen,
+                     gfloat min_percentage,
+                     gfloat max_percentage,
+                     GError **error)
 {
         GsdRROutput *output;
         gboolean ret = FALSE;
@@ -1614,8 +1637,10 @@
                 now = gsd_rr_output_get_backlight (output, error);
                 if (now < 0)
                        return percentage_value;
+                min = MAX (min, max * min_percentage);
+                max = max * max_percentage;
                 step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
-                discrete = MAX (now - step, 0);
+                discrete = MAX (now - step, min);
                 ret = gsd_rr_output_set_backlight (output,
                                                      discrete,
                                                      error);
@@ -1631,8 +1656,10 @@
         max = backlight_helper_get_value ("get-max-brightness", error);
         if (max < 0)
                 return percentage_value;
+        min = MAX (min, max * min_percentage);
+        max = max * max_percentage;
         step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
-        discrete = MAX (now - step, 0);
+        discrete = MAX (now - step, min);
         ret = backlight_helper_set_value ("set-brightness",
                                           discrete,
                                           error);

=== modified file 'plugins/power/gpm-common.h'
--- plugins/power/gpm-common.h	2014-06-26 00:02:19 +0000
+++ plugins/power/gpm-common.h	2015-11-13 07:45:35 +0000
@@ -58,14 +58,25 @@
 int              gsd_power_backlight_abs_to_percentage  (int min, int max, int value);
 gboolean         backlight_available                    (GsdRRScreen *rr_screen);
 int              backlight_get_abs                      (GsdRRScreen *rr_screen, GError **error);
-int              backlight_get_percentage               (GsdRRScreen *rr_screen, GError **error);
+int              backlight_get_percentage               (GsdRRScreen *rr_screen,
+                                                         gfloat min_percentage,
+                                                         gfloat max_percentage,
+                                                         GError **error);
 int              backlight_get_min                      (GsdRRScreen *rr_screen);
 int              backlight_get_max                      (GsdRRScreen *rr_screen, GError **error);
 gboolean         backlight_set_percentage               (GsdRRScreen *rr_screen,
                                                          guint value,
-                                                         GError **error);
-int              backlight_step_up                      (GsdRRScreen *rr_screen, GError **error);
-int              backlight_step_down                    (GsdRRScreen *rr_screen, GError **error);
+                                                         gfloat min_percentage,
+                                                         gfloat max_percentage,
+                                                         GError **error);
+int              backlight_step_up                      (GsdRRScreen *rr_screen,
+                                                         gfloat min_percentage,
+                                                         gfloat max_percentage,
+                                                         GError **error);
+int              backlight_step_down                    (GsdRRScreen *rr_screen,
+                                                         gfloat min_percentage,
+                                                         gfloat max_percentage,
+                                                         GError **error);
 int              backlight_set_abs                      (GsdRRScreen *rr_screen,
                                                          guint value,
                                                          GError **error);

=== modified file 'plugins/power/gsd-power-manager.c'
--- plugins/power/gsd-power-manager.c	2015-10-22 09:04:20 +0000
+++ plugins/power/gsd-power-manager.c	2015-11-13 07:45:35 +0000
@@ -189,6 +189,8 @@
         /* Brightness */
         gboolean                 backlight_available;
         gint                     pre_dim_brightness; /* level, not percentage */
+        gfloat                   min_brightness_percentage;
+        gfloat                   max_brightness_percentage;
 
         /* Keyboard */
         GDBusProxy              *upower_kdb_proxy;
@@ -2626,6 +2628,15 @@
 }
 
 static void
+brightness_configure (GsdPowerManager *manager)
+{
+        gint min = CLAMP (g_settings_get_int (manager->priv->settings, "min-brightness-percentage"), 0, 100);
+        gint max = CLAMP (g_settings_get_int (manager->priv->settings, "max-brightness-percentage"), min, 100);
+        manager->priv->min_brightness_percentage = min * 0.01;
+        manager->priv->max_brightness_percentage = max * 0.01;
+}
+
+static void
 main_battery_or_ups_low_changed (GsdPowerManager *manager,
                           gboolean         is_low)
 {
@@ -3013,6 +3024,11 @@
                 setup_lid_closed_action (manager);
                 return;
         }
+        if (g_str_equal (key, "min-brightness-percentage") ||
+            g_str_equal (key, "max-brightness-percentage")) {
+                brightness_configure (manager);
+                return;
+        }
 }
 
 static void
@@ -3416,6 +3432,7 @@
         /* coldplug the engine */
         engine_coldplug (manager);
         idle_configure (manager);
+        brightness_configure (manager);
 
         manager->priv->xscreensaver_watchdog_timer_id = gsd_power_enable_screensaver_watchdog ();
 
@@ -3590,12 +3607,21 @@
 
         if (g_strcmp0 (method_name, "GetPercentage") == 0) {
                 g_debug ("screen get percentage");
-                value = backlight_get_percentage (manager->priv->rr_screen, &error);
+                value = backlight_get_percentage (
+                        manager->priv->rr_screen,
+                        manager->priv->min_brightness_percentage,
+                        manager->priv->max_brightness_percentage,
+                        &error);
 
         } else if (g_strcmp0 (method_name, "SetPercentage") == 0) {
                 g_debug ("screen set percentage");
                 g_variant_get (parameters, "(u)", &value_tmp);
-                ret = backlight_set_percentage (manager->priv->rr_screen, value_tmp, &error);
+                ret = backlight_set_percentage (
+                        manager->priv->rr_screen,
+                        value_tmp,
+                        manager->priv->min_brightness_percentage,
+                        manager->priv->max_brightness_percentage,
+                        &error);
                 if (ret) {
                         value = value_tmp;
                         backlight_emit_changed (manager);
@@ -3603,12 +3629,20 @@
 
         } else if (g_strcmp0 (method_name, "StepUp") == 0) {
                 g_debug ("screen step up");
-                value = backlight_step_up (manager->priv->rr_screen, &error);
+                value = backlight_step_up (
+                        manager->priv->rr_screen,
+                        manager->priv->min_brightness_percentage,
+                        manager->priv->max_brightness_percentage,
+                        &error);
                 if (value != -1)
                         backlight_emit_changed (manager);
         } else if (g_strcmp0 (method_name, "StepDown") == 0) {
                 g_debug ("screen step down");
-                value = backlight_step_down (manager->priv->rr_screen, &error);
+                value = backlight_step_down (
+                        manager->priv->rr_screen,
+                        manager->priv->min_brightness_percentage,
+                        manager->priv->max_brightness_percentage,
+                        &error);
                 if (value != -1)
                         backlight_emit_changed (manager);
         } else {

-- 
ubuntu-desktop mailing list
ubuntu-desktop@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to