#include <app_debug.h>
#include <viewmgr.h>
#include <key_define.h>
+#include <Ecore_Wayland.h>
#include "defs.h"
#include "view.h"
struct _appdata {
const char *name;
+
Evas_Object *win;
+ Eina_Bool activated;
Ecore_Event_Handler *key_down;
+ Ecore_Event_Handler *focus_out;
};
static Evas_Object *_add_win(const char *name)
return win;
}
+static void _hide(struct _appdata *ad)
+{
+ viewmgr_hide_view(VIEW_HOME);
+ viewmgr_hide_view(VIEW_RECENT);
+
+ elm_win_iconified_set(ad->win, EINA_TRUE);
+ ad->activated = EINA_FALSE;
+}
+
+static void _show(struct _appdata *ad)
+{
+ elm_win_activate(ad->win);
+ ad->activated = EINA_TRUE;
+
+ viewmgr_push_view(VIEW_HOME);
+}
+
+static Eina_Bool _focus_out(void *data, int type, void *event)
+{
+ if (!data) {
+ _ERR("Invalid argument");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ _hide(data);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
static Eina_Bool _key_down(void *data, int type, void *ei)
{
+ struct _appdata *ad;
Evas_Event_Key_Down *ev;
if (!data || !ei) {
}
ev = ei;
+ ad = data;
if (!strcmp(ev->keyname, KEY_POWER_REMOTE)) {
utils_launch_app(PACKAGE_INFOSQUARE, KEY_INFOSQUARE,
VALUE_INFOSQUARE);
+ } else if (!strcmp(ev->keyname, KEY_HOME)) {
+ if (!ad->activated)
+ _show(ad);
+ } else if (!strcmp(ev->keyname, KEY_BACK) ||
+ !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+ if (ad->activated && viewmgr_active_view_count() == 1 &&
+ viewmgr_get_view_state(VIEW_HOME) ==
+ VIEW_STATE_VISIBLE)
+ _hide(ad);
}
return ECORE_CALLBACK_CANCEL;
elm_win_keygrab_set(data, KEY_POWER_REMOTE, 0, 0, 0,
ELM_WIN_KEYGRAB_EXCLUSIVE);
+ elm_win_keygrab_set(data, KEY_HOME, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE);
return ECORE_CALLBACK_CANCEL;
}
-
static bool _create(void *user_data)
{
struct _appdata *ad;
ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down,
ad);
+ ad->focus_out = ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_OUT,
+ _focus_out, ad);
+
return true;
}
ad = user_data;
if (ad->win) {
- if(ad->key_down)
+ if (ad->key_down)
ecore_event_handler_del(ad->key_down);
+ if (ad->focus_out)
+ ecore_event_handler_del(ad->focus_out);
elm_win_keygrab_unset(ad->win, KEY_POWER_REMOTE, 0, 0);
+ elm_win_keygrab_unset(ad->win, KEY_HOME, 0, 0);
viewmgr_destroy();
evas_object_del(ad->win);
}
ad = user_data;
if (ad->win)
- elm_win_activate(ad->win);
-
- viewmgr_push_view(VIEW_HOME);
+ _show(ad);
}
int main(int argc, char **argv)