X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=0a0d1ffc6765f886a6a78ab85f8e817798942330;hb=6a8a8531bad25c148b4c62263d16c0996a21ca6e;hp=85f5e69191b1683f8d98e9489ada8b8e303bf204;hpb=810afd8597da355039e289218abed6c062585870;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 85f5e691..0a0d1ffc 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -24,6 +24,7 @@ #include "xerror.h" #include "screen.h" #include "moveresize.h" +#include "ping.h" #include "place.h" #include "prop.h" #include "extensions.h" @@ -79,6 +80,10 @@ static void client_get_state(ObClient *self); 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); @@ -308,7 +313,7 @@ void client_manage(Window window) 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. */ @@ -602,8 +607,14 @@ void client_manage(Window window) /* 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); @@ -686,9 +697,6 @@ void client_unmanage(ObClient *self) /* 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)) { @@ -1547,7 +1555,7 @@ void client_update_sync_request_counter(ObClient *self) } #endif -void client_get_colormap(ObClient *self) +static void client_get_colormap(ObClient *self) { XWindowAttributes wa; @@ -3208,10 +3216,8 @@ static void client_ping_event(ObClient *self, gboolean dead) 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; } } @@ -3226,15 +3232,13 @@ void client_close(ObClient *self) /* 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) @@ -3276,10 +3280,10 @@ void client_hilite(ObClient *self, gboolean hilite) } } -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;