forked from enlightenment/enlightenment
Fix pager stacking issue. Maybe we should have a general stack event
instead of lower/raise? SVN revision: 16408
This commit is contained in:
parent
0a2b26e83a
commit
c51ae6b1c5
3
TODO
3
TODO
|
@ -20,9 +20,6 @@ Some of the things (in very short form) that need to be done to E17...
|
|||
map/unmap event and something else... they still are around in x- just e
|
||||
hides them and never shows them again
|
||||
fullscreen. is this correct?
|
||||
* BUG: Check stacking in pager, doesn't care about below, above.
|
||||
e_container_border_raise/lower should return what window they are above/
|
||||
below.
|
||||
* BUG: if you have 2 zones and you fill up zone 2 (right) mostly and then run
|
||||
a big xev (xev -g 1280x1024) that wont fit it gets placed offscreen to the
|
||||
right of zone 2
|
||||
|
|
|
@ -771,41 +771,63 @@ e_border_move_resize(E_Border *bd, int x, int y, int w, int h)
|
|||
void
|
||||
e_border_raise(E_Border *bd)
|
||||
{
|
||||
E_Border *above;
|
||||
|
||||
E_OBJECT_CHECK(bd);
|
||||
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
||||
|
||||
e_container_border_raise(bd);
|
||||
|
||||
above = e_container_border_raise(bd);
|
||||
if (above)
|
||||
{
|
||||
E_Event_Border_Raise *ev;
|
||||
|
||||
ev = calloc(1, sizeof(E_Event_Border_Raise));
|
||||
ev->border = bd;
|
||||
e_object_ref(E_OBJECT(bd));
|
||||
// e_object_breadcrumb_add(E_OBJECT(bd), "border_raise_event");
|
||||
ev->above = NULL;
|
||||
ev->above = above;
|
||||
e_object_ref(E_OBJECT(above));
|
||||
ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the border hasn't been raised above anything, it is actually lowered */
|
||||
E_Event_Border_Lower *ev;
|
||||
ev = calloc(1, sizeof(E_Event_Border_Lower));
|
||||
ev->border = bd;
|
||||
e_object_ref(E_OBJECT(bd));
|
||||
ev->below = NULL;
|
||||
ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_border_lower(E_Border *bd)
|
||||
{
|
||||
E_Border *below;
|
||||
|
||||
E_OBJECT_CHECK(bd);
|
||||
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
||||
|
||||
e_container_border_lower(bd);
|
||||
|
||||
below = e_container_border_lower(bd);
|
||||
if (below)
|
||||
{
|
||||
E_Event_Border_Lower *ev;
|
||||
|
||||
ev = calloc(1, sizeof(E_Event_Border_Lower));
|
||||
ev->border = bd;
|
||||
e_object_ref(E_OBJECT(bd));
|
||||
// e_object_breadcrumb_add(E_OBJECT(bd), "border_lower_event");
|
||||
ev->below = NULL;
|
||||
ev->below = below;
|
||||
e_object_ref(E_OBJECT(below));
|
||||
ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the border hasn't been lowered below anything, it is actually raised */
|
||||
E_Event_Border_Raise *ev;
|
||||
ev = calloc(1, sizeof(E_Event_Border_Raise));
|
||||
ev->border = bd;
|
||||
e_object_ref(E_OBJECT(bd));
|
||||
ev->above = NULL;
|
||||
ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -6292,7 +6314,7 @@ _e_border_menu_cb_on_top(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
bd->layer = 150;
|
||||
e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
|
||||
}
|
||||
e_container_border_raise(bd);
|
||||
e_border_raise(bd);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -6306,7 +6328,7 @@ _e_border_menu_cb_below(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
bd->layer = 50;
|
||||
e_hints_window_stacking_set(bd, E_STACKING_BELOW);
|
||||
}
|
||||
e_container_border_raise(bd);
|
||||
e_border_raise(bd);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -6320,7 +6342,7 @@ _e_border_menu_cb_normal(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
bd->layer = 100;
|
||||
e_hints_window_stacking_set(bd, E_STACKING_NONE);
|
||||
}
|
||||
e_container_border_raise(bd);
|
||||
e_border_raise(bd);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -645,9 +645,11 @@ e_container_window_lower(E_Container *con, Ecore_X_Window win, int layer)
|
|||
con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE);
|
||||
}
|
||||
|
||||
void
|
||||
E_Border *
|
||||
e_container_border_raise(E_Border *bd)
|
||||
{
|
||||
E_Border *above = NULL;
|
||||
Evas_List *l;
|
||||
int pos, i;
|
||||
|
||||
/* Remove from old layer */
|
||||
|
@ -674,12 +676,33 @@ e_container_border_raise(E_Border *bd)
|
|||
bd->zone->container->layers[pos - 1].clients =
|
||||
evas_list_append(bd->zone->container->layers[pos - 1].clients, bd);
|
||||
|
||||
/* Find the window below this one */
|
||||
l = evas_list_find_list(bd->zone->container->layers[pos - 1].clients, bd);
|
||||
if (l->prev)
|
||||
above = l->prev->data;
|
||||
else
|
||||
{
|
||||
/* Need to check the layers below */
|
||||
for (i = pos - 2; i >= 0; i--)
|
||||
{
|
||||
if ((bd->zone->container->layers[i].clients) &&
|
||||
(l = evas_list_last(bd->zone->container->layers[i].clients)))
|
||||
{
|
||||
above = l->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
e_hints_client_stacking_set();
|
||||
return above;
|
||||
}
|
||||
|
||||
void
|
||||
E_Border *
|
||||
e_container_border_lower(E_Border *bd)
|
||||
{
|
||||
E_Border *below = NULL;
|
||||
Evas_List *l;
|
||||
int pos, i;
|
||||
|
||||
/* Remove from old layer */
|
||||
|
@ -706,7 +729,25 @@ e_container_border_lower(E_Border *bd)
|
|||
bd->zone->container->layers[pos].clients =
|
||||
evas_list_prepend(bd->zone->container->layers[pos].clients, bd);
|
||||
|
||||
/* Find the window above this one */
|
||||
l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd);
|
||||
if (l->next)
|
||||
below = l->next->data;
|
||||
else
|
||||
{
|
||||
/* Need to check the layers above */
|
||||
for (i = pos + 1; i < 7; i++)
|
||||
{
|
||||
if (bd->zone->container->layers[i].clients)
|
||||
{
|
||||
below = bd->zone->container->layers[i].clients->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
e_hints_client_stacking_set();
|
||||
return below;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -134,8 +134,8 @@ EAPI void e_container_border_add(E_Border *bd);
|
|||
EAPI void e_container_border_remove(E_Border *bd);
|
||||
EAPI void e_container_window_raise(E_Container *con, Ecore_X_Window, int layer);
|
||||
EAPI void e_container_window_lower(E_Container *con, Ecore_X_Window, int layer);
|
||||
EAPI void e_container_border_raise(E_Border *bd);
|
||||
EAPI void e_container_border_lower(E_Border *bd);
|
||||
EAPI E_Border *e_container_border_raise(E_Border *bd);
|
||||
EAPI E_Border *e_container_border_lower(E_Border *bd);
|
||||
EAPI void e_container_border_stack_above(E_Border *bd, E_Border *above);
|
||||
EAPI void e_container_border_stack_below(E_Border *bd, E_Border *below);
|
||||
|
||||
|
|
Loading…
Reference in New Issue