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
This commit is contained in:
parent
6d0ea31870
commit
6bdcf92563
|
@ -31,6 +31,7 @@ typedef struct E_Smart_Data
|
||||||
Eina_Bool taskbar E_BITFIELD;
|
Eina_Bool taskbar E_BITFIELD;
|
||||||
|
|
||||||
Eina_Bool resize E_BITFIELD;
|
Eina_Bool resize E_BITFIELD;
|
||||||
|
Eina_Bool force E_BITFIELD;
|
||||||
} E_Smart_Data;
|
} E_Smart_Data;
|
||||||
|
|
||||||
typedef struct Mirror
|
typedef struct Mirror
|
||||||
|
@ -95,10 +96,14 @@ static void
|
||||||
_mirror_visible_apply(Mirror *m)
|
_mirror_visible_apply(Mirror *m)
|
||||||
{
|
{
|
||||||
if (_e_deskmirror_visible_get(m->sd, m))
|
if (_e_deskmirror_visible_get(m->sd, m))
|
||||||
|
{
|
||||||
evas_object_show(m->mirror);
|
evas_object_show(m->mirror);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
evas_object_hide(m->mirror);
|
evas_object_hide(m->mirror);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_mirror_scale_set(Mirror *m, float sc)
|
_mirror_scale_set(Mirror *m, float sc)
|
||||||
|
@ -509,12 +514,15 @@ static void
|
||||||
_e_deskmirror_mirror_reconfigure(Mirror *m)
|
_e_deskmirror_mirror_reconfigure(Mirror *m)
|
||||||
{
|
{
|
||||||
_e_deskmirror_mirror_geometry_get(m);
|
_e_deskmirror_mirror_geometry_get(m);
|
||||||
|
if (m->mirror)
|
||||||
|
{
|
||||||
e_layout_child_move(m->mirror, m->x, m->y);
|
e_layout_child_move(m->mirror, m->x, m->y);
|
||||||
e_layout_child_resize(m->mirror, m->w, m->h);
|
e_layout_child_resize(m->mirror, m->w, m->h);
|
||||||
/* assume that anything happening here is the result of a drag */
|
/* assume that anything happening here is the result of a drag */
|
||||||
if (!e_drag_current_get())
|
if (((!m->sd->force) && (!e_drag_current_get())) || (m->sd->force))
|
||||||
_mirror_visible_apply(m);
|
_mirror_visible_apply(m);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_deskmirror_mirror_del_hash(Mirror *m)
|
_e_deskmirror_mirror_del_hash(Mirror *m)
|
||||||
|
@ -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 */
|
/* ev->desk is previous desk */
|
||||||
if (!e_client_util_desk_visible(ev->ec, sd->desk))
|
if (!e_client_util_desk_visible(ev->ec, sd->desk))
|
||||||
eina_hash_del_by_key(sd->mirror_hash, &ev->ec->frame);
|
eina_hash_del_by_key(sd->mirror_hash, &ev->ec->frame);
|
||||||
|
_mirror_visible_apply(m);
|
||||||
}
|
}
|
||||||
if ((!m) && (sd->desk == ev->ec->desk))
|
if ((!m) && (sd->desk == ev->ec->desk))
|
||||||
_e_deskmirror_mirror_add(sd, ev->ec->frame);
|
_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);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -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 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 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_util_wins_print(Evas_Object *obj);
|
||||||
|
E_API void e_deskmirror_update_force(Evas_Object *obj);
|
||||||
//#define DESKMIRROR_TEST
|
//#define DESKMIRROR_TEST
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -603,6 +603,8 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
|
||||||
pw->client->hidden = 0;
|
pw->client->hidden = 0;
|
||||||
e_client_desk_set(pw->client, desk1);
|
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 */
|
/* Modify desktop names in the config */
|
||||||
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
|
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 */
|
/* be helpful */
|
||||||
if (pw->client->desk->visible && (!e_client_focused_get()))
|
if (pw->client->desk->visible && (!e_client_focused_get()))
|
||||||
evas_object_focus_set(pw->client->frame, 1);
|
evas_object_focus_set(pw->client->frame, 1);
|
||||||
|
e_deskmirror_update_force(pw->desk->o_layout);
|
||||||
}
|
}
|
||||||
else
|
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);
|
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
|
||||||
evas_object_focus_set(ec->frame, 1);
|
evas_object_focus_set(ec->frame, 1);
|
||||||
|
e_deskmirror_update_force(pw->desk->o_layout);
|
||||||
}
|
}
|
||||||
if (p->active_drop_pd)
|
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 (max) e_client_maximize(ec, max);
|
||||||
if (fullscreen) e_client_fullscreen(ec, fs);
|
if (fullscreen) e_client_fullscreen(ec, fs);
|
||||||
|
e_deskmirror_update_force(pd->o_layout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -782,6 +782,8 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
|
||||||
pw->client->hidden = 0;
|
pw->client->hidden = 0;
|
||||||
e_client_desk_set(pw->client, desk1);
|
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 */
|
/* Modify desktop names in the config */
|
||||||
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
|
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 */
|
/* be helpful */
|
||||||
if (pw->client->desk->visible && (!e_client_focused_get()))
|
if (pw->client->desk->visible && (!e_client_focused_get()))
|
||||||
evas_object_focus_set(pw->client->frame, 1);
|
evas_object_focus_set(pw->client->frame, 1);
|
||||||
|
e_deskmirror_update_force(pw->desk->o_layout);
|
||||||
}
|
}
|
||||||
else
|
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);
|
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
|
||||||
evas_object_focus_set(ec->frame, 1);
|
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");
|
edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e");
|
||||||
if (!pw->drag.from_pager)
|
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 (max) e_client_maximize(ec, max);
|
||||||
if (fullscreen) e_client_fullscreen(ec, fs);
|
if (fullscreen) e_client_fullscreen(ec, fs);
|
||||||
|
e_deskmirror_update_force(pd->o_layout);
|
||||||
}
|
}
|
||||||
EINA_LIST_FOREACH(pd->pager->desks, l, pdd)
|
EINA_LIST_FOREACH(pd->pager->desks, l, pdd)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue