X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fui_base%2Fappcore_ui_base.c;h=eeac2b309ab0e5c58a32828a15b02bcfb0302c18;hb=56f8634f3869c7eb0f5c7d00d2feb868f03b2fdc;hp=8b83a1a5b80c58f75ed735922052a14007f7033c;hpb=b13f41eefaf31996861cefad8c447382e6ee8bc6;p=platform%2Fcore%2Fappfw%2Fapp-core.git diff --git a/src/ui_base/appcore_ui_base.c b/src/ui_base/appcore_ui_base.c index 8b83a1a..eeac2b3 100644 --- a/src/ui_base/appcore_ui_base.c +++ b/src/ui_base/appcore_ui_base.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -61,6 +62,12 @@ enum win_status { WS_RESUME, }; +enum visibility_type { + VT_NONE, + VT_UNOBSCURED, + VT_FULLY_OBSCURED, +}; + typedef struct _appcore_ui_base_context { appcore_ui_base_ops ops; void *data; @@ -78,6 +85,7 @@ typedef struct _appcore_ui_base_context { Ecore_Event_Handler *hvchange; Ecore_Event_Handler *hlower; Ecore_Event_Handler *hpvchange; + Ecore_Event_Handler *hauxmsg; } appcore_ui_base_context; @@ -87,7 +95,7 @@ static bool first_launch = true; struct win_node { unsigned int win; unsigned int surf; - bool bfobscured; + int vis; }; static GSList *g_winnode_list; @@ -263,6 +271,14 @@ static Eina_Bool __stub_pre_visibility_cb(void *data, int type, void *event) return ECORE_CALLBACK_RENEW; } +static Eina_Bool __stub_aux_message_cb(void *data, int type, void *event) +{ + if (__context.ops.window.aux_message) + __context.ops.window.aux_message(type, event, __context.data); + + return ECORE_CALLBACK_RENEW; +} + static void __prepare_to_suspend(void) { int suspend = APPCORE_BASE_SUSPENDED_STATE_WILL_ENTER_SUSPEND; @@ -380,7 +396,7 @@ static bool __add_win(unsigned int win, unsigned int surf) t->win = win; t->surf = surf; - t->bfobscured = FALSE; + t->vis = VT_NONE; g_winnode_list = g_slist_append(g_winnode_list, t); @@ -405,13 +421,13 @@ static bool __delete_win(unsigned int win) return TRUE; } -static bool __update_win(unsigned int win, unsigned int surf, bool bfobscured) +static bool __update_win(unsigned int win, unsigned int surf, int vis) { GSList *f; struct win_node *t; - _DBG("[EVENT_TEST][EVENT] __update_win WIN:%x fully_obscured %d\n", win, - bfobscured); + _DBG("[EVENT_TEST][EVENT] __update_win WIN:%x visibility %d\n", + win, vis); f = __find_win(win); if (!f) { @@ -424,7 +440,8 @@ static bool __update_win(unsigned int win, unsigned int surf, bool bfobscured) t->win = win; if (surf != 0) t->surf = surf; - t->bfobscured = bfobscured; + if (vis != VT_NONE) + t->vis = vis; return TRUE; } @@ -535,10 +552,21 @@ static void __unset_bg_state(void) _DBG("bg state: %d", __context.bg_state); } +static void __set_app_id(void) +{ + if (!tz_policy && __init_wl() < 0) + return; + + tizen_policy_set_appid(tz_policy, getpid(), __context.appid); + wl_display_roundtrip(dsp); + _DBG("set appid: %s", __context.appid); +} + static void __do_start(bundle *b) { const char *bg_launch; const char *below_app; + const char *rpc_port; if (__context.hint & APPCORE_UI_BASE_HINT_WINDOW_STACK_CONTROL) { if (__context.below_app) { @@ -569,8 +597,11 @@ static void __do_start(bundle *b) } if (__context.hint & APPCORE_UI_BASE_HINT_WINDOW_AUTO_CONTROL) { - if (!__context.bg_state) - __raise_win(); + if (!__context.bg_state) { + rpc_port = bundle_get_val(b, AUL_K_RPC_PORT); + if (!rpc_port) + __raise_win(); + } } } @@ -603,7 +634,8 @@ EXPORT_API int appcore_ui_base_on_receive(aul_type type, bundle *b) return 0; } - if (type == AUL_TERMINATE_BGAPP && __context.state != AS_PAUSED) + if ((type == AUL_TERMINATE_BGAPP || type == AUL_TERMINATE_BG_INST) && + __context.state != AS_PAUSED) return 0; if (type == AUL_START) @@ -628,8 +660,10 @@ EXPORT_API int appcore_ui_base_on_receive(aul_type type, bundle *b) break; case AUL_TERMINATE: break; + case AUL_TERMINATE_BG_INST: + case AUL_TERMINATE_INST: case AUL_TERMINATE_BGAPP: - _DBG("[APP %d] is paused. TERMINATE", getpid()); + _DBG("[APP %d] TERMINATE", getpid()); __context.state = AS_DYING; aul_status_update(STATUS_DYING); if (__context.ops.base.exit) @@ -671,6 +705,11 @@ static void __add_ecore_events(void) __stub_pre_visibility_cb, NULL); if (!__context.hpvchange) _ERR("Failed to add ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE event"); + + __context.hauxmsg = ecore_event_handler_add(ECORE_WL2_EVENT_AUX_MESSAGE, + __stub_aux_message_cb, NULL); + if (!__context.hauxmsg) + _ERR("Failed to add ECORE_WL2_EVENT_AUX_MESSAGE event"); } static void __del_ecore_events(void) @@ -699,6 +738,11 @@ static void __del_ecore_events(void) ecore_event_handler_del(__context.hpvchange); __context.hpvchange = NULL; } + + if (__context.hauxmsg) { + ecore_event_handler_del(__context.hauxmsg); + __context.hauxmsg = NULL; + } } EXPORT_API int appcore_ui_base_on_create(void) @@ -766,22 +810,29 @@ static void __group_lower() appcore_ui_base_group_remove(); } -EXPORT_API void appcore_ui_base_group_add() +EXPORT_API int appcore_ui_base_group_add() { static bool attached = false; + int ret; _DBG("__group_attach"); if (attached) - return; + return 0; int wid = __get_main_surface(); if (wid == 0) { _ERR("window wasn't ready"); - return; + return -1; + } + + ret = aul_app_group_set_window(wid); + if (ret < 0) { + _ERR("Failed to set app group window. error(%d)", ret); + return ret; } - aul_app_group_set_window(wid); attached = true; + return 0; } EXPORT_API void appcore_ui_base_group_remove() @@ -807,12 +858,15 @@ EXPORT_API void appcore_ui_base_window_on_show(int type, void *event) return; } - _DBG("[EVENT_TEST][EVENT] GET SHOW EVENT!!!. WIN:%x, %d\n", ev->win, ev->data[0]); + _DBG("[EVENT_TEST][EVENT] GET SHOW EVENT!!!. WIN:%x, %d\n", + ev->win, ev->data[0]); - if (!__find_win((unsigned int)ev->win)) + if (!__find_win((unsigned int)ev->win)) { __add_win((unsigned int)ev->win, (unsigned int)ev->data[0]); - else - __update_win((unsigned int)ev->win, (unsigned int)ev->data[0], FALSE); + } else { + __update_win((unsigned int)ev->win, (unsigned int)ev->data[0], + VT_NONE); + } if (ev->data[0] != 0) __group_attach(); @@ -827,8 +881,8 @@ static bool __check_visible(void) for (iter = g_winnode_list; iter != NULL; iter = g_slist_next(iter)) { entry = iter->data; - _DBG("win : %x obscured : %d\n", entry->win, entry->bfobscured); - if (entry->bfobscured == FALSE) + _DBG("win : %x visibility : %d\n", entry->win, entry->vis); + if (entry->vis == VT_UNOBSCURED) return true; } @@ -871,7 +925,8 @@ EXPORT_API void appcore_ui_base_window_on_visibility(int type, void *event) int bvisibility; ev = event; - __update_win((unsigned int)ev->win, 0, ev->fully_obscured); + __update_win((unsigned int)ev->win, 0, + ev->fully_obscured ? VT_FULLY_OBSCURED : VT_UNOBSCURED); bvisibility = __check_visible(); _DBG("bvisibility %d, w_status %d", bvisibility, w_status); @@ -903,7 +958,7 @@ EXPORT_API void appcore_ui_base_window_on_pre_visibility(int type, void *event) bool bvisibility; if (ev && ev->type == ECORE_WL2_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED) { - __update_win((unsigned int)ev->win, 0, false); + __update_win((unsigned int)ev->win, 0, VT_UNOBSCURED); bvisibility = __check_visible(); _DBG("bvisibility %d, w_status %d", bvisibility, w_status); @@ -915,6 +970,25 @@ EXPORT_API void appcore_ui_base_window_on_pre_visibility(int type, void *event) } } +EXPORT_API void appcore_ui_base_window_on_aux_message(int type, void *event) +{ + Ecore_Wl2_Event_Aux_Message *ev = event; + + if (ev->key && !strcmp(ev->key, "dpms_wm")) { + if (ev->val && !strcmp(ev->val, "on")) { + _DBG("Display state: on"); + appcore_base_set_display_state( + APPCORE_BASE_DISPLAY_STATE_ON); + } else if (ev->val && !strcmp(ev->val, "off")) { + _DBG("Display state: off"); + appcore_base_set_display_state( + APPCORE_BASE_DISPLAY_STATE_OFF); + } else { + _ERR("Unknown state: %s", ev->val); + } + } +} + EXPORT_API int appcore_ui_base_init(appcore_ui_base_ops ops, int argc, char **argv, void *data, unsigned int hint) { @@ -955,6 +1029,8 @@ EXPORT_API int appcore_ui_base_init(appcore_ui_base_ops ops, int argc, char **ar } } + __set_app_id(); + return appcore_base_init(ops.base, argc, argv, data); } @@ -1074,6 +1150,11 @@ static void __window_on_pre_visibility(int type, void *event, void *data) appcore_ui_base_window_on_pre_visibility(type, event); } +static void __window_on_aux_message(int type, void *event, void *data) +{ + appcore_ui_base_window_on_aux_message(type, event); +} + EXPORT_API appcore_ui_base_ops appcore_ui_base_get_default_ops(void) { appcore_ui_base_ops ops; @@ -1096,6 +1177,7 @@ EXPORT_API appcore_ui_base_ops appcore_ui_base_get_default_ops(void) ops.window.lower = __window_on_lower; ops.window.visibility = __window_on_visibility; ops.window.pre_visibility = __window_on_pre_visibility; + ops.window.aux_message = __window_on_aux_message; return ops; }