diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-07-12 16:29:59 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-07-12 16:29:59 +0000 |
| commit | 24a1e215d1f8d2ff1674847278a15336d4b671b6 (patch) | |
| tree | bb96e0562f4a6038a592a86be33d668863273cbc /util/epist/window.cc | |
| parent | 89d09297f0ef3d2db648a756f62a57bf2be317df (diff) | |
epist now based on the BaseDisplay.
has the ability to be multiscreen!
Diffstat (limited to 'util/epist/window.cc')
| -rw-r--r-- | util/epist/window.cc | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/util/epist/window.cc b/util/epist/window.cc index 62087283..691dccd8 100644 --- a/util/epist/window.cc +++ b/util/epist/window.cc @@ -24,10 +24,6 @@ # include "../../config.h" #endif // HAVE_CONFIG_H -#include "window.hh" -#include "epist.hh" -#include "../../src/XAtom.hh" - #include <iostream> using std::cout; @@ -35,20 +31,30 @@ using std::endl; using std::hex; using std::dec; -XWindow::XWindow(Window window) : _window(window) { +#include "window.hh" +#include "epist.hh" +#include "../../src/XAtom.hh" + +XWindow::XWindow(epist *epist, Window window) + : _epist(epist), _xatom(epist->xatom()), _window(window) { + _unmapped = false; - XSelectInput(_display, _window, PropertyChangeMask | StructureNotifyMask); + XSelectInput(_epist->getXDisplay(), _window, + PropertyChangeMask | StructureNotifyMask); updateState(); updateDesktop(); updateTitle(); updateClass(); + + _epist->addWindow(this); } XWindow::~XWindow() { if (! _unmapped) - XSelectInput(_display, _window, None); + XSelectInput(_epist->getXDisplay(), _window, None); + _epist->removeWindow(this); } @@ -110,3 +116,27 @@ void XWindow::updateClass() { if (num > 0) _app_name = v[0]; if (num > 1) _app_class = v[1]; } + + +void XWindow::processEvent(const XEvent &e) { + assert(e.xany.window == _window); + + switch (e.type) { + case PropertyNotify: + // a client window + if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_state)) + updateState(); + else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_desktop)) + updateDesktop(); + else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_name) || + e.xproperty.atom == _xatom->getAtom(XAtom::wm_name)) + updateTitle(); + else if (e.xproperty.atom == _xatom->getAtom(XAtom::wm_class)) + updateClass(); + break; + case DestroyNotify: + case UnmapNotify: + _unmapped = true; + break; + } +} |
