add a getGravity function to get the gravity from the window attributes initially

This commit is contained in:
Dana Jansens 2003-01-17 02:43:31 +00:00
parent d17b86a41f
commit 4c2f4e7537
2 changed files with 25 additions and 12 deletions

View file

@ -47,6 +47,7 @@ Client::Client(int screen, Window window)
// pick a layer to start from // pick a layer to start from
_layer = Layer_Normal; _layer = Layer_Normal;
getGravity();
getArea(); getArea();
getDesktop(); getDesktop();
@ -60,7 +61,6 @@ Client::Client(int screen, Window window)
getShaped(); getShaped();
updateProtocols(); updateProtocols();
updateNormalHints();
updateWMHints(); updateWMHints();
updateTitle(); updateTitle();
updateIconTitle(); updateIconTitle();
@ -91,6 +91,17 @@ Client::~Client()
} }
void Client::getGravity()
{
XWindowAttributes wattrib;
Status ret;
ret = XGetWindowAttributes(**otk::display, _window, &wattrib);
assert(ret != BadWindow);
_gravity = wattrib.win_gravity;
}
void Client::getDesktop() void Client::getDesktop()
{ {
// defaults to the current desktop // defaults to the current desktop
@ -378,7 +389,6 @@ void Client::updateNormalHints()
int oldgravity = _gravity; int oldgravity = _gravity;
// defaults // defaults
_gravity = NorthWestGravity;
_size_inc.setPoint(1, 1); _size_inc.setPoint(1, 1);
_base_size.setPoint(0, 0); _base_size.setPoint(0, 0);
_min_size.setPoint(0, 0); _min_size.setPoint(0, 0);
@ -391,8 +401,18 @@ void Client::updateNormalHints()
if (XGetWMNormalHints(**otk::display, _window, &size, &ret)) { if (XGetWMNormalHints(**otk::display, _window, &size, &ret)) {
_positioned = (size.flags & (PPosition|USPosition)); _positioned = (size.flags & (PPosition|USPosition));
if (size.flags & PWinGravity) if (size.flags & PWinGravity) {
_gravity = size.win_gravity; _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) if (size.flags & PMinSize)
_min_size.setPoint(size.min_width, size.min_height); _min_size.setPoint(size.min_width, size.min_height);
@ -406,15 +426,6 @@ void Client::updateNormalHints()
if (size.flags & PResizeInc) if (size.flags & PResizeInc)
_size_inc.setPoint(size.width_inc, size.height_inc); _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);
}
} }

View file

@ -311,6 +311,8 @@ private:
*/ */
FunctionFlags _functions; FunctionFlags _functions;
//! Retrieves the window's initial gravity
void getGravity();
//! Retrieves the desktop hint's value and sets Client::_desktop //! Retrieves the desktop hint's value and sets Client::_desktop
void getDesktop(); void getDesktop();
//! Retrieves the window's type and sets Client::_type //! Retrieves the window's type and sets Client::_type