const otk::OBProperty *property = Openbox::instance->property();
// defaults to the current desktop
- _desktop = 0; // XXX: change this to the current desktop!
-
- property->get(_window, otk::OBProperty::net_wm_desktop,
- otk::OBProperty::Atom_Cardinal,
- &_desktop);
+ _desktop = Openbox::instance->screen(_screen)->desktop();
+
+ if (!property->get(_window, otk::OBProperty::net_wm_desktop,
+ otk::OBProperty::Atom_Cardinal,
+ (long unsigned*)&_desktop)) {
+ // make sure the hint exists
+ Openbox::instance->property()->set(_window,
+ otk::OBProperty::net_wm_desktop,
+ otk::OBProperty::Atom_Cardinal,
+ (unsigned)_desktop);
+ }
}
void OBClient::setDesktop(long target)
{
+ if (target == _desktop) return;
+
printf("Setting desktop %ld\n", target);
assert(target >= 0 || target == (signed)0xffffffff);
//assert(target == 0xffffffff || target < MAX);
- // XXX: move the window to the new desktop (and set root property)
+ if (!(target >= 0 || target == (signed)0xffffffff)) return;
+
_desktop = target;
+
+ Openbox::instance->property()->set(_window,
+ otk::OBProperty::net_wm_desktop,
+ otk::OBProperty::Atom_Cardinal,
+ (unsigned)_desktop);
+
+
+ // XXX: move the window to the new desktop
}
setDesktop(e.data.l[0]); // use the original event
} else if (e.message_type == property->atom(otk::OBProperty::net_wm_state)) {
// can't compress these
+#ifdef DEBUG
+ printf("net_wm_state for 0x%lx\n", _window);
+#endif
setState((StateAction)e.data.l[0], e.data.l[1], e.data.l[2]);
} else if (e.message_type ==
property->atom(otk::OBProperty::net_close_window)) {
+#ifdef DEBUG
+ printf("net_close_window for 0x%lx\n", _window);
+#endif
close();
} else if (e.message_type ==
property->atom(otk::OBProperty::net_active_window)) {
+#ifdef DEBUG
+ printf("net_active_window for 0x%lx\n", _window);
+#endif
focus();
Openbox::instance->screen(_screen)->restack(true, this); // raise
- } else {
}
}
frame->unfocus();
_focused = false;
- if (Openbox::instance->focusedClient() == this) {
- printf("UNFOCUSED!\n");
- Openbox::instance->setFocusedClient(this);
- }
+ if (Openbox::instance->focusedClient() == this)
+ Openbox::instance->setFocusedClient(0);
}