X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=98f9e6e41afd9441537c3daf5a5c1430b868fed8;hb=62ac5e57a1f48a302e9bb69486f8d8722841e093;hp=55b684ff2d6fa3e73dd6997109f41da08135304a;hpb=301016fd2ba714c1d4bc6d246a92e13eefef9954;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index 55b684ff..98f9e6e4 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -36,10 +36,6 @@ struct _ObSessionState; 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 OB_TRAN_GROUP ((void*)~0l) - /*! Holds an icon in ARGB format */ struct _ObClientIcon { @@ -93,16 +89,13 @@ struct _ObClient /*! Saved session data to apply to this client */ struct _ObSessionState *session; - /*! 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. */ + /*! Whether or not the client is a transient window. It may or may not + have parents when this is true. */ 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 ObGroup, and is not a valid pointer to be followed in this - case. - */ - ObClient *transient_for; + /*! Whether or not the client is transient for its group */ + gboolean transient_for_group; + /*! The client which are parents of this client */ + GSList *parents; /*! The clients which are transients (children) of this client */ GSList *transients; /*! The desktop on which the window resides (0xffffffff for all @@ -386,13 +379,11 @@ void client_convert_gravity_resize(ObClient *self, gint gravity, gint w, gint h); #define client_move(self, x, y) \ - client_configure(self, x, y, self->area.width, self->area.height, \ - self->border_width, TRUE, TRUE) + client_configure(self, x, y, self->area.width, self->area.height, TRUE, TRUE) #define client_resize(self, w, h) \ - client_configure(self, self->area.x, self->area.y, w, h, \ - self->border_width, TRUE, TRUE) + client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE) #define client_move_resize(self, x, y, w, h) \ - client_configure(self, x, y, w, h, self->border_width, TRUE, TRUE) + client_configure(self, x, y, w, h, TRUE, TRUE) /*! Figure out where a window will end up and what size it will be if you told it to move/resize to these coordinates. @@ -433,7 +424,7 @@ void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h, @param force_reply Send a ConfigureNotify to the client regardless of if the position changed. */ -void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gint b, +void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gboolean user, gboolean final); void client_reconfigure(ObClient *self); @@ -604,8 +595,10 @@ void client_update_icon_geometry(ObClient *self); /*! Set up what decor should be shown on the window and what functions should be allowed (ObClient::decorations and ObClient::functions). This also updates the NET_WM_ALLOWED_ACTIONS hint. + @param reconfig When TRUE, the window will be reconfigured to show the + changes */ -void client_setup_decor_and_functions(ObClient *self); +void client_setup_decor_and_functions(ObClient *self, gboolean reconfig); /*! Sets the window's type and transient flag */ void client_get_type_and_transientness(ObClient *self); @@ -635,6 +628,11 @@ ObClient *client_search_focus_tree(ObClient *self); */ ObClient *client_search_focus_tree_full(ObClient *self); +/*! Searches a client's group and each member's transients for a focused + window. This doesn't go up the window's transient tree at all. If no + focused client is found, NULL is returned. */ +ObClient *client_search_focus_group_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. @@ -654,10 +652,15 @@ GSList *client_search_all_top_parents(ObClient *self); */ GSList *client_search_all_top_parents_layer(ObClient *self); +/*! Returns the client's parent when it is transient for a direct window + rather than a group. If it has no parents, or is transient for the + group, this returns null */ +ObClient *client_direct_parent(ObClient *self); + /*! Returns a window's top level parent. This only counts direct parents, not groups if it is transient for its group. */ -ObClient *client_search_top_normal_parent(ObClient *self); +ObClient *client_search_top_direct_parent(ObClient *self); /*! Is one client a direct child of another (i.e. not through the group.) */ gboolean client_is_direct_child(ObClient *parent, ObClient *child);