diff --git a/src/nsmd.cpp b/src/nsmd.cpp index 1b1db5a..00f4bd4 100644 --- a/src/nsmd.cpp +++ b/src/nsmd.cpp @@ -362,21 +362,23 @@ handle_client_process_death ( int pid ) } else { + if ( c->launch_error ) + /* NSM API treats the stopped status as switch. You can only remove stopped. + * Furthermore the GUI will change its client-buttons. + * In consequence we cannot add an arbitrary "launch-error" status. + * Compatible compromise is to use the label field to relay info the user, + * which was the goal. There is nothing we can do about a failed launch anyway. + */ + c->label( "launch error!" ); + else + c->label( "" ); + c->status = "stopped"; + if ( gui_is_active ) { + osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, c->label() ); osc_server->send( gui_addr, "/nsm/gui/client/status", c->client_id, c->status ); - if ( c->launch_error ) - { - /* NSM API treats the stopped status as switch. You can only remove stopped. - * Furthermore the GUI will change its client-buttons. - * In consequence we cannot add an arbitrary "launch-error" status. - * Compatible compromise is to use the label field to relay info the user, - * which was the goal. There is nothing we can do about a failed launch anyway. - */ - GUIMSG("Client %s had a launch error.", c->name_with_id); - osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, "launch error!" ); //do not set the client objects label. - } } } @@ -740,7 +742,6 @@ launch ( const char *executable, const char *client_id ) //At this point we do not know if launched program will start or fail //And we do not know if it has nsm-support or not. This will be decided if it announces. osc_server->send( gui_addr, "/nsm/gui/client/new", c->client_id, c->name ); - osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, "" ); //clear label from potential previous-and-fixed launch error osc_server->send( gui_addr, "/nsm/gui/client/status", c->client_id, c->status ); } @@ -2061,9 +2062,8 @@ OSC_HANDLER( label ) return -1; c->label( &argv[0]->s ); - if ( gui_is_active ) - osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, &argv[0]->s ); + osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, c->label() ); return 0; } @@ -2289,6 +2289,7 @@ announce_gui( const char *url, bool is_reply ) osc_server->send( gui_addr, "/nsm/gui/client/status", c->client_id, c->status ); if ( c->is_capable_of( ":optional-gui:" ) ) osc_server->send( gui_addr, "/nsm/gui/client/has_optional_gui", c->client_id ); + osc_server->send( gui_addr, "/nsm/gui/client/label", c->client_id, c->label() ); }