+bool OBClient::focus()
+{
+ if (!_can_focus || _focused) return false;
+
+ XSetInputFocus(otk::OBDisplay::display, _window, RevertToNone, CurrentTime);
+ return true;
+}
+
+
+void OBClient::unfocus()
+{
+ if (!_focused) return;
+
+ assert(Openbox::instance->focusedClient() == this);
+ Openbox::instance->setFocusedClient(0);
+}
+
+
+void OBClient::focusHandler(const XFocusChangeEvent &e)
+{
+#ifdef DEBUG
+ printf("FocusIn for 0x%lx\n", e.window);
+#endif // DEBUG
+
+ OtkEventHandler::focusHandler(e);
+
+ frame->focus();
+ _focused = true;
+
+ Openbox::instance->setFocusedClient(this);
+}
+
+
+void OBClient::unfocusHandler(const XFocusChangeEvent &e)
+{
+#ifdef DEBUG
+ printf("FocusOut for 0x%lx\n", e.window);
+#endif // DEBUG
+
+ OtkEventHandler::unfocusHandler(e);
+
+ frame->unfocus();
+ _focused = false;
+
+ if (Openbox::instance->focusedClient() == this) {
+ printf("UNFOCUSED!\n");
+ Openbox::instance->setFocusedClient(this);
+ }
+}
+
+