forked from enlightenment/enlightenment
e client focus - fix focus if moving focused window to new desk - long
fix client focus the very very very long way vs
418319fc94
This commit is contained in:
parent
42d3e30f5c
commit
9ae24a3a4a
|
@ -1283,16 +1283,16 @@ ACT_FN_GO(window_zone_move_by, )
|
||||||
move = 0;
|
move = 0;
|
||||||
zone = e_comp_zone_number_get(move);
|
zone = e_comp_zone_number_get(move);
|
||||||
if (!zone) return;
|
if (!zone) return;
|
||||||
|
if (ec->zone == zone) return;
|
||||||
max = ec->maximized;
|
max = ec->maximized;
|
||||||
fs = ec->fullscreen_policy;
|
fs = ec->fullscreen_policy;
|
||||||
fullscreen = ec->fullscreen;
|
fullscreen = ec->fullscreen;
|
||||||
if (ec->maximized) e_client_unmaximize(ec, E_MAXIMIZE_BOTH);
|
if (ec->maximized) e_client_unmaximize(ec, E_MAXIMIZE_BOTH);
|
||||||
if (fullscreen) e_client_unfullscreen(ec);
|
if (fullscreen) e_client_unfullscreen(ec);
|
||||||
e_client_zone_set(ec, zone);
|
e_client_zone_set(ec, zone);
|
||||||
// e_client_desk_set(ec, e_desk_current_get(zone));
|
|
||||||
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);
|
||||||
evas_object_focus_set(ec->frame, 1);
|
e_client_focus_set_with_pointer(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
@ -1313,9 +1313,19 @@ ACT_FN_GO(window_desk_move_to, )
|
||||||
if (sscanf(params, "%d %d", &x, &y) == 2)
|
if (sscanf(params, "%d %d", &x, &y) == 2)
|
||||||
{
|
{
|
||||||
E_Desk *desk;
|
E_Desk *desk;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
desk = e_desk_at_xy_get(ec->zone, x, y);
|
desk = e_desk_at_xy_get(ec->zone, x, y);
|
||||||
if (desk) e_client_desk_set(ec, desk);
|
if ((desk) && (desk != old_desk))
|
||||||
|
{
|
||||||
|
e_client_desk_set(ec, desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2805,7 +2805,6 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
|
||||||
{
|
{
|
||||||
E_Event_Client_Desk_Set *ev;
|
E_Event_Client_Desk_Set *ev;
|
||||||
E_Desk *old_desk;
|
E_Desk *old_desk;
|
||||||
Eina_Bool was_focused = ec->focused;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK(ec);
|
E_OBJECT_CHECK(ec);
|
||||||
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
|
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
|
||||||
|
@ -2873,11 +2872,6 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
|
||||||
e_client_res_change_geometry_restore(ec);
|
e_client_res_change_geometry_restore(ec);
|
||||||
ec->pre_res_change.valid = 0;
|
ec->pre_res_change.valid = 0;
|
||||||
}
|
}
|
||||||
if (was_focused)
|
|
||||||
{
|
|
||||||
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
|
||||||
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ec->stack.prev || ec->stack.next)
|
if (ec->stack.prev || ec->stack.next)
|
||||||
|
|
|
@ -2170,8 +2170,19 @@ _e_comp_x_message(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Cl
|
||||||
{
|
{
|
||||||
if (e_util_strcmp(p, ec->desk->window_profile))
|
if (e_util_strcmp(p, ec->desk->window_profile))
|
||||||
{
|
{
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
E_Desk *desk = e_comp_desk_window_profile_get(p);
|
E_Desk *desk = e_comp_desk_window_profile_get(p);
|
||||||
if (desk) e_client_desk_set(ec, desk);
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
|
if ((desk) && (desk != old_desk))
|
||||||
|
{
|
||||||
|
e_client_desk_set(ec, desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(p);
|
free(p);
|
||||||
|
@ -2245,14 +2256,22 @@ _e_comp_x_message(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Cl
|
||||||
char *p = ecore_x_atom_name_get(ev->data.l[1]);
|
char *p = ecore_x_atom_name_get(ev->data.l[1]);
|
||||||
if (!e_util_strcmp(ec->e.state.profile.wait, p))
|
if (!e_util_strcmp(ec->e.state.profile.wait, p))
|
||||||
{
|
{
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
E_Desk *desk = ec->e.state.profile.wait_desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
eina_stringshare_replace(&ec->e.state.profile.wait, NULL);
|
eina_stringshare_replace(&ec->e.state.profile.wait, NULL);
|
||||||
ec->e.state.profile.wait_for_done = 0;
|
ec->e.state.profile.wait_for_done = 0;
|
||||||
E_Desk *desk = ec->e.state.profile.wait_desk;
|
if ((desk) && (desk != old_desk))
|
||||||
if ((desk) && (desk != ec->desk))
|
|
||||||
{
|
{
|
||||||
eina_stringshare_replace(&ec->e.state.profile.name,
|
eina_stringshare_replace(&ec->e.state.profile.name,
|
||||||
desk->window_profile);
|
desk->window_profile);
|
||||||
e_client_desk_set(ec, desk);
|
e_client_desk_set(ec, desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
e_client_desk_window_profile_wait_desk_set(ec, NULL);
|
e_client_desk_window_profile_wait_desk_set(ec, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1318,10 +1318,18 @@ _e_client_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
|
||||||
|
|
||||||
desk = data;
|
desk = data;
|
||||||
ec = e_object_data_get(E_OBJECT(m));
|
ec = e_object_data_get(E_OBJECT(m));
|
||||||
if ((ec) && (desk))
|
if ((ec) && (desk) && (ec->desk != desk))
|
||||||
{
|
{
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
ec->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(ec, desk);
|
e_client_desk_set(ec, desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,8 +141,19 @@ _e_msgbus_window_sendtodesktop_cb( const Eldbus_Service_Interface *iface EINA_UN
|
||||||
{
|
{
|
||||||
if (xdesk < zone->desk_x_count && ydesk < zone->desk_y_count)
|
if (xdesk < zone->desk_x_count && ydesk < zone->desk_y_count)
|
||||||
{
|
{
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
desk = e_desk_at_xy_get(zone, xdesk, ydesk);
|
desk = e_desk_at_xy_get(zone, xdesk, ydesk);
|
||||||
if (desk) e_client_desk_set(ec, desk);
|
if ((desk) && (desk != old_desk))
|
||||||
|
{
|
||||||
|
e_client_desk_set(ec, desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1240,11 +1240,13 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int dx, dy, x, y, zx, zy, zw, zh;
|
int dx, dy, x, y, zx, zy, zw, zh;
|
||||||
pw->client->hidden = !p->active_pd->desk->visible;
|
E_Client *ec = pw->client;
|
||||||
e_client_desk_set(pw->client, p->active_pd->desk);
|
|
||||||
|
|
||||||
dx = (pw->client->w / 2);
|
ec->hidden = !p->active_pd->desk->visible;
|
||||||
dy = (pw->client->h / 2);
|
e_client_desk_set(ec, p->active_pd->desk);
|
||||||
|
|
||||||
|
dx = (ec->w / 2);
|
||||||
|
dy = (ec->h / 2);
|
||||||
|
|
||||||
evas_pointer_canvas_xy_get(evas_object_evas_get(p->o_table), &x, &y);
|
evas_pointer_canvas_xy_get(evas_object_evas_get(p->o_table), &x, &y);
|
||||||
e_zone_useful_geometry_get(p->zone, &zx, &zy, &zw, &zh);
|
e_zone_useful_geometry_get(p->zone, &zx, &zy, &zw, &zh);
|
||||||
|
@ -1253,26 +1255,22 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
if (dx < x)
|
if (dx < x)
|
||||||
{
|
{
|
||||||
x -= dx;
|
x -= dx;
|
||||||
if ((pw->client->w < zw) &&
|
if ((ec->w < zw) && (x + ec->w > zx + zw))
|
||||||
(x + pw->client->w > zx + zw))
|
x -= x + ec->w - (zx + zw);
|
||||||
x -= x + pw->client->w - (zx + zw);
|
|
||||||
}
|
}
|
||||||
else x = 0;
|
else x = 0;
|
||||||
|
|
||||||
if (dy < y)
|
if (dy < y)
|
||||||
{
|
{
|
||||||
y -= dy;
|
y -= dy;
|
||||||
if ((pw->client->h < zh) &&
|
if ((ec->h < zh) && (y + ec->h > zy + zh))
|
||||||
(y + pw->client->h > zy + zh))
|
y -= y + ec->h - (zy + zh);
|
||||||
y -= y + pw->client->h - (zy + zh);
|
|
||||||
}
|
}
|
||||||
else y = 0;
|
else y = 0;
|
||||||
evas_object_move(pw->client->frame, x, y);
|
evas_object_move(ec->frame, x, y);
|
||||||
|
|
||||||
|
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
|
||||||
if (!(pw->client->lock_user_stacking))
|
evas_object_focus_set(ec->frame, 1);
|
||||||
evas_object_raise(pw->client->frame);
|
|
||||||
evas_object_focus_set(pw->client->frame, 1);
|
|
||||||
}
|
}
|
||||||
if (p->active_drop_pd)
|
if (p->active_drop_pd)
|
||||||
{
|
{
|
||||||
|
@ -1338,6 +1336,9 @@ _pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y)
|
||||||
if (pd)
|
if (pd)
|
||||||
{
|
{
|
||||||
int zx, zy, zw, zh, vx, vy;
|
int zx, zy, zw, zh, vx, vy;
|
||||||
|
E_Client *ec = pw->client;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
pw->drag.in_pager = 1;
|
pw->drag.in_pager = 1;
|
||||||
//makes drags look weird
|
//makes drags look weird
|
||||||
|
@ -1347,11 +1348,16 @@ _pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y)
|
||||||
e_deskmirror_coord_canvas_to_virtual(pd->o_layout,
|
e_deskmirror_coord_canvas_to_virtual(pd->o_layout,
|
||||||
x + pw->drag.dx,
|
x + pw->drag.dx,
|
||||||
y + pw->drag.dy, &vx, &vy);
|
y + pw->drag.dy, &vx, &vy);
|
||||||
pw->client->hidden = !pd->desk->visible;
|
ec->hidden = !pd->desk->visible;
|
||||||
e_client_desk_set(pw->client, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
x = E_CLAMP(vx + zx, zx, zx + zw - pw->client->w);
|
x = E_CLAMP(vx + zx, zx, zx + zw - ec->w);
|
||||||
y = E_CLAMP(vy + zy, zy, zy + zh - pw->client->h);
|
y = E_CLAMP(vy + zy, zy, zy + zh - ec->h);
|
||||||
evas_object_move(pw->client->frame, x, y);
|
evas_object_move(ec->frame, x, y);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1465,6 +1471,8 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
E_Maximize max = ec->maximized;
|
E_Maximize max = ec->maximized;
|
||||||
E_Fullscreen fs = ec->fullscreen_policy;
|
E_Fullscreen fs = ec->fullscreen_policy;
|
||||||
Eina_Bool fullscreen = ec->fullscreen;
|
Eina_Bool fullscreen = ec->fullscreen;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
if (ec->iconic) e_client_uniconify(ec);
|
if (ec->iconic) e_client_uniconify(ec);
|
||||||
if (ec->maximized)
|
if (ec->maximized)
|
||||||
|
@ -1472,8 +1480,13 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
if (fullscreen) e_client_unfullscreen(ec);
|
if (fullscreen) e_client_unfullscreen(ec);
|
||||||
ec->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(ec, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
evas_object_raise(ec->frame);
|
evas_object_raise(ec->frame);
|
||||||
|
|
||||||
if ((!max) && (!fullscreen))
|
if ((!max) && (!fullscreen))
|
||||||
{
|
{
|
||||||
int zx, zy, zw, zh, mx, my;
|
int zx, zy, zw, zh, mx, my;
|
||||||
|
|
|
@ -2158,11 +2158,13 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int dx, dy, x, y, zx, zy, zw, zh;
|
int dx, dy, x, y, zx, zy, zw, zh;
|
||||||
pw->client->hidden = !p->active_pd->desk->visible;
|
E_Client *ec = pw->client;
|
||||||
e_client_desk_set(pw->client, p->active_pd->desk);
|
|
||||||
|
|
||||||
dx = (pw->client->w / 2);
|
ec->hidden = !p->active_pd->desk->visible;
|
||||||
dy = (pw->client->h / 2);
|
e_client_desk_set(ec, p->active_pd->desk);
|
||||||
|
|
||||||
|
dx = (ec->w / 2);
|
||||||
|
dy = (ec->h / 2);
|
||||||
|
|
||||||
evas_pointer_canvas_xy_get(evas_object_evas_get(p->o_table), &x, &y);
|
evas_pointer_canvas_xy_get(evas_object_evas_get(p->o_table), &x, &y);
|
||||||
e_zone_useful_geometry_get(p->zone, &zx, &zy, &zw, &zh);
|
e_zone_useful_geometry_get(p->zone, &zx, &zy, &zw, &zh);
|
||||||
|
@ -2171,25 +2173,22 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
if (dx < x)
|
if (dx < x)
|
||||||
{
|
{
|
||||||
x -= dx;
|
x -= dx;
|
||||||
if ((pw->client->w < zw) &&
|
if ((ec->w < zw) && (x + ec->w > zx + zw))
|
||||||
(x + pw->client->w > zx + zw))
|
x -= x + ec->w - (zx + zw);
|
||||||
x -= x + pw->client->w - (zx + zw);
|
|
||||||
}
|
}
|
||||||
else x = 0;
|
else x = 0;
|
||||||
|
|
||||||
if (dy < y)
|
if (dy < y)
|
||||||
{
|
{
|
||||||
y -= dy;
|
y -= dy;
|
||||||
if ((pw->client->h < zh) &&
|
if ((ec->h < zh) && (y + ec->h > zy + zh))
|
||||||
(y + pw->client->h > zy + zh))
|
y -= y + ec->h - (zy + zh);
|
||||||
y -= y + pw->client->h - (zy + zh);
|
|
||||||
}
|
}
|
||||||
else y = 0;
|
else y = 0;
|
||||||
evas_object_move(pw->client->frame, x, y);
|
evas_object_move(ec->frame, x, y);
|
||||||
|
|
||||||
if (!(pw->client->lock_user_stacking))
|
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
|
||||||
evas_object_raise(pw->client->frame);
|
evas_object_focus_set(ec->frame, 1);
|
||||||
evas_object_focus_set(pw->client->frame, 1);
|
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
@ -2231,6 +2230,9 @@ _pager_update_drop_position(Pager *p, Pager_Desk *pd, Evas_Coord x, Evas_Coord y
|
||||||
if (pd)
|
if (pd)
|
||||||
{
|
{
|
||||||
int zx, zy, zw, zh, vx, vy;
|
int zx, zy, zw, zh, vx, vy;
|
||||||
|
E_Client *ec = pw->client;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
pw->drag.in_pager = 1;
|
pw->drag.in_pager = 1;
|
||||||
//makes drags look weird
|
//makes drags look weird
|
||||||
|
@ -2240,11 +2242,16 @@ _pager_update_drop_position(Pager *p, Pager_Desk *pd, Evas_Coord x, Evas_Coord y
|
||||||
e_deskmirror_coord_canvas_to_virtual(pd->o_layout,
|
e_deskmirror_coord_canvas_to_virtual(pd->o_layout,
|
||||||
x + pw->drag.dx,
|
x + pw->drag.dx,
|
||||||
y + pw->drag.dy, &vx, &vy);
|
y + pw->drag.dy, &vx, &vy);
|
||||||
pw->client->hidden = !pd->desk->visible;
|
ec->hidden = !pd->desk->visible;
|
||||||
e_client_desk_set(pw->client, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
x = E_CLAMP(vx + zx, zx, zx + zw - pw->client->w);
|
x = E_CLAMP(vx + zx, zx, zx + zw - ec->w);
|
||||||
y = E_CLAMP(vy + zy, zy, zy + zh - pw->client->h);
|
y = E_CLAMP(vy + zy, zy, zy + zh - ec->h);
|
||||||
evas_object_move(pw->client->frame, x, y);
|
evas_object_move(ec->frame, x, y);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2354,6 +2361,8 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
E_Maximize max = ec->maximized;
|
E_Maximize max = ec->maximized;
|
||||||
E_Fullscreen fs = ec->fullscreen_policy;
|
E_Fullscreen fs = ec->fullscreen_policy;
|
||||||
Eina_Bool fullscreen = ec->fullscreen;
|
Eina_Bool fullscreen = ec->fullscreen;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
if (ec->iconic) e_client_uniconify(ec);
|
if (ec->iconic) e_client_uniconify(ec);
|
||||||
if (ec->maximized)
|
if (ec->maximized)
|
||||||
|
@ -2361,6 +2370,11 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
if (fullscreen) e_client_unfullscreen(ec);
|
if (fullscreen) e_client_unfullscreen(ec);
|
||||||
ec->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(ec, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
evas_object_raise(ec->frame);
|
evas_object_raise(ec->frame);
|
||||||
|
|
||||||
if ((!max) && (!fullscreen))
|
if ((!max) && (!fullscreen))
|
||||||
|
|
|
@ -1889,6 +1889,7 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
||||||
if (pd)
|
if (pd)
|
||||||
{
|
{
|
||||||
int zx, zy, zw, zh;
|
int zx, zy, zw, zh;
|
||||||
|
E_Client *ec = pw->client;
|
||||||
|
|
||||||
e_zone_useful_geometry_get(pd->desk->zone, &zx, &zy, &zw, &zh);
|
e_zone_useful_geometry_get(pd->desk->zone, &zx, &zy, &zw, &zh);
|
||||||
e_layout_coord_canvas_to_virtual(pd->o_layout,
|
e_layout_coord_canvas_to_virtual(pd->o_layout,
|
||||||
|
@ -1896,15 +1897,23 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
||||||
my + pw->drag.dy, &vx, &vy);
|
my + pw->drag.dy, &vx, &vy);
|
||||||
if (pd != pw->desk)
|
if (pd != pw->desk)
|
||||||
{
|
{
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
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");
|
||||||
pw->client->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(pw->client, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e");
|
edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e");
|
||||||
pd->pager->active_drop_pd = pd;
|
pd->pager->active_drop_pd = pd;
|
||||||
}
|
}
|
||||||
mx = E_CLAMP(vx + zx, zx, zx + zw - pw->client->w);
|
mx = E_CLAMP(vx + zx, zx, zx + zw - ec->w);
|
||||||
my = E_CLAMP(vy + zy, zy, zy + zh - pw->client->h);
|
my = E_CLAMP(vy + zy, zy, zy + zh - ec->h);
|
||||||
evas_object_move(pw->client->frame, mx, my);
|
evas_object_move(ec->frame, mx, my);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1966,24 +1975,25 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
if (!dropped)
|
if (!dropped)
|
||||||
{
|
{
|
||||||
int zx, zy, zw, zh;
|
int zx, zy, zw, zh;
|
||||||
|
E_Client *ec = pw->client;
|
||||||
|
|
||||||
/* wasn't dropped (on pager). move it to position of mouse on screen */
|
/* wasn't dropped (on pager). move it to position of mouse on screen */
|
||||||
zone = e_zone_current_get();
|
zone = e_zone_current_get();
|
||||||
desk = e_desk_current_get(zone);
|
desk = e_desk_current_get(zone);
|
||||||
|
|
||||||
e_client_zone_set(pw->client, zone);
|
e_client_zone_set(ec, zone);
|
||||||
if ((pw->client->desk != desk) && desk->visible)
|
if ((ec->desk != desk) && desk->visible)
|
||||||
{
|
{
|
||||||
pw->client->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(pw->client, desk);
|
e_client_desk_set(ec, desk);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_WAYLAND_ONLY
|
#ifndef HAVE_WAYLAND_ONLY
|
||||||
ecore_x_pointer_last_xy_get(&x, &y);
|
ecore_x_pointer_last_xy_get(&x, &y);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dx = (pw->client->w / 2);
|
dx = (ec->w / 2);
|
||||||
dy = (pw->client->h / 2);
|
dy = (ec->h / 2);
|
||||||
|
|
||||||
e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
|
e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
|
||||||
|
|
||||||
|
@ -1991,24 +2001,21 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
||||||
if (dx < x)
|
if (dx < x)
|
||||||
{
|
{
|
||||||
x -= dx;
|
x -= dx;
|
||||||
if ((pw->client->w < zw) &&
|
if ((ec->w < zw) && (x + ec->w > zx + zw))
|
||||||
(x + pw->client->w > zx + zw))
|
x -= x + ec->w - (zx + zw);
|
||||||
x -= x + pw->client->w - (zx + zw);
|
|
||||||
}
|
}
|
||||||
else x = 0;
|
else x = 0;
|
||||||
|
|
||||||
if (dy < y)
|
if (dy < y)
|
||||||
{
|
{
|
||||||
y -= dy;
|
y -= dy;
|
||||||
if ((pw->client->h < zh) &&
|
if ((ec->h < zh) && (y + ec->h > zy + zh))
|
||||||
(y + pw->client->h > zy + zh))
|
y -= y + ec->h - (zy + zh);
|
||||||
y -= y + pw->client->h - (zy + zh);
|
|
||||||
}
|
}
|
||||||
else y = 0;
|
else y = 0;
|
||||||
evas_object_move(pw->client->frame, x, y);
|
evas_object_move(ec->frame, x, y);
|
||||||
|
|
||||||
if (!(pw->client->lock_user_stacking))
|
if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame);
|
||||||
evas_object_raise(pw->client->frame);
|
|
||||||
}
|
}
|
||||||
if (pw->desk->pager->active_drop_pd)
|
if (pw->desk->pager->active_drop_pd)
|
||||||
{
|
{
|
||||||
|
@ -2156,6 +2163,8 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
E_Maximize max = ec->maximized;
|
E_Maximize max = ec->maximized;
|
||||||
E_Fullscreen fs = ec->fullscreen_policy;
|
E_Fullscreen fs = ec->fullscreen_policy;
|
||||||
Eina_Bool fullscreen = ec->fullscreen;
|
Eina_Bool fullscreen = ec->fullscreen;
|
||||||
|
E_Desk *old_desk = ec->desk;
|
||||||
|
Eina_Bool was_focused = e_client_stack_focused_get(ec);
|
||||||
|
|
||||||
if (ec->iconic) e_client_uniconify(ec);
|
if (ec->iconic) e_client_uniconify(ec);
|
||||||
if (ec->maximized)
|
if (ec->maximized)
|
||||||
|
@ -2164,6 +2173,11 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
||||||
if (pd->desk->visible)
|
if (pd->desk->visible)
|
||||||
ec->hidden = 0;
|
ec->hidden = 0;
|
||||||
e_client_desk_set(ec, pd->desk);
|
e_client_desk_set(ec, pd->desk);
|
||||||
|
if (was_focused)
|
||||||
|
{
|
||||||
|
E_Client *ec_focus = e_desk_last_focused_focus(old_desk);
|
||||||
|
if (ec_focus) e_client_focus_set_with_pointer(ec_focus);
|
||||||
|
}
|
||||||
evas_object_raise(ec->frame);
|
evas_object_raise(ec->frame);
|
||||||
|
|
||||||
if ((!max) && (!fullscreen))
|
if ((!max) && (!fullscreen))
|
||||||
|
|
Loading…
Reference in New Issue