diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-11-05 07:48:26 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-11-05 07:48:26 +0000 |
| commit | 641bc819d1b399d2313e3328d111dd70777ecfea (patch) | |
| tree | 5fb8014f9519da3e1ad451ae878fd001fe4afeb0 /src/atom.hh | |
| parent | f25252a4849ab205856629480178946b2b454aa3 (diff) | |
convert XAtom to OBAtom
Diffstat (limited to 'src/atom.hh')
| -rw-r--r-- | src/atom.hh | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/src/atom.hh b/src/atom.hh new file mode 100644 index 00000000..fabe2b23 --- /dev/null +++ b/src/atom.hh @@ -0,0 +1,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 |
