display: change async method from sync about dpms control 41/100341/2
authorJeong Donghwan <dh.jeong@samsung.com>
Mon, 28 Nov 2016 01:31:59 +0000 (10:31 +0900)
committerTaeyoung Kim <ty317.kim@samsung.com>
Mon, 28 Nov 2016 09:16:12 +0000 (01:16 -0800)
If dpms control is sync method, when dpms is controlling,
dbus method does blocking from another request until end dpms control.

Change-Id: I4ccf525f4127a334989e5e63d47b6e44d6c68057
Signed-off-by: Jeong Donghwan <dh.jeong@samsung.com>
src/display/dpms-wayland-none.c

index 52b0ea6..f5d8e72 100644 (file)
 
 #include "core/edbus-handler.h"
 #include "device-interface.h"
+#include "util.h"
 
 #define ENLIGHTENMENT_BUS_NAME          "org.enlightenment.wm"
 #define ENLIGHTENMENT_OBJECT_PATH       "/org/enlightenment/wm"
 #define ENLIGHTENMENT_INTERFACE_NAME    ENLIGHTENMENT_BUS_NAME".dpms"
 
+static void dpms_set_cb(void *data, DBusMessage *msg, DBusError *r_err)
+{
+       DBusError err;
+       int state, ret;
+
+       if (!msg) {
+               _E("no message [%s:%s], Cannot get pmlock check",
+                   r_err->name, r_err->message);
+               return;
+       }
+
+       dbus_error_init(&err);
+       ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state,
+           DBUS_TYPE_INVALID);
+
+       if (!ret) {
+               _E("no message [%s:%s]", err.name, err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       _D("DPMS was set %d", state);
+}
+
 int dpms_set_power(enum dpms_state state)
 {
        char *arr[1];
@@ -33,10 +58,10 @@ int dpms_set_power(enum dpms_state state)
 
        snprintf(str, sizeof(str), "%d", state);
        arr[0] = str;
-       ret = dbus_method_sync(ENLIGHTENMENT_BUS_NAME,
+       ret = dbus_method_async_with_reply(ENLIGHTENMENT_BUS_NAME,
                        ENLIGHTENMENT_OBJECT_PATH,
                        ENLIGHTENMENT_INTERFACE_NAME,
-                       "set", "u", arr);
+                       "set", "u", arr, dpms_set_cb, -1, NULL);
 
        if (ret < 0)
                return ret;