diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-05-28 14:32:42 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-05-28 14:32:42 +0000 |
| commit | b8ee3dbc4565efb19338c5cf1948f0f4e2f24fd6 (patch) | |
| tree | 54ef0ffa9d52c4ad8718d4563fd32531d9a5be2b /src/XAtom.hh | |
| parent | 5ae928ffc67d0a341ac48c1c07de503e30f3a02b (diff) | |
merging in netwm changes at merge point "netwm-merge1". This add the XAtom class, and sets the net_supported_wm_check related atoms.
Diffstat (limited to 'src/XAtom.hh')
| -rw-r--r-- | src/XAtom.hh | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/src/XAtom.hh b/src/XAtom.hh new file mode 100644 index 00000000..f73f7558 --- /dev/null +++ b/src/XAtom.hh @@ -0,0 +1,171 @@ +// XAtom.h for Openbox +// Copyright (c) 2002 - 2002 Ben Janens (ben at orodu.net) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef __XAtom_h +#define __XAtom_h + +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <vector> +#include <string> + +class Blackbox; +class ScreenInfo; + +class XAtom { +public: + enum AvailableAtoms { + // string type + 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, + 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, + + // 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_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, + // application protocols + net_wm_ping, + + // constant for how many atoms exist in the enumerator + NUM_ATOMS + }; + + enum AtomType { + Type_Cardinal, + Type_Atom, + Type_Window, + Type_Pixmap + }; + + enum StringType { + Type_String, + Type_Utf8, + }; + +private: + typedef std::vector<Window> SupportWindows; + + Display *_display; + // windows used to specify support for NETWM + SupportWindows _support_windows; + Atom _atoms[NUM_ATOMS]; + + Atom create(const char *name) const; + + void setValue(Window win, AvailableAtoms atom, Atom type, unsigned char *data, + int size, int nelements, bool append) const; + bool getValue(Window win, AvailableAtoms atom, Atom type, + unsigned long *nelements, unsigned char **value, + int size) const; + + // no copying!! + XAtom(const XAtom &); + XAtom& operator=(const XAtom&); + +public: + XAtom(Blackbox *bb); + virtual ~XAtom(); + + // setup support on a screen, each screen should call this once in its + // constructor. + void setSupported(const ScreenInfo *screen); + + void setValue(Window win, AvailableAtoms atom, AtomType type, + unsigned long value) const; + void setValue(Window win, AvailableAtoms atom, StringType type, + const std::string &value) const; + + void addValue(Window win, AvailableAtoms atom, AtomType type, + unsigned long value) const; + void addValue(Window win, AvailableAtoms atom, StringType type, + const std::string &value) 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. + bool getValue(Window win, AvailableAtoms atom, AtomType type, + unsigned long *nelements, unsigned long **value) const; + bool getValue(Window win, AvailableAtoms atom, StringType type, + std::string &value) const; + + void eraseValue(Window win, AvailableAtoms atom) const; + + // temporary function!! remove when not used in blackbox.hh anymore!! + inline Atom getAtom(AvailableAtoms a) + { Atom ret = _atoms[a]; assert(ret != 0); return ret; } +}; + +#endif // __XAtom_h |
