self->cbwidth_y);
/* when the client has StaticGravity, it likes to move around. */
- XMoveWindow(ob_display, self->client->window, 0, 0);
+ XMoveWindow(ob_display, self->client->window,
+ -self->client->border_width,
+ -self->client->border_width);
}
}
void frame_grab_client(ObFrame *self)
{
+ /* DO NOT map the client window here. we used to do that, but it is bogus.
+ we need to set up the client's dimensions and everything before we
+ send a mapnotify or we create race conditions.
+ */
+
/* reparent the client to the frame */
- XReparentWindow(ob_display, self->client->window, self->plate, 0, 0);
+ XReparentWindow(ob_display, self->client->window, self->plate,
+ -self->client->border_width, -self->client->border_width);
/*
When reparenting the client window, it is usually not mapped yet, since
case SouthEastGravity:
case EastGravity:
/* the right side of the client will be the right side of the frame */
- *x -= self->size.right + self->size.left;
+ *x -= self->size.right + self->size.left - self->client->border_width*2;
break;
case ForgetGravity:
case StaticGravity:
/* the client's position won't move */
- *x -= self->size.left;
+ *x -= self->size.left - self->client->border_width;
break;
}
case SouthEastGravity:
case SouthGravity:
/* the bottom of the client will be the bottom of the frame */
- *y -= self->size.bottom + self->size.top;
+ *y -= self->size.bottom + self->size.top - self->client->border_width*2;
break;
case ForgetGravity:
case StaticGravity:
/* the client's position won't move */
- *y -= self->size.top;
+ *y -= self->size.top - self->client->border_width;
break;
}
}
case EastGravity:
case SouthEastGravity:
/* the right side of the client will be the right side of the frame */
- *x += self->size.right + self->size.left;
+ *x += self->size.right + self->size.left - self->client->border_width*2;
break;
case StaticGravity:
case ForgetGravity:
/* the client's position won't move */
- *x += self->size.left;
+ *x += self->size.left - self->client->border_width;
break;
}
case SouthGravity:
case SouthEastGravity:
/* the bottom of the client will be the bottom of the frame */
- *y += self->size.bottom + self->size.top;
+ *y += self->size.bottom + self->size.top - self->client->border_width*2;
break;
case StaticGravity:
case ForgetGravity:
/* the client's position won't move */
- *y += self->size.top;
+ *y += self->size.top - self->client->border_width;
break;
}
}