ecore_wayland: added feature for handling indicator 70/81570/3 accepted/tizen/common/20160804.174451 accepted/tizen/ivi/20160804.081452 accepted/tizen/mobile/20160804.081544 accepted/tizen/tv/20160804.081410 accepted/tizen/wearable/20160804.081229 submit/tizen/20160803.115336
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 27 Jul 2016 06:09:45 +0000 (15:09 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 3 Aug 2016 11:46:24 +0000 (04:46 -0700)
Change-Id: Iba6b112c38da173f3a635dd4421b76d40d4d54ee

src/lib/ecore_wayland/Ecore_Wayland.h
src/lib/ecore_wayland/ecore_wl.c
src/lib/ecore_wayland/ecore_wl_private.h
src/lib/ecore_wayland/ecore_wl_window.c

index 4d652c8..5a26384 100644 (file)
@@ -87,6 +87,7 @@ typedef struct _Ecore_Wl_Event_Effect Ecore_Wl_Event_Effect_End;
 typedef struct _Ecore_Wl_Display Ecore_Wl_Display;
 typedef struct _Ecore_Wl_Event_Global Ecore_Wl_Event_Global;
 typedef struct _Ecore_Wl_Event_Keymap_Update Ecore_Wl_Event_Keymap_Update;
+typedef struct _Ecore_Wl_Event_Indicator_Flick Ecore_Wl_Event_Indicator_Flick;
 
 struct _Ecore_Wl_Event_Global
 {
@@ -166,7 +167,14 @@ enum _Ecore_Wl_Indicator_Opacity_Mode
    ECORE_WL_INDICATOR_OPACITY_UNKNOWN = 0,
    ECORE_WL_INDICATOR_OPAQUE,
    ECORE_WL_INDICATOR_TRANSLUCENT,
-   ECORE_WL_INDICATOR_TRANSPARENT
+   ECORE_WL_INDICATOR_TRANSPARENT,
+   ECORE_WL_INDICATOR_BG_TRANSPARENT,
+};
+
+enum _Ecore_Wl_Indicator_Visible_Type
+{
+   ECORE_WL_INDICATOR_VISIBLE_TYPE_HIDDEN = 0,
+   ECORE_WL_INDICATOR_VISIBLE_TYPE_SHOWN,
 };
 
 enum _Ecore_Wl_Window_Stack_Mode
@@ -184,6 +192,7 @@ typedef enum _Ecore_Wl_Virtual_Keyboard_State Ecore_Wl_Virtual_Keyboard_State;
 typedef enum _Ecore_Wl_Indicator_State Ecore_Wl_Indicator_State;
 typedef enum _Ecore_Wl_Clipboard_State Ecore_Wl_Clipboard_State;
 typedef enum _Ecore_Wl_Indicator_Opacity_Mode Ecore_Wl_Indicator_Opacity_Mode;
+typedef enum _Ecore_Wl_Indicator_Visible_Type Ecore_Wl_Indicator_Visible_Type;
 typedef enum _Ecore_Wl_Window_Stack_Mode Ecore_Wl_Window_Stack_Mode;
 
 /** @since 1.7.6 */
@@ -415,6 +424,12 @@ struct _Ecore_Wl_Event_Effect
    unsigned int type;
 };
 
+struct _Ecore_Wl_Event_Indicator_Flick
+{
+   unsigned int win;
+   int type;
+};
+
 /**
  * @file
  * @brief Ecore functions for dealing with the Wayland window system
@@ -467,6 +482,7 @@ EAPI extern int ECORE_WL_EVENT_EFFECT_END;
 EAPI extern int ECORE_WL_EVENT_GLOBAL_ADDED;
 EAPI extern int ECORE_WL_EVENT_GLOBAL_REMOVED;
 EAPI extern int ECORE_WL_EVENT_KEYMAP_UPDATE;
+EAPI extern int ECORE_WL_EVENT_INDICATOR_FLICK;
 
 /**
  * @defgroup Ecore_Wl_Init_Group Wayland Library Init and Shutdown Functions
@@ -1252,6 +1268,8 @@ EAPI void ecore_wl_window_indicator_state_set(Ecore_Wl_Window *win, Ecore_Wl_Ind
 EAPI Ecore_Wl_Indicator_State ecore_wl_window_indicator_state_get(Ecore_Wl_Window *win);
 EAPI void ecore_wl_window_indicator_opacity_set(Ecore_Wl_Window *win, Ecore_Wl_Indicator_Opacity_Mode mode);
 EAPI Ecore_Wl_Indicator_Opacity_Mode ecore_wl_window_indicator_opacity_get(Ecore_Wl_Window *win);
+EAPI void ecore_wl_indicator_visible_type_set(Ecore_Wl_Window *win, Ecore_Wl_Indicator_Visible_Type type);
+EAPI Ecore_Wl_Indicator_Visible_Type ecore_wl_indicator_visible_type_get(Ecore_Wl_Window *win);
 
 EAPI void ecore_wl_window_clipboard_geometry_set(Ecore_Wl_Window *win, int x, int y, int w, int h);
 EAPI Eina_Bool ecore_wl_window_clipboard_geometry_get(Ecore_Wl_Window *win, int *x, int *y, int *w, int *h);
index a6180b3..88660b0 100644 (file)
@@ -59,6 +59,7 @@ static void _ecore_wl_window_conformant_area_send(Ecore_Wl_Window *win, uint32_t
 static void _ecore_wl_cb_active_angle(void *data EINA_UNUSED, struct tizen_policy_ext *tizen_policy_ext EINA_UNUSED, uint32_t angle);
 static void _ecore_wl_cb_effect_start(void *data EINA_UNUSED, struct tizen_effect *tizen_effect EINA_UNUSED, struct wl_surface *surface_resource, unsigned int type);
 static void _ecore_wl_cb_effect_end(void *data EINA_UNUSED, struct tizen_effect *tizen_effect EINA_UNUSED, struct wl_surface *surface_resource, unsigned int type);
+static void _ecore_wl_cb_indicator_flick(void *data EINA_UNUSED, struct tizen_indicator *tizen_indicator EINA_UNUSED, struct wl_surface *surface_resource, int type);
 static void _ecore_wl_log_cb_print(const char *format, va_list args);
 /* local variables */
 static int _ecore_wl_init_count = 0;
