]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.h
not passing timestamps sometimes and not others. set event_curtime when client messag...
[chaz/openbox] / openbox / client.h
index 5f654d7eb35a5e15c1b4d6a25a25cc99e1d17825..5a1e165283cd0e5369ca4ad25cded1597b6bf229 100644 (file)
@@ -1,6 +1,7 @@
 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
 
    client.h for the Openbox window manager
+   Copyright (c) 2006        Mikael Magnusson
    Copyright (c) 2003        Ben Jansens
 
    This program is free software; you can redistribute it and/or modify
@@ -210,8 +211,6 @@ struct _ObClient
   
     /*! Can the window receive input focus? */
     gboolean can_focus;
-    /*! Urgency flag */
-    gboolean urgent;
     /*! Notify the window when it receives focus? */
     gboolean focus_notify;
 
@@ -242,6 +241,8 @@ struct _ObClient
     /*! The window should be underneath other windows of the same type.
       above takes priority over below. */
     gboolean below;
+    /*! Demands attention flag */
+    gboolean demands_attention;
 
     /*! The layer in which the window will be stacked, windows in lower layers
       are always below windows in higher layers. */
@@ -268,6 +269,8 @@ struct _ObClient
     ObClientIcon *icons;
     /*! The number of icons in icons */
     guint nicons;
+
+    guint32 user_time;
 };
 
 struct _ObAppSettings
@@ -344,6 +347,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.
@@ -394,12 +422,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
@@ -414,13 +438,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
@@ -428,6 +447,9 @@ void client_maximize(ObClient *self, gboolean max, gint dir,
 */
 void client_shade(ObClient *self, gboolean shade);
 
+/*! Hilite the window to make the user notice it */
+void client_hilite(ObClient *self, gboolean hilite);
+
 /*! Request the client to close its window */
 void client_close(ObClient *self);
 
@@ -439,6 +461,11 @@ 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, 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
@@ -466,18 +493,19 @@ 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;
               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
 */
-void client_activate(ObClient *self, gboolean here);
+void client_activate(ObClient *self, gboolean here, gboolean user);
 
 /*! Calculates the stacking layer for the client window */
 void client_calc_layer(ObClient *self);
@@ -524,6 +552,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, gboolean new_event);
 
 /*! Set up what decor should be shown on the window and what functions should
   be allowed (ObClient::decorations and ObClient::functions).
@@ -560,7 +590,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. */
@@ -574,7 +616,7 @@ ObClient *client_search_transient(ObClient *self, ObClient *search);
 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);
+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.<br>
This page took 0.025633 seconds and 4 git commands to generate.