Bug 743975 - remove the view wrapper,r=tn

This commit is contained in:
Neil Deakin
2012-08-15 14:53:14 -04:00
parent d91faf11ff
commit ae68fe90a2
7 changed files with 164 additions and 258 deletions

View File

@@ -16,196 +16,6 @@
#include "nsXULPopupManager.h" #include "nsXULPopupManager.h"
#include "nsIWidgetListener.h" #include "nsIWidgetListener.h"
#define VIEW_WRAPPER_IID \
{ 0xbf4e1841, 0xe9ec, 0x47f2, \
{ 0xb4, 0x77, 0x0f, 0xf6, 0x0f, 0x5a, 0xac, 0xbd } }
static bool
IsPopupWidget(nsIWidget* aWidget)
{
nsWindowType type;
aWidget->GetWindowType(type);
return (type == eWindowType_popup);
}
/**
* nsISupports-derived helper class that allows to store and get a view
*/
class ViewWrapper MOZ_FINAL : public nsIInterfaceRequestor,
public nsIWidgetListener
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(VIEW_WRAPPER_IID)
NS_DECL_ISUPPORTS
NS_DECL_NSIINTERFACEREQUESTOR
ViewWrapper(nsView* aView) : mView(aView) {}
nsView* GetView() { return mView; }
private:
nsView* mView;
public:
virtual nsIPresShell* GetPresShell()
{
return mView->GetViewManager()->GetPresShell();
}
bool WindowMoved(nsIWidget* aWidget, PRInt32 x, PRInt32 y)
{
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm && IsPopupWidget(aWidget)) {
pm->PopupMoved(mView->GetFrame(), nsIntPoint(x, y));
return true;
}
return false;
}
bool WindowResized(nsIWidget* aWidget, PRInt32 aWidth, PRInt32 aHeight)
{
nsIViewManager* viewManager = mView->GetViewManager();
// The root view may not be set if this is the resize associated with
// window creation
if (mView == viewManager->GetRootView()) {
nsRefPtr<nsDeviceContext> devContext;
viewManager->GetDeviceContext(*getter_AddRefs(devContext));
PRInt32 p2a = devContext->AppUnitsPerDevPixel();
viewManager->SetWindowDimensions(NSIntPixelsToAppUnits(aWidth, p2a),
NSIntPixelsToAppUnits(aHeight, p2a));
return true;
}
else if (IsPopupWidget(aWidget)) {
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm) {
pm->PopupResized(mView->GetFrame(), nsIntSize(aWidth, aHeight));
return true;
}
}
return false;
}
bool RequestWindowClose(nsIWidget* aWidget)
{
nsIFrame* frame = mView->GetFrame();
if (frame && IsPopupWidget(aWidget) &&
frame->GetType() == nsGkAtoms::menuPopupFrame) {
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm) {
pm->HidePopup(frame->GetContent(), false, true, false);
return true;
}
}
return false;
}
void WillPaintWindow(nsIWidget* aWidget, bool aWillSendPaint)
{
mView->GetViewManager()->WillPaintWindow(aWidget, aWillSendPaint);
}
bool PaintWindow(nsIWidget* aWidget, nsIntRegion aRegion, bool aSentWillPaint, bool aWillSendDidPaint)
{
nsCOMPtr<nsViewManager> vm = mView->GetViewManager();
return vm->PaintWindow(aWidget, aRegion, aSentWillPaint, aWillSendDidPaint);
}
void DidPaintWindow()
{
mView->GetViewManager()->DidPaintWindow();
}
};
NS_DEFINE_STATIC_IID_ACCESSOR(ViewWrapper, VIEW_WRAPPER_IID)
NS_IMPL_ADDREF(ViewWrapper)
NS_IMPL_RELEASE(ViewWrapper)
#ifndef DEBUG
NS_IMPL_QUERY_INTERFACE2(ViewWrapper, ViewWrapper, nsIInterfaceRequestor)
#else
NS_IMETHODIMP ViewWrapper::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
NS_ENSURE_ARG_POINTER(aInstancePtr);
NS_ASSERTION(!aIID.Equals(NS_GET_IID(nsIView)),
"Someone expects a viewwrapper to be a view!");
*aInstancePtr = nullptr;
if (aIID.Equals(NS_GET_IID(nsISupports))) {
*aInstancePtr = static_cast<nsISupports*>(this);
}
else if (aIID.Equals(NS_GET_IID(ViewWrapper))) {
*aInstancePtr = this;
}
else if (aIID.Equals(NS_GET_IID(nsIInterfaceRequestor))) {
*aInstancePtr = this;
}
if (*aInstancePtr) {
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
#endif
NS_IMETHODIMP ViewWrapper::GetInterface(REFNSIID aIID, void** aInstancePtr)
{
if (aIID.Equals(NS_GET_IID(nsIView))) {
*aInstancePtr = mView;
return NS_OK;
}
return QueryInterface(aIID, aInstancePtr);
}
/**
* Given a widget, returns the stored ViewWrapper on it, or NULL if no
* ViewWrapper is there.
*/
static ViewWrapper* GetWrapperFor(nsIWidget* aWidget)
{
return aWidget ? static_cast<ViewWrapper *>(aWidget->GetWidgetListener()) : nullptr;
}
// Attached widget event helpers
static ViewWrapper* GetAttachedWrapperFor(nsIWidget* aWidget)
{
NS_PRECONDITION(nullptr != aWidget, "null widget ptr");
return aWidget->GetAttachedViewPtr();
}
static nsView* GetAttachedViewFor(nsIWidget* aWidget)
{
NS_PRECONDITION(nullptr != aWidget, "null widget ptr");
ViewWrapper* wrapper = GetAttachedWrapperFor(aWidget);
if (!wrapper)
return nullptr;
return wrapper->GetView();
}
nsEventStatus ViewWrapper::HandleEvent(nsGUIEvent* aEvent, bool aUseAttachedEvents)
{
NS_PRECONDITION(nullptr != aEvent->widget, "null widget ptr");
nsEventStatus result = nsEventStatus_eIgnore;
nsIView* view = aUseAttachedEvents ? GetAttachedViewFor(aEvent->widget) :
nsView::GetViewFor(aEvent->widget);
if (view) {
nsCOMPtr<nsIViewManager> vm = view->GetViewManager();
vm->DispatchEvent(aEvent, view, &result);
}
return result;
}
nsView::nsView(nsViewManager* aViewManager, nsViewVisibility aVisibility) nsView::nsView(nsViewManager* aViewManager, nsViewVisibility aVisibility)
{ {
MOZ_COUNT_CTOR(nsView); MOZ_COUNT_CTOR(nsView);
@@ -285,19 +95,12 @@ void nsView::DestroyWidget()
{ {
if (mWindow) if (mWindow)
{ {
// Release memory for the view wrapper
ViewWrapper* wrapper = GetWrapperFor(mWindow);
NS_IF_RELEASE(wrapper);
// If we are not attached to a base window, we're going to tear down our // If we are not attached to a base window, we're going to tear down our
// widget here. However, if we're attached to somebody elses widget, we // widget here. However, if we're attached to somebody elses widget, we
// want to leave the widget alone: don't reset the client data or call // want to leave the widget alone: don't reset the client data or call
// Destroy. Just clear our event view ptr and free our reference to it. // Destroy. Just clear our event view ptr and free our reference to it.
if (mWidgetIsTopLevel) { if (mWidgetIsTopLevel) {
ViewWrapper* wrapper = GetAttachedWrapperFor(mWindow); mWindow->SetAttachedWidgetListener(nullptr);
NS_IF_RELEASE(wrapper);
mWindow->SetAttachedViewPtr(nullptr);
} }
else { else {
mWindow->SetWidgetListener(nullptr); mWindow->SetWidgetListener(nullptr);
@@ -331,17 +134,15 @@ nsIView* nsIView::GetViewFor(nsIWidget* aWidget)
{ {
NS_PRECONDITION(nullptr != aWidget, "null widget ptr"); NS_PRECONDITION(nullptr != aWidget, "null widget ptr");
ViewWrapper* wrapper = GetWrapperFor(aWidget); nsIWidgetListener* listener = aWidget->GetWidgetListener();
if (listener) {
if (!wrapper) { nsIView* view = listener->GetView();
wrapper = GetAttachedWrapperFor(aWidget); if (view)
return view;
} }
if (wrapper) { listener = aWidget->GetAttachedWidgetListener();
return wrapper->GetView(); return listener ? listener->GetView() : nullptr;
}
return nullptr;
} }
void nsIView::Destroy() void nsIView::Destroy()
@@ -826,9 +627,7 @@ nsView::InitializeWindow(bool aEnableDragDrop, bool aResetVisibility)
{ {
NS_ABORT_IF_FALSE(mWindow, "Must have a window to initialize"); NS_ABORT_IF_FALSE(mWindow, "Must have a window to initialize");
ViewWrapper* wrapper = new ViewWrapper(this); mWindow->SetWidgetListener(this);
NS_ADDREF(wrapper); // Will be released in ~nsView
mWindow->SetWidgetListener(wrapper);
if (aEnableDragDrop) { if (aEnableDragDrop) {
mWindow->EnableDragDrop(true); mWindow->EnableDragDrop(true);
@@ -850,10 +649,13 @@ nsresult nsIView::AttachToTopLevelWidget(nsIWidget* aWidget)
NS_PRECONDITION(nullptr != aWidget, "null widget ptr"); NS_PRECONDITION(nullptr != aWidget, "null widget ptr");
/// XXXjimm This is a temporary workaround to an issue w/document /// XXXjimm This is a temporary workaround to an issue w/document
// viewer (bug 513162). // viewer (bug 513162).
nsIView *oldView = GetAttachedViewFor(aWidget); nsIWidgetListener* listener = aWidget->GetAttachedWidgetListener();
if (listener) {
nsIView *oldView = listener->GetView();
if (oldView) { if (oldView) {
oldView->DetachFromTopLevelWidget(); oldView->DetachFromTopLevelWidget();
} }
}
nsRefPtr<nsDeviceContext> dx; nsRefPtr<nsDeviceContext> dx;
mViewManager->GetDeviceContext(*getter_AddRefs(dx)); mViewManager->GetDeviceContext(*getter_AddRefs(dx));
@@ -867,9 +669,7 @@ nsresult nsIView::AttachToTopLevelWidget(nsIWidget* aWidget)
mWindow = aWidget; mWindow = aWidget;
NS_ADDREF(mWindow); NS_ADDREF(mWindow);
ViewWrapper* wrapper = new ViewWrapper(Impl()); mWindow->SetAttachedWidgetListener(Impl());
NS_ADDREF(wrapper);
mWindow->SetAttachedViewPtr(wrapper);
mWindow->EnableDragDrop(true); mWindow->EnableDragDrop(true);
mWidgetIsTopLevel = true; mWidgetIsTopLevel = true;
@@ -887,11 +687,7 @@ nsresult nsIView::DetachFromTopLevelWidget()
NS_PRECONDITION(mWidgetIsTopLevel, "Not attached currently!"); NS_PRECONDITION(mWidgetIsTopLevel, "Not attached currently!");
NS_PRECONDITION(mWindow, "null mWindow for DetachFromTopLevelWidget!"); NS_PRECONDITION(mWindow, "null mWindow for DetachFromTopLevelWidget!");
// Release memory for the view wrapper mWindow->SetAttachedWidgetListener(nullptr);
ViewWrapper* wrapper = GetAttachedWrapperFor(mWindow);
NS_IF_RELEASE(wrapper);
mWindow->SetAttachedViewPtr(nullptr);
NS_RELEASE(mWindow); NS_RELEASE(mWindow);
mWidgetIsTopLevel = false; mWidgetIsTopLevel = false;
@@ -916,8 +712,6 @@ void nsView::AssertNoWindow()
// XXX: it would be nice to make this a strong assert // XXX: it would be nice to make this a strong assert
if (NS_UNLIKELY(mWindow)) { if (NS_UNLIKELY(mWindow)) {
NS_ERROR("We already have a window for this view? BAD"); NS_ERROR("We already have a window for this view? BAD");
ViewWrapper* wrapper = GetWrapperFor(mWindow);
NS_IF_RELEASE(wrapper);
mWindow->SetWidgetListener(nullptr); mWindow->SetWidgetListener(nullptr);
mWindow->Destroy(); mWindow->Destroy();
NS_RELEASE(mWindow); NS_RELEASE(mWindow);
@@ -933,18 +727,13 @@ void nsIView::AttachWidgetEventHandler(nsIWidget* aWidget)
NS_ASSERTION(!aWidget->GetWidgetListener(), "Already have a widget listener"); NS_ASSERTION(!aWidget->GetWidgetListener(), "Already have a widget listener");
#endif #endif
ViewWrapper* wrapper = new ViewWrapper(Impl()); aWidget->SetWidgetListener(Impl());
if (!wrapper)
return;
NS_ADDREF(wrapper); // Will be released in DetachWidgetEventHandler
aWidget->SetWidgetListener(wrapper);
} }
void nsIView::DetachWidgetEventHandler(nsIWidget* aWidget) void nsIView::DetachWidgetEventHandler(nsIWidget* aWidget)
{ {
ViewWrapper* wrapper = GetWrapperFor(aWidget); NS_ASSERTION(!aWidget->GetWidgetListener() ||
NS_ASSERTION(!wrapper || wrapper->GetView() == this, "Wrong view"); aWidget->GetWidgetListener()->GetView() == this, "Wrong view");
NS_IF_RELEASE(wrapper);
aWidget->SetWidgetListener(nullptr); aWidget->SetWidgetListener(nullptr);
} }
@@ -1165,3 +954,110 @@ nsIView::ConvertFromParentCoords(nsPoint aPt) const
aPt -= GetPosition(); aPt -= GetPosition();
return aPt; return aPt;
} }
static bool
IsPopupWidget(nsIWidget* aWidget)
{
nsWindowType type;
aWidget->GetWindowType(type);
return (type == eWindowType_popup);
}
nsIPresShell*
nsView::GetPresShell()
{
return GetViewManager()->GetPresShell();
}
bool
nsView::WindowMoved(nsIWidget* aWidget, PRInt32 x, PRInt32 y)
{
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm && IsPopupWidget(aWidget)) {
pm->PopupMoved(mFrame, nsIntPoint(x, y));
return true;
}
return false;
}
bool
nsView::WindowResized(nsIWidget* aWidget, PRInt32 aWidth, PRInt32 aHeight)
{
// The root view may not be set if this is the resize associated with
// window creation
if (this == mViewManager->GetRootView()) {
nsRefPtr<nsDeviceContext> devContext;
mViewManager->GetDeviceContext(*getter_AddRefs(devContext));
PRInt32 p2a = devContext->AppUnitsPerDevPixel();
mViewManager->SetWindowDimensions(NSIntPixelsToAppUnits(aWidth, p2a),
NSIntPixelsToAppUnits(aHeight, p2a));
return true;
}
else if (IsPopupWidget(aWidget)) {
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm) {
pm->PopupResized(mFrame, nsIntSize(aWidth, aHeight));
return true;
}
}
return false;
}
bool
nsView::RequestWindowClose(nsIWidget* aWidget)
{
if (mFrame && IsPopupWidget(aWidget) &&
mFrame->GetType() == nsGkAtoms::menuPopupFrame) {
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm) {
pm->HidePopup(mFrame->GetContent(), false, true, false);
return true;
}
}
return false;
}
void
nsView::WillPaintWindow(nsIWidget* aWidget, bool aWillSendDidPaint)
{
mViewManager->WillPaintWindow(aWidget, aWillSendDidPaint);
}
bool
nsView::PaintWindow(nsIWidget* aWidget, nsIntRegion aRegion, bool aSentWillPaint, bool aWillSendDidPaint)
{
nsCOMPtr<nsViewManager> vm = mViewManager;
return vm->PaintWindow(aWidget, aRegion, aSentWillPaint, aWillSendDidPaint);
}
void
nsView::DidPaintWindow()
{
mViewManager->DidPaintWindow();
}
nsEventStatus
nsView::HandleEvent(nsGUIEvent* aEvent, bool aUseAttachedEvents)
{
NS_PRECONDITION(nullptr != aEvent->widget, "null widget ptr");
nsEventStatus result = nsEventStatus_eIgnore;
nsIView* view;
if (aUseAttachedEvents) {
nsIWidgetListener* listener = aEvent->widget->GetAttachedWidgetListener();
view = listener ? listener->GetView() : nullptr;
}
else {
view = GetViewFor(aEvent->widget);
}
if (view) {
nsCOMPtr<nsIViewManager> vm = view->GetViewManager();
vm->DispatchEvent(aEvent, view, &result);
}
return result;
}

View File

@@ -12,6 +12,7 @@
#include "nsCRT.h" #include "nsCRT.h"
#include "nsIFactory.h" #include "nsIFactory.h"
#include "nsEvent.h" #include "nsEvent.h"
#include "nsIWidgetListener.h"
#include <stdio.h> #include <stdio.h>
//mmptemp //mmptemp
@@ -19,7 +20,8 @@
class nsIViewManager; class nsIViewManager;
class nsViewManager; class nsViewManager;
class nsView : public nsIView class nsView : public nsIView,
public nsIWidgetListener
{ {
public: public:
nsView(nsViewManager* aViewManager = nullptr, nsView(nsViewManager* aViewManager = nullptr,
@@ -155,6 +157,17 @@ public:
// released if it points to any view in this view hierarchy. // released if it points to any view in this view hierarchy.
void InvalidateHierarchy(nsViewManager *aViewManagerParent); void InvalidateHierarchy(nsViewManager *aViewManagerParent);
// nsIWidgetListener
virtual nsIPresShell* GetPresShell();
virtual nsIView* GetView() { return this; }
bool WindowMoved(nsIWidget* aWidget, PRInt32 x, PRInt32 y);
bool WindowResized(nsIWidget* aWidget, PRInt32 aWidth, PRInt32 aHeight);
bool RequestWindowClose(nsIWidget* aWidget);
void WillPaintWindow(nsIWidget* aWidget, bool aWillSendDidPaint);
bool PaintWindow(nsIWidget* aWidget, nsIntRegion aRegion, bool aSentDidPaint, bool aWillSendDidPaint);
void DidPaintWindow();
nsEventStatus HandleEvent(nsGUIEvent* aEvent, bool aUseAttachedEvents);
virtual ~nsView(); virtual ~nsView();
nsPoint GetOffsetTo(const nsView* aOther) const; nsPoint GetOffsetTo(const nsView* aOther) const;

View File

@@ -3489,8 +3489,8 @@ NS_IMETHODIMP nsWindow::DispatchEvent(nsGUIEvent* event, nsEventStatus & aStatus
// to the underlying base window and the view. Added when we combined the // to the underlying base window and the view. Added when we combined the
// base chrome window with the main content child for nc client area (title // base chrome window with the main content child for nc client area (title
// bar) rendering. // bar) rendering.
if (mViewWrapperPtr) { if (mAttachedWidgetListener) {
aStatus = mViewWrapperPtr->HandleEvent(event, mUseAttachedEvents); aStatus = mAttachedWidgetListener->HandleEvent(event, mUseAttachedEvents);
} }
else if (mWidgetListener) { else if (mWidgetListener) {
aStatus = mWidgetListener->HandleEvent(event, mUseAttachedEvents); aStatus = mWidgetListener->HandleEvent(event, mUseAttachedEvents);
@@ -6934,6 +6934,7 @@ void nsWindow::OnDestroy()
// Prevent the widget from sending additional events. // Prevent the widget from sending additional events.
mWidgetListener = nullptr; mWidgetListener = nullptr;
mAttachedWidgetListener = nullptr;
// Free our subclass and clear |this| stored in the window props. We will no longer // Free our subclass and clear |this| stored in the window props. We will no longer
// receive events from Windows after this point. // receive events from Windows after this point.
@@ -7024,8 +7025,8 @@ bool nsWindow::OnResize(nsIntRect &aWindowRect)
#endif #endif
// If there is an attached view, inform it as well as the normal widget listener. // If there is an attached view, inform it as well as the normal widget listener.
if (mViewWrapperPtr) { if (mAttachedWidgetListener) {
mViewWrapperPtr->WindowResized(this, aWindowRect.width, aWindowRect.height); mAttachedWidgetListener->WindowResized(this, aWindowRect.width, aWindowRect.height);
} }
return mWidgetListener ? return mWidgetListener ?

View File

@@ -235,7 +235,7 @@ bool nsWindow::OnPaint(HDC aDC, PRUint32 aNestingLevel)
return true; return true;
} }
nsIWidgetListener* listener = mViewWrapperPtr ? mViewWrapperPtr : mWidgetListener; nsIWidgetListener* listener = mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
if (listener) { if (listener) {
listener->WillPaintWindow(this, true); listener->WillPaintWindow(this, true);
} }

View File

@@ -182,11 +182,8 @@ PuppetWidget::Resize(PRInt32 aWidth,
InvalidateRegion(this, dirty); InvalidateRegion(this, dirty);
} }
// XXXndeakin this isn't the right widget listener to use. It should use if (!oldBounds.IsEqualEdges(mBounds) && mAttachedWidgetListener) {
// the view wrapper pointer but that won't compile. This will be fixed up mAttachedWidgetListener->WindowResized(this, mBounds.width, mBounds.height);
// in a later patch.
if (!oldBounds.IsEqualEdges(mBounds) && mWidgetListener) {
mWidgetListener->WindowResized(this, mBounds.width, mBounds.height);
} }
return NS_OK; return NS_OK;
@@ -250,7 +247,7 @@ PuppetWidget::DispatchEvent(nsGUIEvent* event, nsEventStatus& aStatus)
aStatus = nsEventStatus_eIgnore; aStatus = nsEventStatus_eIgnore;
NS_ABORT_IF_FALSE(mViewWrapperPtr, "No listener!"); NS_ABORT_IF_FALSE(mAttachedWidgetListener, "No listener!");
if (event->message == NS_COMPOSITION_START) { if (event->message == NS_COMPOSITION_START) {
mIMEComposing = true; mIMEComposing = true;
@@ -273,7 +270,7 @@ PuppetWidget::DispatchEvent(nsGUIEvent* event, nsEventStatus& aStatus)
break; break;
} }
aStatus = mViewWrapperPtr->HandleEvent(event, mUseAttachedEvents); aStatus = mAttachedWidgetListener->HandleEvent(event, mUseAttachedEvents);
if (event->message == NS_COMPOSITION_END) { if (event->message == NS_COMPOSITION_END) {
mIMEComposing = false; mIMEComposing = false;
@@ -482,7 +479,7 @@ PuppetWidget::Paint()
{ {
NS_ABORT_IF_FALSE(!mDirtyRegion.IsEmpty(), "paint event logic messed up"); NS_ABORT_IF_FALSE(!mDirtyRegion.IsEmpty(), "paint event logic messed up");
if (!mWidgetListener) if (!mAttachedWidgetListener)
return NS_OK; return NS_OK;
nsIntRegion region = mDirtyRegion; nsIntRegion region = mDirtyRegion;
@@ -498,19 +495,19 @@ PuppetWidget::Paint()
#endif #endif
if (mozilla::layers::LAYERS_D3D10 == mLayerManager->GetBackendType()) { if (mozilla::layers::LAYERS_D3D10 == mLayerManager->GetBackendType()) {
mWidgetListener->PaintWindow(this, region, false, true); mAttachedWidgetListener->PaintWindow(this, region, false, true);
} else { } else {
nsRefPtr<gfxContext> ctx = new gfxContext(mSurface); nsRefPtr<gfxContext> ctx = new gfxContext(mSurface);
ctx->Rectangle(gfxRect(0,0,0,0)); ctx->Rectangle(gfxRect(0,0,0,0));
ctx->Clip(); ctx->Clip();
AutoLayerManagerSetup setupLayerManager(this, ctx, AutoLayerManagerSetup setupLayerManager(this, ctx,
BUFFER_NONE); BUFFER_NONE);
mWidgetListener->PaintWindow(this, region, false, true); mAttachedWidgetListener->PaintWindow(this, region, false, true);
mTabChild->NotifyPainted(); mTabChild->NotifyPainted();
} }
} }
mWidgetListener->DidPaintWindow(); mAttachedWidgetListener->DidPaintWindow();
return NS_OK; return NS_OK;
} }

View File

@@ -85,7 +85,7 @@ nsAutoRollup::~nsAutoRollup()
nsBaseWidget::nsBaseWidget() nsBaseWidget::nsBaseWidget()
: mWidgetListener(nullptr) : mWidgetListener(nullptr)
, mViewWrapperPtr(nullptr) , mAttachedWidgetListener(nullptr)
, mContext(nullptr) , mContext(nullptr)
, mCursor(eCursor_standard) , mCursor(eCursor_standard)
, mWindowType(eWindowType_child) , mWindowType(eWindowType_child)
@@ -294,15 +294,14 @@ nsBaseWidget::AttachViewToTopLevel(bool aUseAttachedEvents,
return NS_OK; return NS_OK;
} }
ViewWrapper* nsBaseWidget::GetAttachedViewPtr() nsIWidgetListener* nsBaseWidget::GetAttachedWidgetListener()
{ {
return mViewWrapperPtr; return mAttachedWidgetListener;
} }
NS_IMETHODIMP nsBaseWidget::SetAttachedViewPtr(ViewWrapper* aViewWrapper) void nsBaseWidget::SetAttachedWidgetListener(nsIWidgetListener* aListener)
{ {
mViewWrapperPtr = aViewWrapper; mAttachedWidgetListener = aListener;
return NS_OK;
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------

View File

@@ -157,8 +157,8 @@ public:
nsWidgetInitData *aInitData = nullptr, nsWidgetInitData *aInitData = nullptr,
bool aForceUseIWidgetParent = false); bool aForceUseIWidgetParent = false);
NS_IMETHOD AttachViewToTopLevel(bool aUseAttachedEvents, nsDeviceContext *aContext); NS_IMETHOD AttachViewToTopLevel(bool aUseAttachedEvents, nsDeviceContext *aContext);
virtual ViewWrapper* GetAttachedViewPtr(); virtual nsIWidgetListener* GetAttachedWidgetListener();
NS_IMETHOD SetAttachedViewPtr(ViewWrapper* aViewWrapper); virtual void SetAttachedWidgetListener(nsIWidgetListener* aListener);
NS_IMETHOD RegisterTouchWindow(); NS_IMETHOD RegisterTouchWindow();
NS_IMETHOD UnregisterTouchWindow(); NS_IMETHOD UnregisterTouchWindow();
@@ -329,7 +329,7 @@ protected:
void DestroyCompositor(); void DestroyCompositor();
nsIWidgetListener* mWidgetListener; nsIWidgetListener* mWidgetListener;
ViewWrapper* mViewWrapperPtr; nsIWidgetListener* mAttachedWidgetListener;
nsDeviceContext* mContext; nsDeviceContext* mContext;
nsRefPtr<LayerManager> mLayerManager; nsRefPtr<LayerManager> mLayerManager;
nsRefPtr<LayerManager> mBasicLayerManager; nsRefPtr<LayerManager> mBasicLayerManager;