raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=23872e244a6c3ee3383240f0d52a2659bf10c419
commit 23872e244a6c3ee3383240f0d52a2659bf10c419 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Tue Nov 3 23:12:29 2020 +0000 winlist - handle todo's like zone del, move/resize, client resize dot some i's, cross t's --- src/bin/e_comp_object.c | 15 +++++++++ src/modules/winlist/e_winlist.c | 67 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index a779bd5aa..59d23e4c6 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -4331,6 +4331,19 @@ _e_comp_object_frame_mirror_resize_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSE } } +static void +_e_comp_object_frame_mirror_src_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED) +{ + Evas_Object *o = data; + Evas_Object *o_zoomap; + E_Client *ec = evas_object_data_get(o, "ec"); + if (!ec) return; + e_zoomap_child_resize(o_zoomap, ec->w, ec->h); + o_zoomap = evas_object_data_get(obj, "zoomap"); + if (!o_zoomap) return; + e_zoomap_child_resize(o_zoomap, ec->w, ec->h); +} + E_API Evas_Object * e_comp_object_util_frame_mirror_add(Evas_Object *obj) { @@ -4392,6 +4405,8 @@ e_comp_object_util_frame_mirror_add(Evas_Object *obj) _e_comp_object_frame_mirror_del_cb, NULL); evas_object_event_callback_add(o_sh, EVAS_CALLBACK_RESIZE, _e_comp_object_frame_mirror_resize_cb, NULL); + evas_object_event_callback_add(cw->obj, EVAS_CALLBACK_RESIZE, + _e_comp_object_frame_mirror_src_resize_cb, o_sh); if (o_zoomap) e_zoomap_child_resize(o_zoomap, cw->ec->w, cw->ec->h); return o_sh; diff --git a/src/modules/winlist/e_winlist.c b/src/modules/winlist/e_winlist.c index cff515baa..0b82081a5 100644 --- a/src/modules/winlist/e_winlist.c +++ b/src/modules/winlist/e_winlist.c @@ -1,8 +1,7 @@ #include "e.h" #include "e_mod_main.h" -// XXX: need to handle zone add/delete/reconfigure geom -// XXX: need to handle client win resize +// XXX: need some way to break a grab for desklock to work in x like wl _cb_lost // XXX: newly added windows while up come up black // XXX: ARGB windows when scaled down with zoomap have their base colors messed up (black) @@ -20,6 +19,7 @@ struct _E_Winlist_Win unsigned char was_shaded E_BITFIELD; }; +static void _e_winlist_client_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *info EINA_UNUSED); static void _e_winlist_size_adjust(void); static Eina_Bool _e_winlist_client_add(E_Client *ec, E_Zone *zone, E_Desk *desk); static void _e_winlist_client_del(E_Client *ec); @@ -35,6 +35,8 @@ static Eina_Bool _e_winlist_cb_mouse_down(void *data, int type, void *event); static Eina_Bool _e_winlist_cb_mouse_up(void *data, int type, void *event); static Eina_Bool _e_winlist_cb_mouse_wheel(void *data, int type, void *event); static Eina_Bool _e_winlist_cb_mouse_move(void *data, int type, void *event); +static Eina_Bool _e_winlist_cb_zone_del(void *data, int type, void *event); +static Eina_Bool _e_winlist_cb_zone_move_resize(void *data, int type, void *event); static Eina_Bool _e_winlist_scroll_timer(void *data); static Eina_Bool _e_winlist_animator(void *data); @@ -64,6 +66,7 @@ static double _scroll_align = 0.0; static Ecore_Timer *_scroll_timer = NULL; static Ecore_Animator *_animator = NULL; static Eina_Bool _mouse_pressed = EINA_FALSE; +static Evas_Coord _winlist_chosen_h = 0; static Eina_Bool _wmclass_picked(const Eina_List *lst, const char *wmclass) @@ -295,6 +298,8 @@ e_winlist_show(E_Zone *zone, E_Winlist_Filter filter) E_LIST_HANDLER_APPEND(_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _e_winlist_cb_mouse_up, NULL); E_LIST_HANDLER_APPEND(_handlers, ECORE_EVENT_MOUSE_WHEEL, _e_winlist_cb_mouse_wheel, NULL); E_LIST_HANDLER_APPEND(_handlers, ECORE_EVENT_MOUSE_MOVE, _e_winlist_cb_mouse_move, NULL); + E_LIST_HANDLER_APPEND(_handlers, E_EVENT_ZONE_DEL, _e_winlist_cb_zone_del, NULL); + E_LIST_HANDLER_APPEND(_handlers, E_EVENT_ZONE_MOVE_RESIZE, _e_winlist_cb_zone_move_resize, NULL); evas_object_show(_winlist); return 1; @@ -315,6 +320,9 @@ e_winlist_hide(void) evas_object_hide(_winlist); EINA_LIST_FREE(_wins, ww) { + if (ww->client->frame) + evas_object_event_callback_del_full(ww->client->frame, EVAS_CALLBACK_RESIZE, + _e_winlist_client_resize_cb, ww); if ((!ec) || (ww->client != ec)) e_object_unref(E_OBJECT(ww->client)); free(ww); } @@ -779,6 +787,7 @@ try_again: goto try_again; } } + _winlist_chosen_h = h; return rows; } @@ -850,6 +859,23 @@ _e_winlist_size_adjust(void) else _e_winlist_size_list_adjust(); } +static void +_e_winlist_client_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *info EINA_UNUSED) +{ + E_Winlist_Win *ww = data; + + if (e_config->winlist_mode == 1) + { + _e_winlist_large_item_height_set(_winlist_chosen_h); + } + else + { + evas_object_size_hint_aspect_set(ww->win_object, EVAS_ASPECT_CONTROL_BOTH, + ww->client->w, ww->client->h); + edje_object_part_swallow(ww->bg_object, "e.swallow.win", ww->win_object); + } +} + static Eina_Bool _e_winlist_client_add(E_Client *ec, E_Zone *zone, E_Desk *desk) { @@ -939,7 +965,7 @@ _e_winlist_client_add(E_Client *ec, E_Zone *zone, E_Desk *desk) } else evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH, - ec->client.w, ec->client.h); + ec->w, ec->h); edje_object_part_swallow(ww->bg_object, "e.swallow.win", o); evas_object_show(o); } @@ -973,6 +999,8 @@ _e_winlist_client_add(E_Client *ec, E_Zone *zone, E_Desk *desk) evas_object_size_hint_max_set(ww->bg_object, 9999, mh); elm_box_pack_end(_list_object, ww->bg_object); } + evas_object_event_callback_add(ww->client->frame, EVAS_CALLBACK_RESIZE, + _e_winlist_client_resize_cb, ww); e_object_ref(E_OBJECT(ww->client)); return EINA_TRUE; } @@ -988,6 +1016,9 @@ _e_winlist_client_del(E_Client *ec) { if (ww->client == ec) { + if (ec->frame) + evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_RESIZE, + _e_winlist_client_resize_cb, ww); e_object_unref(E_OBJECT(ww->client)); if (l == _win_selected) { @@ -1548,6 +1579,36 @@ _e_winlist_cb_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *eve return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_e_winlist_cb_zone_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) +{ + E_Event_Zone_Del *ev = event; + + if (ev->zone != _winlist_zone) return ECORE_CALLBACK_PASS_ON; + _e_winlist_deactivate(); + e_winlist_hide(); + _hold_count = 0; + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_e_winlist_cb_zone_move_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) +{ + E_Event_Zone_Move_Resize *ev = event; + Evas_Coord x, y, w, h; + + if (ev->zone != _winlist_zone) return ECORE_CALLBACK_PASS_ON; + evas_object_geometry_set(_winlist_bg_object, ev->zone->x, ev->zone->y, ev->zone->w, ev->zone->h); + evas_object_geometry_get(_winlist, NULL, NULL, &w, &h); + x = ev->zone->x + ((ev->zone->w - w) / 2); + y = ev->zone->y + ((ev->zone->h - h) / 2); + evas_object_geometry_set(_winlist, x, y, w, h); + evas_object_geometry_set(_winlist_fg_object, ev->zone->x, ev->zone->y, ev->zone->w, ev->zone->h); + _e_winlist_deactivate(); + e_winlist_hide(); + return ECORE_CALLBACK_PASS_ON; +} + static Eina_Bool _e_winlist_scroll_timer(void *data EINA_UNUSED) { --