@@ -123,6 +124,11 @@ static const struct tizen_effect_listener _ecore_tizen_effect_listener =
    _ecore_wl_cb_effect_end,
 };
 
+static const struct tizen_indicator_listener _ecore_tizen_indicator_listener =
+{
+   _ecore_wl_cb_indicator_flick,
+};
+
 static void
 xdg_shell_ping(void *data EINA_UNUSED, struct xdg_shell *shell, uint32_t serial)
 {
@@ -181,6 +187,8 @@ EAPI int ECORE_WL_EVENT_EFFECT_END = 0;
 EAPI int ECORE_WL_EVENT_GLOBAL_ADDED = 0;
 EAPI int ECORE_WL_EVENT_GLOBAL_REMOVED = 0;
 EAPI int ECORE_WL_EVENT_KEYMAP_UPDATE = 0;
+EAPI int ECORE_WL_EVENT_INDICATOR_FLICK = 0;
+
 
 static void
 _ecore_wl_init_callback(void *data, struct wl_callback *callback, uint32_t serial EINA_UNUSED)
@@ -273,6 +281,7 @@ ecore_wl_init(const char *name)
         ECORE_WL_EVENT_GLOBAL_ADDED = ecore_event_type_new();
         ECORE_WL_EVENT_GLOBAL_REMOVED = ecore_event_type_new();
         ECORE_WL_EVENT_KEYMAP_UPDATE = ecore_event_type_new();
+        ECORE_WL_EVENT_INDICATOR_FLICK = ecore_event_type_new();
      }
 
    wl_log_set_handler_client(_ecore_wl_log_cb_print);
@@ -701,6 +710,8 @@ _ecore_wl_shutdown(Eina_Bool close)
 //
         if (_ecore_wl_disp->wl.tz_effect)
           tizen_effect_destroy(_ecore_wl_disp->wl.tz_effect);
+        if (_ecore_wl_disp->wl.tz_indicator)
+          tizen_indicator_destroy(_ecore_wl_disp->wl.tz_indicator);
         if (_ecore_wl_disp->cursor_theme)
           wl_cursor_theme_destroy(_ecore_wl_disp->cursor_theme);
         if (_ecore_wl_disp->wl.display)
@@ -987,6 +998,13 @@ _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned in
         if (ewd->wl.tz_effect)
           tizen_effect_add_listener(ewd->wl.tz_effect, &_ecore_tizen_effect_listener, ewd->wl.display);
      }
+   else if (!strcmp(interface, "tizen_indicator"))
+     {
+        ewd->wl.tz_indicator =
+          wl_registry_bind(registry, id, &tizen_indicator_interface, 1);
+        if (ewd->wl.tz_indicator)
+          tizen_indicator_add_listener(ewd->wl.tz_indicator, &_ecore_tizen_indicator_listener, ewd->wl.display);
+     }
 
    if ((ewd->wl.compositor) && (ewd->wl.shm) &&
        ((ewd->wl.shell) || (ewd->wl.xdg_shell)))
@@ -1758,6 +1776,26 @@ _ecore_wl_cb_effect_end(void *data EINA_UNUSED, struct tizen_effect *tizen_effec
 }
 
 static void
