X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient.hh;h=488093620615ebbbb8890f2448084a5a99051d11;hb=8b041e2f5c2edc6d295697d129cbc65b9bb2c6b7;hp=94f12ba312d5b149c64644e56a15aa8cceb559e0;hpb=d363f720a6b0d1c361bc2022d0e5fcd5a75fd04d;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index 94f12ba3..48809362 100644 --- a/src/client.hh +++ b/src/client.hh @@ -29,28 +29,46 @@ public: Type_Dialog, Type_Normal }; - enum MwmFlags { Functions = 1 << 0, - Decorations = 1 << 1 }; + enum MwmFlags { MwmFlag_Functions = 1 << 0, + MwmFlag_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 }; + 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 }; + enum MemDecorations { MwmDecor_All = 1 << 0, + MwmDecor_Border = 1 << 1, + MwmDecor_Handle = 1 << 2, + MwmDecor_Title = 1 << 3, + //MwmDecor_Menu = 1 << 4, + MwmDecor_Iconify = 1 << 5, + MwmDecor_Maximize = 1 << 6 }; + + // the things the user can do to the client window + enum Function { Func_Resize = 1 << 0, + Func_Move = 1 << 1, + Func_Iconify = 1 << 2, + Func_Maximize = 1 << 3, + Func_Close = 1 << 4 }; + typedef unsigned char FunctionFlags; + + // the decorations the client window wants to be displayed on it + enum Decoration { Decor_Titlebar = 1 << 0, + Decor_Handle = 1 << 1, + Decor_Border = 1 << 2, + Decor_Iconify = 1 << 3, + Decor_Maximize = 1 << 4, + Decor_Close = 1 << 5 }; + typedef unsigned char DecorationFlags; // 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; + static const unsigned int elements = 3; unsigned long flags; unsigned long functions; unsigned long decorations; @@ -62,18 +80,19 @@ public: }; private: + //! The actual window that this class is wrapping up Window _window; //! The id of the group the window belongs to - XID _group; + Window _group; // XXX: transient_for, transients //! The desktop on which the window resides (0xffffffff for all desktops) - unsigned int _desktop; + unsigned long _desktop; //! Normal window title - std::string _title; + std::string _title; // XXX: Have to keep track if this string is Utf8 or not //! Window title when iconifiged std::string _icon_title; @@ -88,6 +107,13 @@ private: //! Position and size of the window (relative to the root window) otk::Rect _area; + //! Width of the border on the window. + /*! + The window manager will set this to 0 while the window is being managed, + but needs to restore it afterwards, so it is saved here. + */ + int _border_width; + // size bounds // if min > max, then the window is not resizable int _min_x, _min_y; // minumum size @@ -100,8 +126,12 @@ private: //! The state of the window, one of WithdrawnState, IconicState, or //! NormalState - long _state; + long _wmstate; + //! Was the window's position requested by the application? if not, we should + //! place the window ourselves when it first appears + bool _positioned; + //! Can the window receive input focus? bool _can_focus; //! Urgency flag @@ -128,14 +158,35 @@ private: //! The window should be on top of other windows of the same type bool _floating; - // XXX: motif decoration hints! + //! A bitmask of values in the OBClient::Decoration enum + /*! + The values in the variable are the decorations that the client wants to be + displayed around it. + */ + DecorationFlags _decorations; + + //! A bitmask of values in the OBClient::Function enum + /*! + The values in the variable specify the ways in which the user is allowed to + modify this window. + */ + FunctionFlags _functions; + + void getDesktop(); + void getType(); + void getMwmHints(); + void getArea(); + void getState(); + void getShaped(); void setWMState(long state); void setDesktop(long desktop); void setState(StateAction action, long data1, long data2); - + + void updateProtocols(); void updateNormalHints(); void updateWMHints(); + // XXX: updateTransientFor(); void updateTitle(); void updateClass(); @@ -146,7 +197,7 @@ public: inline Window window() const { return _window; } inline WindowType type() const { return _type; } - inline unsigned int desktop() const { return _desktop; } + inline unsigned long 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; } @@ -156,6 +207,9 @@ public: inline bool focusNotify() const { return _focus_notify; } inline bool shaped() const { return _shaped; } inline int gravity() const { return _gravity; } + inline bool positionRequested() const { return _positioned; } + inline DecorationFlags decorations() const { return _decorations; } + inline FunctionFlags funtions() const { return _functions; } // states inline bool modal() const { return _modal; } @@ -166,6 +220,7 @@ public: inline bool fullscreen() const { return _fullscreen; } inline bool floating() const { return _floating; } + inline int borderWidth() const { return _border_width; } inline int minX() const { return _min_x; } inline int minY() const { return _min_y; } inline int maxX() const { return _max_x; } @@ -179,6 +234,8 @@ public: void update(const XPropertyEvent &e); void update(const XClientMessageEvent &e); + + void setArea(const otk::Rect &area); }; }