fix for 67406, re-instate the drag handlers for carbon, make them UPPs, make them per-window, not static. r=pchen/sr=sfraser.

This commit is contained in:
pinkerton%netscape.com 2001-02-12 23:39:50 +00:00
Родитель 80e26252ca
Коммит 6b58e34398
2 изменённых файлов: 20 добавлений и 16 удалений

Просмотреть файл

@ -64,10 +64,6 @@ const short kWindowMarginWidth = 6;
const short kDialogTitleBarHeight = 26;
const short kDialogMarginWidth = 6;
#if !TARGET_CARBON
DragTrackingHandlerUPP nsMacWindow::sDragTrackingHandlerUPP = NewDragTrackingHandlerProc(DragTrackingHandler);
DragReceiveHandlerUPP nsMacWindow::sDragReceiveHandlerUPP = NewDragReceiveHandlerProc(DragReceiveHandler);
#endif
void SetDragActionBasedOnModifiers ( nsIDragService* inDragService, short inModifiers ) ;
@ -278,6 +274,10 @@ nsMacWindow::nsMacWindow() : Inherited()
//mMacEventHandler.reset(new nsMacEventHandler(this));
mMacEventHandler = (auto_ptr<nsMacEventHandler>) new nsMacEventHandler(this);
WIDGET_SET_CLASSNAME("nsMacWindow");
// create handlers for drag&drop
mDragTrackingHandlerUPP = NewDragTrackingHandlerUPP(DragTrackingHandler);
mDragReceiveHandlerUPP = NewDragReceiveHandlerUPP(DragReceiveHandler);
}
@ -302,10 +302,15 @@ nsMacWindow::~nsMacWindow()
::DisposeWindow(mWindowPtr);
// clean up DragManager stuff
#if !TARGET_CARBON
::RemoveTrackingHandler ( sDragTrackingHandlerUPP, mWindowPtr );
::RemoveReceiveHandler ( sDragReceiveHandlerUPP, mWindowPtr );
#endif
if ( mDragTrackingHandlerUPP ) {
::RemoveTrackingHandler ( mDragTrackingHandlerUPP, mWindowPtr );
::DisposeDragTrackingHandlerUPP ( mDragTrackingHandlerUPP );
}
if ( mDragReceiveHandlerUPP ) {
::RemoveReceiveHandler ( mDragReceiveHandlerUPP, mWindowPtr );
::DisposeDragReceiveHandlerUPP ( mDragReceiveHandlerUPP );
}
nsMacMessageSink::RemoveRaptorWindowFromList(mWindowPtr);
mWindowPtr = nsnull;
}
@ -534,16 +539,15 @@ nsresult nsMacWindow::StandardCreate(nsIWidget *aParent,
::EmbedControl ( rootControl, mPhantomScrollbar );
// register tracking and receive handlers with the native Drag Manager
#if !TARGET_CARBON
if ( sDragTrackingHandlerUPP ) {
OSErr result = ::InstallTrackingHandler ( sDragTrackingHandlerUPP, mWindowPtr, this );
if ( mDragTrackingHandlerUPP ) {
OSErr result = ::InstallTrackingHandler ( mDragTrackingHandlerUPP, mWindowPtr, this );
NS_ASSERTION ( result == noErr, "can't install drag tracking handler");
}
if ( sDragReceiveHandlerUPP ) {
OSErr result = ::InstallReceiveHandler ( sDragReceiveHandlerUPP, mWindowPtr, this );
if ( mDragReceiveHandlerUPP ) {
OSErr result = ::InstallReceiveHandler ( mDragReceiveHandlerUPP, mWindowPtr, this );
NS_ASSERTION ( result == noErr, "can't install drag receive handler");
}
#endif
return NS_OK;
}

Просмотреть файл

@ -115,8 +115,8 @@ protected:
void *handlerRefCon, DragReference theDrag );
pascal static OSErr DragReceiveHandler (WindowPtr theWindow,
void *handlerRefCon, DragReference theDragRef) ;
static DragTrackingHandlerUPP sDragTrackingHandlerUPP;
static DragReceiveHandlerUPP sDragReceiveHandlerUPP;
DragTrackingHandlerUPP mDragTrackingHandlerUPP;
DragReceiveHandlerUPP mDragReceiveHandlerUPP;
PRBool mWindowMadeHere; // true if we created the window
PRBool mIsDialog; // true if the window is a dialog