add a getGravity function to get the gravity from the window attributes initially
This commit is contained in:
parent
d17b86a41f
commit
4c2f4e7537
2 changed files with 25 additions and 12 deletions
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue