all repos — openbox @ 641bc819d1b399d2313e3328d111dd70777ecfea

openbox fork - make it a bit more like ryudo

src/atom.hh (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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
// OBAtom.h for Openbox
#ifndef   __atom_hh
#define   __atom_hh

/*! @file xatom.hh
  @brief Provides access to atoms on the display
*/

extern "C" {
#include <X11/Xlib.h>
#include <X11/Xatom.h>

#include <assert.h>
}

#include <vector>
#include <string>

#include "otk/screeninfo.hh"

namespace ob {

class OBAtom {
public:
  enum Atoms {
    // types
    cardinal,
    window,
    pixmap,
    atom,
    string,
    utf8_string,
    
#ifdef    HAVE_GETPID
    blackbox_pid,
#endif // HAVE_GETPID

    // window hints
    wm_colormap_windows,
    wm_protocols,
    wm_state,
    wm_delete_window,
    wm_take_focus,
    wm_change_state,
    wm_name,
    wm_icon_name,
    wm_class,
    motif_wm_hints,
    blackbox_attributes,
    blackbox_change_attributes,
    blackbox_hints,

    // blackbox-protocol atoms (wm -> client)
    blackbox_structure_messages,
    blackbox_notify_startup,
    blackbox_notify_window_add,
    blackbox_notify_window_del,
    blackbox_notify_window_focus,
    blackbox_notify_current_workspace,
    blackbox_notify_workspace_count,
    blackbox_notify_window_raise,
    blackbox_notify_window_lower,
    // blackbox-protocol atoms (client -> wm)
    blackbox_change_workspace,
    blackbox_change_window_focus,
    blackbox_cycle_window_focus,

    openbox_show_root_menu,
    openbox_show_workspace_menu,

    // NETWM atoms
    // root window properties
    net_supported,
    net_client_list,
    net_client_list_stacking,
    net_number_of_desktops,
    net_desktop_geometry,
    net_desktop_viewport,
    net_current_desktop,
    net_desktop_names,
    net_active_window,
    net_workarea,
    net_supporting_wm_check,
//    net_virtual_roots,
    // root window messages
    net_close_window,
    net_wm_moveresize,
    // application window properties
//    net_properties,
    net_wm_name,
    net_wm_visible_name,
    net_wm_icon_name,
    net_wm_visible_icon_name,
    net_wm_desktop,
    net_wm_window_type,
    net_wm_state,
    net_wm_strut,
//  net_wm_icon_geometry,
//  net_wm_icon,
//  net_wm_pid,
//  net_wm_handled_icons,
    net_wm_allowed_actions,
    // application protocols
//    net_wm_ping,

    net_wm_window_type_desktop,
    net_wm_window_type_dock,
    net_wm_window_type_toolbar,
    net_wm_window_type_menu,
    net_wm_window_type_utility,
    net_wm_window_type_splash,
    net_wm_window_type_dialog,
    net_wm_window_type_normal,

    net_wm_moveresize_size_topleft,
    net_wm_moveresize_size_topright,
    net_wm_moveresize_size_bottomleft,
    net_wm_moveresize_size_bottomright,
    net_wm_moveresize_move,

    net_wm_action_move,
    net_wm_action_resize,
    net_wm_action_shade,
    net_wm_action_maximize_horz,
    net_wm_action_maximize_vert,
    net_wm_action_change_desktop,
    net_wm_action_close,

    net_wm_state_modal,
    net_wm_state_maximized_vert,
    net_wm_state_maximized_horz,
    net_wm_state_shaded,
    net_wm_state_skip_taskbar,
    net_wm_state_skip_pager,
    net_wm_state_hidden,
    net_wm_state_fullscreen,

    kde_net_system_tray_windows,
    kde_net_wm_system_tray_window_for,
    kde_net_wm_window_type_override,
 
    // constant for how many atoms exist in the enumerator
    NUM_ATOMS
  };

  enum StringType {
    ansi,
    utf8,
    NUM_STRING_TYPE
  };

private:
  typedef std::vector<Window> SupportWindows;
  
  // windows used to specify support for NETWM
  SupportWindows        _support_windows;
  Atom                  _atoms[NUM_ATOMS];

  Atom create(const char *name) const;

  void setValue(Window win, Atom atom, Atom type, unsigned char *data,
                int size, int nelements, bool append) const;
  bool getValue(Window win, Atom atom, Atom type,
                unsigned long &nelements, unsigned char **value,
                int size) const;

  // no copying!!
  OBAtom(const OBAtom &);
  OBAtom& operator=(const OBAtom&);

public:
  typedef std::vector<std::string> StringVect;
  
  OBAtom();
  virtual ~OBAtom();

  // setup support on a screen, each screen should call this once in its
  // constructor.
  void setSupported(const otk::ScreenInfo *screen);
  
  void setValue(Window win, Atoms atom, Atoms type, unsigned long value) const;
  void setValue(Window win, Atoms atom, Atoms type,
                unsigned long value[], int elements) const;
  void setValue(Window win, Atoms atom, StringType type,
                const std::string &value) const;
  void setValue(Window win, Atoms atom, StringType type,
                const StringVect &strings) const;

  // the 'value' is allocated inside the function and
  // delete [] value needs to be called when you are done with it.
  // the 'value' array returned is null terminated, and has 'nelements'
  // elements in it plus the null.
  // nelements must be set to the maximum number of elements to read from
  // the property.
  bool getValue(Window win, Atoms atom, Atoms type,
                unsigned long &nelements, unsigned long **value) const;
  bool getValue(Window win, Atoms atom, Atoms type, unsigned long &value) const;
  bool getValue(Window win, Atoms atom, StringType type,
                std::string &value) const;
  bool getValue(Window win, Atoms atom, StringType type,
                unsigned long &nelements, StringVect &strings) const;
  
  void eraseValue(Window win, Atoms atom) const;

  // sends a client message a window
  void sendClientMessage(Window target, Atoms type, Window about,
                         long data = 0, long data1 = 0, long data2 = 0,
                         long data3 = 0, long data4 = 0) const;

  // temporary function!! remove when not used in blackbox.hh anymore!!
  inline Atom getAtom(Atoms a)
  { assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a];
    assert(ret != 0); return ret; }
};

}

#endif // __atom_hh