#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);
client_setup_decor_and_functions(self, FALSE);
/* tell startup notification that this app started */
- launch_time = sn_app_started(self->startup_id, self->class);
+ launch_time = sn_app_started(self->startup_id, self->class, self->name);
/* do this after we have a frame.. it uses the frame to help determine the
WM_STATE to apply. */
/* 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 */
+ 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);
/* remove the window from our save set */
XChangeSaveSet(ob_display, self->window, SetModeDelete);
- /* stop pinging the window */
- if (self->ping && client_normal(self))
- 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;