choice[i] = screen_num_monitors; /* make them all invalid to start */
/* try direct parent first */
- if (c->transient_for && c->transient_for != OB_TRAN_GROUP) {
+ if (c->transient_for && c->transient_for != OB_TRAN_GROUP &&
+ client_normal(c->transient_for))
+ {
add_choice(choice, client_monitor(c->transient_for));
ob_debug("placement adding choice %d for parent\n",
client_monitor(c->transient_for));
#define SMART_IGNORE(placer, c) \
(placer == c || c->shaded || !c->frame->visible || \
c->type == OB_CLIENT_TYPE_SPLASH || c->type == OB_CLIENT_TYPE_DESKTOP || \
- c->type == OB_CLIENT_TYPE_MENU || c->type == OB_CLIENT_TYPE_TOOLBAR || \
+ ((c->type == OB_CLIENT_TYPE_MENU || c->type == OB_CLIENT_TYPE_TOOLBAR) &&\
+ client_has_parent(c)) || \
(c->desktop != DESKTOP_ALL && \
c->desktop != (placer->desktop == DESKTOP_ALL ? \
screen_desktop : placer->desktop)))
static gboolean place_transient_splash(ObClient *client, gint *x, gint *y)
{
if (client->transient_for && client->type == OB_CLIENT_TYPE_DIALOG) {
- if (client->transient_for != OB_TRAN_GROUP && !client->iconic) {
+ if (client->transient_for != OB_TRAN_GROUP &&
+ client_normal(client->transient_for) &&
+ !client->iconic)
+ {
ObClient *c = client;
ObClient *p = client->transient_for;