X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=9f208596f2fe6261fc2573b09b289e5c80bcbe19;hb=8eea9dcdb77e004e67c23061eaecce26e8cd4e68;hp=a2cdea25116abc930a0952e8a95ea3442e02e15b;hpb=571b09f999585c66e9781877c94807f663c2bd4c;p=chaz%2Fopenbox
diff --git a/openbox/client.h b/openbox/client.h
index a2cdea25..9f208596 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,11 @@ 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 */
@@ -388,16 +379,21 @@ 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, TRUE, TRUE)
+ client_configure(self, x, y, self->area.width, self->area.height, TRUE, TRUE,\
+ FALSE)
#define client_resize(self, w, h) \
- client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE)
+ client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE, FALSE)
#define client_move_resize(self, x, y, w, h) \
- client_configure(self, x, y, w, h, TRUE, TRUE)
+ client_configure(self, x, y, w, h, TRUE, TRUE, FALSE)
+#define client_reconfigure(self, force) \
+ client_configure(self, ((ObClient*)self)->area.x, ((ObClient*)self)->area.y, \
+ ((ObClient*)self)->area.width, \
+ ((ObClient*)self)->area.height, FALSE, TRUE, force)
/*! Figure out where a window will end up and what size it will be if you
told it to move/resize to these coordinates.
- These values are what client_configure_full will give the window.
+ These values are what client_configure will give the window.
@param x The x coordiante of the new position for the client.
@param y The y coordiante of the new position for the client.
@@ -431,12 +427,10 @@ void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h,
interactive move/resize, and then be TRUE for the last call
only.
@param force_reply Send a ConfigureNotify to the client regardless of if
- the position changed.
+ the position/size changed.
*/
void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
- gboolean user, gboolean final);
-
-void client_reconfigure(ObClient *self);
+ gboolean user, gboolean final, gboolean force_reply);
/*! Finds coordinates to keep a client on the screen.
@param self The client
@@ -461,6 +455,18 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h,
*/
void client_move_onscreen(ObClient *self, gboolean rude);
+/*! dir is either North, South, East or West. It can't be, for example,
+ Northwest */
+void client_find_edge_directional(ObClient *self, ObDirection dir,
+ gint my_head, gint my_tail,
+ gint my_edge_start, gint my_edge_size,
+ gint *dest, gboolean *near_edge);
+void client_find_move_directional(ObClient *self, ObDirection dir,
+ gint *x, gint *y);
+void client_find_resize_directional(ObClient *self, ObDirection side,
+ gboolean grow,
+ gint *x, gint *y, gint *w, gint *h);
+
/*! 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.
@@ -505,8 +511,11 @@ 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.
+ @param dontraise If TRUE, the window will not be raised. Generally this should
+ be FALSE.
*/
-void client_set_desktop(ObClient *self, guint target, gboolean donthide);
+void client_set_desktop(ObClient *self, guint target, gboolean donthide,
+ gboolean dontraise);
/*! Show the client if it should be shown. Returns if the window is shown. */
gboolean client_show(ObClient *self);
@@ -553,10 +562,13 @@ gboolean client_focus(ObClient *self);
when the user deliberately selects a window for use.
@param here If true, then the client is brought to the current desktop;
otherwise, the desktop is changed to where the client lives.
+ @param raise If true, the client is brought to the front.
+ @param unshade If true, the client is unshaded (if it is shaded)
@param user If true, then a user action is what requested the activation;
otherwise, it means an application requested it on its own
*/
-void client_activate(ObClient *self, gboolean here, gboolean user);
+void client_activate(ObClient *self, gboolean here, gboolean raise,
+ gboolean unshade, gboolean user);
/*! Bring all of its helper windows to its desktop. These are the utility and
stuff windows. */
@@ -614,6 +626,8 @@ void client_get_type_and_transientness(ObClient *self);
const ObClientIcon *client_icon(ObClient *self, gint w, gint h);
+ObClientIcon *client_thumbnail(ObClient *self, gint w, gint h);
+
/*! Return TRUE if the client is transient for some other window. Return
FALSE if it's not transient or there is no window for it to be
transient for */
@@ -682,9 +696,6 @@ ObClient *client_search_parent(ObClient *self, ObClient *search);
NULL is returned if the given search is not a transient of the client. */
ObClient *client_search_transient(ObClient *self, ObClient *search);
-/*! Return the closest edge in the given direction */
-gint client_directional_edge_search(ObClient *c, ObDirection dir, gboolean hang);
-
/*! 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.
@@ -698,4 +709,6 @@ ObClient* client_under_pointer();
gboolean client_has_group_siblings(ObClient *self);
+void clienticon_free(ObClientIcon *ci);
+
#endif