X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fstacking.c;h=3c05df49c64c0c23f470a87aa4e090ee33fb4d29;hb=163950b23bf796a39870044417ca54d667b6b470;hp=4d581966bd117e04602a86a7bbc7f136391f8da6;hpb=20b8fcfa33feeade5946bc7f3046705da5d164fe;p=chaz%2Fopenbox diff --git a/openbox/stacking.c b/openbox/stacking.c index 4d581966..3c05df49 100644 --- a/openbox/stacking.c +++ b/openbox/stacking.c @@ -221,6 +221,15 @@ static void restack_windows(ObClient *selected, gboolean raise) GList *modals = NULL; GList *trans = NULL; + if (raise) { + ObClient *p; + + /* if a window is modal for another single window, then raise it to the + top too, the same is done with the focus order */ + while (selected->modal && (p = client_direct_parent(selected))) + selected = p; + } + /* remove first so we can't run into ourself */ it = g_list_find(stacking_list, selected); g_assert(it); @@ -624,21 +633,20 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling, sibling->iconic)) { ob_debug("Setting restack sibling to NULL, they are not on the same " - "desktop or it is iconified\n"); + "desktop or it is iconified"); sibling = NULL; } switch (detail) { case Below: - ob_debug("Restack request Below for client %s sibling %s\n", + ob_debug("Restack request Below for client %s sibling %s", client->title, sibling ? sibling->title : "(all)"); /* just lower it */ stacking_lower(CLIENT_AS_WINDOW(client)); ret = TRUE; break; case BottomIf: - ob_debug("Restack request BottomIf for client %s sibling " - "%s\n", + ob_debug("Restack request BottomIf for client %s sibling %s", client->title, sibling ? sibling->title : "(all)"); /* if this client occludes sibling (or anything if NULL), then lower it to the bottom */ @@ -648,13 +656,13 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling, } break; case Above: - ob_debug("Restack request Above for client %s sibling %s\n", + ob_debug("Restack request Above for client %s sibling %s", client->title, sibling ? sibling->title : "(all)"); stacking_raise(CLIENT_AS_WINDOW(client)); ret = TRUE; break; case TopIf: - ob_debug("Restack request TopIf for client %s sibling %s\n", + ob_debug("Restack request TopIf for client %s sibling %s", client->title, sibling ? sibling->title : "(all)"); if (stacking_occluded(client, sibling)) { stacking_raise(CLIENT_AS_WINDOW(client)); @@ -662,8 +670,7 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling, } break; case Opposite: - ob_debug("Restack request Opposite for client %s sibling " - "%s\n", + ob_debug("Restack request Opposite for client %s sibling %s", client->title, sibling ? sibling->title : "(all)"); if (stacking_occluded(client, sibling)) { stacking_raise(CLIENT_AS_WINDOW(client));