e_tizen_indicator: move the tizen_indicator implementation to e_tizen_indicator 05/320405/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 27 Feb 2025 08:37:47 +0000 (17:37 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 28 Feb 2025 06:11:11 +0000 (15:11 +0900)
move the tizen_indicator code from e_policy_wl to e_tizen_indicator

Change-Id: I3722b74df30fcaa76211967f3555b5f780df23f0

src/bin/Makefile.mk
src/bin/server/e_policy_wl.c
src/bin/server/e_policy_wl_intern.h
src/bin/server/e_server.c
src/bin/server/e_server_intern.h
src/bin/server/e_tizen_indicator.c [new file with mode: 0644]
src/bin/server/e_tizen_indicator_intern.h [new file with mode: 0644]
src/bin/windowmgr/e_policy_intern.h
src/bin/windowmgr/services/e_service_quickpanel.c

index 4a84e4b82b5250dc44856d7865f79dbdd38653d9..99d673fd7a229df0bb58f201414c60e216e2f4f1 100644 (file)
@@ -200,6 +200,7 @@ src/bin/server/e_tizen_launch_effect.c \
 src/bin/server/e_tizen_launch_appinfo.c \
 src/bin/server/e_tizen_display_policy.c \
 src/bin/server/e_tizen_ws_shell_manager.c \
+src/bin/server/e_tizen_indicator.c \
 src/bin/server/e_surface_view.c \
 src/bin/windowmgr/services/e_service_gesture.c \
 src/bin/windowmgr/services/e_service_lockscreen.c \
index a8175bdb27918d9d77626cf7aa7d6b5271497261..a01744d6213b89c3d4110443dbc639ddc46b14ba 100644 (file)
@@ -59,12 +59,6 @@ typedef struct _E_Policy_Wl_Surface
    Eina_Bool           is_background;
 } E_Policy_Wl_Surface;
 
-typedef struct _E_Policy_Wl_Tz_Indicator
-{
-   struct wl_resource *res_tz_indicator;
-   Eina_List          *ec_list;
-} E_Policy_Wl_Tz_Indicator;
-
 typedef struct _E_Policy_Wl_Tz_Clipboard
 {
    struct wl_resource *res_tz_clipboard;
@@ -78,7 +72,6 @@ typedef struct _E_Policy_Wl
 
    Eina_List       *pending_vis;             /* list of clients that have pending visibility change*/
 
-   Eina_List       *tz_indicators;
    Eina_List       *tz_clipboards;           /* list of E_Policy_Wl_Tz_Clipboard */
 } E_Policy_Wl;
 
@@ -97,10 +90,6 @@ static Eina_Inlist *_e_policy_wl_hooks[] =
    [E_POLICY_WL_HOOK_BASE_OUTPUT_RESOLUTION_GET] = NULL,
 };
 
-EINTERN int E_EVENT_POLICY_INDICATOR_STATE_CHANGE = -1;
-EINTERN int E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE = -1;
-EINTERN int E_EVENT_POLICY_INDICATOR_VISIBLE_STATE_CHANGE = -1;
-
 enum _E_Policy_Hint_Type
 {
    E_POLICY_HINT_USER_GEOMETRY = 0,
@@ -2839,258 +2828,6 @@ _e_policy_wl_cb_hook_intercept_show_helper(void *data, E_Client *ec)
    return ret;
 }
 