+_ecore_wl_cb_indicator_flick(void *data EINA_UNUSED, struct tizen_indicator *tizen_indicator EINA_UNUSED, struct wl_surface *surface_resource, int type)
+{
+   struct wl_surface *surface = surface_resource;
+   Ecore_Wl_Window *win = NULL;
+   Ecore_Wl_Event_Indicator_Flick *ev;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+   if (!surface) return;
+   win = ecore_wl_window_surface_find(surface);
+   if (!win) return;
+
+   if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Indicator_Flick)))) return;
+   ev->win = win->id;
+   ev->type = type;
+
+   ecore_event_add(ECORE_WL_EVENT_INDICATOR_FLICK, ev, NULL, NULL);
+}
+
+static void
 _ecore_wl_log_cb_print(const char *format, va_list args)
 {
    char buffer[1024];
index 197ee79..4fa46bb 100644 (file)
@@ -100,6 +100,7 @@ struct _Ecore_Wl_Display
         struct tizen_keyrouter *keyrouter;
         struct tizen_input_device_manager *tz_input_device_manager;
         struct tizen_effect *tz_effect;
+        struct tizen_indicator *tz_indicator;
 
         Eina_Bool prepare_read;
      } wl;
@@ -195,6 +196,7 @@ struct _Ecore_Wl_Window
         int x, y, w, h;
         Ecore_Wl_Indicator_State state;
         Ecore_Wl_Indicator_Opacity_Mode mode;
+        Ecore_Wl_Indicator_Visible_Type type;
      } indicator;
    struct
      {
index 6198428..ea78aa1 100644 (file)
@@ -1876,8 +1876,21 @@ ecore_wl_window_indicator_geometry_get(Ecore_Wl_Window *win, int *x, int *y, int
 EAPI void
 ecore_wl_window_indicator_state_set(Ecore_Wl_Window *win, Ecore_Wl_Indicator_State state)
 {
+   int32_t ind_state;
+
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
    if (!win) return;
+   if (!win->surface) return;
+   if (!_ecore_wl_disp->wl.tz_indicator) return;
+
+   if (state == ECORE_WL_INDICATOR_STATE_ON)
+     ind_state = TIZEN_INDICATOR_STATE_ON;
+   else if (state == ECORE_WL_INDICATOR_STATE_OFF)
+     ind_state = TIZEN_INDICATOR_STATE_OFF;
+   else
+     ind_state = TIZEN_INDICATOR_STATE_UNKNOWN;
+
+   tizen_indicator_set_state(_ecore_wl_disp->wl.tz_indicator, win->surface, ind_state);
 
    win->indicator.state = state;
 }
@@ -1894,8 +1907,37 @@ ecore_wl_window_indicator_state_get(Ecore_Wl_Window *win)
 EAPI void
 ecore_wl_window_indicator_opacity_set(Ecore_Wl_Window *win, Ecore_Wl_Indicator_Opacity_Mode mode)
 {
+   int32_t op_mode;
+
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
    if (!win) return;
+   if (!win->surface) return;
+   if (!_ecore_wl_disp->wl.tz_indicator) return;
+
+   switch (mode)
+     {
+      case ECORE_WL_INDICATOR_OPAQUE:
+        op_mode = TIZEN_INDICATOR_OPACITY_MODE_OPAQUE;
+        break;
+
+      case ECORE_WL_INDICATOR_TRANSLUCENT:
+        op_mode = TIZEN_INDICATOR_OPACITY_MODE_TRANSLUCENT;
+        break;
+
+      case ECORE_WL_INDICATOR_TRANSPARENT:
+        op_mode = TIZEN_INDICATOR_OPACITY_MODE_TRANSPARENT;
+        break;
+
+      case ECORE_WL_INDICATOR_BG_TRANSPARENT:
+        op_mode = TIZEN_INDICATOR_OPACITY_MODE_BG_TRANSPARENT;
+        break;
+
+      default:
+        op_mode = TIZEN_INDICATOR_OPACITY_MODE_OPAQUE;
+        break;
+     }
+
+   tizen_indicator_set_opacity_mode(_ecore_wl_disp->wl.tz_indicator, win->surface, op_mode);
 
    win->indicator.mode = mode;
 }
@@ -1909,6 +1951,35 @@ ecore_wl_window_indicator_opacity_get(Ecore_Wl_Window *win)
    return win->indicator.mode;
 }
 
+EAPI void
+ecore_wl_indicator_visible_type_set(Ecore_Wl_Window *win, Ecore_Wl_Indicator_Visible_Type type)
+{
+   int32_t vis_type;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win) return;
+   if (!win->surface) return;
+   if (!_ecore_wl_disp->wl.tz_indicator) return;
+
+   if (type == ECORE_WL_INDICATOR_VISIBLE_TYPE_SHOWN)
+     vis_type = TIZEN_INDICATOR_VISIBLE_TYPE_SHOWN;
+   else
+     vis_type = TIZEN_INDICATOR_VISIBLE_TYPE_HIDDEN;
+
+   tizen_indicator_set_visible_type(_ecore_wl_disp->wl.tz_indicator, win->surface, vis_type);
+
+   win->indicator.type = type;
+}
+
+EAPI Ecore_Wl_Indicator_Visible_Type
+ecore_wl_indicator_visible_type_get(Ecore_Wl_Window *win)
+{
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win) return EINA_FALSE;
+
+   return win->indicator.type;
+}
+
 void
 ecore_wl_window_clipboard_geometry_set(Ecore_Wl_Window *win, int x, int y, int w, int h)
 {