+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+
+%module ob_client
+
+%{
+#include "config.h"
+#include "client.hh"
+%}
+
+%include "otk.i" // XXX otk_size.i!!!
+%include "ustring.i"
+%include "std_string.i"
+
+namespace ob {
+
+%immutable Client::frame;
+
+%ignore Client::event_mask;
+%ignore Client::no_propagate_mask;
+%ignore Client::ignore_unmaps;
+%ignore Client::Client(int, Window);
+%ignore Client::~Client();
+%ignore Client::icon(const otk::Size &) const;
+%ignore Client::pixmapIcon() const;
+%ignore Client::pixmapIconMask() const;
+%ignore Client::showhide();
+%ignore Client::focus();
+%ignore Client::unfocus() const;
+%ignore Client::validate() const;
+%ignore Client::installColormap(bool) const;
+%ignore Client::focusHandler(const XFocusChangeEvent &);
+%ignore Client::unfocusHandler(const XFocusChangeEvent &);
+%ignore Client::propertyHandler(const XPropertyEvent &);
+%ignore Client::clientMessageHandler(const XClientMessageEvent &);
+%ignore Client::configureRequestHandler(const XConfigureRequestEvent &);
+%ignore Client::unmapHandler(const XUnmapEvent &);
+%ignore Client::destroyHandler(const XDestroyWindowEvent &);
+%ignore Client::reparentHandler(const XReparentEvent &);
+%ignore Client::mapRequestHandler(const XMapRequestEvent &);
+%ignore Client::shapeHandler(const XShapeEvent &);
+
+
+%extend Client {
+ void focus(bool unshade = false, bool raise = false) {
+ Window root = otk::display->screenInfo(self->screen())->rootWindow();
+ send_client_msg(root, otk::Property::atoms.openbox_active_window,
+ self->window(), unshade ? 1 : 0, raise ? 1 : 0);
+ }
+
+ bool __cmp__(const Client *o) { return self->window() != o->window(); }
+
+ void raiseWindow() {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.openbox_restack_window,
+ self->window(), 0);
+ }
+ void lowerWindow() {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.openbox_restack_window,
+ self->window(), 1);
+ }
+
+ void setDesktop(unsigned int desktop) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_desktop,
+ self->window(), desktop);
+ }
+
+ void iconify(bool icon = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.wm_change_state,
+ self->window(), icon ? IconicState : NormalState);
+ }
+
+ void close() {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_close_window,
+ self->window(), 0);
+ }
+
+ void shade(bool shade = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (shade ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_shaded);
+ }
+
+ void maximize(bool max = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (max ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_maximized_horz,
+ otk::Property::atoms.net_wm_state_maximized_vert);
+ }
+
+ void maximizeHorizontal(bool max = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (max ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_maximized_horz);
+ }
+
+ void maximizeVertical(bool max = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (max ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_maximized_vert);
+ }
+
+ void setSkipTaskbar(bool skip = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (skip ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_skip_taskbar);
+ }
+
+ void setSkipPager(bool skip = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (skip ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_skip_pager);
+ }
+
+ void setAbove(bool above = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (above ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_above);
+ }
+
+ void setBelow(bool below = true) {
+ Window root = RootWindow(**otk::display, self->screen());
+ send_client_msg(root, otk::Property::atoms.net_wm_state,
+ self->window(),
+ (below ? otk::Property::atoms.net_wm_state_add :
+ otk::Property::atoms.net_wm_state_remove),
+ otk::Property::atoms.net_wm_state_below);
+ }
+};
+
+}
+
+%import "../otk/eventhandler.hh"
+%include "client.hh"