Support Wayland environment 32/48332/2 accepted/tizen/mobile/20150920.232559 accepted/tizen/tv/20150920.232606 accepted/tizen/wearable/20150920.232621 submit/tizen/20150918.085222
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 18 Sep 2015 06:06:09 +0000 (15:06 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 18 Sep 2015 08:14:00 +0000 (17:14 +0900)
Change-Id: I80a4a970a967334950f6143edaf022b6219b0f79
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
CMakeLists.txt
packaging/capi-system-media-key.spec
src/media_key.c

index 6171666af0a97810ed26c6a754cb952f941af047..9c81578972fc812ce9140aabfe5b5914681c0e11 100644 (file)
@@ -13,6 +13,7 @@ INCLUDE_DIRECTORIES(${INC_DIR})
 SET(requires "dlog capi-base-common ecore ecore-input evas")
 IF (WITH_WAYLAND)
        ADD_DEFINITIONS("-DWAYLAND")
+       SET(requires "${requires} ecore-wayland")
 ENDIF (WITH_WAYLAND)
 IF (WITH_X11)
        ADD_DEFINITIONS("-DX11")
index 1d02f277af1405a214d654c8146e85d472628cc2..2473006878d456d268f59e60030355c0bd66bef2 100644 (file)
@@ -19,6 +19,8 @@ BuildRequires:  pkgconfig(evas)
 %if %{with x}
 BuildRequires:  pkgconfig(x11)
 BuildRequires:  pkgconfig(utilX)
+%else if{with wayland}
+BuildRequires:  pkgconfig(ecore-wayland)
 %endif
 
 %description
index ded4f848bba67766a38810606355e26e30645d9c..1a58752feea3e7640768eba54238fe912bd63d02 100644 (file)
@@ -24,6 +24,8 @@
 #if defined(X11)
 #include <Ecore_X.h>
 #include <utilX.h>
+#elif defined(WAYLAND)
+#include <Ecore_Wayland.h>
 #endif
 
 #include <dlog.h>
@@ -81,6 +83,8 @@ static int _media_key_init(void)
        ecore_x_icccm_title_set(win, "media key receiver");
        ecore_x_netwm_name_set(win, "media key receiver");
        ecore_x_netwm_pid_set(win, getpid());
+#elif defined(WAYLAND)
+       ecore_wl_init(NULL);
 #endif
        _media_key_initialized = 1;
 
@@ -92,6 +96,8 @@ static void _media_key_fini(void)
 #if defined(X11)
        ecore_x_window_free(win);
        ecore_x_shutdown();
+#elif defined(WAYLAND)
+       ecore_wl_shutdown();
 #endif
        _media_key_initialized = 0;
 }
@@ -142,13 +148,18 @@ static Eina_Bool _media_key_release_cb(void *data, int type, void *event)
        return ECORE_CALLBACK_RENEW;
 }
 
-#if defined(X11)
 static int _grab_media_key(void)
 {
        int i;
+#if defined(X11)
        int ret;
+#elif defined(WAYLAND)
+       Eina_Bool ret;
+#endif
+
 
        for (i = 0; media_keys[i].key_str; i++) {
+#if defined(X11)
                ret = utilx_grab_key(ecore_x_display_get(), win,
                                media_keys[i].key_str, OR_EXCLUSIVE_GRAB);
                if (ret < 0) {
@@ -159,6 +170,17 @@ static int _grab_media_key(void)
 
                        return ret;
                }
+#elif defined(WAYLAND)
+               ret = ecore_wl_window_keygrab_set(NULL, media_keys[i].key_str,
+                               0, 0, 0, ECORE_WL_WINDOW_KEYGRAB_OVERRIDE_EXCLUSIVE);
+               if (ret != EINA_TRUE) {
+                       LOGE("failed to grab key: %s", media_keys[i].key_str);
+                       for (i = i - 1; i >= 0; i--)
+                               ecore_wl_window_keygrab_unset(NULL, media_keys[i].key_str, 0, 0);
+
+                       return -1;
+               }
+#endif
        }
 
        return 0;
@@ -167,18 +189,27 @@ static int _grab_media_key(void)
 static int _ungrab_media_key(void)
 {
        int i;
+#if defined(X11)
        int ret;
+#elif defined(WAYLAND)
+       Eina_Bool ret;
+#endif
 
        for (i = 0; media_keys[i].key_str; i++) {
+#if defined(X11)
                ret = utilx_ungrab_key(ecore_x_display_get(), win,
                                media_keys[i].key_str);
                if (ret)
                        LOGE("failed to ungrab key: %s", media_keys[i].key_str);
+#elif defined(WAYLAND)
+               ret = ecore_wl_window_keygrab_unset(NULL, media_keys[i].key_str, 0, 0);
+               if (ret != EINA_TRUE)
+                       LOGE("failed to ungrab key: %s", media_keys[i].key_str);
+#endif
        }
 
        return 0;
 }
-#endif
 
 int media_key_reserve(media_key_event_cb callback, void *user_data)
 {
@@ -194,11 +225,7 @@ int media_key_reserve(media_key_event_cb callback, void *user_data)
                        return MEDIA_KEY_ERROR_OPERATION_FAILED;
        }
 
-#if defined(X11)
        ret = _grab_media_key();
-#else
-       ret = 0;
-#endif
        if (ret) {
                LOGE("reserve media key error [%d]", ret);
                return MEDIA_KEY_ERROR_OPERATION_FAILED;
@@ -227,11 +254,8 @@ int media_key_release(void)
                LOGI("media key is not reserved");
                return MEDIA_KEY_ERROR_NONE;
        }
-#if defined(X11)
+
        ret = _ungrab_media_key();
-#else
-       ret = 0;
-#endif
        if (ret) {
                LOGE("release media key error [%d]", ret);
                return MEDIA_KEY_ERROR_OPERATION_FAILED;