e17: fix dnd to invisible windows and fix e_border_comp_hidden_set

- dont drop e drags (e.g. efm files) to windows from other desks
- should also fix wrong last desk focus set with deskflip animations enabled


SVN revision: 58551
This commit is contained in:
Hannes Janetzek 2011-04-11 12:22:17 +00:00
parent 1649d2b09a
commit e923d63c72
1 changed files with 71 additions and 57 deletions

View File

@ -200,6 +200,8 @@ static void _e_border_client_move_resize_send(E_Border *bd);
static void _e_border_frame_replace(E_Border *bd,
Eina_Bool argb);
static void _e_border_show(E_Border *bd);
static void _e_border_hide(E_Border *bd);
/* local subsystem globals */
static Eina_List *handlers = NULL;
@ -2907,20 +2909,10 @@ e_border_idler_before(void)
if ((bd->changes.visible) && (bd->visible) &&
(!bd->new_client) && (!bd->changes.pos) &&
(!bd->changes.size))
{
ecore_evas_show(bd->bg_ecore_evas);
if (bd->post_job)
{
bd->post_show = 1;
}
else
{
if (!bd->comp_hidden)
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_show(bd->win);
}
bd->changes.visible = 0;
}
{
_e_border_show(bd);
bd->changes.visible = 0;
}
}
e_container_border_list_free(bl);
@ -2929,35 +2921,21 @@ e_border_idler_before(void)
while ((bd = e_container_border_list_next(bl)))
{
if (e_object_is_del(E_OBJECT(bd))) continue;
if ((bd->changes.visible) && (!bd->visible))
{
if (!e_manager_comp_evas_get(bd->zone->container->manager))
{
ecore_x_window_hide(bd->win);
ecore_evas_hide(bd->bg_ecore_evas);
}
else
{
ecore_x_composite_window_events_disable(bd->win);
}
bd->changes.visible = 0;
}
if ((bd->changes.visible) && (!bd->visible))
{
_e_border_hide(bd);
bd->changes.visible = 0;
}
if (bd->changed) _e_border_eval(bd);
if ((bd->changes.visible) && (bd->visible))
{
ecore_evas_show(bd->bg_ecore_evas);
if (bd->post_job)
{
bd->post_show = 1;
}
else
{
if (!bd->comp_hidden)
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_show(bd->win);
}
bd->changes.visible = 0;
}
{
_e_border_show(bd);
bd->changes.visible = 0;
}
}
e_container_border_list_free(bl);
}
@ -3015,6 +2993,41 @@ static Ecore_Event_Handler *action_handler_mouse = NULL;
static Ecore_Timer *action_timer = NULL;
static Ecore_X_Rectangle action_orig;
static void
_e_border_show(E_Border *bd)
{
ecore_evas_show(bd->bg_ecore_evas);
if (bd->post_job)
{
bd->post_show = 1;
return;
}
if (!bd->comp_hidden)
{
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_ignore_set(bd->win, EINA_FALSE);
}
ecore_x_window_show(bd->win);
}
static void
_e_border_hide(E_Border *bd)
{
if (!e_manager_comp_evas_get(bd->zone->container->manager))
{
ecore_x_window_hide(bd->win);
ecore_evas_hide(bd->bg_ecore_evas);
}
else
{
ecore_x_composite_window_events_disable(bd->win);
ecore_x_window_ignore_set(bd->win, EINA_TRUE);
}
}
static int
_e_border_action_input_win_del(void)
{
@ -5980,13 +5993,13 @@ _e_border_post_move_resize_job(void *data)
{
ecore_x_window_resize(bd->win, bd->w, bd->h);
}
if (bd->post_show)
{
if (bd->visible)
{
ecore_x_window_show(bd->win);
if (!bd->comp_hidden)
ecore_x_composite_window_events_enable(bd->win);
bd->post_job = NULL;
_e_border_show(bd);
}
}
bd->post_show = 0;
@ -7520,17 +7533,9 @@ _e_border_eval(E_Border *bd)
}
}
}
ecore_evas_show(bd->bg_ecore_evas);
if (bd->post_job)
{
bd->post_show = 1;
}
else
{
if (!bd->comp_hidden)
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_show(bd->win);
}
_e_border_show(bd);
if (bd->cur_mouse_action)
{
bd->moveinfo.down.x = bd->x + bd->fx.x;
@ -8683,9 +8688,18 @@ e_border_comp_hidden_set(E_Border *bd,
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
if (bd->comp_hidden == hidden) return;
bd->comp_hidden = hidden;
if (bd->comp_hidden)
ecore_x_composite_window_events_disable(bd->win);
{
ecore_x_composite_window_events_disable(bd->win);
ecore_x_window_ignore_set(bd->win, EINA_TRUE);
}
else
ecore_x_composite_window_events_enable(bd->win);
{
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_ignore_set(bd->win, EINA_FALSE);
}
}
/*vim:ts=8 sw=3 sts=3 expandtab cino=>5n-3f0^-2{2(0W1st0*/