X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=488093620615ebbbb8890f2448084a5a99051d11;hb=8b041e2f5c2edc6d295697d129cbc65b9bb2c6b7;hp=89da0dc9a0e782c154412e1294e3f90279f4877e;hpb=9b23dff16cd85461da6f99aa95a79422cffd72f8;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index 89da0dc9..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; @@ -89,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 @@ -103,6 +128,10 @@ private: //! NormalState 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 @@ -129,10 +158,23 @@ 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(); @@ -140,7 +182,8 @@ private: void setWMState(long state); void setDesktop(long desktop); void setState(StateAction action, long data1, long data2); - + + void updateProtocols(); void updateNormalHints(); void updateWMHints(); // XXX: updateTransientFor(); @@ -164,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; } @@ -174,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; }