-// --------------------------------------------------------
-// E_Policy_Wl_Tz_Indicator
-// --------------------------------------------------------
-static E_Policy_Wl_Tz_Indicator *
-_e_policy_wl_tz_indicator_add(struct wl_resource *res_tz_indicator)
-{
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-
-   tz_indicator = E_NEW(E_Policy_Wl_Tz_Indicator, 1);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(tz_indicator, NULL);
-
-   tz_indicator->res_tz_indicator = res_tz_indicator;
-
-   polwl->tz_indicators = eina_list_append(polwl->tz_indicators, tz_indicator);
-
-   return tz_indicator;
-}
-
-static void
-_e_policy_wl_tz_indicator_del(E_Policy_Wl_Tz_Indicator *tz_indicator)
-{
-   EINA_SAFETY_ON_NULL_RETURN(tz_indicator);
-
-   polwl->tz_indicators = eina_list_remove(polwl->tz_indicators, tz_indicator);
-   E_FREE(tz_indicator);
-}
-
-static E_Policy_Wl_Tz_Indicator *
-_e_policy_wl_tz_indicator_get(struct wl_resource *res_tz_indicator)
-{
-   Eina_List *l;
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-
-   EINA_LIST_FOREACH(polwl->tz_indicators, l, tz_indicator)
-     {
-        if (tz_indicator->res_tz_indicator == res_tz_indicator)
-          return tz_indicator;
-     }
-   return NULL;
-}
-
-static E_Policy_Wl_Tz_Indicator *
-_e_policy_wl_tz_indicator_get_from_client(E_Client *ec)
-{
-   Eina_List *l;
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-
-   EINA_LIST_FOREACH(polwl->tz_indicators, l, tz_indicator)
-     {
-        if (eina_list_data_find(tz_indicator->ec_list, ec))
-          return tz_indicator;
-     }
-
-   return NULL;
-}
-
-static Eina_Bool
-_e_policy_wl_tz_indicator_set_client(struct wl_resource *res_tz_indicator, E_Client *ec)
-{
-   E_Policy_Wl_Tz_Indicator *tz_indicator = NULL;
-
-   tz_indicator = _e_policy_wl_tz_indicator_get(res_tz_indicator);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(tz_indicator, EINA_FALSE);
-
-   if (!eina_list_data_find(tz_indicator->ec_list, ec))
-     tz_indicator->ec_list = eina_list_append(tz_indicator->ec_list, ec);
-
-   return EINA_TRUE;
-}
-
-static void
-_e_policy_wl_tz_indicator_unset_client(E_Client *ec)
-{
-   Eina_List *l;
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   EINA_LIST_FOREACH(polwl->tz_indicators, l, tz_indicator)
-     {
-        if (eina_list_data_find(tz_indicator->ec_list, ec))
-          tz_indicator->ec_list = eina_list_remove(tz_indicator->ec_list, ec);
-     }
-}
-
-static void
-_tz_indicator_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tz_indicator)
-{
-   wl_resource_destroy(res_tz_indicator);
-}
-
-static void
-_tz_indicator_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tz_indicator, struct wl_resource *surf, int32_t state)
-{
-   E_Client *ec;
-   E_Indicator_State ind_state;
-
-   ec = e_client_from_surface_resource(surf);
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
-
-   if (state == TIZEN_INDICATOR_STATE_ON)
-     ind_state = E_INDICATOR_STATE_ON;
-   else if (state == TIZEN_INDICATOR_STATE_OFF)
-     ind_state = E_INDICATOR_STATE_OFF;
-   else
-     ind_state = E_INDICATOR_STATE_UNKNOWN;
-
-   ELOGF("TZ_IND", "TZ_STATE:%d, E_STATE:%d", ec, state, ind_state);
-   _e_policy_wl_tz_indicator_set_client(res_tz_indicator, ec);
-   ec->indicator.state = ind_state;
-
-   e_policy_event_simple(ec, E_EVENT_POLICY_INDICATOR_STATE_CHANGE);
-}
-
-static void
-_tz_indicator_cb_opacity_mode_set(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tz_indicator, struct wl_resource *surf, int32_t mode)
-{
-   E_Client *ec;
-   E_Indicator_Opacity_Mode op_mode;
-
-   ec = e_client_from_surface_resource(surf);
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
-
-   switch (mode)
-     {
-      case TIZEN_INDICATOR_OPACITY_MODE_OPAQUE:
-        op_mode = E_INDICATOR_OPACITY_MODE_OPAQUE;
-        break;
-
-      case TIZEN_INDICATOR_OPACITY_MODE_TRANSLUCENT:
-        op_mode = E_INDICATOR_OPACITY_MODE_TRANSLUCENT;
-        break;
-
-      case TIZEN_INDICATOR_OPACITY_MODE_TRANSPARENT:
-        op_mode = E_INDICATOR_OPACITY_MODE_TRANSPARENT;
-        break;
-
-      case TIZEN_INDICATOR_OPACITY_MODE_BG_TRANSPARENT:
-        op_mode = E_INDICATOR_OPACITY_MODE_BG_TRANSPARENT;
-        break;
-
-      default:
-        op_mode = E_INDICATOR_OPACITY_MODE_OPAQUE;
-        break;
-     }
-
-   ELOGF("TZ_IND", "TZ_OP_MODE:%d, E_OP_MODE:%d", ec, mode, op_mode);
-   _e_policy_wl_tz_indicator_set_client(res_tz_indicator, ec);
-
-   if (ec->indicator.opacity_mode == op_mode) return;
-
-   ec->indicator.opacity_mode = op_mode;
-   e_tizen_ws_shell_indicator_srv_property_change_send(ec, ec->e.state.rot.ang.curr);
-
-   e_policy_event_simple(ec, E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE);
-}
-
-static void
-_tz_indicator_cb_visible_type_set(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tz_indicator, struct wl_resource *surf, int32_t vtype)
-{
-   E_Client *ec;
-   E_Indicator_Visible_Type vis_type;
-
-   ec = e_client_from_surface_resource(surf);
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
-
-   if (vtype == TIZEN_INDICATOR_VISIBLE_TYPE_SHOWN)
-     vis_type = E_INDICATOR_VISIBLE_TYPE_SHOWN;
-   else
-     vis_type = E_INDICATOR_VISIBLE_TYPE_HIDDEN;
-
-   ELOGF("TZ_IND", "TZ_VIS_TYPE:%d, E_VIS_TYPE:%d", ec, vtype, vis_type);
-   _e_policy_wl_tz_indicator_set_client(res_tz_indicator, ec);
-   ec->indicator.visible_type = vis_type;
-
-   e_policy_event_simple(ec, E_EVENT_POLICY_INDICATOR_VISIBLE_STATE_CHANGE);
-}
-
-// --------------------------------------------------------
-// tizen_indicator_interface
-// --------------------------------------------------------
-static const struct tizen_indicator_interface _tz_indicator_iface =
-{
-   _tz_indicator_cb_destroy,
-   _tz_indicator_cb_state_set,
-   _tz_indicator_cb_opacity_mode_set,
-   _tz_indicator_cb_visible_type_set,
-};
-
-static void
-_tz_indicator_cb_unbind(struct wl_resource *res_tz_indicator)
-{
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-
-   tz_indicator = _e_policy_wl_tz_indicator_get(res_tz_indicator);
-   EINA_SAFETY_ON_NULL_RETURN(tz_indicator);
-
-   _e_policy_wl_tz_indicator_del(tz_indicator);
-}
-
-static void
-_tz_indicator_cb_bind(struct wl_client *client, void *data EINA_UNUSED, uint32_t ver, uint32_t id)
-{
-   E_Policy_Wl_Tz_Indicator *tz_indicator_pol;
-   struct wl_resource *res_tz_indicator;
-
-   EINA_SAFETY_ON_NULL_GOTO(polwl, err);
-
-   res_tz_indicator = wl_resource_create(client,
-                                         &tizen_indicator_interface,
-                                         ver,
-                                         id);
-   EINA_SAFETY_ON_NULL_GOTO(res_tz_indicator, err);
-
-   tz_indicator_pol = _e_policy_wl_tz_indicator_add(res_tz_indicator);
-   EINA_SAFETY_ON_NULL_GOTO(tz_indicator_pol, err);
-
-   wl_resource_set_implementation(res_tz_indicator,
-                                  &_tz_indicator_iface,
-                                  NULL,
-                                  _tz_indicator_cb_unbind);
-   return;
-
-err:
-   ERR("Could not create tizen_indicator_interface res: %m");
-   wl_client_post_no_memory(client);
-}
-
-EINTERN void
-e_policy_wl_indicator_flick_send(E_Client *ec)
-{
-   E_Comp_Wl_Client_Data *cdata;
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
-   struct wl_resource *surf;
-
-   tz_indicator = _e_policy_wl_tz_indicator_get_from_client(ec);
-   EINA_SAFETY_ON_NULL_RETURN(tz_indicator);
-
-   cdata = e_client_cdata_get(ec);
-   if (cdata)
-     surf = cdata->surface;
-   else
-     surf = NULL;
-
-   ELOGF("TZ_IND", "SEND FLICK EVENT", ec);
-   tizen_indicator_send_flick(tz_indicator->res_tz_indicator, surf, 0);
-}
-
-
 // --------------------------------------------------------
 // E_Policy_Wl_Tz_Clipboard
 // --------------------------------------------------------
