From 8dfcdf243518c280ea58ec003759574a9043ab6c Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sat, 5 Aug 2017 23:09:32 +0900 Subject: [PATCH] browser mode - clean up and dot some i's and corss some t's hide control bar/pos when in browse mode, disable lots of key controls and pause/unpause click and a bunch more. much cleaner now --- data/themes/default.edc | 72 +++++++++++++++++++++++++++++------------ src/bin/browser.c | 36 +++++++++++++++++++-- src/bin/browser.h | 1 + src/bin/key.c | 40 +++++++++++++++++++++++ src/bin/win.c | 1 + 5 files changed, 127 insertions(+), 23 deletions(-) diff --git a/data/themes/default.edc b/data/themes/default.edc index e7b4e27..3e15f27 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -47,17 +47,43 @@ collections { public pos_timer; public drag_is_down; public novideo; + public browser; public pos_timeout(val) { - set_int(pos_visible, 0); set_int(pos_timer, 0); - stop_program(PROGRAM:"posshow"); - run_program(PROGRAM:"poshide"); - if (!get_int(novideo)) { + if (get_int(pos_visible)) { + set_int(pos_visible, 0); + stop_program(PROGRAM:"poshide"); + stop_program(PROGRAM:"posshow"); + run_program(PROGRAM:"poshide"); + stop_program(PROGRAM:"cbarhide"); stop_program(PROGRAM:"cbarshow"); run_program(PROGRAM:"cbarhide"); } } + public pos_show() { + if (!get_int(browser)) { + new t; + + if (!get_int(pos_visible)) { + set_int(pos_visible, 1); + stop_program(PROGRAM:"poshide"); + stop_program(PROGRAM:"posshow"); + run_program(PROGRAM:"posshow"); + stop_program(PROGRAM:"cbarhide"); + stop_program(PROGRAM:"cbarshow"); + run_program(PROGRAM:"cbarshow"); + } + t = get_int(pos_timer); + if (t) cancel_timer(t); + if (!get_int(novideo)) { + t = timer(5.0, "pos_timeout", 1); + } else { + t = 0; + } + set_int(pos_timer, t); + } + } } parts { @@ -403,12 +429,14 @@ collections { signal: "state,novideo"; source: "rage"; script { set_int(novideo, 1); + pos_show(); } } program { signal: "state,video"; source: "rage"; script { set_int(novideo, 0); + pos_show(); } } @@ -462,6 +490,17 @@ collections { transition: DECELERATE 0.3; target: "rage.browser"; } + program { + signal: "browser,state,visible"; source: "rage"; + script { + set_int(browser, 1); + if (get_int(pos_visible)) { + new t = get_int(pos_timer); + if (t) cancel_timer(t); + pos_timeout(0); + } + } + } program { signal: "browser,state,hidden"; source: "rage"; action: STATE_SET "default" 0.0; @@ -471,6 +510,13 @@ collections { } program { name: "browser_hidden"; action: SIGNAL_EMIT "browser,state,hidden,finished" "rage"; + after: "browser_hidden2"; + } + program { name: "browser_hidden2"; + script { + set_int(browser, 0); + pos_show(); + } } part { name: "rage.list"; type: SWALLOW; @@ -1615,24 +1661,10 @@ collections { color: 0 0 0 0; } } - program { name: "move1"; + program { // mouse moves around causing control bar to show until idle signal: "mouse,move"; source: "event"; script { - new t; - - if (!get_int(pos_visible)) { - stop_program(PROGRAM:"poshide"); - run_program(PROGRAM:"posshow"); - if (!get_int(novideo)) { - stop_program(PROGRAM:"cbarhide"); - run_program(PROGRAM:"cbarshow"); - } - set_int(pos_visible, 1); - } - t = get_int(pos_timer); - if (t) cancel_timer(t); - t = timer(5.0, "pos_timeout", 1); - set_int(pos_timer, t); + pos_show(); } } program { name: "posshow"; diff --git a/src/bin/browser.c b/src/bin/browser.c index e5d4591..e3bc6ba 100644 --- a/src/bin/browser.c +++ b/src/bin/browser.c @@ -892,6 +892,8 @@ _cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v { Evas_Event_Key_Down *ev = event_info; Evas_Object *win = data; + + printf("brow %s\n", ev->key); if ((!strcmp(ev->key, "Left")) || (!strcmp(ev->key, "bracketleft"))) { @@ -903,17 +905,23 @@ _cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v _sel_go(win, dir_entry, 1, 0); } else if ((!strcmp(ev->key, "Up")) || - (!strcmp(ev->key, "Prior")) || (!strcmp(ev->key, "XF86AudioPrev"))) { _sel_go(win, dir_entry, 0, -1); } + else if ((!strcmp(ev->key, "Prior"))) + { + _sel_go(win, dir_entry, 0, -10); + } else if ((!strcmp(ev->key, "Down")) || - (!strcmp(ev->key, "Next")) || (!strcmp(ev->key, "XF86AudioNext"))) { _sel_go(win, dir_entry, 0, 1); } + else if ((!strcmp(ev->key, "Next"))) + { + _sel_go(win, dir_entry, 0, 10); + } else if ((!strcmp(ev->key, "space")) || (!strcmp(ev->key, "Pause")) || (!strcmp(ev->keyname, "p")) || @@ -930,6 +938,24 @@ _cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v browser_hide(win); } else key_handle(win, ev); + elm_object_focus_set(bt, EINA_TRUE); +} + +static Ecore_Timer *focus_timer = NULL; + +static Eina_Bool +_browser_focus_timer_cb(void *data) +{ + focus_timer = NULL; + elm_object_focus_set(data, EINA_TRUE); + return EINA_FALSE; +} + +Eina_Bool +browser_visible(void) +{ + if (bx) return EINA_TRUE; + return EINA_FALSE; } void @@ -968,9 +994,11 @@ browser_show(Evas_Object *win) elm_win_resize_object_add(win, bt); evas_object_lower(bt); evas_object_show(bt); - elm_object_focus_set(bt, EINA_TRUE); evas_object_event_callback_add(bt, EVAS_CALLBACK_KEY_DOWN, _cb_key_down, win); + + if (focus_timer) ecore_timer_del(focus_timer); + focus_timer = ecore_timer_add(0.7, _browser_focus_timer_cb, bt); } elm_layout_signal_emit(inf->lay, "browser,state,visible", "rage"); } @@ -998,6 +1026,8 @@ browser_hide(Evas_Object *win) Inf *inf = evas_object_data_get(win, "inf"); if (!bx) return; + if (focus_timer) ecore_timer_del(focus_timer); + focus_timer = NULL; elm_layout_signal_callback_add(inf->lay, "browser,state,hidden,finished", "rage", _cb_hidden, win); elm_layout_signal_emit(inf->lay, "browser,state,hidden", "rage"); diff --git a/src/bin/browser.h b/src/bin/browser.h index c02b128..1450e70 100644 --- a/src/bin/browser.h +++ b/src/bin/browser.h @@ -1,6 +1,7 @@ #ifndef _BROWSER_H__ #define _BROWSER_H__ 1 +Eina_Bool browser_visible(void); void browser_show(Evas_Object *win); void browser_hide(Evas_Object *win); void browser_toggle(Evas_Object *win); diff --git a/src/bin/key.c b/src/bin/key.c index 268dcce..2b8f686 100644 --- a/src/bin/key.c +++ b/src/bin/key.c @@ -15,6 +15,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) if ((!strcmp(ev->key, "Left")) || (!strcmp(ev->key, "bracketleft"))) { + if (browser_visible()) return; if ((video_spu_button_count(inf->vid) > 0) && (!strcmp(ev->key, "Left"))) video_event_send(inf->vid, EMOTION_EVENT_LEFT); @@ -44,6 +45,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) double pos = video_position_get(inf->vid); double len = video_length_get(inf->vid); + if (browser_visible()) return; if ((video_spu_button_count(inf->vid) > 0) && (!strcmp(ev->key, "Right"))) video_event_send(inf->vid, EMOTION_EVENT_RIGHT); @@ -68,6 +70,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) (!strcmp(ev->key, "plus")) || (!strcmp(ev->key, "equal"))) { + if (browser_visible()) return; if ((video_spu_button_count(inf->vid) > 0) && (!strcmp(ev->key, "Up"))) video_event_send(inf->vid, EMOTION_EVENT_UP); @@ -82,6 +85,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) else if ((!strcmp(ev->key, "Down")) || (!strcmp(ev->key, "minus"))) { + if (browser_visible()) return; if ((video_spu_button_count(inf->vid) > 0) && (!strcmp(ev->key, "Down"))) video_event_send(inf->vid, EMOTION_EVENT_DOWN); @@ -98,6 +102,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) (!strcmp(ev->keyname, "p")) || (!strcmp(ev->key, "XF86AudioPlay"))) { + if (browser_visible()) return; win_do_play_pause(win); } else if ((!strcmp(ev->keyname, "s")) || @@ -105,6 +110,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) (!strcmp(ev->key, "BackSpace")) || (!strcmp(ev->key, "Delete"))) { + if (browser_visible()) return; video_stop(inf->vid); elm_layout_signal_emit(inf->lay, "action,stop", "rage"); elm_layout_signal_emit(inf->lay, "state,default", "rage"); @@ -120,30 +126,36 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) else if ((!strcmp(ev->key, "Prior")) || (!strcmp(ev->key, "XF86AudioPrev"))) { + if (browser_visible()) return; win_do_prev(win); } else if ((!strcmp(ev->key, "Next")) || (!strcmp(ev->key, "XF86AudioNext"))) { + if (browser_visible()) return; win_do_next(win); } else if (!strcmp(ev->key, "Home")) { + if (browser_visible()) return; if (win_video_have_prev(win)) win_video_first(win); else win_video_prev(win); } else if (!strcmp(ev->key, "End")) { + if (browser_visible()) return; if (win_video_have_next(win)) win_video_last(win); else win_video_next(win); } else if (!strcmp(ev->key, "Delete")) { + if (browser_visible()) return; win_video_delete(win); } else if ((!strcmp(ev->keyname, "m")) || (!strcmp(ev->key, "XF86AudioMute"))) { + if (browser_visible()) return; video_mute_set(inf->vid, !video_mute_get(inf->vid)); if (video_mute_get(inf->vid)) elm_layout_signal_emit(inf->lay, "action,mute", "rage"); @@ -152,6 +164,7 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) } else if (!strcmp(ev->keyname, "l")) { + if (browser_visible()) return; video_loop_set(inf->vid, !video_loop_get(inf->vid)); if (video_loop_get(inf->vid)) elm_layout_signal_emit(inf->lay, "action,loop", "rage"); @@ -172,20 +185,24 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) { int w, h; + if (browser_visible()) return; video_ratio_size_get(inf->vid, &w, &h); if ((w > 1) && (h > 1)) evas_object_resize(win, w, h); } else if (!strcmp(ev->keyname, "backslash")) { + if (browser_visible()) return; if (inf->browse_mode) browser_toggle(win); else win_list_toggle(win); } else if (!strcmp(ev->keyname, "y")) { + if (browser_visible()) return; video_lowquality_set(inf->vid, !video_lowquality_get(inf->vid)); } else if (!strcmp(ev->keyname, "z")) { + if (browser_visible()) return; if (inf->zoom_mode == 0) inf->zoom_mode = 1; else inf->zoom_mode = 0; win_aspect_adjust(win); @@ -196,99 +213,122 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) } else if (!strcmp(ev->keyname, "e")) { + if (browser_visible()) return; video_eject(inf->vid); elm_layout_signal_emit(inf->lay, "action,eject", "rage"); } else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_SELECT); } else if ((!strcmp(ev->key, "comma")) || (!strcmp(ev->key, "less"))) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_ANGLE_PREV); } else if ((!strcmp(ev->key, "period")) || (!strcmp(ev->key, "greater"))) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_ANGLE_NEXT); } else if (!strcmp(ev->key, "Tab")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_FORCE); } else if (!strcmp(ev->key, "0")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_0); } else if (!strcmp(ev->key, "1")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_1); } else if (!strcmp(ev->key, "2")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_2); } else if (!strcmp(ev->key, "3")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_3); } else if (!strcmp(ev->key, "4")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_4); } else if (!strcmp(ev->key, "5")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_5); } else if (!strcmp(ev->key, "6")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_6); } else if (!strcmp(ev->key, "7")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_7); } else if (!strcmp(ev->key, "8")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_8); } else if (!strcmp(ev->key, "9")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_9); } else if ((!strcmp(ev->key, "grave")) || (!strcmp(ev->key, "asciitilde"))) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_10); } else if (!strcmp(ev->key, "F1")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU1); } else if (!strcmp(ev->key, "F2")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU2); } else if (!strcmp(ev->key, "F3")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU3); } else if (!strcmp(ev->key, "F4")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU4); } else if (!strcmp(ev->key, "F5")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU5); } else if (!strcmp(ev->key, "F6")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU6); } else if (!strcmp(ev->key, "F7")) { + if (browser_visible()) return; video_event_send(inf->vid, EMOTION_EVENT_MENU7); } } diff --git a/src/bin/win.c b/src/bin/win.c index a9dce41..71780ce 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -129,6 +129,7 @@ _cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Inf *inf = evas_object_data_get(data, "inf"); if (!inf) return; + if (browser_visible()) return; if (ev->button == 3) { elm_layout_signal_emit(inf->lay, "about,show", "rage");