diff -r 000000000000 -r 6474c204b198 widget/qt/nsAppShell.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widget/qt/nsAppShell.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,91 @@ +/* -*- 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 +#include +#include +#include + +#include +#include + +#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; +}