X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=4ee239f0b3b5c64d7424a3f5cbaab5083feb95fa;hb=a3f8c5c45a1ff323fc088cc5af49ab48d5679e54;hp=c3c4c8f2fb8b8305af3f2b003d3950f89f9b1f1d;hpb=50f631b9a7ba95ecf18c0d989fe8f51800b0e625;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index c3c4c8f2..4ee239f0 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -2,7 +2,7 @@ client.h for the Openbox window manager Copyright (c) 2006 Mikael Magnusson - Copyright (c) 2003 Ben Jansens + Copyright (c) 2003-2007 Dana Jansens This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -114,11 +114,12 @@ struct _ObClient /*! Normal window title */ gchar *title; - /*! The count for the title. When another window with the same title - exists, a count will be appended to it. */ - guint title_count; /*! Window title when iconified */ 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; @@ -139,6 +140,9 @@ struct _ObClient */ Rect area; + /*! Position of the client window relative to the root window */ + Point root_pos; + /*! Position and size of the window prior to being maximized */ Rect pre_max_area; /*! Position and size of the window prior to being fullscreened */ @@ -191,6 +195,9 @@ struct _ObClient /*! Window decoration and functionality hints */ ObMwmHints mwmhints; + + /*! The client's specified colormap */ + Colormap colormap; /*! Where to place the decorated window in relation to the undecorated window */ @@ -214,6 +221,15 @@ struct _ObClient /*! Notify the window when it receives focus? */ gboolean focus_notify; +#ifdef SYNC + /*! The client wants to sync during resizes */ + gboolean sync_request; + /*! The XSync counter used for synchronizing during resizes */ + guint32 sync_counter; + /*! The value we're waiting for the counter to reach */ + gulong sync_counter_value; +#endif + /*! The window uses shape extension to be non-rectangular? */ gboolean shaped; @@ -244,6 +260,9 @@ struct _ObClient /*! Demands attention flag */ gboolean demands_attention; + /*! The urgent flag */ + gboolean urgent; + /*! The layer in which the window will be stacked, windows in lower layers are always below windows in higher layers. */ ObStackingLayer layer; @@ -270,33 +289,10 @@ struct _ObClient /*! The number of icons in icons */ guint nicons; - guint32 user_time; -}; + /* Where the window should iconify to/from */ + Rect icon_geometry; -struct _ObAppSettings -{ - gchar *class; - gchar *name; - gchar *role; - - 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; + guint32 user_time; }; extern GList *client_list; @@ -304,10 +300,13 @@ extern GList *client_list; void client_startup(gboolean reconfig); void client_shutdown(gboolean reconfig); -typedef void (*ObClientDestructor)(ObClient *client, gpointer data); +typedef void (*ObClientCallback)(ObClient *client, gpointer data); -void client_add_destructor(ObClientDestructor func, gpointer data); -void client_remove_destructor(ObClientDestructor func); +/* Callback functions */ + +/*! 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(); @@ -331,28 +330,45 @@ 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 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); +/*! 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, + gint w, gint h); + #define client_move(self, x, y) \ - client_configure(self, OB_CORNER_TOPLEFT, x, y, \ - self->area.width, self->area.height, \ + client_configure(self, x, y, self->area.width, self->area.height, \ TRUE, TRUE) #define client_resize(self, w, h) \ - client_configure(self, OB_CORNER_TOPLEFT, self->area.x, self->area.y, \ - w, h, 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, OB_CORNER_TOPLEFT, x, y, w, h, TRUE, TRUE) + client_configure(self, x, y, w, h, TRUE, TRUE) -#define client_configure(self, anchor, x, y, w, h, user, final) \ - client_configure_full(self, anchor, x, y, w, h, user, final, FALSE) +#define client_configure(self, x, y, w, h, user, final) \ + client_configure_full(self, x, y, w, h, user, final, FALSE) /*! 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. - @param anchor The corner to keep in the same position when resizing. @param x The x coordiante of the new position for the client. @param y The y coordiante of the new position for the client. @param w The width component of the new size for the client. @@ -367,14 +383,12 @@ gboolean client_focused(ObClient *self); program requested change. For program requested changes, the constraints are not checked. */ -void client_try_configure(ObClient *self, ObCorner anchor, - gint *x, gint *y, gint *w, gint *h, +void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h, gint *logicalw, gint *logicalh, gboolean user); /*! Move and/or resize the window. This also maintains things like the client's minsize, and size increments. - @param anchor The corner to keep in the same position when resizing. @param x The x coordiante of the new position for the client. @param y The y coordiante of the new position for the client. @param w The width component of the new size for the client. @@ -389,8 +403,7 @@ void client_try_configure(ObClient *self, ObCorner anchor, @param force_reply Send a ConfigureNotify to the client regardless of if the position changed. */ -void client_configure_full(ObClient *self, ObCorner anchor, - gint x, gint y, gint w, gint h, +void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h, gboolean user, gboolean final, gboolean force_reply); @@ -447,6 +460,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); @@ -458,9 +474,16 @@ 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. */ +void client_show(ObClient *self); + +/*! Show the client if it should be shown. */ +void client_hide(ObClient *self); + /*! Show the client if it should be shown, and hide it if it should be hidden. This is for example, when switching desktops. */ @@ -504,9 +527,12 @@ gboolean client_focus(ObClient *self); otherwise, the desktop is changed to where the client lives. @param user If true, then a user action is what requested the activation; otherwise, it means an application requested it on its own - @param timestamp The time at which the activate was requested. */ -void client_activate(ObClient *self, gboolean here, gboolean user, Time time); +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); @@ -536,6 +562,12 @@ void client_update_transient_for(ObClient *self); /*! Update the protocols that the window supports and adjusts things if they change */ void client_update_protocols(ObClient *self); +#ifdef SYNC +/*! Updates the window's sync request counter for resizes */ +void client_update_sync_request_counter(ObClient *self); +#endif +/*! Updates the window's colormap */ +void client_update_colormap(ObClient *self, Colormap colormap); /*! Updates the WMNormalHints and adjusts things if they change */ void client_update_normal_hints(ObClient *self); @@ -547,14 +579,14 @@ 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, gboolean new_event); +void client_update_user_time(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). @@ -597,10 +629,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); @@ -613,26 +652,18 @@ 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" client in the given direction */ -ObClient *client_find_directional(ObClient *c, ObDirection dir); - /*! 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.
+ @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);