Merge branch 'backport' into work
[mikachu/openbox.git] / openbox / client.h
index cba1aeb..3f92a4e 100644 (file)
 #include "mwm.h"
 #include "geom.h"
 #include "stacking.h"
+#include "window.h"
 #include "render/color.h"
 
 #include <glib.h>
 #include <X11/Xlib.h>
 
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h> /* for pid_t */
+#endif
+
 struct _ObFrame;
 struct _ObGroup;
 struct _ObSessionState;
@@ -114,6 +119,8 @@ struct _ObClient
     gchar *client_machine;
     /*! The command used to run the program. Pre-XSMP window identification. */
     gchar *wm_command;
+    /*! The PID of the process which owns the window */
+    pid_t pid;
 
     /*! The application that created the window */
     gchar *name;
@@ -219,6 +226,14 @@ struct _ObClient
     /*! Notify the window when it receives focus? */
     gboolean focus_notify;
 
+    /*! Will the client respond to pings? */
+    gboolean ping;
+    /*! Indicates if the client is trying to close but has stopped responding
+      to pings */
+    gboolean not_responding;
+    /*! We tried to close the window with a SIGTERM */
+    gboolean close_tried_term;
+
 #ifdef SYNC
     /*! The client wants to sync during resizes */
     gboolean sync_request;
@@ -290,14 +305,11 @@ struct _ObClient
     /*! Where the window should iconify to/from */
     Rect icon_geometry;
 
-    /*! 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;
+    /*! A boolean used for algorithms which need to mark clients as visited */
+    gboolean visited;
 };
 
 extern GList      *client_list;
-extern GHashTable *client_user_time_window_map;
 
 void client_startup(gboolean reconfig);
 void client_shutdown(gboolean reconfig);
@@ -310,10 +322,7 @@ typedef void (*ObClientCallback)(ObClient *client, gpointer data);
 void client_add_destroy_notify(ObClientCallback func, gpointer data);
 void client_remove_destroy_notify(ObClientCallback func);
 
-/*! Manages all existing windows */
-void client_manage_all();
-/*! Manages a given window
-*/
+/*! Manages a given window */
 void client_manage(Window win);
 /*! Unmanages all managed windows */
 void client_unmanage_all();
@@ -606,10 +615,6 @@ void client_update_title(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);
-/*! 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);
 
@@ -683,7 +688,9 @@ ObClient *client_direct_parent(ObClient *self);
 */
 ObClient *client_search_top_direct_parent(ObClient *self);
 
-/*! Is one client a direct child of another (i.e. not through the group.) */
+/*! Is one client a direct child of another (i.e. not through the group.)
+  This checks more than one level, so there may be another direct child in
+  between */
 gboolean client_is_direct_child(ObClient *parent, ObClient *child);
 
 /*! Search for a parent of a client. This only searches up *ONE LEVEL*, and