src/client.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 |
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __client_hh #define __client_hh extern "C" { #include <X11/Xlib.h> } #include <string> #include "otk/strut.hh" #include "otk/rect.hh" namespace ob { class OBClient { public: enum Max { Max_None, Max_Horz, Max_Vert, Max_Full }; enum WindowType { Type_Desktop, Type_Dock, Type_Toolbar, Type_Menu, Type_Utility, Type_Splash, Type_Dialog, Type_Normal }; enum MwmFlags { Functions = 1 << 0, Decorations = 1 << 1 }; enum MwmFunctions { MwmFunc_All = 1 << 0, MwmFunc_Resize = 1 << 1, MwmFunc_Move = 1 << 2, MwmFunc_Iconify = 1 << 3, MwmFunc_Maximize = 1 << 4, MwmFunc_Close = 1 << 5 }; enum MemDecorations { MemDecor_All = 1 << 0, MemDecor_Border = 1 << 1, MemDecor_Handle = 1 << 2, MemDecor_Title = 1 << 3, //MemDecor_Menu = 1 << 4, MemDecor_Iconify = 1 << 5, MemDecor_Maximize = 1 << 6 }; // this structure only contains 3 elements... the Motif 2.0 structure // contains 5... we only need the first 3... so that is all we will define typedef struct MwmHints { static const int elements = 3; unsigned long flags; unsigned long functions; unsigned long decorations; }; enum StateAction { State_Remove = 0, // _NET_WM_STATE_REMOVE State_Add, // _NET_WM_STATE_ADD State_Toggle // _NET_WM_STATE_TOGGLE }; private: Window _window; //! The id of the group the window belongs to XID _group; // XXX: transient_for, transients //! The desktop on which the window resides (0xffffffff for all desktops) unsigned int _desktop; //! Normal window title std::string _title; //! Window title when iconifiged std::string _icon_title; //! The application that created the window std::string _app_name; //! The class of the window, can used for grouping std::string _app_class; //! The type of window (what its function is) WindowType _type; //! Position and size of the window (relative to the root window) otk::Rect _area; // size bounds // if min > max, then the window is not resizable int _min_x, _min_y; // minumum size int _max_x, _max_y; // maximum size int _inc_x, _inc_y; // resize increments int _base_x, _base_y; // base size //! Where to place the decorated window in relation to the undecorated window int _gravity; //! The state of the window, one of WithdrawnState, IconicState, or //! NormalState long _state; //! Can the window receive input focus? bool _can_focus; //! Urgency flag bool _urgent; //! Notify the window when it receives focus? bool _focus_notify; //! The window uses shape extension to be non-rectangular? bool _shaped; //! The window is modal, so it must be processed before any windows it is //! related to can be focused bool _modal; //! Only the window's titlebar is displayed bool _shaded; //! The window is iconified bool _iconic; //! The window is maximized to fill the screen vertically bool _max_vert; //! The window is maximized to fill the screen horizontally bool _max_horz; //! The window is a 'fullscreen' window, and should be on top of all others bool _fullscreen; //! The window should be on top of other windows of the same type bool _floating; // XXX: motif decoration hints! void setWMState(long state); void setDesktop(long desktop); void setState(StateAction action, long data1, long data2); void updateNormalHints(); void updateWMHints(); void updateTitle(); void updateClass(); public: OBClient(Window window); virtual ~OBClient(); inline Window window() const { return _window; } inline WindowType type() const { return _type; } inline unsigned int desktop() const { return _desktop; } inline const std::string &title() const { return _title; } inline const std::string &iconTitle() const { return _title; } inline const std::string &appName() const { return _app_name; } inline const std::string &appClass() const { return _app_class; } inline bool canFocus() const { return _can_focus; } inline bool urgent() const { return _urgent; } inline bool focusNotify() const { return _focus_notify; } inline bool shaped() const { return _shaped; } inline int gravity() const { return _gravity; } // states inline bool modal() const { return _modal; } inline bool shaded() const { return _shaded; } inline bool iconic() const { return _iconic; } inline bool maxVert() const { return _max_vert; } inline bool maxHorz() const { return _max_horz; } inline bool fullscreen() const { return _fullscreen; } inline bool floating() const { return _floating; } inline int minX() const { return _min_x; } inline int minY() const { return _min_y; } inline int maxX() const { return _max_x; } inline int maxY() const { return _max_y; } inline int incrementX() const { return _inc_x; } inline int incrementY() const { return _inc_y; } inline int baseX() const { return _base_x; } inline int baseY() const { return _base_y; } inline const otk::Rect &area() const { return _area; } void update(const XPropertyEvent &e); void update(const XClientMessageEvent &e); }; } #endif // __client_hh |