#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;
+struct _ObPrompt;
typedef struct _ObClient ObClient;
typedef struct _ObClientIcon ObClientIcon;
ObWindow obwin;
Window window;
+ /*! If this client is managing an ObPrompt window, then this is set to the
+ prompt */
+ struct _ObPrompt *prompt;
+
/*! The window's decorations. NULL while the window is being managed! */
struct _ObFrame *frame;
gchar *title;
/*! Window title when iconified */
gchar *icon_title;
+ /*! The title as requested by the client, without any of our own changes */
+ gchar *original_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 PID of the process which owns the window */
+ pid_t pid;
/*! The application that created the window */
gchar *name;
/*! 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;
+ /*! A prompt shown when you are trying to close a client that is not
+ responding. It asks if you want to kill the client */
+ struct _ObPrompt *kill_prompt;
+ /*! We tried to close the window with a SIGTERM */
+ gint kill_level;
+
#ifdef SYNC
/*! The client wants to sync during resizes */
gboolean sync_request;
/*! 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);
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
+ @param prompt This specifies an ObPrompt which is being managed. It is
+ possible to manage Openbox-owned windows through this.
*/
-void client_manage(Window win);
+void client_manage(Window win, struct _ObPrompt *prompt);
/*! Unmanages all managed windows */
void client_unmanage_all();
/*! Unmanages a given 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);
-/*! 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);
*/
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