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
/*! 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 application that created the window */
gchar *name;
*/
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 */
/*! 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 */
/*! 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;
#define client_configure(self, anchor, x, y, w, h, user, final) \
client_configure_full(self, anchor, 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.
+ @param h The height component of the new size for the client.
+ @param logicalw Returns the width component of the new logical width.
+ This value is only returned when the new w or h calculated
+ differ from the ones passed in.
+ @param logicalh Returns the height component of the new logical height.
+ This value is only returned when the new w or h calculated
+ differ from the ones passed in.
+ @param user Specifies whether this is a user-requested change or a
+ 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,
+ 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.
/*! 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.
- @param savearea true to have the client's current size and position saved;
- otherwise, they are not. You should not save when mapping a
- new window that is set to fullscreen. This has no effect
- when restoring a window from fullscreen.
*/
-void client_fullscreen(ObClient *self, gboolean fs, gboolean savearea);
+void client_fullscreen(ObClient *self, gboolean fs);
/*! Iconifies or uniconifies the client window
@param iconic true if the window should be iconified; false if it should be
@param max true if the window should be maximized; false if it should be
returned to normal size.
@param dir 0 to set both horz and vert, 1 to set horz, 2 to set vert.
- @param savearea true to have the client's current size and position saved;
- otherwise, they are not. You should not save when mapping a
- new window that is set to fullscreen. This has no effect
- when unmaximizing a window.
*/
-void client_maximize(ObClient *self, gboolean max, gint dir,
- gboolean savearea);
+void client_maximize(ObClient *self, gboolean max, gint dir);
/*! Shades or unshades the client window
@param shade true if the window should be shaded; false if it should be
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.
+*/
+void client_showhide(ObClient *self);
+
/*! Validate client, by making sure no Destroy or Unmap events exist in
the event queue for the window.
@return true if the client is valid; false if the client has already
without focusing it or modifying the focus order lists. */
gboolean client_can_focus(ObClient *self);
-/*! Attempt to focus the client window */
+/*! Attempt to focus the client window
+ NOTE: You should validate the client before calling this !! (client_validate)
+*/
gboolean client_focus(ObClient *self);
-/*! Remove focus from the client window */
-void client_unfocus(ObClient *self);
-
/*! Activates the client for use, focusing, uniconifying it, etc. To be used
when the user deliberately selects a window for use.
@param here If true, then the client is brought to the current desktop;
/*! 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);
/*! 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);
/*! Set up what decor should be shown on the window and what functions should
be allowed (ObClient::decorations and ObClient::functions).
*/
ObClient *client_search_modal_child(ObClient *self);
-ObClient *client_search_top_transient(ObClient *self);
+/*! Returns a list of top-level windows which this is a transient for.
+ It will only contain more than 1 element if the client is transient for its
+ group.
+*/
+GSList *client_search_all_top_parents(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);
+
+/*! Is one client a direct child of another (i.e. not through the group.) */
+gboolean client_is_direct_child(ObClient *parent, ObClient *child);
/*! Search for a parent of a client. This only searches up *ONE LEVEL*, and
returns the searched for parent if it is a parent, or NULL if not. */
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);