[gnome-settings-daemon] power: Refactor the backlight helper spawning



commit d1329f99524ac6c7172141d6dba026a77f3ae0f7
Author: Rui Matos <tiagomatos gmail com>
Date:   Mon May 4 18:02:37 2015 +0200

    power: Refactor the backlight helper spawning
    
    We'll need to change the environment that we pass on to the helper and
    this will make it easier.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=748804

 plugins/power/gpm-common.c |  120 +++++++++++++++++++++++--------------------
 1 files changed, 64 insertions(+), 56 deletions(-)
---
diff --git a/plugins/power/gpm-common.c b/plugins/power/gpm-common.c
index e03738a..f8a2da5 100644
--- a/plugins/power/gpm-common.c
+++ b/plugins/power/gpm-common.c
@@ -45,6 +45,12 @@
 #define UPS_SOUND_LOOP_ID                        99
 #define GSD_POWER_MANAGER_CRITICAL_ALERT_TIMEOUT  5 /* seconds */
 
+enum BacklightHelperCommand {
+        BACKLIGHT_HELPER_GET,
+        BACKLIGHT_HELPER_GET_MAX,
+        BACKLIGHT_HELPER_SET
+};
+
 /* take a discrete value with offset and convert to percentage */
 int
 gsd_power_backlight_abs_to_percentage (int min, int max, int value)
@@ -339,17 +345,17 @@ backlight_set_mock_value (gint value)
 }
 
 static gint64
-backlight_get_mock_value (const char *argument)
+backlight_get_mock_value (enum BacklightHelperCommand command)
 {
        char *contents;
        gint64 ret;
 
-       if (g_str_equal (argument, "get-max-brightness")) {
+        if (command == BACKLIGHT_HELPER_GET_MAX) {
                g_debug ("Returning max mock brightness: %d", GSD_MOCK_MAX_BRIGHTNESS);
                return GSD_MOCK_MAX_BRIGHTNESS;
        }
 
-       g_assert (g_str_equal (argument, "get-brightness"));
+        g_assert (command == BACKLIGHT_HELPER_GET);
 
        if (g_file_get_contents ("GSD_MOCK_brightness", &contents, NULL, NULL)) {
                ret = g_ascii_strtoll (contents, NULL, 0);
@@ -386,6 +392,37 @@ backlight_available (GnomeRRScreen *rr_screen)
         return TRUE;
 }
 
+static gboolean
+run_backlight_helper (enum BacklightHelperCommand   command,
+                      gchar                        *value,
+                      gchar                       **stdout_data,
+                      gint                         *exit_status,
+                      GError                      **error)
+{
+        static gchar *helper_args[] = {
+                "--get-brightness",
+                "--get-max-brightness",
+                "--set-brightness",
+        };
+        gchar *argv[5] = { 0 };
+
+        argv[0] = "pkexec";
+        argv[1] = LIBEXECDIR "/gsd-backlight-helper";
+        argv[2] = helper_args[command];
+        argv[3] = value;
+
+        return g_spawn_sync (NULL,
+                             command == BACKLIGHT_HELPER_SET ? argv : &argv[1],
+                             NULL,
+                             G_SPAWN_SEARCH_PATH,
+                             NULL,
+                             NULL,
+                             stdout_data,
+                             NULL,
+                             exit_status,
+                             error);
+}
+
 /**
  * backlight_helper_get_value:
  *
@@ -395,17 +432,16 @@ backlight_available (GnomeRRScreen *rr_screen)
  * for failure. If -1 then @error is set.
  **/
 static gint64
-backlight_helper_get_value (const gchar *argument, GError **error)
+backlight_helper_get_value (enum BacklightHelperCommand command, GError **error)
 {
         gboolean ret;
         gchar *stdout_data = NULL;
         gint exit_status = 0;
         gint64 value = -1;
-        gchar *command = NULL;
         gchar *endptr = NULL;
 
 #ifdef GSD_MOCK
-        return backlight_get_mock_value (argument);
+        return backlight_get_mock_value (command);
 #endif
 
 #ifndef __linux__
@@ -418,15 +454,8 @@ backlight_helper_get_value (const gchar *argument, GError **error)
 #endif
 
         /* get the data */
-        command = g_strdup_printf (LIBEXECDIR "/gsd-backlight-helper --%s",
-                                   argument);
-        ret = g_spawn_command_line_sync (command,
-                                         &stdout_data,
-                                         NULL,
-                                         &exit_status,
-                                         error);
-        g_debug ("executed %s retval: %i", command, exit_status);
-
+        ret = run_backlight_helper (command, NULL,
+                                    &stdout_data, &exit_status, error);
         if (!ret)
                 goto out;
 
@@ -475,7 +504,6 @@ backlight_helper_get_value (const gchar *argument, GError **error)
         }
 
 out:
-        g_free (command);
         g_free (stdout_data);
         return value;
 }
@@ -488,13 +516,12 @@ out:
  * Return value: Success. If FALSE then @error is set.
  **/
 static gboolean
-backlight_helper_set_value (const gchar *argument,
-                            gint value,
+backlight_helper_set_value (gint value,
                             GError **error)
 {
         gboolean ret = FALSE;
         gint exit_status = 0;
-        gchar *command = NULL;
+        gchar *vstr = NULL;
 
 #ifdef GSD_MOCK
        backlight_set_mock_value (value);
@@ -507,25 +534,14 @@ backlight_helper_set_value (const gchar *argument,
                              GSD_POWER_MANAGER_ERROR,
                              GSD_POWER_MANAGER_ERROR_FAILED,
                              "The sysfs backlight helper is only for Linux");
-        goto out;
+        return FALSE;
 #endif
 
         /* get the data */
-        command = g_strdup_printf ("pkexec " LIBEXECDIR "/gsd-backlight-helper --%s %i",
-                                   argument, value);
-        ret = g_spawn_command_line_sync (command,
-                                         NULL,
-                                         NULL,
-                                         &exit_status,
-                                         error);
-
-        g_debug ("executed %s retval: %i", command, exit_status);
-
-        if (!ret || WEXITSTATUS (exit_status) != 0)
-                goto out;
-
-out:
-        g_free (command);
+        vstr = g_strdup_printf ("%i", value);
+        ret = run_backlight_helper (BACKLIGHT_HELPER_SET, vstr,
+                                    NULL, &exit_status, error);
+        g_free (vstr);
         return ret;
 }
 
@@ -562,7 +578,7 @@ backlight_get_abs (GnomeRRScreen *rr_screen, GError **error)
         }
         return -1;
 #else
-        return backlight_helper_get_value ("get-brightness", error);
+        return backlight_helper_get_value (BACKLIGHT_HELPER_GET, error);
 #endif
 }
 
