X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=inline;f=openbox%2Fclient.h;h=bc7c32e8473913a1eb46749caf4f537ce409c515;hb=d3ecb7c127edc6fd16059f786818bde71b9540a7;hp=5c5fdb90c3494f61c9bd9efcfea114a8247a9392;hpb=b0f43a115909a810bca9bbfa664851703bfd43e1;p=chaz%2Fopenbox
diff --git a/openbox/client.h b/openbox/client.h
index 5c5fdb90..bc7c32e8 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -166,7 +166,7 @@ struct _ObClient
The window manager will set this to 0 while the window is being managed,
but needs to restore it afterwards, so it is saved here.
*/
- guint border_width;
+ gint border_width;
/*! The minimum aspect ratio the client window can be sized to.
A value of 0 means this is ignored.
@@ -289,13 +289,17 @@ struct _ObClient
/*! The number of icons in icons */
guint nicons;
- /* Where the window should iconify to/from */
+ /*! Where the window should iconify to/from */
Rect icon_geometry;
+ /*! The time when the client last received user interaction */
guint32 user_time;
+ /*! A separate window for the client to update it's user_time on */
+ Window user_time_window;
};
-extern GList *client_list;
+extern GList *client_list;
+extern GHashTable *client_user_time_window_map;
void client_startup(gboolean reconfig);
void client_shutdown(gboolean reconfig);
@@ -308,19 +312,24 @@ typedef void (*ObClientCallback)(ObClient *client, gpointer data);
void client_add_destructor(ObClientCallback func, gpointer data);
void client_remove_destructor(ObClientCallback func);
-/*! Get notified when the client changes desktop */
-void client_add_desktop_notify(ObClientCallback func, gpointer data);
-void client_remove_desktop_notify(ObClientCallback func);
-
/*! Manages all existing windows */
void client_manage_all();
-/*! Manages a given window */
+/*! Manages a given window
+*/
void client_manage(Window win);
/*! Unmanages all managed windows */
void client_unmanage_all();
/*! Unmanages a given client */
void client_unmanage(ObClient *client);
+/*! This manages a window only so far as is needed to get it's decorations.
+ This is used when you want to determine a window's decorations before it
+ is mapped. Call client_fake_unmanage() with the returned client when you
+ are done with it. */
+ObClient *client_fake_manage(Window win);
+/*! Free the stuff created by client_fake_manage() */
+void client_fake_unmanage(ObClient *self);
+
/*! Sets the client list on the root window from the client_list */
void client_set_list();
@@ -339,8 +348,9 @@ gboolean client_normal(ObClient *self);
gboolean client_helper(ObClient *self);
/*! Return if the client is a type which should be given focus from mouse
- actions like button presses. This doesn't count for focus cycling, different
- rules apply to that. */
+ presses on the *client* window. This doesn't affect clicking on the
+ decorations. This doesn't count for focus cycling, different rules apply to
+ that. */
gboolean client_mouse_focusable(ObClient *self);
/*! Return if the client is a type which should be given focus from the
@@ -353,7 +363,7 @@ gboolean client_focused(ObClient *self);
/*! Convery a position/size from a given gravity to the client's true gravity
*/
-void client_convert_gravity(ObClient *client, gint gravity, gint *x, gint *y,
+void client_convert_gravity(ObClient *self, gint gravity, gint *x, gint *y,
gint w, gint h);
#define client_move(self, x, y) \
@@ -365,7 +375,7 @@ void client_convert_gravity(ObClient *client, gint gravity, gint *x, gint *y,
client_configure(self, x, y, w, h, TRUE, TRUE)
#define client_configure(self, x, y, w, h, user, final) \
- client_configure_full(self, x, y, w, h, user, final, FALSE)
+ client_configure_full(self, x, y, w, h, user, final)
/*! Figure out where a window will end up and what size it will be if you
told it to move/resize to these coordinates.
@@ -407,8 +417,7 @@ void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h,
the position changed.
*/
void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h,
- gboolean user, gboolean final,
- gboolean force_reply);
+ gboolean user, gboolean final);
void client_reconfigure(ObClient *self);
@@ -448,7 +457,8 @@ void client_fullscreen(ObClient *self, gboolean fs);
be uniconified to the current viewable desktop (true) or to
its previous desktop (false)
*/
-void client_iconify(ObClient *self, gboolean iconic, gboolean curdesk);
+void client_iconify(ObClient *self, gboolean iconic, gboolean curdesk,
+ gboolean hide_animation);
/*! Maximize or unmaximize the client window
@param max true if the window should be maximized; false if it should be
@@ -463,6 +473,9 @@ void client_maximize(ObClient *self, gboolean max, gint dir);
*/
void client_shade(ObClient *self, gboolean shade);
+/*! Set a client window to have decorations or not */
+void client_set_undecorated(ObClient *self, gboolean undecorated);
+
/*! Hilite the window to make the user notice it */
void client_hilite(ObClient *self, gboolean hilite);
@@ -532,31 +545,11 @@ void client_activate(ObClient *self, gboolean here, gboolean user);
/*! Bring all of its helper windows to its desktop. These are the utility and
stuff windows. */
-void client_bring_helper_windows(ObClient *client);
+void client_bring_helper_windows(ObClient *self);
/*! Calculates the stacking layer for the client window */
void client_calc_layer(ObClient *self);
-/*! Raises the client to the top of its stacking layer
- Normally actions call to the client_* functions to make stuff go, but this
- one is an exception. It just fires off an action, which will be queued.
- This is because stacking order rules can be changed by focus state, and so
- any time focus changes you have to wait for it to complete before you can
- properly restart windows. As such, this only queues an action for later
- execution, once the focus change has gone through.
-*/
-void client_raise(ObClient *self);
-
-/*! Lowers the client to the bottom of its stacking layer
- Normally actions call to the client_* functions to make stuff go, but this
- one is an exception. It just fires off an action, which will be queued.
- This is because stacking order rules can be changed by focus state, and so
- any time focus changes you have to wait for it to complete before you can
- properly restart windows. As such, this only queues an action for later
- execution, once the focus change has gone through.
-*/
-void client_lower(ObClient *self);
-
/*! Updates the window's transient status, and any parents of it */
void client_update_transient_for(ObClient *self);
/*! Update the protocols that the window supports and adjusts things if they
@@ -585,6 +578,8 @@ void client_update_strut(ObClient *self);
void client_update_icons(ObClient *self);
/*! Updates the window's user time */
void client_update_user_time(ObClient *self);
+/*! Updates the window's user time window */
+void client_update_user_time_window(ObClient *self);
/*! Updates the window's icon geometry (where to iconify to/from) */
void client_update_icon_geometry(ObClient *self);
@@ -594,8 +589,8 @@ void client_update_icon_geometry(ObClient *self);
*/
void client_setup_decor_and_functions(ObClient *self);
-/*! Retrieves the window's type and sets ObClient->type */
-void client_get_type(ObClient *self);
+/*! Sets the window's type and transient flag */
+void client_get_type_and_transientness(ObClient *self);
const ObClientIcon *client_icon(ObClient *self, gint w, gint h);
@@ -656,15 +651,12 @@ ObClient *client_search_transient(ObClient *self, ObClient *search);
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.
+ @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(ObClient *self, gint layer);
-/*! Set a client window to have decorations or not */
-void client_set_undecorated(ObClient *self, gboolean undecorated);
-
guint client_monitor(ObClient *self);
ObClient* client_under_pointer();