getShaped();
updateProtocols();
- updateNormalHints();
+ getGravity(); // get the attribute gravity
+ updateNormalHints(); // this may override the attribute gravity
updateWMHints();
updateTitle();
updateIconTitle();
}
+void Client::getGravity()
+{
+ XWindowAttributes wattrib;
+ Status ret;
+
+ ret = XGetWindowAttributes(**otk::display, _window, &wattrib);
+ assert(ret != BadWindow);
+ _gravity = wattrib.win_gravity;
+}
+
+
void Client::getDesktop()
{
// defaults to the current desktop
if we don't have a frame, then we aren't mapped yet (and this would
SIGSEGV :)
*/
- openbox->screen(_screen)->restack(true, this); // raise
+ openbox->screen(_screen)->raiseWindow(this);
}
}
}
int oldgravity = _gravity;
// defaults
- _gravity = NorthWestGravity;
_size_inc.setPoint(1, 1);
_base_size.setPoint(0, 0);
_min_size.setPoint(0, 0);
if (XGetWMNormalHints(**otk::display, _window, &size, &ret)) {
_positioned = (size.flags & (PPosition|USPosition));
- if (size.flags & PWinGravity)
+ if (size.flags & PWinGravity) {
_gravity = size.win_gravity;
+
+ // if the client has a frame, i.e. has already been mapped and is
+ // changing its gravity
+ if (frame && _gravity != oldgravity) {
+ // move our idea of the client's position based on its new gravity
+ int x, y;
+ frame->frameGravity(x, y);
+ _area.setPos(x, y);
+ }
+ }
if (size.flags & PMinSize)
_min_size.setPoint(size.min_width, size.min_height);
if (size.flags & PResizeInc)
_size_inc.setPoint(size.width_inc, size.height_inc);
}
-
- // if the client has a frame, i.e. has already been mapped and is
- // changing its gravity
- if (frame && _gravity != oldgravity) {
- // move our idea of the client's position based on its new gravity
- int x, y;
- frame->frameGravity(x, y);
- _area.setPos(x, y);
- }
}
// reversed.
int x = _area.x(), y = _area.y();
switch(_gravity) {
+ default:
case NorthWestGravity:
case WestGravity:
case SouthWestGravity:
if (addborder) x -= _border_width * 2;
else x += _border_width * 2;
break;
+ case NorthGravity:
+ case SouthGravity:
+ case CenterGravity:
+ case ForgetGravity:
+ case StaticGravity:
+ if (addborder) x -= _border_width;
+ else x += _border_width;
+ break;
}
switch(_gravity) {
+ default:
case NorthWestGravity:
case NorthGravity:
case NorthEastGravity:
if (addborder) y -= _border_width * 2;
else y += _border_width * 2;
break;
- default:
- // no change for StaticGravity etc.
+ case WestGravity:
+ case EastGravity:
+ case CenterGravity:
+ case ForgetGravity:
+ case StaticGravity:
+ if (addborder) y -= _border_width;
+ else y += _border_width;
break;
}
_area.setPos(x, y);
shade(false);
// XXX: deiconify
focus();
- openbox->screen(_screen)->restack(true, this); // raise
+ openbox->screen(_screen)->raiseWindow(this);
}
}
switch (e.detail) {
case Below:
case BottomIf:
- openbox->screen(_screen)->restack(false, this); // lower
+ openbox->screen(_screen)->lowerWindow(this);
break;
case Above:
case TopIf:
default:
- openbox->screen(_screen)->restack(true, this); // raise
+ openbox->screen(_screen)->raiseWindow(this);
break;
}
}