#include "xerror.h"
#include "screen.h"
#include "moveresize.h"
+#include "ping.h"
#include "place.h"
#include "prop.h"
#include "extensions.h"
static void client_get_shaped(ObClient *self);
static void client_get_mwm_hints(ObClient *self);
static void client_get_colormap(ObClient *self);
+static void client_set_desktop_recursive(ObClient *self,
+ guint target,
+ gboolean donthide,
+ gboolean dontraise);
static void client_change_allowed_actions(ObClient *self);
static void client_change_state(ObClient *self);
static void client_change_wm_state(ObClient *self);
/* update the list hints */
client_set_list();
- /* watch for when the application stops responding */
- if (self->ping) ping_start(self, client_ping_event);
+ /* watch for when the application stops responding. only do this for
+ normal windows, i.e. windows which have titlebars and close buttons
+ and things like that.
+ we don't need to stop pinging on unmanage, because it will be handled
+ automatically by the destroy callback!
+ */
+ if (self->ping && client_normal(self))
+ ping_start(self, client_ping_event);
/* free the ObAppSettings shallow copy */
g_free(settings);
/* remove the window from our save set */
XChangeSaveSet(ob_display, self->window, SetModeDelete);
- /* stop pinging the window */
- if (self->ping) ping_stop(self);
-
/* update the focus lists */
focus_order_remove(self);
if (client_focused(self)) {
}
#endif
-void client_get_colormap(ObClient *self)
+static void client_get_colormap(ObClient *self)
{
XWindowAttributes wa;
client_update_title(self);
if (!dead) {
- /* the window has started responding again, so don't kill it the first
- time they click on close, even if it stops responding again in the
- future */
- self->close_tried_destroy = FALSE;
+ /* try kill it nicely the first time again, if it started responding
+ at some point */
self->close_tried_term = FALSE;
}
}
/* don't use client_kill(), we should only kill based on PID in
response to a lack of PING replies */
XKillClient(ob_display, self->window);
- else if (self->not_responding && self->close_tried_destroy)
+ else if (self->not_responding)
client_kill(self);
- else {
+ else
+ /* request the client to close with WM_DELETE_WINDOW */
PROP_MSG_TO(self->window, self->window, wm_protocols,
prop_atoms.wm_delete_window, event_curtime, 0, 0, 0,
NoEventMask);
- self->close_tried_destroy = TRUE;
- self->close_tried_term = FALSE;
- }
}
void client_kill(ObClient *self)
}
}
-void client_set_desktop_recursive(ObClient *self,
- guint target,
- gboolean donthide,
- gboolean dontraise)
+static void client_set_desktop_recursive(ObClient *self,
+ guint target,
+ gboolean donthide,
+ gboolean dontraise)
{
guint old;
GSList *it;