]> Dogcows Code - chaz/openbox/blobdiff - util/epist/window.cc
add new binary
[chaz/openbox] / util / epist / window.cc
index 628bcebac79758b5abaaefe086f1cf92ca22e3eb..695322729ad0288f20772f97b2cc16ebdfc1ff72 100644 (file)
@@ -44,7 +44,8 @@ XWindow::XWindow(epist *epist, screen *screen, Window window)
   XSelectInput(_epist->getXDisplay(), _window,
                PropertyChangeMask | StructureNotifyMask);
 
-  updateHints();
+  updateNormalHints();
+  updateWMHints();
   updateDimentions();
   updateState();
   updateDesktop();
@@ -77,7 +78,7 @@ void XWindow::updateDimentions() {
 }
 
 
-void XWindow::updateHints() {
+void XWindow::updateNormalHints() {
   XSizeHints size;
   long ret;
 
@@ -101,6 +102,19 @@ void XWindow::updateHints() {
 }
 
 
+void XWindow::updateWMHints() {
+  XWMHints *hints;
+
+  if ((hints = XGetWMHints(_epist->getXDisplay(), _window)) != NULL) {
+    _can_focus = hints->input;
+    XFree(hints);
+  } else {
+    // assume a window takes input if it doesnt specify
+    _can_focus = True;
+  }
+}
+
+
 void XWindow::updateState() {
   // set the defaults
   _shaded = _iconic = _max_vert = _max_horz = false;
@@ -170,7 +184,9 @@ void XWindow::processEvent(const XEvent &e) {
     break;
   case PropertyNotify:
     if (e.xproperty.atom == XA_WM_NORMAL_HINTS)
-      updateHints();
+      updateNormalHints();
+    if (e.xproperty.atom == XA_WM_HINTS)
+      updateWMHints();
     else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_state))
       updateState();
     else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_desktop))
@@ -219,9 +235,12 @@ void XWindow::iconify() const {
 
 
 void XWindow::focus() const {
-  // this will also unshade the window..
+  cout << "Focusing window: 0x" << hex << _window << dec << endl;
+  // this will cause the window to be uniconified also
   _xatom->sendClientMessage(_screen->rootWindow(), XAtom::net_active_window,
                             _window);
+  //XSetInputFocus(_epist->getXDisplay(), _window, None, CurrentTime);
 }
 
 
This page took 0.026018 seconds and 4 git commands to generate.