void DisplayChannel::on_disconnect() { if (surfaces_mngr.is_present_canvas(0)) { Canvas *canvas; canvas = surfaces_mngr.get_canvas(0); canvas->clear(); } if (screen()) { screen()->set_update_interrupt_trigger(NULL); } AutoRef<DetachChannelsEvent> detach_channels(new DetachChannelsEvent(*this)); get_client().push_event(*detach_channels); if (screen()) { AutoRef<UnlockScreenEvent> unlock_event(new UnlockScreenEvent(screen())); get_client().push_event(*unlock_event); detach_from_screen(get_client().get_application()); } get_client().deactivate_interval_timer(*_streams_timer); AutoRef<SyncEvent> sync_event(new SyncEvent()); get_client().push_event(*sync_event); (*sync_event)->wait(); }
void RedClient::on_disconnect() { _migrate.abort(); _connection_id = 0; _application.deactivate_interval_timer(*_agent_timer); // todo: if migration remains not seemless, we shouldn't // resend monitors and display setting to the agent _agent_mon_config_sent = false; _agent_disp_config_sent = false; delete[] _agent_msg_data; _agent_msg_data = NULL; _agent_msg_pos = 0; _agent_tokens = 0; AutoRef<SyncEvent> sync_event(new SyncEvent()); get_client().push_event(*sync_event); (*sync_event)->wait(); }