diff -r 000000000000 -r 6474c204b198 widget/android/nsAppShell.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widget/android/nsAppShell.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,81 @@ +/* -*- Mode: c++; tab-width: 40; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#ifndef nsAppShell_h__ +#define nsAppShell_h__ + +#include "mozilla/CondVar.h" +#include "mozilla/Mutex.h" +#include "nsBaseAppShell.h" +#include "nsCOMPtr.h" +#include "nsTArray.h" +#include "nsInterfaceHashtable.h" +#include "nsIAndroidBridge.h" + +namespace mozilla { +class AndroidGeckoEvent; +bool ProcessNextEvent(); +void NotifyEvent(); +} + +class nsWindow; + +class nsAppShell : + public nsBaseAppShell +{ + typedef mozilla::CondVar CondVar; + typedef mozilla::Mutex Mutex; + +public: + static nsAppShell *gAppShell; + static mozilla::AndroidGeckoEvent *gEarlyEvent; + + nsAppShell(); + + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIOBSERVER + + nsresult Init(); + + void NotifyNativeEvent(); + + virtual bool ProcessNextNativeEvent(bool mayWait); + + void PostEvent(mozilla::AndroidGeckoEvent *event); + void OnResume(); + + nsresult AddObserver(const nsAString &aObserverKey, nsIObserver *aObserver); + void ResendLastResizeEvent(nsWindow* aDest); + + void SetBrowserApp(nsIAndroidBrowserApp* aBrowserApp) { + mBrowserApp = aBrowserApp; + } + + void GetBrowserApp(nsIAndroidBrowserApp* *aBrowserApp) { + *aBrowserApp = mBrowserApp; + } + +protected: + virtual void ScheduleNativeEventCallback(); + virtual ~nsAppShell(); + + Mutex mQueueLock; + Mutex mCondLock; + CondVar mQueueCond; + mozilla::AndroidGeckoEvent *mQueuedDrawEvent; + mozilla::AndroidGeckoEvent *mQueuedViewportEvent; + bool mAllowCoalescingNextDraw; + bool mAllowCoalescingTouches; + nsTArray mEventQueue; + nsInterfaceHashtable mObserversHash; + + mozilla::AndroidGeckoEvent *PopNextEvent(); + mozilla::AndroidGeckoEvent *PeekNextEvent(); + + nsCOMPtr mBrowserApp; +}; + +#endif // nsAppShell_h__ +