- if (XGetWMNormalHints(_epist->getXDisplay(), _window, &size, &ret) &&
- (size.flags & PWinGravity))
- _gravity = size.win_gravity;
- else
- _gravity = NorthWestGravity;
+ // defaults
+ _gravity = NorthWestGravity;
+ _inc_x = _inc_y = 1;
+ _base_x = _base_y = 0;
+
+ if (XGetWMNormalHints(_epist->getXDisplay(), _window, &size, &ret)) {
+ if (size.flags & PWinGravity)
+ _gravity = size.win_gravity;
+ if (size.flags & PBaseSize) {
+ _base_x = size.base_width;
+ _base_y = size.base_height;
+ }
+ if (size.flags & PResizeInc) {
+ _inc_x = size.width_inc;
+ _inc_y = size.height_inc;
+ }
+ }
+}
+
+
+void XWindow::updateWMHints() {
+ XWMHints *hints;
+
+ // assume a window takes input if it doesnt specify
+ _can_focus = True;
+
+ if ((hints = XGetWMHints(_epist->getXDisplay(), _window)) != NULL) {
+ if (hints->flags & InputHint)
+ _can_focus = hints->input;
+ XFree(hints);
+ }