X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=f9a194831a3b4da8666d81d83960ff3f4da0aff5;hb=cdb108c76d20e8272bfbd15919e32e609d685322;hp=1273a6871c350ca356758da056e631a8a5922f35;hpb=5784f11132cb2ee64af23695867aca9f4ebe0b9b;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index 1273a687..f9a19483 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -118,6 +118,8 @@ struct _ObClient gchar *icon_title; /*! Hostname of machine running the client */ gchar *client_machine; + /*! The command used to run the program. Pre-XSMP window identification. */ + gchar *wm_command; /*! The application that created the window */ gchar *name; @@ -287,44 +289,28 @@ struct _ObClient /*! The number of icons in icons */ guint nicons; - guint32 user_time; -}; - -struct _ObAppSettings -{ - gchar *class; - gchar *name; - gchar *role; + /*! Where the window should iconify to/from */ + Rect icon_geometry; - Point position; - gboolean center_x; - gboolean center_y; - gboolean pos_given; - - guint desktop; - gint shade; - gint decor; - gint focus; - gint head; - gint iconic; - gint skip_pager; - gint skip_taskbar; - gint max_horz; - gint max_vert; - gint fullscreen; - - gint layer; + /*! 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); -typedef void (*ObClientDestructor)(ObClient *client, gpointer data); +typedef void (*ObClientCallback)(ObClient *client, gpointer data); + +/* Callback functions */ -void client_add_destructor(ObClientDestructor func, gpointer data); -void client_remove_destructor(ObClientDestructor func); +/*! Get notified when the client is unmanaged */ +void client_add_destructor(ObClientCallback func, gpointer data); +void client_remove_destructor(ObClientCallback func); /*! Manages all existing windows */ void client_manage_all(); @@ -348,10 +334,20 @@ gboolean client_should_show(ObClient *self); to them in a number of places regarding focus or user interaction. */ gboolean client_normal(ObClient *self); -/*! Returns if the window is one of an application's main windows (normal or - dialog type) rather than an accessory window (utilty, menu, etc) or a - non-normal window */ -gboolean client_application(ObClient *self); +/*! Returns if the window is one of an application's helper windows + (utilty, menu, etc) */ +gboolean client_helper(ObClient *self); + +/*! Return if the client is a type which should be given focus from mouse + 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 + mouse entering the window. This doesn't count for focus cycling, different + rules apply to that. */ +gboolean client_enter_focusable(ObClient *self); /* Returns if the window is focused */ gboolean client_focused(ObClient *self); @@ -468,6 +464,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); @@ -479,7 +478,8 @@ 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. */ + desktop has been changed. Generally this should be FALSE. +*/ void client_set_desktop(ObClient *self, guint target, gboolean donthide); /*! Show the client if it should be shown. */ @@ -534,6 +534,10 @@ gboolean client_focus(ObClient *self); */ 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); + /*! Calculates the stacking layer for the client window */ void client_calc_layer(ObClient *self); @@ -579,14 +583,16 @@ void client_update_normal_hints(ObClient *self); void client_update_wmhints(ObClient *self); /*! Updates the window's title and icon title */ void client_update_title(ObClient *self); -/*! Updates the window's application name and class */ -void client_update_class(ObClient *self); /*! Updates the strut for the client */ void client_update_strut(ObClient *self); /*! Updates the window's icons */ 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); /*! Set up what decor should be shown on the window and what functions should be allowed (ObClient::decorations and ObClient::functions). @@ -629,10 +635,17 @@ ObClient *client_search_modal_child(ObClient *self); */ GSList *client_search_all_top_parents(ObClient *self); +/*! Returns a list of top-level windows which this is a transient for, and + which are in the same layer as this client. + It will only contain more than 1 element if the client is transient for its + group. +*/ +GSList *client_search_all_top_parents_layer(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_parent(ObClient *self); +ObClient *client_search_top_normal_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); @@ -649,23 +662,16 @@ 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); -void client_update_sm_client_id(ObClient *self); - ObClient* client_under_pointer(); gboolean client_has_group_siblings(ObClient *self); -gboolean client_has_application_group_siblings(ObClient *self); - #endif