Always on display 44/160344/7
authorPawel Kurowski <p.kurowski2@samsung.com>
Wed, 15 Nov 2017 12:14:26 +0000 (13:14 +0100)
committerLukasz Oleksak <l.oleksak@samsung.com>
Thu, 16 Nov 2017 14:49:36 +0000 (14:49 +0000)
Screen won't be dimmed when Universal Switch window exist.

Asumption:
Window Manager handles EFL_UTIL_SCREEN_MODE_ALWAYS_ON properly

Change-Id: I5de38f8e9a194b847a183979a170ad8bf6e7f1a9

org.tizen.universal-switch.xml
src/Window.cpp
src/Window.hpp

index 5911b7d..3557641 100644 (file)
@@ -19,6 +19,7 @@
         <privilege>http://tizen.org/privilege/volume.set</privilege>
         <privilege>http://tizen.org/privilege/screenshot</privilege>
         <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        <privilege>http://tizen.org/privilege/display</privilege>
     </privileges>
 
 </manifest>
index 968bb03..e3c4a78 100644 (file)
@@ -20,7 +20,7 @@
 #include "Ecore_Wayland.h"
 
 Window::Window()
-       : handler(nullptr, evas_object_del), screenWidth(0), screenHeight(0)
+       : handler(nullptr, removeHandler), screenWidth(0), screenHeight(0)
 {
        DEBUG("adding window");
        auto windowHandler = elm_win_add(NULL, "universal-switch", ELM_WIN_NOTIFICATION);
@@ -44,6 +44,11 @@ Window::Window()
        handler.reset(windowHandler);
        ecore_wl_window_input_region_set(waylandWindow, 0, 0, 0, 0);
        ecore_wl_window_focus_skip_set(waylandWindow, EINA_TRUE);
+
+       auto status = efl_util_set_window_screen_mode(windowHandler, EFL_UTIL_SCREEN_MODE_ALWAYS_ON);
+       if (status)
+               ERROR("Display mode cannot be set %d", status);
+
        quickpanel = std::make_unique<Quickpanel>(windowHandler);
 }
 
@@ -57,6 +62,21 @@ Evas_Object *Window::getHandler()
        return handler.get();
 }
 
+void Window::removeHandler(Evas_Object *handler)
+{
+       DEBUG("Removing window");
+
+       /**
+        * evas_object_del is not enough to restore EFL_UTIL_SCREEN_MODE_DEFAULT, event won't be noticed by screen manager
+        * bug in efl_util_set_window_screen_mode implementation requires setting default mode on display on window closure
+        */
+       auto status = efl_util_set_window_screen_mode(handler, EFL_UTIL_SCREEN_MODE_DEFAULT);
+       if (status)
+               ERROR("Display mode cannot be set %d", status);
+
+       evas_object_del(handler);
+}
+
 Rectangle Window::getDimensions() const
 {
        return {{0, 0}, {screenWidth, screenHeight}};
index 3d0368e..7a59b59 100644 (file)
@@ -36,6 +36,8 @@ public:
        void bringToFront();
 
 private:
+       static void removeHandler(Evas_Object *handler);
+
        std::unique_ptr<Evas_Object, void(*)(Evas_Object *)> handler;
        Ecore_Wl_Window *waylandWindow;
        int screenWidth;