X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=0d8465482313398ebb91b38c68ff3a0f6b6d64f3;hb=3f784100ab51dce9e33652a9dd867140dd04a4aa;hp=37a38ac1084231c04ed397e61e228bae3d2161ce;hpb=4c2f4e75372c4814413e3a105a045395e10892ca;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index 37a38ac1..0d846548 100644 --- a/src/client.hh +++ b/src/client.hh @@ -89,7 +89,7 @@ public: enum WindowType { Type_Desktop, //!< A desktop (bottom-most window) Type_Dock, //!< A dock bar/panel window Type_Toolbar, //!< A toolbar window, pulled off an app - Type_Menu, //!< A sticky menu from an app + Type_Menu, //!< An unpinned menu from an app Type_Utility, //!< A small utility window such as a palette Type_Splash, //!< A splash screen window Type_Dialog, //!< A dialog window @@ -121,23 +121,27 @@ public: }; //! The things the user can do to the client window - enum Function { Func_Resize = 1 << 0, //!< Allow resizing - Func_Move = 1 << 1, //!< Allow moving - Func_Iconify = 1 << 2, //!< Allow to be iconified - Func_Maximize = 1 << 3, //!< Allow to be maximized - Func_Close = 1 << 4 //!< Allow to be closed + enum Function { Func_Resize = 1 << 0, //!< Allow resizing + Func_Move = 1 << 1, //!< Allow moving + Func_Iconify = 1 << 2, //!< Allow to be iconified + Func_Maximize = 1 << 3, //!< Allow to be maximized + Func_Shade = 1 << 4, //!< Allow to be shaded + Func_Fullscreen = 1 << 5, //!< Allow to be made fullscreen + Func_Close = 1 << 6 //!< Allow to be closed }; //! Holds a bitmask of Client::Function values typedef unsigned char FunctionFlags; //! The decorations the client window wants to be displayed on it - enum Decoration { Decor_Titlebar = 1 << 0, //!< Display a titlebar - Decor_Handle = 1 << 1, //!< Display a handle (bottom) - Decor_Border = 1 << 2, //!< Display a border - Decor_Iconify = 1 << 3, //!< Display an iconify button - Decor_Maximize = 1 << 4, //!< Display a maximize button - Decor_Sticky = 1 << 5, //!< Display a sticky button - Decor_Close = 1 << 6 //!< Display a close button + enum Decoration { Decor_Titlebar = 1 << 0, //!< Display a titlebar + Decor_Handle = 1 << 1, //!< Display a handle (bottom) + Decor_Border = 1 << 2, //!< Display a border + Decor_Iconify = 1 << 3, //!< Display an iconify button + Decor_Maximize = 1 << 4, //!< Display a maximize button + //! Display a button to toggle the window's placement on + //! all desktops + Decor_AllDesktops = 1 << 5, + Decor_Close = 1 << 6 //!< Display a close button }; //! Holds a bitmask of Client::Decoration values typedef unsigned char DecorationFlags; @@ -160,6 +164,10 @@ public: static const long no_propagate_mask = ButtonPressMask | ButtonReleaseMask | ButtonMotionMask; + //! The desktop value which indicated the window is iconified and not on any + //! desktop + static const long ICONIC_DESKTOP = 0xfffffffe; + //! The number of unmap events to ignore on the window int ignore_unmaps; @@ -228,6 +236,17 @@ private: */ int _border_width; + //! The minimum aspect ratio the client window can be sized to. + /*! + A value of 0 means this is ignored. + */ + float _min_ratio; + //! The maximum aspect ratio the client window can be sized to. + /*! + A value of 0 means this is ignored. + */ + float _max_ratio; + //! The minimum size of the client window /*! If the min is > the max, then the window is not resizable @@ -257,6 +276,9 @@ private: //! NormalState long _wmstate; + //! True if the client supports the delete_window protocol + bool _delete_window; + //! Was the window's position requested by the application? if not, we should //! place the window ourselves when it first appears bool _positioned; @@ -339,9 +361,19 @@ private: //! Sets the wm_state to the specified value void setWMState(long state); //! Adjusts the window's net_state + /*! + This should not be called as part of the window mapping process! It is for + use when updating the state post-mapping.
+ Client::applyStartupState is used to do the same things during the mapping + process. + */ void setState(StateAction action, long data1, long data2); //! Sends the window to the specified desktop + /*! + A window is iconified by sending it to the ICONIC_DESKTOP, and restored + by sending it to any other valid desktop. + */ void setDesktop(long desktop); //! Calculates the stacking layer for the client window @@ -353,7 +385,12 @@ private: //! Updates the WMNormalHints and adjusts things if they change void updateNormalHints(); //! Updates the WMHints and adjusts things if they change - void updateWMHints(); + /*! + @param initstate Whether to read the initial_state property from the + WMHints. This should only be used during the mapping + process. + */ + void updateWMHints(bool initstate = false); //! Updates the window's title void updateTitle(); //! Updates the window's icon title @@ -367,6 +404,8 @@ private: //! Change the client's state hints to match the class' data void changeState(); + //! Change the allowed actions set on the client + void changeAllowedActions(); //! Request the client to close its window. void close(); @@ -377,7 +416,42 @@ private: unshaded. */ void shade(bool shade); + + //! Fires the urgent callbacks which lets the user do what they want with + //! urgent windows + void fireUrgent(); + //! Fullscreen's or unfullscreen's the client window + /*! + @param fs true if the window should be made fullscreen; false if it should + be returned to normal state. + */ + void fullscreen(bool fs); + + //! Internal version of the Client::move function + /*! + @param x The X coordinate to move to. + @param y The Y coordinate to move to. + */ + void internal_move(int x, int y); + //! Internal version of the Client::resize function + /*! + This also maintains things like the client's minsize, and size increments. + @param anchor The corner to keep in the same position when resizing. + @param w The width component of the new size for the client. + @param h The height component of the new size for the client. + @param user Specifies whether this is a user-requested change or a + program requested change. + @param x An optional X coordinate to which the window will be moved + after resizing. + @param y An optional Y coordinate to which the window will be moved + after resizing. + The x and y coordinates must both be sepcified together, or they will have + no effect. When they are specified, the anchor is ignored. + */ + void internal_resize(Corner anchor, int w, int h, bool user = true, + int x = INT_MIN, int y = INT_MIN); + public: #ifndef SWIG //! Constructs a new Client object around a specified window id @@ -470,6 +544,8 @@ BB @param window The window id that the Client class should handle When the window is shaded, only its titlebar is visible. */ inline bool shaded() const { return _shaded; } + //! Returns if the window is in fullscreen mode + inline bool fullscreen() const { return _fullscreen; } //! Returns if the window is iconified /*! When the window is iconified, it is not visible at all (except in iconbars/ @@ -483,6 +559,13 @@ BB @param window The window id that the Client class should handle //! Returns the window's stacking layer inline StackLayer layer() const { return _layer; } + //! Applies the states requested when the window mapped + /*! + This should be called only once, during the window mapping process. It + applies things like maximized, and fullscreen. + */ + void applyStartupState(); + //! Removes or reapplies the client's border to its window /*! Used when managing and unmanaging a window. @@ -510,17 +593,11 @@ BB @param window The window id that the Client class should handle @param anchor The corner to keep in the same position when resizing. @param w The width component of the new size for the client. @param h The height component of the new size for the client. - @param x An optional X coordinate to which the window will be moved - after resizing. - @param y An optional Y coordinate to which the window will be moved - after resizing. - The x and y coordinates must both be sepcified together, or they will have - no effect. When they are specified, the anchor is ignored. */ - void resize(Corner anchor, int w, int h, int x = INT_MIN, int y = INT_MIN); + void resize(Corner anchor, int w, int h); //! Attempt to focus the client window - bool focus() const; + bool focus(); //! Remove focus from the client window void unfocus() const; @@ -533,6 +610,7 @@ BB @param window The window id that the Client class should handle virtual void unmapHandler(const XUnmapEvent &e); virtual void destroyHandler(const XDestroyWindowEvent &e); virtual void reparentHandler(const XReparentEvent &e); + virtual void mapRequestHandler(const XMapRequestEvent &e); #if defined(SHAPE) virtual void shapeHandler(const XShapeEvent &e); #endif // SHAPE