forked from enlightenment/enlightenment
* Check and remember WM_TRANSIENT_FOR relationships.
* Only check if bd->client.icccm.transient_for is set, bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG is only for decorations. * When a border is raised, raise it's children above it. * Should this behaviour be userdefineable? SVN revision: 16459
This commit is contained in:
parent
8c34f0b478
commit
9af2046985
1
TODO
1
TODO
|
@ -17,7 +17,6 @@ Some of the things (in very short form) that need to be done to E17...
|
||||||
* BUG: if you have 2 zones and you fill up zone 2 (right) mostly and then run
|
* 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
|
a big xev (xev -g 1280x1024) that wont fit it gets placed offscreen to the
|
||||||
right of zone 2
|
right of zone 2
|
||||||
* BUG?: xine's ui window/panel is under its video window when u go fullscreen
|
|
||||||
]]]
|
]]]
|
||||||
|
|
||||||
[[[
|
[[[
|
||||||
|
|
|
@ -782,6 +782,7 @@ void
|
||||||
e_border_raise(E_Border *bd)
|
e_border_raise(E_Border *bd)
|
||||||
{
|
{
|
||||||
E_Border *above;
|
E_Border *above;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
||||||
|
@ -807,6 +808,13 @@ e_border_raise(E_Border *bd)
|
||||||
ev->below = NULL;
|
ev->below = NULL;
|
||||||
ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL);
|
ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL);
|
||||||
}
|
}
|
||||||
|
for (l = bd->children; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Border *child;
|
||||||
|
|
||||||
|
child = l->data;
|
||||||
|
e_border_stack_above(child, bd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2210,6 +2218,17 @@ _e_border_del(E_Border *bd)
|
||||||
// e_object_breadcrumb_add(E_OBJECT(bd), "border_remove_event");
|
// e_object_breadcrumb_add(E_OBJECT(bd), "border_remove_event");
|
||||||
ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL);
|
ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bd->parent)
|
||||||
|
bd->parent->children = evas_list_remove(bd->parent->children, bd);
|
||||||
|
while (bd->children)
|
||||||
|
{
|
||||||
|
E_Border *child;
|
||||||
|
|
||||||
|
child = bd->children->data;
|
||||||
|
child->parent = NULL;
|
||||||
|
bd->children = evas_list_remove_list(bd->children, bd->children);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -4596,6 +4615,17 @@ _e_border_eval(E_Border *bd)
|
||||||
if (bd->new_client)
|
if (bd->new_client)
|
||||||
{
|
{
|
||||||
bd->new_client = 0;
|
bd->new_client = 0;
|
||||||
|
if (bd->client.icccm.transient_for)
|
||||||
|
{
|
||||||
|
E_Border *bd_parent;
|
||||||
|
|
||||||
|
bd_parent = e_border_find_by_client_window(bd->client.icccm.transient_for);
|
||||||
|
if (bd_parent)
|
||||||
|
{
|
||||||
|
bd_parent->children = evas_list_append(bd_parent->children, bd);
|
||||||
|
bd->parent = bd_parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
// printf("##- NEW CLIENT SETUP 0x%x\n", bd->client.win);
|
// printf("##- NEW CLIENT SETUP 0x%x\n", bd->client.win);
|
||||||
if (bd->re_manage)
|
if (bd->re_manage)
|
||||||
{
|
{
|
||||||
|
@ -4658,22 +4688,13 @@ _e_border_eval(E_Border *bd)
|
||||||
|
|
||||||
/* FIXME: special placement for dialogs etc. etc. etc goes
|
/* FIXME: special placement for dialogs etc. etc. etc goes
|
||||||
* here */
|
* here */
|
||||||
if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG) &&
|
/* FIXME: what if parent is not on this desktop - or zone? */
|
||||||
((bd->client.icccm.transient_for != 0)))
|
if ((bd->parent) && (bd->parent->visible))
|
||||||
{
|
{
|
||||||
E_Border *bd_parent;
|
bd->x = bd->parent->x + ((bd->parent->w - bd->w) / 2);
|
||||||
|
bd->y = bd->parent->y + ((bd->parent->h - bd->h) / 2);
|
||||||
bd_parent = e_border_find_by_client_window(bd->client.icccm.transient_for);
|
bd->changes.pos = 1;
|
||||||
// if (!bd_parent)
|
placed = 1;
|
||||||
// bd_parent = e_border_find_by_client_window(bd->client.icccm.client_leader);
|
|
||||||
/* FIXME: what if parent is not on this desktop - or zone? */
|
|
||||||
if ((bd_parent) && (bd_parent->visible))
|
|
||||||
{
|
|
||||||
bd->x = bd_parent->x + ((bd_parent->w - bd->w) / 2);
|
|
||||||
bd->y = bd_parent->y + ((bd_parent->h - bd->h) / 2);
|
|
||||||
bd->changes.pos = 1;
|
|
||||||
placed = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!placed)
|
if (!placed)
|
||||||
{
|
{
|
||||||
|
|
|
@ -385,7 +385,8 @@ struct _E_Border
|
||||||
Ecore_X_Rectangle *shape_rects;
|
Ecore_X_Rectangle *shape_rects;
|
||||||
E_Remember *remember;
|
E_Remember *remember;
|
||||||
|
|
||||||
// Ecore_Timer *dangling_ref_check;
|
E_Border *parent;
|
||||||
|
Evas_List *children;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Border_Pending_Move_Resize
|
struct _E_Border_Pending_Move_Resize
|
||||||
|
|
Loading…
Reference in New Issue