Update assignment client to close on WM_CLOSE message on Windows

This commit is contained in:
Ryan Huffman 2014-08-21 17:19:39 -07:00
parent 9546fe477c
commit ad4956b2e2
2 changed files with 19 additions and 2 deletions

View file

@ -41,7 +41,9 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) :
setOrganizationDomain("highfidelity.io"); setOrganizationDomain("highfidelity.io");
setApplicationName("assignment-client"); setApplicationName("assignment-client");
QSettings::setDefaultFormat(QSettings::IniFormat); QSettings::setDefaultFormat(QSettings::IniFormat);
installNativeEventFilter(this);
QStringList argumentList = arguments(); QStringList argumentList = arguments();
// register meta type is required for queued invoke method on Assignment subclasses // register meta type is required for queued invoke method on Assignment subclasses
@ -113,6 +115,18 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) :
this, &AssignmentClient::handleAuthenticationRequest); this, &AssignmentClient::handleAuthenticationRequest);
} }
bool AssignmentClient::nativeEventFilter(const QByteArray &eventType, void* msg, long* result) {
if (eventType == "windows_generic_MSG") {
MSG* message = (MSG*)msg;
if (message->message == WM_CLOSE) {
qDebug() << "Received WM_CLOSE message, closing";
quit();
return false;
}
}
return true;
}
void AssignmentClient::sendAssignmentRequest() { void AssignmentClient::sendAssignmentRequest() {
if (!_currentAssignment) { if (!_currentAssignment) {
NodeList::getInstance()->sendAssignment(_requestAssignment); NodeList::getInstance()->sendAssignment(_requestAssignment);

View file

@ -13,14 +13,17 @@
#define hifi_AssignmentClient_h #define hifi_AssignmentClient_h
#include <QtCore/QCoreApplication> #include <QtCore/QCoreApplication>
#include <QAbstractNativeEventFilter.h>
#include "ThreadedAssignment.h" #include "ThreadedAssignment.h"
class AssignmentClient : public QCoreApplication { class AssignmentClient : public QCoreApplication, QAbstractNativeEventFilter {
Q_OBJECT Q_OBJECT
public: public:
AssignmentClient(int &argc, char **argv); AssignmentClient(int &argc, char **argv);
static const SharedAssignmentPointer& getCurrentAssignment() { return _currentAssignment; } static const SharedAssignmentPointer& getCurrentAssignment() { return _currentAssignment; }
virtual bool nativeEventFilter(const QByteArray& eventType, void* message, long* result);
private slots: private slots:
void sendAssignmentRequest(); void sendAssignmentRequest();
void readPendingDatagrams(); void readPendingDatagrams();