summaryrefslogtreecommitdiff
path: root/src/client.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-17 02:43:31 +0000
committerDana Jansens <danakj@orodu.net>2003-01-17 02:43:31 +0000
commit4c2f4e75372c4814413e3a105a045395e10892ca (patch)
tree5dfc2d3f641eed18a5ba615f6e20cbfc4d7c15cd /src/client.cc
parentd17b86a41f13b9e01b9adef3190a2d3bb022f6a5 (diff)
add a getGravity function to get the gravity from the window attributes initially
Diffstat (limited to 'src/client.cc')
-rw-r--r--src/client.cc35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/client.cc b/src/client.cc
index df136bf2..4e44d4bc 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -47,6 +47,7 @@ Client::Client(int screen, Window window)
// pick a layer to start from
_layer = Layer_Normal;
+ getGravity();
getArea();
getDesktop();
@@ -60,7 +61,6 @@ Client::Client(int screen, Window window)
getShaped();
updateProtocols();
- updateNormalHints();
updateWMHints();
updateTitle();
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()
{
// defaults to the current desktop
@@ -378,7 +389,6 @@ void Client::updateNormalHints()
int oldgravity = _gravity;
// defaults
- _gravity = NorthWestGravity;
_size_inc.setPoint(1, 1);
_base_size.setPoint(0, 0);
_min_size.setPoint(0, 0);
@@ -391,8 +401,18 @@ void Client::updateNormalHints()
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);
@@ -406,15 +426,6 @@ void Client::updateNormalHints()
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);
- }
}