X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FXAtom.hh;h=8c790bf654df54cb348d691de8e36aa90c9a1f5d;hb=90ee16fc8664f38683edf3b2eb4dd376a572f4ce;hp=f73f75580c302c7f57e30f8e51e796955e568fa3;hpb=b8ee3dbc4565efb19338c5cf1948f0f4e2f24fd6;p=chaz%2Fopenbox diff --git a/src/XAtom.hh b/src/XAtom.hh index f73f7558..8c790bf6 100644 --- a/src/XAtom.hh +++ b/src/XAtom.hh @@ -24,6 +24,9 @@ #include #include + +#include + #include #include @@ -32,8 +35,13 @@ class ScreenInfo; class XAtom { public: - enum AvailableAtoms { - // string type + enum Atoms { + // types + cardinal, + window, + pixmap, + atom, + string, utf8_string, #ifdef HAVE_GETPID @@ -47,6 +55,9 @@ public: wm_delete_window, wm_take_focus, wm_change_state, + wm_name, + wm_icon_name, + wm_class, motif_wm_hints, blackbox_attributes, blackbox_change_attributes, @@ -80,38 +91,71 @@ public: net_active_window, net_workarea, net_supporting_wm_check, - net_virtual_roots, +// net_virtual_roots, // root window messages net_close_window, net_wm_moveresize, // application window properties - net_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_icon_geometry, +// net_wm_icon, +// net_wm_pid, +// net_wm_handled_icons, + net_wm_allowed_actions, // application protocols - net_wm_ping, - +// 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, + // 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, + ansi, + utf8, + NUM_STRING_TYPE }; private: @@ -124,10 +168,10 @@ private: Atom create(const char *name) const; - void setValue(Window win, AvailableAtoms atom, Atom type, unsigned char *data, + void setValue(Window win, Atom 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, + bool getValue(Window win, Atom atom, Atom type, + unsigned long &nelements, unsigned char **value, int size) const; // no copying!! @@ -135,37 +179,48 @@ private: XAtom& operator=(const XAtom&); public: - XAtom(Blackbox *bb); + typedef std::vector StringVect; + + XAtom(Display *d); 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, + 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. - bool getValue(Window win, AvailableAtoms atom, AtomType type, - unsigned long *nelements, unsigned long **value) const; - bool getValue(Window win, AvailableAtoms atom, StringType type, + // 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, AvailableAtoms atom) 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) 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; } + inline Atom getAtom(Atoms a) + { assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a]; + assert(ret != 0); return ret; } }; #endif // __XAtom_h