@@ -3539,7 +3276,7 @@ e_policy_wl_client_del(E_Client *ec)
    if (!ec->pixmap) return;
 
    e_policy_wl_pixmap_del(ec->pixmap);
-   _e_policy_wl_tz_indicator_unset_client(ec);
+
    _e_policy_wl_tz_clipboard_unset_client(ec);
 
    polwl->pending_vis = eina_list_remove(polwl->pending_vis, ec);
@@ -3660,14 +3397,6 @@ e_policy_wl_init(void)
    EINA_SAFETY_ON_NULL_GOTO(global, err);
    polwl->globals = eina_list_append(polwl->globals, global);
 
-   global = wl_global_create(comp_wl->wl.disp,
-                             &tizen_indicator_interface,
-                             1,
-                             NULL,
-                             _tz_indicator_cb_bind);
-   EINA_SAFETY_ON_NULL_GOTO(global, err);
-   polwl->globals = eina_list_append(polwl->globals, global);
-
    global = wl_global_create(comp_wl->wl.disp,
                              &tizen_clipboard_interface,
                              2,
@@ -3686,10 +3415,6 @@ e_policy_wl_init(void)
    E_LIST_HOOK_APPEND(polwl_hooks_ec, E_CLIENT_HOOK_RESIZE_END, _e_policy_wl_client_cb_resize_end, NULL);
    E_LIST_HOOK_APPEND(polwl_hooks_ec, E_CLIENT_HOOK_MOVE_END, _e_policy_wl_client_cb_move_end, NULL);
 
-   E_EVENT_POLICY_INDICATOR_STATE_CHANGE = ecore_event_type_new();
-   E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE = ecore_event_type_new();
-   E_EVENT_POLICY_INDICATOR_VISIBLE_STATE_CHANGE = ecore_event_type_new();
-
    e_service_softkey_client_remove_handler_add();
 
    e_tizen_display_policy_init(comp_wl->wl.disp);
@@ -3711,7 +3436,6 @@ err:
 EINTERN void
 e_policy_wl_shutdown(void)
 {
-   E_Policy_Wl_Tz_Indicator *tz_indicator;
    struct wl_global *global;
 
    e_policy_display_shutdown();
@@ -3728,12 +3452,6 @@ e_policy_wl_shutdown(void)
 
    polwl->pending_vis = eina_list_free(polwl->pending_vis);
 
-   EINA_LIST_FREE(polwl->tz_indicators, tz_indicator)
-     {
-        eina_list_free(tz_indicator->ec_list);
-        wl_resource_destroy(tz_indicator->res_tz_indicator);
-     }
-
    EINA_LIST_FREE(polwl->globals, global)
      wl_global_destroy(global);
 
index b80544d326c61f12c7afcea9bc43b30a954d01bc..ab8431503b310b8c3c3d62b04eadd4bbe6b7a307 100644 (file)
@@ -27,7 +27,6 @@ EINTERN void      e_policy_wl_notification_level_fetch(E_Client *ec);
 EINTERN void      e_policy_wl_aux_hint_init(void);
 EINTERN void      e_policy_wl_aux_message_send(E_Client *ec, const char *key, const char *val, Eina_List *options);
 EINTERN void      e_policy_wl_aux_hint_apply(E_Client *ec);
-EINTERN void      e_policy_wl_indicator_flick_send(E_Client *ec);
 EINTERN void      e_policy_wl_clipboard_data_selected_send(E_Client *ec);
 EINTERN void      e_policy_wl_stack_changed_send(E_Client *ec);
 EINTERN void      e_policy_wl_generate_request(E_Client *ec, E_Policy_Wl_Gen_Request type);
index 956e89606caa0afec7bf58b36495192b9c349100..b34d06c59cbf04328700b90bdecf51effa633c36 100644 (file)
@@ -27,6 +27,7 @@
 #include "e_tizen_launch_effect_intern.h"
 #include "e_tizen_launch_appinfo_intern.h"
 #include "e_tizen_ws_shell_manager_intern.h"
+#include "e_tizen_indicator_intern.h"
 
 typedef struct _E_Server E_Server;
 
@@ -66,6 +67,7 @@ struct _E_Server
         E_Tizen_Launch_Effect *tizen_launch_effect;
         E_Tizen_Launch_Appinfo *tizen_launch_appinfo;
         E_Tizen_Ws_Shell_Manager *tizen_ws_shell_manager;
+        E_Tizen_Indicator *tizen_indicator;
     } handles; // feature handles
 };
 
