all repos — openbox @ a52a6d96d701c993896f276e4198003317632aaf

openbox fork - make it a bit more like ryudo

wrap/ob_client.i (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-

%module ob_client

%{
#include "config.h"
#include "client.hh"
%}

%include "otk_size.i"
%include "otk_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"