billiob pushed a commit to branch master. http://git.enlightenment.org/apps/terminology.git/commit/?id=6f48f706f51c01aabdf7dbda74ff3f4d48426679
commit 6f48f706f51c01aabdf7dbda74ff3f4d48426679 Author: Boris Faure <[email protected]> Date: Mon Feb 17 23:17:06 2020 +0100 win: have only one tab drag at a time --- src/bin/win.c | 83 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 38 insertions(+), 45 deletions(-) diff --git a/src/bin/win.c b/src/bin/win.c index fc93a0c..d0f1cb1 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -75,7 +75,6 @@ typedef struct _Tab_Drag Tab_Drag; struct _Tab_Drag { - Evas_Object *icwin; Evas_Coord mdx; /* Mouse-down x */ Evas_Coord mdy; /* Mouse-down y */ Evas_Object *icon; @@ -113,7 +112,6 @@ struct _Term Evas_Object *tab_region_bg; Evas_Object *tab_inactive; Tab_Item *tab_item; - Tab_Drag *tab_drag; Eina_List *popmedia_queue; Ecore_Timer *sendfile_request_hide_timer; Ecore_Timer *sendfile_progress_hide_timer; @@ -200,6 +198,7 @@ struct _Win /* }}} */ /* {{{ static */ static Eina_List *wins = NULL; +static Tab_Drag *_tab_drag = NULL; static Eina_Bool _win_is_focused(Win *wn); static Term_Container *_solo_new(Term *term, Win *wn); @@ -540,9 +539,9 @@ _solo_set_title(Term_Container *tc, { elm_layout_text_set(term->bg, "terminology.tab.title", title); } - if (term->tab_drag && term->tab_drag->icon) + if (_tab_drag && _tab_drag->term == term && _tab_drag->icon) { - elm_layout_text_set(term->tab_drag->icon, + elm_layout_text_set(_tab_drag->icon, "terminology.title", title); } tc->parent->set_title(tc->parent, tc, title); @@ -2967,23 +2966,21 @@ _term_hdrag_off(Term *term, void *data EINA_UNUSED) } static void -_tab_drag_free(Term *term) +_tab_drag_free(void) { - Tab_Drag *tab_drag = term->tab_drag; - - if (!tab_drag) + if (!_tab_drag) return; - for_each_term_do(tab_drag->term->wn, &_term_hdrag_on, NULL); + for_each_term_do(_tab_drag->term->wn, &_term_hdrag_on, NULL); - ecore_timer_del(tab_drag->timer); - tab_drag->timer = NULL; + ecore_timer_del(_tab_drag->timer); + _tab_drag->timer = NULL; - evas_object_del(tab_drag->icon); + evas_object_del(_tab_drag->icon); - term->tab_drag = NULL; - term_unref(tab_drag->term); - free(tab_drag); + term_unref(_tab_drag->term); + free(_tab_drag); + _tab_drag = NULL; } static void @@ -3019,7 +3016,7 @@ _term_on_horizontal_drag(void *data, tab_item = tabs->current; - _tab_drag_free(term); + _tab_drag_free(); tab_active_idx = -1; EINA_LIST_FOREACH(tabs->tabs, l, tab_item) @@ -3188,14 +3185,13 @@ static void _tab_drag_stop(Term *term) { Evas_Coord mx = 0, my = 0; - Tab_Drag *tab_drag = term->tab_drag; Win *wn = term->wn; Term_Container *tc_wn = (Term_Container*) wn; Term *term_at_coords; - assert(tab_drag); + assert(_tab_drag); - evas_pointer_canvas_xy_get(tab_drag->e, &mx, &my); + evas_pointer_canvas_xy_get(_tab_drag->e, &mx, &my); term_at_coords = tc_wn->find_term_at_coords(tc_wn, mx, my); if (!term_at_coords) goto end; @@ -3212,7 +3208,7 @@ _tab_drag_stop(Term *term) } end: - _tab_drag_free(term); + _tab_drag_free(); } static void @@ -3224,12 +3220,12 @@ _term_on_drag_stop(void *data, Term *term = data; Term_Container *tc; - if (term->tab_drag && term->tab_drag->icon) + if (_tab_drag && _tab_drag->term == term && _tab_drag->icon) { _tab_drag_stop(term); return; } - _tab_drag_free(term); + _tab_drag_free(); tc = term->container; assert (tc->type == TERM_CONTAINER_TYPE_SOLO); @@ -3249,33 +3245,31 @@ _term_on_drag_stop(void *data, static void _tabs_drag_mouse_move( - void *data, + void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { - Term *term = data; - Tab_Drag *tab_drag = term->tab_drag; int x, y, w, h; Evas_Coord xm, ym; - if (!tab_drag || !tab_drag->icon) + if (!_tab_drag || !_tab_drag->icon) return; - evas_object_geometry_get(tab_drag->icon, NULL, NULL, &w, &h); - evas_pointer_canvas_xy_get(tab_drag->e, &xm, &ym); + evas_object_geometry_get(_tab_drag->icon, NULL, NULL, &w, &h); + evas_pointer_canvas_xy_get(_tab_drag->e, &xm, &ym); x = (xm - (w/2)); y = (ym - (h/2)); - evas_object_move(tab_drag->icon, x, y); + evas_object_move(_tab_drag->icon, x, y); + /* TODO: boris */ } static Eina_Bool -_tab_drag_start(void *data) +_tab_drag_start(void *data EINA_UNUSED) { /* Start icons animation before actually drag-starts */ - Tab_Drag *tab_drag = data; Evas_Coord x, y, w, h, off_x, off_y; - Term *term = tab_drag->term; + Term *term = _tab_drag->term; Evas_Object *o = elm_layout_add(term->bg); theme_apply_elm(o, term->config, "terminology/tabbar_back"); @@ -3283,7 +3277,7 @@ _tab_drag_start(void *data) term->container->title); elm_layout_signal_emit(o, "style,active", "terminology"); - for_each_term_do(tab_drag->term->wn, &_term_hdrag_off, NULL); + for_each_term_do(_tab_drag->term->wn, &_term_hdrag_off, NULL); edje_object_part_geometry_get(term->bg_edj, "tabmiddle", &x, &y, &w, &h); @@ -3295,9 +3289,9 @@ _tab_drag_start(void *data) evas_object_move(o, x + off_x, y + off_y); evas_object_show(o); - tab_drag->icon = o; + _tab_drag->icon = o; - tab_drag->timer = NULL; + _tab_drag->timer = NULL; return ECORE_CALLBACK_CANCEL; } @@ -3311,22 +3305,21 @@ _tabs_mouse_down( /* Launch a timer to start drag animation */ Term *term = data; Evas_Coord mx = 0, my = 0; - Tab_Drag *tab_drag = calloc(1, sizeof(*tab_drag)); + _tab_drag = calloc(1, sizeof(*_tab_drag)); - if (!tab_drag) + if (!_tab_drag) return; - tab_drag->e = evas_object_evas_get(term->bg); - evas_pointer_canvas_xy_get(tab_drag->e, &mx, &my); + _tab_drag->e = evas_object_evas_get(term->bg); + evas_pointer_canvas_xy_get(_tab_drag->e, &mx, &my); term_ref(term); - term->tab_drag = tab_drag; - tab_drag->mdx = mx; - tab_drag->mdy = my; - tab_drag->term = term; - tab_drag->timer = ecore_timer_add(DRAG_TIMEOUT, - _tab_drag_start, tab_drag); + _tab_drag->mdx = mx; + _tab_drag->mdy = my; + _tab_drag->term = term; + _tab_drag->timer = ecore_timer_add(DRAG_TIMEOUT, + _tab_drag_start, NULL); } --
