#include <string.h>
#include <stdlib.h>
-#if defined(WAYLAND)
#include <Ecore_Wayland.h>
#include <wayland-client.h>
#include <wayland-tbm-client.h>
#include <tizen-extension-client-protocol.h>
-#elif defined(X11)
-#include <X11/Xatom.h>
-#include <X11/Xlib.h>
-#include <Ecore_X.h>
-#endif
#include <Ecore.h>
#include <Ecore_Evas.h>
Ecore_Event_Handler *hshow;
Ecore_Event_Handler *hhide;
Ecore_Event_Handler *hvchange;
-#if defined(WAYLAND)
Ecore_Event_Handler *hlower;
-#endif
Ecore_Event_Handler *hcmsg; /* WM_ROTATE */
Ecore_Timer *mftimer; /* Ecore Timer for memory flushing */
struct win_node {
unsigned int win;
-#if defined(WAYLAND)
unsigned int surf;
-#endif
bool bfobscured;
};
-#if defined(X11)
-static struct ui_wm_rotate wm_rotate;
-#endif
static Eina_Bool __visibility_cb(void *data, int type, void *event);
static GSList *g_winnode_list;
_DBG("[APP %d] __appcore_efl_memory_flush_cb()", _pid);
elm_cache_all_flush();
}
-#if defined(WAYLAND)
static void wl_raise_win(void)
{
Ecore_Wl_Window *win;
}
}
-#endif
static void __do_app(enum app_event event, void *data, bundle * b)
{
}
if (event == AE_RAISE) {
-#if defined(X11)
- x_raise_win(getpid());
-#elif defined(WAYLAND)
wl_raise_win();
-#endif
return;
}
if (event == AE_LOWER) {
-#if defined(X11)
- x_pause_win(getpid());
-#elif defined(WAYLAND)
wl_pause_win();
-#endif
return;
}
if (!bg_launch || strcmp(bg_launch, "enable"))
__unset_bg_state();
}
-#ifdef X11
- x_raise_win(getpid());
-#else
wl_raise_win();
-#endif
}
LOG(LOG_DEBUG, "LAUNCH", "[%s:Application:reset:done]",
ui->name);
return NULL;
}
-#if defined(X11)
-static bool __add_win(unsigned int win)
-{
- struct win_node *t;
- GSList *f;
-
- _DBG("[EVENT_TEST][EVENT] __add_win WIN:%x\n", win);
-
- f = __find_win(win);
- if (f) {
- errno = ENOENT;
- _DBG("[EVENT_TEST][EVENT] ERROR There is already window : %x \n", win);
- return FALSE;
- }
-
- t = calloc(1, sizeof(struct win_node));
- if (t == NULL)
- return FALSE;
-
- t->win = win;
- t->bfobscured = FALSE;
-
- g_winnode_list = g_slist_append(g_winnode_list, t);
-
- return TRUE;
-}
-#elif defined(WAYLAND)
static bool __add_win(unsigned int win, unsigned int surf)
{
struct win_node *t;
return TRUE;
}
-#endif
static bool __delete_win(unsigned int win)
{
return TRUE;
}
-#if defined(X11)
-static bool __update_win(unsigned int win, bool bfobscured)
-{
- GSList *f;
- struct win_node *t;
-
- _DBG("[EVENT_TEST][EVENT] __update_win WIN:%x fully_obscured %d\n", win,
- bfobscured);
-
- f = __find_win(win);
- if (!f) {
- errno = ENOENT;
- _DBG("[EVENT_TEST][EVENT] ERROR There is no window : %x \n", win);
- return FALSE;
- }
-
- t = (struct win_node *)f->data;
- t->win = win;
- t->bfobscured = bfobscured;
-
- return TRUE;
-}
-#elif defined(WAYLAND)
static bool __update_win(unsigned int win, unsigned int surf, bool bfobscured)
{
GSList *f;
return TRUE;
}
-#endif
-
-/* WM_ROTATE */
-#ifdef X11
-static Ecore_X_Atom _WM_WINDOW_ROTATION_SUPPORTED = 0;
-static Ecore_X_Atom _WM_WINDOW_ROTATION_CHANGE_REQUEST = 0;
-
-static int __check_wm_rotation_support(void)
-{
- _DBG("Disable window manager rotation");
- return -1;
-
- Ecore_X_Window root, win, win2;
- int ret;
-
- if (!_WM_WINDOW_ROTATION_SUPPORTED) {
- _WM_WINDOW_ROTATION_SUPPORTED =
- ecore_x_atom_get("_E_WINDOW_ROTATION_SUPPORTED");
- }
-
- if (!_WM_WINDOW_ROTATION_CHANGE_REQUEST) {
- _WM_WINDOW_ROTATION_CHANGE_REQUEST =
- ecore_x_atom_get("_E_WINDOW_ROTATION_CHANGE_REQUEST");
- }
-
- root = ecore_x_window_root_first_get();
- ret = ecore_x_window_prop_xid_get(root,
- _WM_WINDOW_ROTATION_SUPPORTED,
- ECORE_X_ATOM_WINDOW,
- &win, 1);
- if ((ret == 1) && (win)) {
- ret = ecore_x_window_prop_xid_get(win,
- _WM_WINDOW_ROTATION_SUPPORTED,
- ECORE_X_ATOM_WINDOW,
- &win2, 1);
- if ((ret == 1) && (win2 == win))
- return 0;
- }
-
- return -1;
-}
-
-static void __set_wm_rotation_support(unsigned int win, unsigned int set)
-{
- GSList *iter = NULL;
- struct win_node *entry = NULL;
-
- if (win == 0) {
- for (iter = g_winnode_list; iter != NULL; iter = g_slist_next(iter)) {
- entry = iter->data;
- if (entry->win) {
- ecore_x_window_prop_card32_set(entry->win,
- _WM_WINDOW_ROTATION_SUPPORTED,
- &set, 1);
- }
- }
- } else {
- ecore_x_window_prop_card32_set(win,
- _WM_WINDOW_ROTATION_SUPPORTED,
- &set, 1);
- }
-}
-#endif
static Eina_Bool __show_cb(void *data, int type, void *event)
{
-#if defined(WAYLAND)
Ecore_Wl_Event_Window_Show *ev;
ev = event;
else
__update_win((unsigned int)ev->win, (unsigned int)ev->data[0], FALSE);
-#elif defined(X11)
- Ecore_X_Event_Window_Show *ev;
-
- ev = event;
-
- _DBG("[EVENT_TEST][EVENT] GET SHOW EVENT!!!. WIN:%x\n", ev->win);
-
- if (!__find_win((unsigned int)ev->win)) {
- /* WM_ROTATE */
- if ((priv.wm_rot_supported) && (1 == priv.rot_started))
- __set_wm_rotation_support(ev->win, 1);
- __add_win((unsigned int)ev->win);
- } else {
- __update_win((unsigned int)ev->win, FALSE);
- }
-#endif
appcore_group_attach();
return ECORE_CALLBACK_RENEW;
static Eina_Bool __hide_cb(void *data, int type, void *event)
{
-#if defined(WAYLAND)
Ecore_Wl_Event_Window_Hide *ev;
-#elif defined(X11)
- Ecore_X_Event_Window_Hide *ev;
-#endif
int bvisibility = 0;
ev = event;
return ECORE_CALLBACK_RENEW;
}
-#if defined(WAYLAND)
static Eina_Bool __lower_cb(void *data, int type, void *event)
{
Ecore_Wl_Event_Window_Lower *ev;
appcore_group_lower();
return ECORE_CALLBACK_RENEW;
}
-#endif
static Eina_Bool __visibility_cb(void *data, int type, void *event)
{
-#if defined(WAYLAND)
Ecore_Wl_Event_Window_Visibility_Change *ev;
int bvisibility = 0;
ev = event;
__update_win((unsigned int)ev->win, 0, ev->fully_obscured);
-#elif defined(X11)
- Ecore_X_Event_Window_Visibility_Change *ev;
- int bvisibility = 0;
-
- ev = event;
-
- __update_win((unsigned int)ev->win, ev->fully_obscured);
-#endif
bvisibility = __check_visible();
_DBG("bvisibility %d, b_active %d", bvisibility, b_active);
}
-#if defined(X11)
-/* WM_ROTATE */
-static Eina_Bool __cmsg_cb(void *data, int type, void *event)
-{
- struct ui_priv *ui = (struct ui_priv *)data;
- Ecore_X_Event_Client_Message *e = event;
-
- if (!ui)
- return ECORE_CALLBACK_PASS_ON;
-
- if (e->format != 32)
- return ECORE_CALLBACK_PASS_ON;
-
- if (e->message_type == _WM_WINDOW_ROTATION_CHANGE_REQUEST) {
- if ((ui->wm_rot_supported == 0)
- || (ui->rot_started == 0)
- || (ui->rot_cb == NULL)) {
- return ECORE_CALLBACK_PASS_ON;
- }
-
- enum appcore_rm rm;
- switch (e->data.l[1]) {
- case 0:
- rm = APPCORE_RM_PORTRAIT_NORMAL;
- break;
- case 90:
- rm = APPCORE_RM_LANDSCAPE_REVERSE;
- break;
- case 180:
- rm = APPCORE_RM_PORTRAIT_REVERSE;
- break;
- case 270:
- rm = APPCORE_RM_LANDSCAPE_NORMAL;
- break;
- default:
- rm = APPCORE_RM_UNKNOWN;
- break;
- }
-
- ui->rot_mode = rm;
-
- if (APPCORE_RM_UNKNOWN != rm)
- ui->rot_cb((void *)&rm, rm, ui->rot_cb_data);
- }
-
- return ECORE_CALLBACK_PASS_ON;
-}
-#endif
-
static void __add_climsg_cb(struct ui_priv *ui)
{
_ret_if(ui == NULL);
-#if defined(WAYLAND)
ui->hshow =
ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __show_cb, ui);
ui->hhide =
ui->hlower =
ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER,
__lower_cb, ui);
-#elif defined(X11)
- ui->hshow =
- ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, __show_cb, ui);
- ui->hhide =
- ecore_event_handler_add(ECORE_X_EVENT_WINDOW_HIDE, __hide_cb, ui);
- ui->hvchange =
- ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE,
- __visibility_cb, ui);
-
- /* Add client message callback for WM_ROTATE */
- if (!__check_wm_rotation_support()) {
- ui->hcmsg = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
- __cmsg_cb, ui);
- ui->wm_rot_supported = 1;
- appcore_set_wm_rotation(&wm_rotate);
- }
-#endif
}
static int __before_loop(struct ui_priv *ui, int *argc, char ***argv)
ecore_event_handler_del(ui->hhide);
if (ui->hvchange)
ecore_event_handler_del(ui->hvchange);
-#if defined(WAYLAND)
if (ui->hlower)
ecore_event_handler_del(ui->hlower);
-#endif
__appcore_timer_del(ui);
memset(ui, 0, sizeof(struct ui_priv));
}
-#if defined(X11)
-/* WM_ROTATE */
-static int __wm_set_rotation_cb(int (*cb) (void *event_info, enum appcore_rm, void *), void *data)
-{
- if (cb == NULL) {
- errno = EINVAL;
- return -1;
- }
-
- if ((priv.wm_rot_supported) && (0 == priv.rot_started))
- __set_wm_rotation_support(0, 1);
-
- priv.rot_cb = cb;
- priv.rot_cb_data = data;
- priv.rot_started = 1;
-
- return 0;
-}
-
-static int __wm_unset_rotation_cb(void)
-{
- if ((priv.wm_rot_supported) && (1 == priv.rot_started))
- __set_wm_rotation_support(0, 0);
-
- priv.rot_cb = NULL;
- priv.rot_cb_data = NULL;
- priv.rot_started = 0;
-
- return 0;
-}
-
-static int __wm_get_rotation_state(enum appcore_rm *curr)
-{
- if (curr == NULL) {
- errno = EINVAL;
- return -1;
- }
-
- *curr = priv.rot_mode;
-
- return 0;
-}
-
-static int __wm_pause_rotation_cb(void)
-{
- if ((priv.rot_started == 1) && (priv.wm_rot_supported))
- __set_wm_rotation_support(0, 0);
-
- priv.rot_started = 0;
-
- return 0;
-}
-
-static int __wm_resume_rotation_cb(void)
-{
- if ((priv.rot_started == 0) && (priv.wm_rot_supported))
- __set_wm_rotation_support(0, 1);
-
- priv.rot_started = 1;
-
- return 0;
-}
-
-static struct ui_wm_rotate wm_rotate = {
- __wm_set_rotation_cb,
- __wm_unset_rotation_cb,
- __wm_get_rotation_state,
- __wm_pause_rotation_cb,
- __wm_resume_rotation_cb
-};
-#endif
-
EXPORT_API int appcore_efl_init(const char *name, int *argc, char ***argv,
struct appcore_ops *ops)
{
return 0;
}
-#if defined(WAYLAND)
EXPORT_API unsigned int appcore_get_main_surface(void)
{
struct win_node *entry = NULL;
return 0;
}
-#endif
tizen_profile_t _get_tizen_profile()
{