client.window);
#endif // DEBUG
+ /*
+ Even though the window wants to be shown, if it is not on the current
+ workspace, then it isn't going to be shown right now.
+ */
+ if (blackbox_attrib.workspace != screen->getCurrentWorkspaceID() &&
+ blackbox_attrib.workspace < screen->getWorkspaceCount())
+ if (current_state == NormalState) current_state = WithdrawnState;
+
switch (current_state) {
case IconicState:
iconify();
if (pe->state == PropertyDelete)
return;
-#ifdef DEBUG
+#if 0
fprintf(stderr, "BlackboxWindow::propertyNotifyEvent(): for 0x%lx\n",
client.window);
#endif
break;
case XA_WM_TRANSIENT_FOR: {
+ bool s = flags.stuck;
+
// determine if this is a transient window
getTransientInfo();
functions &= ~Func_Maximize;
setAllowedActions();
setupDecor();
+ if (flags.stuck != s) stick();
}
reconfigure();
void BlackboxWindow::exposeEvent(const XExposeEvent *ee) {
-#ifdef DEBUG
+#if 0
fprintf(stderr, "BlackboxWindow::exposeEvent() for 0x%lx\n", client.window);
#endif
void BlackboxWindow::motionNotifyEvent(const XMotionEvent *me) {
-#ifdef DEBUG
+#if 0
fprintf(stderr, "BlackboxWindow::motionNotifyEvent() for 0x%lx\n",
client.window);
#endif
} else if (flags.resizing) {
doResize(me->x_root, me->y_root);
} else {
- if (!flags.resizing && me->state & Button1Mask && (functions & Func_Move) &&
+ if ((functions & Func_Move) &&
+ (me->state & Button1Mask) &&
(frame.title == me->window || frame.label == me->window ||
frame.handle == me->window || frame.window == me->window)) {
beginMove(me->x_root, me->y_root);
} else if ((functions & Func_Resize) &&
- (me->state & Button1Mask && (me->window == frame.right_grip ||
- me->window == frame.left_grip)) ||
- (me->state & Button3Mask && me->state & mod_mask &&
- me->window == frame.window)) {
+ ((me->state & Button1Mask) && (me->window == frame.right_grip ||
+ me->window == frame.left_grip)) ||
+ ((me->state & Button3Mask) && (me->state & mod_mask) &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window))) {
unsigned int zones = screen->getResizeZones();
Corner corner;
if (flags.shaded && ! flags.iconic)
setState(NormalState);
+ // erase the netwm stuff that we read when a window maps, so that it
+ // doesn't persist between mappings.
+ // (these are the ones read in getNetWMFlags().)
+ xatom->eraseValue(client.window, XAtom::net_wm_desktop);
+ xatom->eraseValue(client.window, XAtom::net_wm_state);
+
restoreGravity(client.rect);
XUnmapWindow(blackbox->getXDisplay(), frame.window);