@@ -138,6 +140,7 @@ e_server_init(void)
    e_server_feature_register(E_SERVER_FEATURE_TIZEN_LAUNCH_EFFECT, e_tizen_launch_effect_init(comp_wl->wl.disp));
    e_server_feature_register(E_SERVER_FEATURE_TIZEN_LAUNCH_APPINFO, e_tizen_launch_appinfo_init(comp_wl->wl.disp));
    e_server_feature_register(E_SERVER_FEATURE_TIZEN_WS_SHELL_MANAGER, e_tizen_ws_shell_manager_init(comp_wl->wl.disp));
+   e_server_feature_register(E_SERVER_FEATURE_TIZEN_INDICATOR, e_tizen_indicator_init(comp_wl->wl.disp));
 
    return EINA_TRUE;
 }
@@ -145,6 +148,7 @@ e_server_init(void)
 EINTERN void
 e_server_shutdown(void)
 {
+   e_tizen_indicator_shutdown();
    e_tizen_ws_shell_shutdown();
    e_tizen_launch_appinfo_shutdown();
    e_tizen_launch_effect_shutdown();
@@ -271,6 +275,9 @@ e_server_feature_register(E_SERVER_FEATURE feature, void *handle)
        case E_SERVER_FEATURE_TIZEN_WS_SHELL_MANAGER:
          g_server->handles.tizen_ws_shell_manager = handle;
          break;
+       case E_SERVER_FEATURE_TIZEN_INDICATOR:
+         g_server->handles.tizen_indicator = handle;
+         break;
        default:
          ERR("Unknown feature(%d) and handle(%p)", feature, handle);
          break;
@@ -370,6 +377,9 @@ e_server_feature_handle_get(E_SERVER_FEATURE feature)
        case E_SERVER_FEATURE_TIZEN_WS_SHELL_MANAGER:
          handle = g_server->handles.tizen_ws_shell_manager;
          break;
+       case E_SERVER_FEATURE_TIZEN_INDICATOR:
+         handle = g_server->handles.tizen_indicator;
+         break;
        default:
          ERR("Unknown feature(%d)", feature);
          break;
index d8a414f41ae38137dd5952344d1340b6e1683b80..460e90f6fd8fee1a4881ca38f515d2235e387e79 100644 (file)
@@ -32,6 +32,7 @@ typedef enum _E_SERVER_FEATURE {
     E_SERVER_FEATURE_TIZEN_LAUNCH_EFFECT,
     E_SERVER_FEATURE_TIZEN_LAUNCH_APPINFO,
     E_SERVER_FEATURE_TIZEN_WS_SHELL_MANAGER,
+    E_SERVER_FEATURE_TIZEN_INDICATOR,
     E_SERVER_FEATURE_MAX
 } E_SERVER_FEATURE;
 
diff --git a/src/bin/server/e_tizen_indicator.c b/src/bin/server/e_tizen_indicator.c
new file mode 100644 (file)
index 0000000..2c803d0
--- /dev/null
@@ -0,0 +1,325 @@
+#include "e_tizen_indicator_intern.h"
+#include "e_client_intern.h"
+#include "e_policy_intern.h"
+#include "e_tizen_ws_shell_manager_intern.h"
+
+#include <tizen-extension-server-protocol.h>
+
+typedef struct _E_Tizen_Indicator_Client
+{
+   struct wl_resource *indicator_res;
+   Eina_List       *ec_list;
+} E_Tizen_Indicator_Client;
+
+struct _E_Tizen_Indicator
+{
+   struct wl_global *global;
+
+   Eina_List       *indicator_clients;
+};
+
+static E_Tizen_Indicator *g_tizen_indicator = NULL;
+
+static Eina_List *hooks_ec = NULL;
+
+static E_Tizen_Indicator_Client *
+_e_tizen_indicator_client_add(struct wl_resource *indicator_res)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+
+   indicator_client = E_NEW(E_Tizen_Indicator_Client, 1);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(indicator_client, NULL);
+
+   indicator_client->indicator_res = indicator_res;
+
+   g_tizen_indicator->indicator_clients = eina_list_append(g_tizen_indicator->indicator_clients, indicator_client);
+
+   return indicator_client;
+}
+
+static void
+_e_tizen_indicator_client_del(E_Tizen_Indicator_Client *indicator_client)
+{
+   EINA_SAFETY_ON_NULL_RETURN(indicator_client);
+
+   E_FREE(indicator_client);
+}
+
+static E_Tizen_Indicator_Client *
+_e_tizen_indicator_client_get(struct wl_resource *indicator_res)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+   Eina_List *l;
+
+   EINA_LIST_FOREACH(g_tizen_indicator->indicator_clients, l, indicator_client)
+     {
+        if (indicator_client->indicator_res == indicator_res)
+          return indicator_client;
+     }
+   return NULL;
+}
+
+static E_Tizen_Indicator_Client *
+_e_tizen_indicator_client_get_from_e_client(E_Client *ec)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+   Eina_List *l;
+
+   EINA_LIST_FOREACH(g_tizen_indicator->indicator_clients, l, indicator_client)
+     {
+        if (eina_list_data_find(indicator_client->ec_list, ec))
+          return indicator_client;
+     }
+
+   return NULL;
+}
+
+static Eina_Bool
+_e_tizen_indicator_client_set_e_client(struct wl_resource *res_tz_indicator, E_Client *ec)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+
+   indicator_client = _e_tizen_indicator_client_get(res_tz_indicator);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(indicator_client, EINA_FALSE);
+
+   if (!eina_list_data_find(indicator_client->ec_list, ec))
+     indicator_client->ec_list = eina_list_append(indicator_client->ec_list, ec);
+
+   return EINA_TRUE;
+}
+
+static void
+_e_tizen_indicator_client_unset_e_client(E_Client *ec)
+{
+   Eina_List *l;
+   E_Tizen_Indicator_Client *indicator_client;
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   EINA_LIST_FOREACH(g_tizen_indicator->indicator_clients, l, indicator_client)
+     {
+        if (eina_list_data_find(indicator_client->ec_list, ec))
+          indicator_client->ec_list = eina_list_remove(indicator_client->ec_list, ec);
+     }
+}
+
+static void
+_indicator_client_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *indicator_res)
+{
+   wl_resource_destroy(indicator_res);
+}
+
+static void
+_indicator_client_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl_resource *indicator_res, struct wl_resource *surf, int32_t state)
+{
+   E_Indicator_State ind_state;
+   E_Client *ec;
+
+   ec = e_client_from_surface_resource(surf);
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
+
+   if (state == TIZEN_INDICATOR_STATE_ON)
+     ind_state = E_INDICATOR_STATE_ON;
+   else if (state == TIZEN_INDICATOR_STATE_OFF)
+     ind_state = E_INDICATOR_STATE_OFF;
+   else
+     ind_state = E_INDICATOR_STATE_UNKNOWN;
+
+   ELOGF("TZ_IND", "TZ_STATE:%d, E_STATE:%d", ec, state, ind_state);
+
+   _e_tizen_indicator_client_set_e_client(indicator_res, ec);
+
+   ec->indicator.state = ind_state;
+}
+
+static void
+_indicator_client_cb_opacity_mode_set(struct wl_client *client EINA_UNUSED, struct wl_resource *indicator_res, struct wl_resource *surf, int32_t mode)
+{
+   E_Indicator_Opacity_Mode op_mode;
+   E_Client *ec;
+
+   ec = e_client_from_surface_resource(surf);
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
+
+   switch (mode)
+     {
+      case TIZEN_INDICATOR_OPACITY_MODE_OPAQUE:
+        op_mode = E_INDICATOR_OPACITY_MODE_OPAQUE;
+        break;
+
+      case TIZEN_INDICATOR_OPACITY_MODE_TRANSLUCENT:
+        op_mode = E_INDICATOR_OPACITY_MODE_TRANSLUCENT;
+        break;
+
+      case TIZEN_INDICATOR_OPACITY_MODE_TRANSPARENT:
+        op_mode = E_INDICATOR_OPACITY_MODE_TRANSPARENT;
+        break;
+
+      case TIZEN_INDICATOR_OPACITY_MODE_BG_TRANSPARENT:
+        op_mode = E_INDICATOR_OPACITY_MODE_BG_TRANSPARENT;
+        break;
+
+      default:
+        op_mode = E_INDICATOR_OPACITY_MODE_OPAQUE;
+        break;
+     }
+
+   ELOGF("TZ_IND", "TZ_OP_MODE:%d, E_OP_MODE:%d", ec, mode, op_mode);
+
+   _e_tizen_indicator_client_set_e_client(indicator_res, ec);
+
+   if (ec->indicator.opacity_mode == op_mode) return;
+
+   ec->indicator.opacity_mode = op_mode;
+   e_tizen_ws_shell_indicator_srv_property_change_send(ec, ec->e.state.rot.ang.curr);
+}
+
+static void
+_indicator_client_cb_visible_type_set(struct wl_client *client EINA_UNUSED, struct wl_resource *indicator_res, struct wl_resource *surf, int32_t vtype)
+{
+   E_Indicator_Visible_Type vis_type;
+   E_Client *ec;
+
+   ec = e_client_from_surface_resource(surf);
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec));
+
+   if (vtype == TIZEN_INDICATOR_VISIBLE_TYPE_SHOWN)
+     vis_type = E_INDICATOR_VISIBLE_TYPE_SHOWN;
+   else
+     vis_type = E_INDICATOR_VISIBLE_TYPE_HIDDEN;
+
+   ELOGF("TZ_IND", "TZ_VIS_TYPE:%d, E_VIS_TYPE:%d", ec, vtype, vis_type);
+
+   _e_tizen_indicator_client_set_e_client(indicator_res, ec);
+
+   ec->indicator.visible_type = vis_type;
+}
+
+// --------------------------------------------------------
+// tizen_indicator_interface
+// --------------------------------------------------------
+static const struct tizen_indicator_interface _indicator_client_iface =
+{
+   _indicator_client_cb_destroy,
+   _indicator_client_cb_state_set,
+   _indicator_client_cb_opacity_mode_set,
+   _indicator_client_cb_visible_type_set,
+};
+
+static void
+_indicator_client_cb_unbind(struct wl_resource *indicator_res)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+
+   indicator_client = _e_tizen_indicator_client_get(indicator_res);
+   EINA_SAFETY_ON_NULL_RETURN(indicator_client);
+
+   _e_tizen_indicator_client_del(indicator_client);
+}
+
+static void
+_indicator_client_cb_bind(struct wl_client *client, void *data EINA_UNUSED, uint32_t ver, uint32_t id)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+   struct wl_resource *indicator_res;
+
+   indicator_res = wl_resource_create(client,
+                                         &tizen_indicator_interface,
+                                         ver,
+                                         id);
+   EINA_SAFETY_ON_NULL_GOTO(indicator_res, err);
+
+   indicator_client = _e_tizen_indicator_client_add(indicator_res);
+   EINA_SAFETY_ON_NULL_GOTO(indicator_client, err);
+
+   wl_resource_set_implementation(indicator_res,
+                                  &_indicator_client_iface,
+                                  NULL,
+                                  _indicator_client_cb_unbind);
+   return;
+
+err:
+   ERR("Could not create tizen_indicator_interface res: %m");
+   wl_client_post_no_memory(client);
+}
+
+static void
+_e_tizen_indicator_cb_hook_client_del(void *d EINA_UNUSED, E_Client *ec)
+{
+   _e_tizen_indicator_client_unset_e_client(ec);
+}
+
+EINTERN E_Tizen_Indicator *
+e_tizen_indicator_init(struct wl_display *display)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(display, NULL);
+
+   if (g_tizen_indicator) return g_tizen_indicator;
+
+   g_tizen_indicator = E_NEW(E_Tizen_Indicator, 1);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(g_tizen_indicator, NULL);
+
+   g_tizen_indicator->global = wl_global_create(display,
+                             &tizen_indicator_interface,
+                             1,
+                             NULL,
+                             _indicator_client_cb_bind);
+
+   if (!g_tizen_indicator->global)
+     {
+        ERR("Failed to create tizen_indicator global");
+        E_FREE(g_tizen_indicator);
+        g_tizen_indicator = NULL;
+
+        return NULL;
+     }
+
+   E_CLIENT_HOOK_APPEND(hooks_ec, E_CLIENT_HOOK_DEL, _e_tizen_indicator_cb_hook_client_del, NULL);
+
+   return g_tizen_indicator;
+}
+
+EINTERN void
+e_tizen_indicator_shutdown(void)
+{
+   E_Tizen_Indicator_Client *indicator_client;
+
+   if (!g_tizen_indicator) return;
+
+   EINA_LIST_FREE(g_tizen_indicator->indicator_clients, indicator_client)
+     {
+        wl_resource_destroy(indicator_client->indicator_res);
+     }
+
+   wl_global_destroy(g_tizen_indicator->global);
+
+   E_FREE(g_tizen_indicator);
+   g_tizen_indicator = NULL;
+}
+
+EINTERN void
+e_tizen_indicator_flick_send(E_Client *ec)
+{
+   E_Comp_Wl_Client_Data *cdata;
+   E_Tizen_Indicator_Client *indicator_client;
+   struct wl_resource *surf;
+
+   indicator_client = _e_tizen_indicator_client_get_from_e_client(ec);
+   EINA_SAFETY_ON_NULL_RETURN(indicator_client);
+
+   cdata = e_client_cdata_get(ec);
+   if (cdata)
+     surf = cdata->surface;
+   else
+     surf = NULL;
+
+   ELOGF("TZ_IND", "SEND FLICK EVENT", ec);
+
+   tizen_indicator_send_flick(indicator_client->indicator_res, surf, 0);
+}
diff --git a/src/bin/server/e_tizen_indicator_intern.h b/src/bin/server/e_tizen_indicator_intern.h
new file mode 100644 (file)
index 0000000..5884af8
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef E_TIZEN_INDICATOR_INTERN_H
+#define E_TIZEN_INDICATOR_INTERN_H
+
+#include "e_intern.h"
+
+typedef struct _E_Tizen_Indicator E_Tizen_Indicator;
+
+EINTERN E_Tizen_Indicator *e_tizen_indicator_init(struct wl_display *display);
+EINTERN void               e_tizen_indicator_shutdown(void);
+
+EINTERN void      e_tizen_indicator_flick_send(E_Client *ec);
+
+#endif
\ No newline at end of file
index fa659ee7e5ae15ef1f871f96b44d69f9947e2d55..a6cfe355831ecd076784c9a1af7127c7f6ccc1b5 100644 (file)
@@ -103,10 +103,6 @@ struct _E_Policy_Hook
 EINTERN extern E_Policy *e_policy;
 EINTERN extern E_Policy_System_Info e_policy_system_info;
 
-EINTERN extern int E_EVENT_POLICY_INDICATOR_STATE_CHANGE;
-EINTERN extern int E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE;
-EINTERN extern int E_EVENT_POLICY_INDICATOR_VISIBLE_STATE_CHANGE;
-
 EINTERN int  e_policy_init(void);
 EINTERN int  e_policy_shutdown(void);
 
index c60350f5a1b443a5fbc9ada98d69818be8175d32..c2509acb9233f41a60b91fdf981f7343040cd28b 100644 (file)
@@ -10,6 +10,7 @@
 #include "e_layout_intern.h"
 #include "e_view_intern.h"
 #include "e_view_client_intern.h"
+#include "e_tizen_indicator_intern.h"
 
 #define SMART_NAME            "quickpanel_object"
 #define INTERNAL_ENTRY                       \
@@ -892,7 +893,7 @@ _quickpanel_send_gesture_to_indicator(void)
                {
                   /* cancel touch events sended up to now */
                   e_comp_wl_touch_cancel();
-                  e_policy_wl_indicator_flick_send(focused);
+                  e_tizen_indicator_flick_send(focused);
                   return EINA_TRUE;
                }
           }