From ee19bdb485252e03c8bd31da9e56d0e0430d7a24 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 21 Jul 2014 13:13:33 +0900 Subject: [PATCH] hide mouse on mouse idle on fullscreen mode in rage --- TODO | 4 +--- configure.ac | 2 +- src/bin/win.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/bin/win.h | 3 ++- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/TODO b/TODO index 96f18a8..5b1fa2f 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ * volume status display when changed (slider/image/percentage) -* emotion engine selection options +* emotion engine selection options (gui) * timeline thumbnails on position slider * right click control panel (ala terminology - need elm config ui code) * about display/popup (from panel?) @@ -12,7 +12,5 @@ * loop all option * show busy anim until opened cb or failure * add button/control top-left next to audio to do fullscreen/normal toggle -* hide mouse on timeout in fullscreen move -* fullscreen mode should request suspend of screensaver (needs elm work) * detect letterboxing and auto-crop diff --git a/configure.ac b/configure.ac index 60bc41b..ff72fcd 100644 --- a/configure.ac +++ b/configure.ac @@ -16,7 +16,7 @@ AC_PROG_CC AM_PROG_CC_C_O AC_C___ATTRIBUTE__ -efl_version="1.9.0" +efl_version="1.10.99" requirements="\ elementary >= ${efl_version} \ edje >= ${efl_version} \ diff --git a/src/bin/win.c b/src/bin/win.c index 3cbea67..dd78bd7 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -14,6 +14,8 @@ _cb_fullscreen(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED { Inf *inf = evas_object_data_get(obj, "inf"); elm_layout_signal_emit(inf->lay, "state,win,fullscreen", "rage"); + elm_win_noblank_set(obj, EINA_TRUE); + evas_object_show(inf->event2); } static void @@ -21,6 +23,8 @@ _cb_unfullscreen(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUS { Inf *inf = evas_object_data_get(obj, "inf"); elm_layout_signal_emit(inf->lay, "state,win,normal", "rage"); + elm_win_noblank_set(obj, EINA_FALSE); + evas_object_hide(inf->event2); } static void @@ -28,10 +32,11 @@ _cb_win_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void { Inf *inf = evas_object_data_get(obj, "inf"); const char *f; - + if (inf->next_job) ecore_job_del(inf->next_job); if (inf->show_timeout) ecore_timer_del(inf->show_timeout); if (inf->drag_anim) ecore_animator_del(inf->drag_anim); + if (inf->mouse_idle_timeout) ecore_timer_del(inf->mouse_idle_timeout); EINA_LIST_FREE(inf->file_list, f) eina_stringshare_del(f); evas_object_data_del(obj, "inf"); free(inf); @@ -43,6 +48,25 @@ _cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v key_handle(data, event_info); } +static Eina_Bool +_cb_mouse_idle(void *data) +{ + Inf *inf = evas_object_data_get(data, "inf"); + inf->mouse_idle_timeout = NULL; + if (elm_win_fullscreen_get(data)) evas_object_show(inf->event2); + return EINA_FALSE; +} + +static void +_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Inf *inf = evas_object_data_get(data, "inf"); + + if (inf->mouse_idle_timeout) ecore_timer_del(inf->mouse_idle_timeout); + inf->mouse_idle_timeout = ecore_timer_add(5.0, _cb_mouse_idle, data); + evas_object_hide(inf->event2); +} + void win_do_play(Evas_Object *win) { @@ -273,11 +297,30 @@ win_add(void) controls_init(win, o); o = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, o); evas_object_color_set(o, 0, 0, 0, 0); evas_object_repeat_events_set(o, EINA_TRUE); evas_object_show(o); inf->event = o; + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, + _cb_mouse_move, win); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, + _cb_mouse_move, win); + + o = elm_button_add(win); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, o); + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_repeat_events_set(o, EINA_TRUE); + elm_object_cursor_set(o, "blank"); + elm_object_cursor_theme_search_enabled_set(o, EINA_TRUE); + inf->event2 = o; + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, + _cb_mouse_move, win); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, + _cb_mouse_move, win); + dnd_init(win, o); gesture_init(win, o); diff --git a/src/bin/win.h b/src/bin/win.h index 3a5edc3..43ec07a 100644 --- a/src/bin/win.h +++ b/src/bin/win.h @@ -5,10 +5,11 @@ typedef struct _Inf Inf; struct _Inf { - Evas_Object *vid, *lay, *event, *glayer; + Evas_Object *vid, *lay, *event, *event2, *glayer; Eina_List *file_list, *file_cur; Ecore_Job *next_job; Ecore_Timer *show_timeout; + Ecore_Timer *mouse_idle_timeout; Ecore_Animator *drag_anim; double last_action; double jump;