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
{
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
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 */
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
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
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);
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;
_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)
{
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)
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);
//
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)
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)))
}
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];
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;
int x, y, w, h;
Ecore_Wl_Indicator_State state;
Ecore_Wl_Indicator_Opacity_Mode mode;
+ Ecore_Wl_Indicator_Visible_Type type;
} indicator;
struct
{
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;
}
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;
}
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)
{