+ // Request each network properly disconnect, but don't count as user-requested disconnect
+ if (net->socketConnected()) {
+ // Only try if the socket's fully connected (not initializing or disconnecting).
+ // Force an immediate disconnect, jumping the command queue. Ensures the proper QUIT is
+ // shown even if other messages are queued.
+ net->disconnectFromIrc(false, QString(), false, true);
+ }
+ }
+
+ // Process the putCmd events that trigger the quit. Without this, shutting down the core
+ // results in abrubtly closing the socket rather than sending the QUIT as expected.
+ QCoreApplication::processEvents();
+
+ foreach(CoreNetwork *net, _networks.values()) {
+ // Wait briefly for each network to disconnect. Sometimes it takes a little while to send.
+ if (!net->forceDisconnect()) {
+ qWarning() << "Timed out quitting network" << net->networkName() <<
+ "(user ID " << net->userId() << ")";
+ }
+ // Delete the network now that it's closed