Files
tubestation/widget/qt/nsAppShell.cpp
Wes Kocher e9f3c5a025 Backed out 5 changesets (bug 806819) for WinXP test failures on a CLOSED TREE
Backed out changeset 009ae35b0c67 (bug 806819)
Backed out changeset 5a57f87f5061 (bug 806819)
Backed out changeset f06cd735b5b3 (bug 806819)
Backed out changeset e25a2a8d4af4 (bug 806819)
Backed out changeset 70a167982c3f (bug 806819)
2014-10-06 16:32:50 -07:00

92 lines
2.0 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim:expandtab:shiftwidth=4:tabstop=4:
*/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsAppShell.h"
#include <QGuiApplication>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <qabstracteventdispatcher.h>
#include <qthread.h>
#include "prenv.h"
#include "nsQAppInstance.h"
#ifdef MOZ_LOGGING
#define FORCE_PR_LOG
#include "prlog.h"
#endif
#ifdef PR_LOGGING
PRLogModuleInfo *gWidgetLog = nullptr;
PRLogModuleInfo *gWidgetFocusLog = nullptr;
PRLogModuleInfo *gWidgetIMLog = nullptr;
PRLogModuleInfo *gWidgetDrawLog = nullptr;
#endif
static int sPokeEvent;
nsAppShell::~nsAppShell()
{
nsQAppInstance::Release();
}
nsresult
nsAppShell::Init()
{
#ifdef PR_LOGGING
if (!gWidgetLog)
gWidgetLog = PR_NewLogModule("Widget");
if (!gWidgetFocusLog)
gWidgetFocusLog = PR_NewLogModule("WidgetFocus");
if (!gWidgetIMLog)
gWidgetIMLog = PR_NewLogModule("WidgetIM");
if (!gWidgetDrawLog)
gWidgetDrawLog = PR_NewLogModule("WidgetDraw");
#endif
sPokeEvent = QEvent::registerEventType();
nsQAppInstance::AddRef();
return nsBaseAppShell::Init();
}
void
nsAppShell::ScheduleNativeEventCallback()
{
QCoreApplication::postEvent(this,
new QEvent((QEvent::Type) sPokeEvent));
}
bool
nsAppShell::ProcessNextNativeEvent(bool mayWait)
{
QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents;
if (mayWait)
flags |= QEventLoop::WaitForMoreEvents;
QAbstractEventDispatcher *dispatcher = QAbstractEventDispatcher::instance(QThread::currentThread());
if (!dispatcher)
return false;
return dispatcher->processEvents(flags) ? true : false;
}
bool
nsAppShell::event (QEvent *e)
{
if (e->type() == sPokeEvent) {
NativeEventCallback();
return true;
}
return false;
}