X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.h;h=4421f8fe3e4f4af048076b0699432ddb70f9dbb8;hb=742106511fbaca5ebef385a9c60c427e8dd7a6dd;hp=b13cf06c3937de730f166fc546de032a7b78ebab;hpb=2477a38d2f3063b697e44bf3690cf280fb26ca8a;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index b13cf06c..4421f8fe 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -10,15 +10,15 @@ #include #include -struct Frame; -struct Group; +struct _ObFrame; +struct _ObGroup; typedef struct _ObClient ObClient; typedef struct _ObClientIcon ObClientIcon; /* The value in client.transient_for indicating it is a transient for its group instead of for a single window */ -#define TRAN_GROUP ((void*)~0l) +#define OB_TRAN_GROUP ((void*)~0l) /*! Holds an icon in ARGB format */ struct _ObClientIcon @@ -29,42 +29,29 @@ struct _ObClientIcon }; /*! Possible window types */ -typedef enum { - 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, /*!< 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 */ - Type_Normal /*!< A normal application window */ -} WindowType; +typedef enum +{ + OB_CLIENT_TYPE_DESKTOP, /*!< A desktop (bottom-most window) */ + OB_CLIENT_TYPE_DOCK, /*!< A dock bar/panel window */ + OB_CLIENT_TYPE_TOOLBAR, /*!< A toolbar window, pulled off an app */ + OB_CLIENT_TYPE_MENU, /*!< An unpinned menu from an app */ + OB_CLIENT_TYPE_UTILITY, /*!< A small utility window such as a palette */ + OB_CLIENT_TYPE_SPLASH, /*!< A splash screen window */ + OB_CLIENT_TYPE_DIALOG, /*!< A dialog window */ + OB_CLIENT_TYPE_NORMAL /*!< A normal application window */ +} ObClientType; /*! The things the user can do to the client window */ -typedef enum { - 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 */ -} Function; - -/*! 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; +typedef enum +{ + OB_CLIENT_FUNC_RESIZE = 1 << 0, /*!< Allow user resizing */ + OB_CLIENT_FUNC_MOVE = 1 << 1, /*!< Allow user moving */ + OB_CLIENT_FUNC_ICONIFY = 1 << 2, /*!< Allow to be iconified */ + OB_CLIENT_FUNC_MAXIMIZE = 1 << 3, /*!< Allow to be maximized */ + OB_CLIENT_FUNC_SHADE = 1 << 4, /*!< Allow to be shaded */ + OB_CLIENT_FUNC_FULLSCREEN = 1 << 5, /*!< Allow to be made fullscreen */ + OB_CLIENT_FUNC_CLOSE = 1 << 6 /*!< Allow to be closed */ +} ObFunctions; struct _ObClient { @@ -73,20 +60,20 @@ struct _ObClient 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 id of the group the window belongs to */ - struct Group *group; + struct _ObGroup *group; /*! Whether or not the client is a transient window. This is guaranteed to be TRUE if transient_for != NULL, but not guaranteed to be FALSE if transient_for == NULL. */ gboolean transient; /*! The client which this client is a transient (child) for. A value of TRAN_GROUP signifies that the window is a transient for all - members of its Group, and is not a valid pointer to be followed in this + members of its ObGroup, and is not a valid pointer to be followed in this case. */ ObClient *transient_for; @@ -112,7 +99,7 @@ struct _ObClient gchar *role; /*! The type of window (what its function is) */ - WindowType type; + ObClientType type; /*! Position and size of the window This will not always be the actual position of the window on screen, it @@ -221,29 +208,29 @@ struct _ObClient /*! 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. */ - int decorations; + 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. */ - int disabled_decorations; + gboolean decorate; - /*! A bitmask of values in the Function enum + /*! A bitmask of values in the ObFunctions enum The values in the variable specify the ways in which the user is allowed to modify this window. */ - int functions; + guint functions; /*! Icons for the client as specified on the client window */ ObClientIcon *icons; /*! The number of icons in icons */ - int nicons; + guint nicons; }; extern GList *client_list; @@ -297,10 +284,28 @@ void client_configure(ObClient *self, ObCorner anchor, 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 @@ -444,6 +449,8 @@ ObClient *client_search_modal_child(ObClient *self); 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);