@@ -583,10 +599,10 @@ backlight_get_percentage (GnomeRRScreen *rr_screen, GError **error)
         }
         return value;
 #else
-        max = backlight_helper_get_value ("get-max-brightness", error);
+        max = backlight_helper_get_value (BACKLIGHT_HELPER_GET_MAX, error);
         if (max < 0)
                 return value;
-        now = backlight_helper_get_value ("get-brightness", error);
+        now = backlight_helper_get_value (BACKLIGHT_HELPER_GET, error);
         if (now < 0)
                 return value;
         value = ABS_TO_PERCENTAGE (0, max, now);
@@ -606,7 +622,7 @@ backlight_get_max (GnomeRRScreen *rr_screen, GError **error)
 #ifndef __linux__
         return 100;
 #else
-        return  backlight_helper_get_value ("get-max-brightness", error);
+        return  backlight_helper_get_value (BACKLIGHT_HELPER_GET_MAX, error);
 #endif
 }
 
@@ -629,13 +645,11 @@ backlight_set_percentage (GnomeRRScreen *rr_screen,
         }
         return ret;
 #else
-        max = backlight_helper_get_value ("get-max-brightness", error);
+        max = backlight_helper_get_value (BACKLIGHT_HELPER_GET_MAX, error);
         if (max < 0)
                 return ret;
         discrete = PERCENTAGE_TO_ABS (0, max, *value);
-        ret = backlight_helper_set_value ("set-brightness",
-                                          discrete,
-                                          error);
+        ret = backlight_helper_set_value (discrete, error);
         if (ret)
                 *value = ABS_TO_PERCENTAGE (0, max, discrete);
 
@@ -681,17 +695,15 @@ backlight_step_up (GnomeRRScreen *rr_screen, GError **error)
         }
         return percentage_value;
 #else
-        now = backlight_helper_get_value ("get-brightness", error);
+        now = backlight_helper_get_value (BACKLIGHT_HELPER_GET, error);
         if (now < 0)
                 return percentage_value;
-        max = backlight_helper_get_value ("get-max-brightness", error);
+        max = backlight_helper_get_value (BACKLIGHT_HELPER_GET_MAX, error);
         if (max < 0)
                 return percentage_value;
         step = BRIGHTNESS_STEP_AMOUNT (max + 1);
         discrete = MIN (now + step, max);
-        ret = backlight_helper_set_value ("set-brightness",
-                                          discrete,
-                                          error);
+        ret = backlight_helper_set_value (discrete, error);
         if (ret)
                 percentage_value = ABS_TO_PERCENTAGE (0, max, discrete);
 
@@ -737,17 +749,15 @@ backlight_step_down (GnomeRRScreen *rr_screen, GError **error)
         }
         return percentage_value;
 #else
-        now = backlight_helper_get_value ("get-brightness", error);
+        now = backlight_helper_get_value (BACKLIGHT_HELPER_GET, error);
         if (now < 0)
                 return percentage_value;
-        max = backlight_helper_get_value ("get-max-brightness", error);
+        max = backlight_helper_get_value (BACKLIGHT_HELPER_GET_MAX, error);
         if (max < 0)
                 return percentage_value;
         step = BRIGHTNESS_STEP_AMOUNT (max + 1);
         discrete = MAX (now - step, 0);
-        ret = backlight_helper_set_value ("set-brightness",
-                                          discrete,
-                                          error);
+        ret = backlight_helper_set_value (discrete, error);
         if (ret)
                 percentage_value = ABS_TO_PERCENTAGE (0, max, discrete);
 
@@ -768,9 +778,7 @@ backlight_set_abs (GnomeRRScreen *rr_screen,
                 return gnome_rr_output_set_backlight (output, value, error);
         return ret;
 #else
-        ret = backlight_helper_set_value ("set-brightness",
-                                          value,
-                                          error);
+        ret = backlight_helper_set_value (value, error);
 
         return ret;
 #endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]