X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.h;h=bb1d4c9f15d5ca2b9aad35aaff2fdeb85143fb8e;hb=90cd9c62192194d1b3ab868a77fe56a9b1e215c2;hp=a5011cb6bfbe60f329afaf87ccacfff0c310aae4;hpb=f6265e82e6b195d9f817f3e794456bce54c7c8b6;p=chaz%2Fopenbox diff --git a/openbox/client.h b/openbox/client.h index a5011cb6..bb1d4c9f 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 @@ -32,6 +32,7 @@ struct _ObFrame; struct _ObGroup; struct _ObSessionState; +struct _ObClientTimeHeap; typedef struct _ObClient ObClient; typedef struct _ObClientIcon ObClientIcon; @@ -114,9 +115,6 @@ 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; @@ -139,6 +137,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 */ @@ -269,6 +270,8 @@ struct _ObClient ObClientIcon *icons; /*! The number of icons in icons */ guint nicons; + + guint32 user_time; }; struct _ObAppSettings @@ -298,6 +301,7 @@ struct _ObAppSettings }; extern GList *client_list; +extern struct _ObClientTimeHeap *client_user_times; void client_startup(gboolean reconfig); void client_shutdown(gboolean reconfig); @@ -345,6 +349,31 @@ gboolean client_focused(ObClient *self); #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. @@ -395,12 +424,8 @@ void client_move_onscreen(ObClient *self, gboolean rude); /*! 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 @@ -415,13 +440,8 @@ void client_iconify(ObClient *self, gboolean iconic, gboolean curdesk); @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 @@ -443,6 +463,17 @@ void client_kill(ObClient *self); 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 @@ -470,12 +501,11 @@ ObClient *client_focus_target(ObClient *self); 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; @@ -530,6 +560,8 @@ void client_update_class(ObClient *self); 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); /*! Set up what decor should be shown on the window and what functions should be allowed (ObClient::decorations and ObClient::functions). @@ -566,7 +598,19 @@ ObClient *client_search_focus_tree_full(ObClient *self); */ 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. */