updateProtocols();
- // got the type, the mwmhints, and the protocols, so we're ready to set up
+ getGravity(); // get the attribute gravity
+ updateNormalHints(); // this may override the attribute gravity
+
+ // got the type, the mwmhints, the protocols, and the normal hints (min/max
+ // sizes), so we're ready to set up
// the decorations/functions
setupDecorAndFunctions();
- getGravity(); // get the attribute gravity
- updateNormalHints(); // this may override the attribute gravity
// also get the initial_state and set _iconic if we aren't "starting"
// when we're "starting" that means we should use whatever state was already
// on the window over the initial map state, because it was already mapped
if (_disabled_decorations & Decor_Close)
_decorations &= ~Decor_Close;
+ // You can't shade without a titlebar
+ if (!(_decorations & Decor_Titlebar))
+ _functions &= ~Func_Shade;
+
changeAllowedActions();
if (frame) {
if (shadestate != _shaded)
shade(shadestate);
calcLayer();
+ changeState(); // change the hint to relect these changes
}
// different position.
// when re-adding the border to the client, the same operation needs to be
// reversed.
- int x = _area.x(), y = _area.y();
+ int oldx = _area.x(), oldy = _area.y();
+ int x = oldx, y = oldy;
switch(_gravity) {
default:
case NorthWestGravity:
XSetWindowBorderWidth(**otk::display, _window, _border_width);
// move the client so it is back it the right spot _with_ its border!
- XMoveWindow(**otk::display, _window, x, y);
+ if (x != oldx || y != oldy)
+ XMoveWindow(**otk::display, _window, x, y);
} else
XSetWindowBorderWidth(**otk::display, _window, 0);
}
event.xconfigure.display = **otk::display;
event.xconfigure.event = _window;
event.xconfigure.window = _window;
- event.xconfigure.x = x;
- event.xconfigure.y = y;
+
+ // root window coords with border in mind
+ event.xconfigure.x = x - _border_width + frame->size().left;
+ event.xconfigure.y = y - _border_width + frame->size().top;
+
event.xconfigure.width = _area.width();
event.xconfigure.height = _area.height();
event.xconfigure.border_width = _border_width;
- event.xconfigure.above = frame->window();
+ event.xconfigure.above = frame->plate();
event.xconfigure.override_redirect = False;
XSendEvent(event.xconfigure.display, event.xconfigure.window, False,
StructureNotifyMask, &event);
+#if 0//def DEBUG
+ printf("Sent synthetic ConfigureNotify %d,%d %d,%d to 0x%lx\n",
+ event.xconfigure.x, event.xconfigure.y, event.xconfigure.width,
+ event.xconfigure.height, event.xconfigure.window);
+#endif
}
}