diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-08-22 15:36:44 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-08-22 15:36:44 +0000 |
| commit | ca8a3ac7bf7a9396e5cc4cbb4135da170057f252 (patch) | |
| tree | cde3a579bc6c085c432c57bb75f4f6cb92bdcbb9 /openbox | |
| parent | faeadd74d42b2d7f0af41aa6898d70eb616abf93 (diff) | |
make the raiselower action smarter
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/action.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/openbox/action.c b/openbox/action.c index 4e3b83ba..824fb35c 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -774,12 +774,28 @@ void action_iconify(union ActionData *data) void action_raiselower(union ActionData *data) { - if (data->client.c) { - if (data->client.c->frame->obscured) - stacking_raise(CLIENT_AS_WINDOW(data->client.c)); - else - stacking_lower(CLIENT_AS_WINDOW(data->client.c)); + ObClient *c = data->client.c; + GList *it; + gboolean raise = FALSE; + + if (!c) return; + + for (it = stacking_list; it; it = g_list_next(it)) { + ObClient *cit = it->data; + + if (cit == c) break; + if (client_normal(cit) && cit->layer == c->layer) { + if (RECT_INTERSECTS_RECT(cit->frame->area, c->frame->area)) { + raise = TRUE; + break; + } + } } + + if (raise) + stacking_raise(CLIENT_AS_WINDOW(c)); + else + stacking_lower(CLIENT_AS_WINDOW(c)); } void action_raise(union ActionData *data) |
