// -*- mode: C++; indent-tabs-mode: nil; -*-
-// window.cc for Epistophy - a key handler for NETWM/EWMH window managers.
+// window.cc for Epistrophy - a key handler for NETWM/EWMH window managers.
// Copyright (c) 2002 - 2002 Ben Jansens <ben at orodu.net>
//
// Permission is hereby granted, free of charge, to any person obtaining a
XSelectInput(_epist->getXDisplay(), _window,
PropertyChangeMask | StructureNotifyMask);
+ updateBlackboxAttributes();
updateNormalHints();
updateWMHints();
updateDimentions();
}
+void XWindow::updateBlackboxAttributes() {
+ unsigned long *data;
+ unsigned long num = PropBlackboxAttributesElements;
+
+ _decorated = true;
+
+ if (_xatom->getValue(_window,
+ XAtom::blackbox_attributes, XAtom::blackbox_attributes,
+ num, &data)) {
+ if (num == PropBlackboxAttributesElements)
+ if (data[0] & AttribDecoration)
+ _decorated = (data[4] != DecorNone);
+ delete data;
+ }
+}
+
+
void XWindow::updateNormalHints() {
XSizeHints size;
long ret;
}
-void XWindow::resize(int dwidth, int dheight) const {
+void XWindow::resizeRel(int dwidth, int dheight) const {
// resize in increments if requested by the window
-
- unsigned int wdest = _rect.width() + (dwidth * _inc_x) /
- _inc_x * _inc_x + _base_x;
- unsigned int hdest = _rect.height() + (dheight * _inc_y) /
- _inc_y * _inc_y + _base_y;
-
- if (width > wdest) {
- while (width > wdest)
- wdest += _inc_x;
- } else {
- while (width < wdest)
- wdest -= _inc_x;
- }
- if (height > hdest) {
- while (height > hdest)
- hdest += _inc_y;
- } else {
- while (height < hdest)
- hdest -= _inc_y;
- }
+ unsigned int width = _rect.width(), height = _rect.height();
+ unsigned int wdest = width + (dwidth * _inc_x) / _inc_x * _inc_x + _base_x;
+ unsigned int hdest = height + (dheight * _inc_y) / _inc_y * _inc_y + _base_y;
+
XResizeWindow(_epist->getXDisplay(), _window, wdest, hdest);
}
-void XWindow::resize(unsigned int width, unsigned int height) const {
+void XWindow::resizeAbs(unsigned int width, unsigned int height) const {
// resize in increments if requested by the window
unsigned int wdest = width / _inc_x * _inc_x + _base_x;
break;
}
}
+
+
+void XWindow::decorate(bool d) const {
+ _xatom->sendClientMessage(_screen->rootWindow(),
+ XAtom::blackbox_change_attributes,
+ _window, AttribDecoration,
+ 0, 0, 0, (d ? DecorNormal : DecorNone));
+}