aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-01-28 17:41:02 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-01-28 19:06:39 +0000
commit6bdcf9256395905d893e2b1594b047620e0a99cb (patch)
tree69e16080e0b62ab51b790c86af582d2e08d834b9
parentpager - fix dragged win offset to be correct, not top left (diff)
downloadenlightenment-6bdcf9256395905d893e2b1594b047620e0a99cb.tar.gz
pager - fix vanishing windows when dnd from desk to desk in pager
windows would vanish at times (eg dnd into an empty desktop in the pager). this was pretty disconcerting and a problem, so this fixes it with a bit of a sledgehammer, but it fixes it. @fix
-rw-r--r--src/bin/e_deskmirror.c37
-rw-r--r--src/bin/e_deskmirror.h1
-rw-r--r--src/modules/pager/e_mod_main.c5
-rw-r--r--src/modules/pager/gadget/pager.c5
4 files changed, 41 insertions, 7 deletions
diff --git a/src/bin/e_deskmirror.c b/src/bin/e_deskmirror.c
index 43f0c95d1..71e77fc2e 100644
--- a/src/bin/e_deskmirror.c
+++ b/src/bin/e_deskmirror.c
@@ -31,6 +31,7 @@ typedef struct E_Smart_Data
Eina_Bool taskbar E_BITFIELD;
Eina_Bool resize E_BITFIELD;
+ Eina_Bool force E_BITFIELD;
} E_Smart_Data;
typedef struct Mirror
@@ -95,9 +96,13 @@ static void
_mirror_visible_apply(Mirror *m)
{
if (_e_deskmirror_visible_get(m->sd, m))
- evas_object_show(m->mirror);
+ {
+ evas_object_show(m->mirror);
+ }
else
- evas_object_hide(m->mirror);
+ {
+ evas_object_hide(m->mirror);
+ }
}
static void
@@ -509,11 +514,14 @@ static void
_e_deskmirror_mirror_reconfigure(Mirror *m)
{
_e_deskmirror_mirror_geometry_get(m);
- e_layout_child_move(m->mirror, m->x, m->y);
- e_layout_child_resize(m->mirror, m->w, m->h);
- /* assume that anything happening here is the result of a drag */
- if (!e_drag_current_get())
- _mirror_visible_apply(m);
+ if (m->mirror)
+ {
+ e_layout_child_move(m->mirror, m->x, m->y);
+ e_layout_child_resize(m->mirror, m->w, m->h);
+ /* assume that anything happening here is the result of a drag */
+ if (((!m->sd->force) && (!e_drag_current_get())) || (m->sd->force))
+ _mirror_visible_apply(m);
+ }
}
static void
@@ -771,6 +779,7 @@ _client_desk_set(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Client_Desk_Set
/* ev->desk is previous desk */
if (!e_client_util_desk_visible(ev->ec, sd->desk))
eina_hash_del_by_key(sd->mirror_hash, &ev->ec->frame);
+ _mirror_visible_apply(m);
}
if ((!m) && (sd->desk == ev->ec->desk))
_e_deskmirror_mirror_add(sd, ev->ec->frame);
@@ -976,3 +985,17 @@ e_deskmirror_util_wins_print(Evas_Object *obj)
fprintf(stderr, "MIRROR OBJ: %p\n", m->comp_object);
}
}
+
+E_API void
+e_deskmirror_update_force(Evas_Object *obj)
+{
+ API_ENTRY(obj);
+
+ e_layout_freeze(sd->layout);
+ sd->force = EINA_TRUE;
+ _e_deskmirror_smart_hide(obj);
+ _e_deskmirror_smart_reconfigure(sd);
+ _e_deskmirror_smart_show(obj);
+ sd->force = EINA_FALSE;
+ e_layout_thaw(sd->layout);
+}
diff --git a/src/bin/e_deskmirror.h b/src/bin/e_deskmirror.h
index a9a137b45..919d68edf 100644
--- a/src/bin/e_deskmirror.h
+++ b/src/bin/e_deskmirror.h
@@ -9,6 +9,7 @@ E_API void e_deskmirror_coord_canvas_to_virtual(Evas_Object *obj, Evas_Coord cx,
E_API void e_deskmirror_coord_virtual_to_canvas(Evas_Object *obj, Evas_Coord vx, Evas_Coord vy, Evas_Coord *cx, Evas_Coord *cy);
E_API E_Desk *e_deskmirror_desk_get(Evas_Object *obj);
E_API void e_deskmirror_util_wins_print(Evas_Object *obj);
+E_API void e_deskmirror_update_force(Evas_Object *obj);
//#define DESKMIRROR_TEST
#endif
diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c
index 0478b1fce..a3f00d28b 100644
--- a/src/modules/pager/e_mod_main.c
+++ b/src/modules/pager/e_mod_main.c
@@ -603,6 +603,8 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
pw->client->hidden = 0;
e_client_desk_set(pw->client, desk1);
}
+ e_deskmirror_update_force(pd1->o_layout);
+ e_deskmirror_update_force(pd2->o_layout);
/* Modify desktop names in the config */
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
@@ -1230,6 +1232,7 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
/* be helpful */
if (pw->client->desk->visible && (!e_client_focused_get()))
evas_object_focus_set(pw->client->frame, 1);
+ e_deskmirror_update_force(pw->desk->o_layout);
}
else
{
@@ -1265,6 +1268,7 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
evas_object_focus_set(ec->frame, 1);
+ e_deskmirror_update_force(pw->desk->o_layout);
}
if (p->active_drop_pd)
{
@@ -1500,6 +1504,7 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
}
if (max) e_client_maximize(ec, max);
if (fullscreen) e_client_fullscreen(ec, fs);
+ e_deskmirror_update_force(pd->o_layout);
}
}
diff --git a/src/modules/pager/gadget/pager.c b/src/modules/pager/gadget/pager.c
index da4cdd008..70aeccaa2 100644
--- a/src/modules/pager/gadget/pager.c
+++ b/src/modules/pager/gadget/pager.c
@@ -782,6 +782,8 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
pw->client->hidden = 0;
e_client_desk_set(pw->client, desk1);
}
+ e_deskmirror_update_force(pd1->o_layout);
+ e_deskmirror_update_force(pd2->o_layout);
/* Modify desktop names in the config */
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
@@ -2136,6 +2138,7 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
/* be helpful */
if (pw->client->desk->visible && (!e_client_focused_get()))
evas_object_focus_set(pw->client->frame, 1);
+ e_deskmirror_update_force(pw->desk->o_layout);
}
else
{
@@ -2171,6 +2174,7 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
evas_object_focus_set(ec->frame, 1);
+ e_deskmirror_update_force(pw->desk->o_layout);
}
edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e");
if (!pw->drag.from_pager)
@@ -2388,6 +2392,7 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
}
if (max) e_client_maximize(ec, max);
if (fullscreen) e_client_fullscreen(ec, fs);
+ e_deskmirror_update_force(pd->o_layout);
}
EINA_LIST_FOREACH(pd->pager->desks, l, pdd)
{