mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 488771. Stop nsIRollUpListener from inheriting from nsISupports. r=roc
--HG-- extra : rebase_source : 0af5c537b7be03c1407f4b658ba7802081ad3f01
This commit is contained in:
parent
5b9995e714
commit
3f8f793c9e
@ -300,20 +300,6 @@ NS_QUERYFRAME_HEAD(nsComboboxControlFrame)
|
||||
NS_QUERYFRAME_ENTRY(nsIScrollableViewProvider)
|
||||
NS_QUERYFRAME_TAIL_INHERITING(nsBlockFrame)
|
||||
|
||||
NS_IMPL_QUERY_INTERFACE1(nsComboboxControlFrame, nsIRollupListener)
|
||||
|
||||
NS_IMETHODIMP_(nsrefcnt)
|
||||
nsComboboxControlFrame::AddRef()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(nsrefcnt)
|
||||
nsComboboxControlFrame::Release()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef ACCESSIBILITY
|
||||
NS_IMETHODIMP nsComboboxControlFrame::GetAccessible(nsIAccessible** aAccessible)
|
||||
{
|
||||
@ -427,7 +413,7 @@ nsComboboxControlFrame::ShowList(PRBool aShowList)
|
||||
if (view) {
|
||||
nsIWidget* widget = view->GetWidget();
|
||||
if (widget)
|
||||
widget->CaptureRollupEvents(this, mDroppedDown, mDroppedDown);
|
||||
widget->CaptureRollupEvents(this, nsnull, mDroppedDown, mDroppedDown);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1226,7 +1212,7 @@ nsComboboxControlFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
||||
if (view) {
|
||||
nsIWidget* widget = view->GetWidget();
|
||||
if (widget)
|
||||
widget->CaptureRollupEvents(this, PR_FALSE, PR_TRUE);
|
||||
widget->CaptureRollupEvents(this, nsnull, PR_FALSE, PR_TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,6 @@ public:
|
||||
|
||||
NS_DECL_QUERYFRAME
|
||||
NS_DECL_FRAMEARENA_HELPERS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIAnonymousContentCreator
|
||||
virtual nsresult CreateAnonymousContent(nsTArray<nsIContent*>& aElements);
|
||||
|
@ -310,9 +310,13 @@ public:
|
||||
friend class nsXULMenuCommandEvent;
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIROLLUPLISTENER
|
||||
NS_DECL_NSITIMERCALLBACK
|
||||
|
||||
// nsIRollupListener
|
||||
NS_IMETHOD Rollup(PRUint32 aCount, nsIContent **aContent);
|
||||
NS_IMETHOD ShouldRollupOnMouseWheelEvent(PRBool *aShould);
|
||||
NS_IMETHOD ShouldRollupOnMouseActivate(PRBool *aShould);
|
||||
|
||||
virtual PRUint32 GetSubmenuWidgetChain(nsTArray<nsIWidget*> *aWidgetChain);
|
||||
virtual void AdjustPopupsOnWindowChange(void);
|
||||
|
||||
|
@ -127,11 +127,10 @@ void nsMenuChainItem::Detach(nsMenuChainItem** aRoot)
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS5(nsXULPopupManager,
|
||||
NS_IMPL_ISUPPORTS4(nsXULPopupManager,
|
||||
nsIDOMKeyListener,
|
||||
nsIDOMEventListener,
|
||||
nsIMenuRollup,
|
||||
nsIRollupListener,
|
||||
nsITimerCallback)
|
||||
|
||||
nsXULPopupManager::nsXULPopupManager() :
|
||||
@ -1391,7 +1390,7 @@ nsXULPopupManager::SetCaptureState(nsIContent* aOldPopup)
|
||||
return;
|
||||
|
||||
if (mWidget) {
|
||||
mWidget->CaptureRollupEvents(this, PR_FALSE, PR_FALSE);
|
||||
mWidget->CaptureRollupEvents(this, this, PR_FALSE, PR_FALSE);
|
||||
mWidget = nsnull;
|
||||
}
|
||||
|
||||
@ -1400,7 +1399,8 @@ nsXULPopupManager::SetCaptureState(nsIContent* aOldPopup)
|
||||
nsCOMPtr<nsIWidget> widget;
|
||||
popup->GetWidget(getter_AddRefs(widget));
|
||||
if (widget) {
|
||||
widget->CaptureRollupEvents(this, PR_TRUE, popup->ConsumeOutsideClicks());
|
||||
widget->CaptureRollupEvents(this, this, PR_TRUE,
|
||||
popup->ConsumeOutsideClicks());
|
||||
mWidget = widget;
|
||||
popup->AttachedDismissalListener();
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ EXPORTS = \
|
||||
nsINativeKeyBindings.h \
|
||||
nsIDeviceContextSpec.h \
|
||||
nsIMenuRollup.h \
|
||||
nsIRollupListener.h \
|
||||
$(NULL)
|
||||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa)
|
||||
@ -97,7 +98,6 @@ XPIDLSRCS = \
|
||||
nsIClipboard.idl \
|
||||
nsIClipboardHelper.idl \
|
||||
nsIClipboardOwner.idl \
|
||||
nsIRollupListener.idl \
|
||||
nsIBaseWindow.idl \
|
||||
nsIBidiKeyboard.idl \
|
||||
nsIScreen.idl \
|
||||
|
@ -39,34 +39,33 @@
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#ifndef __nsIRollupListener_h__
|
||||
#define __nsIRollupListener_h__
|
||||
|
||||
interface nsIContent;
|
||||
class nsIContent;
|
||||
|
||||
class nsIRollupListener {
|
||||
public:
|
||||
|
||||
[uuid(0CA103E5-80D4-4B81-A310-BE0708F8EAA9)]
|
||||
interface nsIRollupListener : nsISupports
|
||||
{
|
||||
/**
|
||||
* Notifies the object to rollup, optionally returning the node that
|
||||
* was just rolled up.
|
||||
*
|
||||
* aCount is the number of popups in a chain to close. If this is
|
||||
* PR_UINT32_MAX, then all popups are closed.
|
||||
*
|
||||
* @result NS_Ok if no errors
|
||||
*/
|
||||
nsIContent Rollup(in unsigned long aCount);
|
||||
NS_IMETHOD Rollup(PRUint32 aCount, nsIContent **aContent) = 0;
|
||||
|
||||
/**
|
||||
* Asks the RollupListener if it should rollup on mousevents
|
||||
* @result NS_Ok if no errors
|
||||
*/
|
||||
void ShouldRollupOnMouseWheelEvent(out PRBool aShould);
|
||||
NS_IMETHOD ShouldRollupOnMouseWheelEvent(PRBool *aShould) = 0;
|
||||
|
||||
/**
|
||||
* Asks the RollupListener if it should rollup on mouse activate, eg. X-Mouse
|
||||
* @result NS_Ok if no errors
|
||||
*/
|
||||
void ShouldRollupOnMouseActivate(out PRBool aShould);
|
||||
NS_IMETHOD ShouldRollupOnMouseActivate(PRBool *aShould) = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif /* __nsIRollupListener_h__ */
|
@ -60,6 +60,7 @@ class nsIRenderingContext;
|
||||
class nsIDeviceContext;
|
||||
struct nsFont;
|
||||
class nsIRollupListener;
|
||||
class nsIMenuRollup;
|
||||
class nsGUIEvent;
|
||||
class imgIContainer;
|
||||
class gfxASurface;
|
||||
@ -767,7 +768,8 @@ class nsIWidget : public nsISupports {
|
||||
* @param aConsumeRollupEvent PR_TRUE consumes the rollup event, PR_FALSE dispatches rollup event
|
||||
*
|
||||
*/
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent) = 0;
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent) = 0;
|
||||
|
||||
/**
|
||||
* Bring this window to the user's attention. This is intended to be a more
|
||||
|
@ -92,6 +92,7 @@ static NS_DEFINE_IID(kCDragServiceCID, NS_DRAGSERVICE_CID);
|
||||
|
||||
// Rollup Listener - static variable defintions
|
||||
static nsIRollupListener * gRollupListener = nsnull;
|
||||
static nsIMenuRollup * gMenuRollup = nsnull;
|
||||
static nsIWidget * gRollupWidget = nsnull;
|
||||
static PRBool gRollupConsumeRollupEvent = PR_FALSE;
|
||||
// Tracking last activated BWindow
|
||||
@ -712,7 +713,10 @@ NS_METHOD nsWindow::CaptureMouse(PRBool aCapture)
|
||||
//-------------------------------------------------------------------------
|
||||
// Capture Roolup Events
|
||||
//-------------------------------------------------------------------------
|
||||
NS_METHOD nsWindow::CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent)
|
||||
NS_METHOD nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
if (!mEnabled)
|
||||
return NS_OK;
|
||||
@ -724,16 +728,18 @@ NS_METHOD nsWindow::CaptureRollupEvents(nsIRollupListener * aListener, PRBool aD
|
||||
// assure that remains true.
|
||||
NS_ASSERTION(!gRollupWidget, "rollup widget reassigned before release");
|
||||
gRollupConsumeRollupEvent = aConsumeRollupEvent;
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
gRollupListener = aListener;
|
||||
NS_ADDREF(aListener);
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWidget = this;
|
||||
NS_ADDREF(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
gRollupListener == nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
}
|
||||
|
||||
@ -783,11 +789,10 @@ nsWindow::DealWithPopups(uint32 methodID, nsPoint pos)
|
||||
// want to rollup if the click is in a parent menu of the current submenu.
|
||||
if (rollup)
|
||||
{
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup ( do_QueryInterface(gRollupListener) );
|
||||
if ( menuRollup )
|
||||
if ( gMenuRollup )
|
||||
{
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
|
||||
for ( PRUint32 i = 0; i < widgetChain.Length(); ++i )
|
||||
{
|
||||
|
@ -109,6 +109,7 @@ public:
|
||||
NS_IMETHOD Show(PRBool bState);
|
||||
NS_IMETHOD CaptureMouse(PRBool aCapture);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD IsVisible(PRBool & aState);
|
||||
|
@ -360,7 +360,8 @@ public:
|
||||
NS_IMETHOD SetCursor(nsCursor aCursor);
|
||||
NS_IMETHOD SetCursor(imgIContainer* aCursor, PRUint32 aHotspotX, PRUint32 aHotspotY);
|
||||
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD SetTitle(const nsAString& title);
|
||||
|
||||
NS_IMETHOD GetAttention(PRInt32 aCycleCount);
|
||||
|
@ -153,6 +153,7 @@ static void blinkRgn(RgnHandle rgn);
|
||||
#endif
|
||||
|
||||
nsIRollupListener * gRollupListener = nsnull;
|
||||
nsIMenuRollup * gMenuRollup = nsnull;
|
||||
nsIWidget * gRollupWidget = nsnull;
|
||||
|
||||
PRUint32 gLastModifierState = 0;
|
||||
@ -1891,6 +1892,7 @@ nsIntPoint nsChildView::WidgetToScreenOffset()
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsChildView::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
@ -2749,12 +2751,10 @@ NSEvent* gLastDragMouseDownEvent = nil;
|
||||
// we don't want to rollup if the click is in a parent menu of
|
||||
// the current submenu
|
||||
PRUint32 popupsToRollup = PR_UINT32_MAX;
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup;
|
||||
menuRollup = (do_QueryInterface(gRollupListener));
|
||||
if (menuRollup) {
|
||||
if (gMenuRollup) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
for (PRUint32 i = 0; i < widgetChain.Length(); i++) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
NSWindow* currWindow = (NSWindow*)widget->GetNativeData(NS_NATIVE_WINDOW);
|
||||
|
@ -245,7 +245,8 @@ public:
|
||||
const nsTArray<nsIntRect>& aDestRects,
|
||||
const nsTArray<Configuration>& aConfigurations);
|
||||
NS_IMETHOD DispatchEvent(nsGUIEvent* event, nsEventStatus & aStatus) ;
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD GetAttention(PRInt32 aCycleCount);
|
||||
virtual PRBool HasPendingInputEvent();
|
||||
virtual nsTransparencyMode GetTransparencyMode();
|
||||
|
@ -66,6 +66,7 @@
|
||||
#include "nsStyleConsts.h"
|
||||
#include "nsNativeThemeColors.h"
|
||||
#include "nsChildView.h"
|
||||
#include "nsIMenuRollup.h"
|
||||
|
||||
#include "gfxPlatform.h"
|
||||
#include "qcms.h"
|
||||
@ -89,6 +90,7 @@ extern NSMenu* sApplicationMenu; // Application menu shared by all menubars
|
||||
|
||||
// defined in nsChildView.mm
|
||||
extern nsIRollupListener * gRollupListener;
|
||||
extern nsIMenuRollup * gMenuRollup;
|
||||
extern nsIWidget * gRollupWidget;
|
||||
extern BOOL gSomeMenuBarPainted;
|
||||
|
||||
@ -1344,17 +1346,21 @@ nsMenuBarX* nsCocoaWindow::GetMenuBar()
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsCocoaWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
||||
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
|
||||
if (aDoCapture) {
|
||||
gRollupListener = aListener;
|
||||
NS_ADDREF(aListener);
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWidget = this;
|
||||
NS_ADDREF(this);
|
||||
|
||||
|
@ -290,7 +290,8 @@ static PRBool gGlobalsInitialized = PR_FALSE;
|
||||
static PRBool gRaiseWindows = PR_TRUE;
|
||||
static nsWindow *gPluginFocusWindow = NULL;
|
||||
|
||||
static nsCOMPtr<nsIRollupListener> gRollupListener;
|
||||
static nsIRollupListener* gRollupListener;
|
||||
static nsIMenuRollup* gMenuRollup;
|
||||
static nsWeakPtr gRollupWindow;
|
||||
static PRBool gConsumeRollupEvent;
|
||||
|
||||
@ -762,6 +763,7 @@ nsWindow::Destroy(void)
|
||||
if (static_cast<nsIWidget *>(this) == rollupWidget.get()) {
|
||||
if (gRollupListener)
|
||||
gRollupListener->Rollup(nsnull, nsnull);
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gRollupWindow = nsnull;
|
||||
gRollupListener = nsnull;
|
||||
}
|
||||
@ -2150,6 +2152,7 @@ nsWindow::CaptureMouse(PRBool aCapture)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWindow::CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
@ -2165,6 +2168,9 @@ nsWindow::CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
if (aDoCapture) {
|
||||
gConsumeRollupEvent = aConsumeRollupEvent;
|
||||
gRollupListener = aListener;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWindow = do_GetWeakReference(static_cast<nsIWidget*>
|
||||
(this));
|
||||
// real grab is only done when there is no dragging
|
||||
@ -2180,6 +2186,7 @@ nsWindow::CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
gtk_grab_remove(widget);
|
||||
}
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gRollupWindow = nsnull;
|
||||
}
|
||||
|
||||
@ -5340,11 +5347,9 @@ check_for_rollup(GdkWindow *aWindow, gdouble aMouseX, gdouble aMouseY,
|
||||
// we don't want to rollup if the clickis in a parent menu of
|
||||
// the current submenu
|
||||
PRUint32 popupsToRollup = PR_UINT32_MAX;
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup;
|
||||
menuRollup = (do_QueryInterface(gRollupListener));
|
||||
if (menuRollup) {
|
||||
if (gMenuRollup) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
PRUint32 sameTypeCount = menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
for (PRUint32 i=0; i<widgetChain.Length(); ++i) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
GdkWindow* currWindow =
|
||||
@ -5377,6 +5382,7 @@ check_for_rollup(GdkWindow *aWindow, gdouble aMouseX, gdouble aMouseY,
|
||||
} else {
|
||||
gRollupWindow = nsnull;
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
}
|
||||
|
||||
return retVal;
|
||||
|
@ -189,6 +189,7 @@ public:
|
||||
NS_IMETHOD EnableDragDrop(PRBool aEnable);
|
||||
NS_IMETHOD CaptureMouse(PRBool aCapture);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD GetAttention(PRInt32 aCycleCount);
|
||||
|
@ -120,6 +120,7 @@ BOOL nsWindow::sIsRegistered = FALSE;
|
||||
// Rollup Listener - global variable defintions
|
||||
////////////////////////////////////////////////////
|
||||
nsIRollupListener * gRollupListener = nsnull;
|
||||
nsIMenuRollup * gMenuRollup = nsnull;
|
||||
nsIWidget * gRollupWidget = nsnull;
|
||||
PRBool gRollupConsumeRollupEvent = PR_FALSE;
|
||||
////////////////////////////////////////////////////
|
||||
@ -453,6 +454,7 @@ PRBool nsWindow::DispatchDragDropEvent(PRUint32 aMsg)
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
NS_IMETHODIMP nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
@ -462,15 +464,16 @@ NS_IMETHODIMP nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
assure that remains true. */
|
||||
NS_ASSERTION(!gRollupWidget, "rollup widget reassigned before release");
|
||||
gRollupConsumeRollupEvent = aConsumeRollupEvent;
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
gRollupListener = aListener;
|
||||
NS_ADDREF(aListener);
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWidget = this;
|
||||
NS_ADDREF(this);
|
||||
} else {
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
//gRollupListener = nsnull;
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
}
|
||||
|
||||
@ -539,10 +542,9 @@ nsWindow :: DealWithPopups ( ULONG inMsg, MRESULT* outResult )
|
||||
// want to rollup if the click is in a parent menu of the current submenu.
|
||||
PRUint32 popupsToRollup = PR_UINT32_MAX;
|
||||
if (rollup) {
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup ( do_QueryInterface(gRollupListener) );
|
||||
if ( menuRollup ) {
|
||||
if ( gMenuRollup ) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
PRUint32 sameTypeCount = menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
for ( PRUint32 i = 0; i < widgetChain.Length(); ++i ) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
if ( nsWindow::EventIsInsideWindow((nsWindow*)widget) ) {
|
||||
@ -639,10 +641,9 @@ MRESULT EXPENTRY fnwpNSWindow( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
|
||||
// If we're dealing with menus, we probably have submenus and we don't
|
||||
// want to rollup if the click is in a parent menu of the current submenu.
|
||||
if (rollup) {
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup ( do_QueryInterface(gRollupListener) );
|
||||
if ( menuRollup ) {
|
||||
if ( gMenuRollup ) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
menuRollup->GetSubmenuWidgetChain ( &widgetChain );
|
||||
gMenuRollup->GetSubmenuWidgetChain ( &widgetChain );
|
||||
for ( PRUint32 i = 0; i < widgetChain.Length(); ++i ) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
if ( nsWindow::EventIsInsideWindow((nsWindow*)widget) ) {
|
||||
@ -972,7 +973,7 @@ NS_METHOD nsWindow::Destroy()
|
||||
if (gRollupListener) {
|
||||
gRollupListener->Rollup(PR_UINT32_MAX, nsnull);
|
||||
}
|
||||
CaptureRollupEvents(nsnull, PR_FALSE, PR_TRUE);
|
||||
CaptureRollupEvents(nsnull, nsnull, PR_FALSE, PR_TRUE);
|
||||
}
|
||||
|
||||
if (mWnd) {
|
||||
|
@ -148,7 +148,8 @@ class nsWindow : public nsBaseWidget
|
||||
|
||||
virtual nsIntPoint WidgetToScreenOffset();
|
||||
NS_IMETHOD DispatchEvent( struct nsGUIEvent *event, nsEventStatus &aStatus);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
|
||||
virtual PRBool HasPendingInputEvent();
|
||||
|
||||
|
@ -92,7 +92,9 @@ public:
|
||||
|
||||
NS_IMETHOD SetModal(PRBool aModal);
|
||||
NS_IMETHOD Show(PRBool state);
|
||||
inline NS_IMETHOD CaptureRollupEvents(nsIRollupListener *aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent) { return NS_OK; }
|
||||
inline NS_IMETHOD CaptureRollupEvents(nsIRollupListener *aListener, nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent)
|
||||
{ return NS_OK; }
|
||||
|
||||
inline NS_IMETHOD IsVisible(PRBool &aState) { aState = mShown; return NS_OK; }
|
||||
|
||||
|
@ -59,6 +59,7 @@
|
||||
|
||||
#include "nsClipboard.h"
|
||||
#include "nsIRollupListener.h"
|
||||
#include "nsIMenuRollup.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIAppShell.h"
|
||||
@ -74,6 +75,7 @@
|
||||
static PhTile_t *GetWindowClipping( PtWidget_t *aWidget );
|
||||
|
||||
nsIRollupListener *nsWindow::gRollupListener = nsnull;
|
||||
nsIMenuRollup *nsWindow::gMenuRollup = nsnull;
|
||||
nsIWidget *nsWindow::gRollupWidget = nsnull;
|
||||
static PtWidget_t *gMenuRegion;
|
||||
|
||||
@ -171,15 +173,21 @@ void nsWindow::DestroyNativeChildren(void)
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWindow::CaptureRollupEvents( nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent ) {
|
||||
NS_IMETHODIMP nsWindow::CaptureRollupEvents( nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent )
|
||||
{
|
||||
PtWidget_t *grabWidget;
|
||||
grabWidget = mWidget;
|
||||
|
||||
if (aDoCapture) {
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
gRollupListener = aListener;
|
||||
NS_ADDREF(aListener);
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWidget = this;
|
||||
NS_ADDREF(this);
|
||||
|
||||
@ -203,8 +211,8 @@ NS_IMETHODIMP nsWindow::CaptureRollupEvents( nsIRollupListener * aListener, PRBo
|
||||
}
|
||||
}
|
||||
else {
|
||||
NS_IF_RELEASE(gRollupListener);
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
NS_IF_RELEASE(gRollupWidget);
|
||||
gRollupWidget = nsnull;
|
||||
|
||||
|
@ -91,6 +91,7 @@ public:
|
||||
}
|
||||
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent);
|
||||
|
||||
@ -155,6 +156,7 @@ private:
|
||||
PRBool mIsTooSmall;
|
||||
PRBool mIsDestroying;
|
||||
static nsIRollupListener *gRollupListener;
|
||||
static nsIMenuRollup* gMenuRollup;
|
||||
static nsIWidget *gRollupWidget;
|
||||
};
|
||||
|
||||
|
@ -114,7 +114,8 @@ static NS_DEFINE_IID(kCDragServiceCID, NS_DRAGSERVICE_CID);
|
||||
static const int WHEEL_DELTA = 120;
|
||||
static PRBool gGlobalsInitialized = PR_FALSE;
|
||||
|
||||
static nsCOMPtr<nsIRollupListener> gRollupListener;
|
||||
static nsIRollupListener* gRollupListener;
|
||||
static nsIMenuRollup* gMenuRollup;
|
||||
static nsWeakPtr gRollupWindow;
|
||||
static PRBool gConsumeRollupEvent;
|
||||
|
||||
@ -250,6 +251,7 @@ nsWindow::Destroy(void)
|
||||
gRollupListener->Rollup(nsnull, nsnull);
|
||||
gRollupWindow = nsnull;
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
}
|
||||
|
||||
Show(PR_FALSE);
|
||||
@ -802,6 +804,7 @@ nsWindow::CaptureMouse(PRBool aCapture)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWindow::CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
@ -813,10 +816,14 @@ nsWindow::CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
if (aDoCapture) {
|
||||
gConsumeRollupEvent = aConsumeRollupEvent;
|
||||
gRollupListener = aListener;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
gRollupWindow = do_GetWeakReference(static_cast<nsIWidget*>(this));
|
||||
}
|
||||
else {
|
||||
gRollupListener = nsnull;
|
||||
NS_IF_RELEASE(gMenuRollup);
|
||||
gRollupWindow = nsnull;
|
||||
}
|
||||
|
||||
@ -844,11 +851,9 @@ check_for_rollup(double aMouseX, double aMouseY,
|
||||
// we don't want to rollup if the clickis in a parent menu of
|
||||
// the current submenu
|
||||
PRUint32 popupsToRollup = PR_UINT32_MAX;
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup;
|
||||
menuRollup = (do_QueryInterface(gRollupListener));
|
||||
if (menuRollup) {
|
||||
if (gMenuRollup) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
PRUint32 sameTypeCount = menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = gMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
for (PRUint32 i=0; i<widgetChain.Length(); ++i) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
QWidget* currWindow =
|
||||
@ -874,6 +879,7 @@ check_for_rollup(double aMouseX, double aMouseY,
|
||||
} else {
|
||||
gRollupWindow = nsnull;
|
||||
gRollupListener = nsnull;
|
||||
gMenuRollup = nsnull;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
|
@ -175,6 +175,7 @@ public:
|
||||
NS_IMETHOD EnableDragDrop(PRBool aEnable);
|
||||
NS_IMETHOD CaptureMouse(PRBool aCapture);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener *aListener,
|
||||
nsIMenuRollup *aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent);
|
||||
|
||||
|
@ -256,6 +256,7 @@ UINT nsWindow::sHookTimerId = 0;
|
||||
|
||||
// Rollup Listener
|
||||
nsIRollupListener* nsWindow::sRollupListener = nsnull;
|
||||
nsIMenuRollup* nsWindow::sMenuRollup = nsnull;
|
||||
nsIWidget* nsWindow::sRollupWidget = nsnull;
|
||||
PRBool nsWindow::sRollupConsumeEvent = PR_FALSE;
|
||||
|
||||
@ -2652,6 +2653,7 @@ NS_METHOD nsWindow::CaptureMouse(PRBool aCapture)
|
||||
**************************************************************/
|
||||
|
||||
NS_IMETHODIMP nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture,
|
||||
PRBool aConsumeRollupEvent)
|
||||
{
|
||||
@ -2661,10 +2663,11 @@ NS_IMETHODIMP nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
assure that remains true. */
|
||||
NS_ASSERTION(!sRollupWidget, "rollup widget reassigned before release");
|
||||
sRollupConsumeEvent = aConsumeRollupEvent;
|
||||
NS_IF_RELEASE(sRollupListener);
|
||||
NS_IF_RELEASE(sRollupWidget);
|
||||
NS_IF_RELEASE(sMenuRollup);
|
||||
sRollupListener = aListener;
|
||||
NS_ADDREF(aListener);
|
||||
sMenuRollup = aMenuRollup;
|
||||
NS_IF_ADDREF(aMenuRollup);
|
||||
sRollupWidget = this;
|
||||
NS_ADDREF(this);
|
||||
|
||||
@ -2676,7 +2679,8 @@ NS_IMETHODIMP nsWindow::CaptureRollupEvents(nsIRollupListener * aListener,
|
||||
#endif
|
||||
|
||||
} else {
|
||||
NS_IF_RELEASE(sRollupListener);
|
||||
sRollupListener = nsnull;
|
||||
NS_IF_RELEASE(sMenuRollup);
|
||||
NS_IF_RELEASE(sRollupWidget);
|
||||
|
||||
#ifndef WINCE
|
||||
@ -5904,7 +5908,7 @@ void nsWindow::OnDestroy()
|
||||
if ( this == sRollupWidget ) {
|
||||
if ( sRollupListener )
|
||||
sRollupListener->Rollup(nsnull, nsnull);
|
||||
CaptureRollupEvents(nsnull, PR_FALSE, PR_TRUE);
|
||||
CaptureRollupEvents(nsnull, nsnull, PR_FALSE, PR_TRUE);
|
||||
}
|
||||
|
||||
// If IME is disabled, restore it.
|
||||
@ -6792,10 +6796,9 @@ nsWindow::DealWithPopups(HWND inWnd, UINT inMsg, WPARAM inWParam, LPARAM inLPara
|
||||
// want to rollup if the click is in a parent menu of the current submenu.
|
||||
PRUint32 popupsToRollup = PR_UINT32_MAX;
|
||||
if (rollup) {
|
||||
nsCOMPtr<nsIMenuRollup> menuRollup ( do_QueryInterface(sRollupListener) );
|
||||
if ( menuRollup ) {
|
||||
if ( sMenuRollup ) {
|
||||
nsAutoTArray<nsIWidget*, 5> widgetChain;
|
||||
PRUint32 sameTypeCount = menuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
PRUint32 sameTypeCount = sMenuRollup->GetSubmenuWidgetChain(&widgetChain);
|
||||
for ( PRUint32 i = 0; i < widgetChain.Length(); ++i ) {
|
||||
nsIWidget* widget = widgetChain[i];
|
||||
if ( nsWindow::EventIsInsideWindow(inMsg, (nsWindow*)widget) ) {
|
||||
|
@ -153,7 +153,8 @@ public:
|
||||
NS_IMETHOD DispatchEvent(nsGUIEvent* event, nsEventStatus & aStatus);
|
||||
NS_IMETHOD EnableDragDrop(PRBool aEnable);
|
||||
NS_IMETHOD CaptureMouse(PRBool aCapture);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD CaptureRollupEvents(nsIRollupListener * aListener, nsIMenuRollup * aMenuRollup,
|
||||
PRBool aDoCapture, PRBool aConsumeRollupEvent);
|
||||
NS_IMETHOD GetAttention(PRInt32 aCycleCount);
|
||||
virtual PRBool HasPendingInputEvent();
|
||||
gfxASurface *GetThebesSurface();
|
||||
@ -462,6 +463,7 @@ protected:
|
||||
static nsIWidget* sRollupWidget;
|
||||
static PRBool sRollupConsumeEvent;
|
||||
static nsIRollupListener* sRollupListener;
|
||||
static nsIMenuRollup* sMenuRollup;
|
||||
|
||||
// Mouse Clicks - static variable definitions for figuring
|
||||
// out 1 - 3 Clicks.
|
||||
|
Loading…
Reference in New Issue
Block a user