#include <glib.h>
#include <X11/Xlib.h>
-struct Frame;
+struct _ObFrame;
struct _ObGroup;
typedef struct _ObClient ObClient;
OB_CLIENT_FUNC_CLOSE = 1 << 6 /*!< Allow to be closed */
} ObFunctions;
-/*! The decorations the client window wants to be displayed on it */
-typedef enum {
- Decor_Titlebar = 1 << 0, /*!< Display a titlebar */
- Decor_Handle = 1 << 1, /*!< Display a handle (bottom) */
- Decor_Border = 1 << 2, /*!< Display a border */
- Decor_Icon = 1 << 3, /*!< Display the window's icon */
- Decor_Iconify = 1 << 4, /*!< Display an iconify button */
- Decor_Maximize = 1 << 5, /*!< Display a maximize button */
- /*! Display a button to toggle the window's placement on
- all desktops */
- Decor_AllDesktops = 1 << 6,
- Decor_Shade = 1 << 7, /*!< Displays a shade button */
- Decor_Close = 1 << 8 /*!< Display a close button */
-} Decoration;
-
struct _ObClient
{
ObWindow obwin;
Window window;
/*! The window's decorations. NULL while the window is being managed! */
- struct Frame *frame;
+ struct _ObFrame *frame;
/*! The number of unmap events to ignore on the window */
int ignore_unmaps;
/*! The layer in which the window will be stacked, windows in lower layers
are always below windows in higher layers. */
- StackLayer layer;
+ ObStackingLayer layer;
- /*! A bitmask of values in the Decoration enum
+ /*! A bitmask of values in the ObFrameDecorations enum
The values in the variable are the decorations that the client wants to
be displayed around it.
*/
guint decorations;
- /*! A bitmask of values in the Decoration enum.
- Specifies the decorations that should NOT be displayed on the client.
+ /*! A user option. When this is set to FALSE the client will not ever
+ be decorated.
*/
- guint disabled_decorations;
+ gboolean decorate;
/*! A bitmask of values in the ObFunctions enum
The values in the variable specify the ways in which the user is allowed
void client_reconfigure(ObClient *self);
+/*! Finds coordinates to keep a client on the screen.
+ @param self The client
+ @param x The x coord of the client, may be changed.
+ @param y The y coord of the client, may be changed.
+ @param w The width of the client.
+ @param w The height of the client.
+ @param rude Be rude about it. If false, it is only moved if it is entirely
+ not visible. If true, then make sure the window is inside the
+ struts if possible.
+ @return true if the client was moved to be on-screen; false if not.
+*/
+gboolean client_find_onscreen(ObClient *self, int *x, int *y, int w, int h,
+ gboolean rude);
+
/*! Moves a client so that it is on screen if it is entirely out of the
viewable screen.
+ @param self The client to move
+ @param rude Be rude about it. If false, it is only moved if it is entirely
+ not visible. If true, then make sure the window is inside the
+ struts if possible.
*/
-void client_move_onscreen(ObClient *self);
+void client_move_onscreen(ObClient *self, gboolean rude);
/*! Fullscreen's or unfullscreen's the client window
@param fs true if the window should be made fullscreen; false if it should
ObClient *client_search_top_transient(ObClient *self);
+ObClient *client_search_transient(ObClient *self, ObClient *search);
+
/*! Return the "closest" client in the given direction */
ObClient *client_find_directional(ObClient *c, ObDirection dir);