#include <stdbool.h>
#include <aul.h>
#include <aul_svc.h>
+#include <aul_rpc_port.h>
#include <bundle_internal.h>
#include <ttrace.h>
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;
Ecore_Event_Handler *hvchange;
Ecore_Event_Handler *hlower;
Ecore_Event_Handler *hpvchange;
+ Ecore_Event_Handler *hauxmsg;
} appcore_ui_base_context;
struct win_node {
unsigned int win;
unsigned int surf;
- bool bfobscured;
+ int vis;
};
static GSList *g_winnode_list;
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;
t->win = win;
t->surf = surf;
- t->bfobscured = FALSE;
+ t->vis = VT_NONE;
g_winnode_list = g_slist_append(g_winnode_list, t);
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) {
t->win = win;
if (surf != 0)
t->surf = surf;
- t->bfobscured = bfobscured;
+ if (vis != VT_NONE)
+ t->vis = vis;
return TRUE;
}
_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) {
}
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();
+ }
}
}
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)
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)
__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)
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)
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()
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();
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;
}
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);
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);
}
}
+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)
{
}
}
+ __set_app_id();
+
return appcore_base_init(ops.base, argc, argv, 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;
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;
}