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, static void _e_border_frame_replace(E_Border *bd,
Eina_Bool argb); Eina_Bool argb);
static void _e_border_show(E_Border *bd);
static void _e_border_hide(E_Border *bd);
/* local subsystem globals */ /* local subsystem globals */
static Eina_List *handlers = NULL; static Eina_List *handlers = NULL;
@ -2907,20 +2909,10 @@ e_border_idler_before(void)
if ((bd->changes.visible) && (bd->visible) && if ((bd->changes.visible) && (bd->visible) &&
(!bd->new_client) && (!bd->changes.pos) && (!bd->new_client) && (!bd->changes.pos) &&
(!bd->changes.size)) (!bd->changes.size))
{ {
ecore_evas_show(bd->bg_ecore_evas); _e_border_show(bd);
if (bd->post_job) bd->changes.visible = 0;
{ }
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_container_border_list_free(bl); e_container_border_list_free(bl);
@ -2929,35 +2921,21 @@ e_border_idler_before(void)
while ((bd = e_container_border_list_next(bl))) while ((bd = e_container_border_list_next(bl)))
{ {
if (e_object_is_del(E_OBJECT(bd))) continue; if (e_object_is_del(E_OBJECT(bd))) continue;
if ((bd->changes.visible) && (!bd->visible))
{ if ((bd->changes.visible) && (!bd->visible))
if (!e_manager_comp_evas_get(bd->zone->container->manager)) {
{ _e_border_hide(bd);
ecore_x_window_hide(bd->win); bd->changes.visible = 0;
ecore_evas_hide(bd->bg_ecore_evas); }
}
else
{
ecore_x_composite_window_events_disable(bd->win);
}
bd->changes.visible = 0;
}
if (bd->changed) _e_border_eval(bd); if (bd->changed) _e_border_eval(bd);
if ((bd->changes.visible) && (bd->visible)) if ((bd->changes.visible) && (bd->visible))
{ {
ecore_evas_show(bd->bg_ecore_evas); _e_border_show(bd);
if (bd->post_job) bd->changes.visible = 0;
{ }
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_container_border_list_free(bl); 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_Timer *action_timer = NULL;
static Ecore_X_Rectangle action_orig; 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 static int
_e_border_action_input_win_del(void) _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); ecore_x_window_resize(bd->win, bd->w, bd->h);
} }
if (bd->post_show) if (bd->post_show)
{ {
if (bd->visible) if (bd->visible)
{ {
ecore_x_window_show(bd->win); bd->post_job = NULL;
if (!bd->comp_hidden) _e_border_show(bd);
ecore_x_composite_window_events_enable(bd->win);
} }
} }
bd->post_show = 0; 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) _e_border_show(bd);
{
bd->post_show = 1;
}
else
{
if (!bd->comp_hidden)
ecore_x_composite_window_events_enable(bd->win);
ecore_x_window_show(bd->win);
}
if (bd->cur_mouse_action) if (bd->cur_mouse_action)
{ {
bd->moveinfo.down.x = bd->x + bd->fx.x; 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); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
if (bd->comp_hidden == hidden) return; if (bd->comp_hidden == hidden) return;
bd->comp_hidden = hidden;
if (bd->comp_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 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*/ /*vim:ts=8 sw=3 sts=3 expandtab cino=>5n-3f0^-2{2(0W1st0*/