X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=ecfb17d1faec124404ae21b86416231a080a256f;hb=4736c257a54409bf3b0ef0d803da650c71684dee;hp=495eef81b82d0f755383cb3ecd917f60e6d61f75;hpb=34e819738b344a992a1dbfd6cdd165e0c8ddb3a9;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index 495eef81..ecfb17d1 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -1,6 +1,8 @@ #ifndef __client_h #define __client_h +#include "misc.h" +#include "mwm.h" #include "geom.h" #include "stacking.h" #include "render/color.h" @@ -11,89 +13,45 @@ struct Frame; struct Group; +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) /*! Holds an icon in ARGB format */ -typedef struct Icon { - int width, height; +struct _ObClientIcon +{ + gint width; + gint height; RrPixel32 *data; -} Icon; - -/*! The MWM Hints as retrieved from the window property - This structure only contains 3 elements, even though the Motif 2.0 - structure contains 5. We only use the first 3, so that is all gets - defined. -*/ -typedef struct MwmHints { - /*! A bitmask of Client::MwmFlags values */ - unsigned long flags; - /*! A bitmask of Client::MwmFunctions values */ - unsigned long functions; - /*! A bitmask of Client::MwmDecorations values */ - unsigned long decorations; -} MwmHints; -/*! The number of elements in the Client::MwmHints struct */ -#define MWM_ELEMENTS 3 +}; -/*! Possible flags for MWM Hints (defined by Motif 2.0) */ -typedef enum { - MwmFlag_Functions = 1 << 0, /*!< The MMW Hints define funcs */ - MwmFlag_Decorations = 1 << 1 /*!< The MWM Hints define decor */ -} MwmFlags; - -/*! Possible functions for MWM Hints (defined by Motif 2.0) */ -typedef enum { - MwmFunc_All = 1 << 0, /*!< All functions */ - MwmFunc_Resize = 1 << 1, /*!< Allow resizing */ - MwmFunc_Move = 1 << 2, /*!< Allow moving */ - MwmFunc_Iconify = 1 << 3, /*!< Allow to be iconfied */ - MwmFunc_Maximize = 1 << 4 /*!< Allow to be maximized */ - /*MwmFunc_Close = 1 << 5 /!< Allow to be closed */ -} MwmFunctions; - -/*! Possible decorations for MWM Hints (defined by Motif 2.0) */ -typedef enum { - MwmDecor_All = 1 << 0, /*!< All decorations */ - MwmDecor_Border = 1 << 1, /*!< Show a border */ - MwmDecor_Handle = 1 << 2, /*!< Show a handle (bottom) */ - MwmDecor_Title = 1 << 3, /*!< Show a titlebar */ - /*MwmDecor_Menu = 1 << 4, /!< Show a menu */ - MwmDecor_Iconify = 1 << 5, /*!< Show an iconify button */ - MwmDecor_Maximize = 1 << 6 /*!< Show a maximize button */ -} MemDecorations; - -/*! Corners of the client window, used for anchor positions */ -typedef enum { - Corner_TopLeft, - Corner_TopRight, - Corner_BottomLeft, - Corner_BottomRight -} Corner; - /*! 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; +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; /*! The decorations the client window wants to be displayed on it */ typedef enum { @@ -110,19 +68,8 @@ typedef enum { Decor_Close = 1 << 8 /*!< Display a close button */ } Decoration; -/*! The directions used by client_find_directional */ -typedef enum { - Direction_North, - Direction_East, - Direction_South, - Direction_West, - Direction_NorthEast, - Direction_SouthEast, - Direction_SouthWest, - Direction_NorthWest -} Direction; - -typedef struct Client { +struct _ObClient +{ ObWindow obwin; Window window; @@ -144,7 +91,7 @@ typedef struct Client { members of its Group, and is not a valid pointer to be followed in this case. */ - struct Client *transient_for; + ObClient *transient_for; /*! The clients which are transients (children) of this client */ GSList *transients; /*! The desktop on which the window resides (0xffffffff for all @@ -167,7 +114,7 @@ typedef struct Client { 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 @@ -222,7 +169,7 @@ typedef struct Client { Size base_size; /*! Window decoration and functionality hints */ - MwmHints mwmhints; + ObMwmHints mwmhints; /*! Where to place the decorated window in relation to the undecorated window */ @@ -282,24 +229,24 @@ typedef struct Client { 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. */ - int disabled_decorations; + guint disabled_decorations; - /*! 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 */ - Icon *icons; + ObClientIcon *icons; /*! The number of icons in icons */ - int nicons; -} Client; + guint nicons; +}; extern GList *client_list; @@ -313,7 +260,7 @@ void client_manage(Window win); /*! Unmanages all managed windows */ void client_unmanage_all(); /*! Unmanages a given client */ -void client_unmanage(Client *client); +void client_unmanage(ObClient *client); /*! Sets the client list on the root window from the client_list */ void client_set_list(); @@ -321,15 +268,15 @@ void client_set_list(); /*! Determines if the client should be shown or hidden currently. @return TRUE if it should be visible; otherwise, FALSE. */ -gboolean client_should_show(Client *self); +gboolean client_should_show(ObClient *self); /*! Returns if the window should be treated as a normal window. Some windows (desktops, docks, splash screens) have special rules applied to them in a number of places regarding focus or user interaction. */ -gboolean client_normal(Client *self); +gboolean client_normal(ObClient *self); /* Returns if the window is focused */ -gboolean client_focused(Client *self); +gboolean client_focused(ObClient *self); /*! Move and/or resize the window. This also maintains things like the client's minsize, and size increments. @@ -346,15 +293,16 @@ gboolean client_focused(Client *self); interactive move/resize, and then be TRUE for the last call only. */ -void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, +void client_configure(ObClient *self, ObCorner anchor, + int x, int y, int w, int h, gboolean user, gboolean final); -void client_reconfigure(Client *self); +void client_reconfigure(ObClient *self); /*! Moves a client so that it is on screen if it is entirely out of the viewable screen. */ -void client_move_onscreen(Client *self); +void client_move_onscreen(ObClient *self); /*! Fullscreen's or unfullscreen's the client window @param fs true if the window should be made fullscreen; false if it should @@ -364,7 +312,7 @@ void client_move_onscreen(Client *self); new window that is set to fullscreen. This has no effect when restoring a window from fullscreen. */ -void client_fullscreen(Client *self, gboolean fs, gboolean savearea); +void client_fullscreen(ObClient *self, gboolean fs, gboolean savearea); /*! Iconifies or uniconifies the client window @param iconic true if the window should be iconified; false if it should be @@ -373,7 +321,7 @@ void client_fullscreen(Client *self, gboolean fs, gboolean savearea); be uniconified to the current viewable desktop (true) or to its previous desktop (false) */ -void client_iconify(Client *self, gboolean iconic, gboolean curdesk); +void client_iconify(ObClient *self, gboolean iconic, gboolean curdesk); /*! Maximize or unmaximize the client window @param max true if the window should be maximized; false if it should be @@ -384,35 +332,35 @@ void client_iconify(Client *self, gboolean iconic, gboolean curdesk); new window that is set to fullscreen. This has no effect when unmaximizing a window. */ -void client_maximize(Client *self, gboolean max, int dir, +void client_maximize(ObClient *self, gboolean max, int dir, gboolean savearea); /*! Shades or unshades the client window @param shade true if the window should be shaded; false if it should be unshaded. */ -void client_shade(Client *self, gboolean shade); +void client_shade(ObClient *self, gboolean shade); /*! Request the client to close its window */ -void client_close(Client *self); +void client_close(ObClient *self); /*! Kill the client off violently */ -void client_kill(Client *self); +void client_kill(ObClient *self); /*! Sends the window to the specified desktop @param donthide If TRUE, the window will not be shown/hidden after its desktop has been changed. Generally this should be FALSE. */ -void client_set_desktop(Client *self, guint target, gboolean donthide); +void client_set_desktop(ObClient *self, guint target, gboolean donthide); /*! Validate client, by making sure no Destroy or Unmap events exist in the event queue for the window. @return true if the client is valid; false if the client has already been unmapped/destroyed, and so is invalid. */ -gboolean client_validate(Client *self); +gboolean client_validate(ObClient *self); /*! Sets the wm_state to the specified value */ -void client_set_wm_state(Client *self, long state); +void client_set_wm_state(ObClient *self, long state); /*! Adjusts the window's net_state This should not be called as part of the window mapping process! It is for @@ -420,92 +368,94 @@ void client_set_wm_state(Client *self, long state); client_apply_startup_state is used to do the same things during the mapping process. */ -void client_set_state(Client *self, Atom action, long data1, long data2); +void client_set_state(ObClient *self, Atom action, long data1, long data2); -/* Given a Client, find the client that focus would actually be sent to if - you wanted to give focus to the specified Client. Will return the same - Client passed to it or another Client if appropriate. */ -Client *client_focus_target(Client *self); +/* Given a ObClient, find the client that focus would actually be sent to if + you wanted to give focus to the specified ObClient. Will return the same + ObClient passed to it or another ObClient if appropriate. */ +ObClient *client_focus_target(ObClient *self); /*! Returns what client_focus would return if passed the same client, but without focusing it or modifying the focus order lists. */ -gboolean client_can_focus(Client *self); +gboolean client_can_focus(ObClient *self); /*! Attempt to focus the client window */ -gboolean client_focus(Client *self); +gboolean client_focus(ObClient *self); /*! Remove focus from the client window */ -void client_unfocus(Client *self); +void client_unfocus(ObClient *self); /*! Activates the client for use, focusing, uniconifying it, etc. To be used when the user deliberately selects a window for use. */ -void client_activate(Client *self); +void client_activate(ObClient *self); /*! Calculates the stacking layer for the client window */ -void client_calc_layer(Client *self); +void client_calc_layer(ObClient *self); /*! Updates the window's transient status, and any parents of it */ -void client_update_transient_for(Client *self); +void client_update_transient_for(ObClient *self); /*! Update the protocols that the window supports and adjusts things if they change */ -void client_update_protocols(Client *self); +void client_update_protocols(ObClient *self); /*! Updates the WMNormalHints and adjusts things if they change */ -void client_update_normal_hints(Client *self); +void client_update_normal_hints(ObClient *self); /*! Updates the WMHints and adjusts things if they change @param initstate Whether to read the initial_state property from the WMHints. This should only be used during the mapping process. */ -void client_update_wmhints(Client *self); +void client_update_wmhints(ObClient *self); /*! Updates the window's title and icon title */ -void client_update_title(Client *self); +void client_update_title(ObClient *self); /*! Updates the window's application name and class */ -void client_update_class(Client *self); +void client_update_class(ObClient *self); /*! Updates the strut for the client */ -void client_update_strut(Client *self); +void client_update_strut(ObClient *self); /*! Updates the window's icons */ -void client_update_icons(Client *self); +void client_update_icons(ObClient *self); /*! Set up what decor should be shown on the window and what functions should - be allowed (Client::decorations and Client::functions). + be allowed (ObClient::decorations and ObClient::functions). This also updates the NET_WM_ALLOWED_ACTIONS hint. */ -void client_setup_decor_and_functions(Client *self); +void client_setup_decor_and_functions(ObClient *self); -/*! Retrieves the window's type and sets Client->type */ -void client_get_type(Client *self); +/*! Retrieves the window's type and sets ObClient->type */ +void client_get_type(ObClient *self); -Icon *client_icon(Client *self, int w, int h); +ObClientIcon *client_icon(ObClient *self, int w, int h); /*! Searches a client's transients for a focused window. The function does not check for the passed client, only for its transients. If no focused transient is found, NULL is returned. */ -Client *client_search_focus_tree(Client *self); +ObClient *client_search_focus_tree(ObClient *self); /*! Searches a client's transient tree for a focused window. The function searches up the tree and down other branches as well as the passed client's. If no focused client is found, NULL is returned. */ -Client *client_search_focus_tree_full(Client *self); +ObClient *client_search_focus_tree_full(ObClient *self); /*! Return a modal child of the client window that can be focused. @return A modal child of the client window that can be focused, or 0 if none was found. */ -Client *client_search_modal_child(Client *self); +ObClient *client_search_modal_child(ObClient *self); + +ObClient *client_search_top_transient(ObClient *self); /*! Return the "closest" client in the given direction */ -Client *client_find_directional(Client *c, Direction dir); +ObClient *client_find_directional(ObClient *c, ObDirection dir); /*! Set a client window to be above/below other clients. @layer < 0 indicates the client should be placed below other clients.
= 0 indicates the client should be placed with other clients.
> 0 indicates the client should be placed above other clients. */ -void client_set_layer(Client *self, int layer); +void client_set_layer(ObClient *self, int layer); -guint client_xinerama_area(Client *self); +guint client_monitor(ObClient *self); #endif