Applie dpatch [ 741366 ] wxMac d'n'd fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20796 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -378,7 +378,11 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
|
||||
DisposeDrag(theDrag);
|
||||
gTrackingGlobals.m_currentSource = NULL ;
|
||||
|
||||
return wxDragCopy ;
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult dndresult = optionDown ? wxDragCopy : wxDragMove;
|
||||
return dndresult;
|
||||
}
|
||||
|
||||
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||
@@ -429,6 +433,12 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
DragAttributes attributes;
|
||||
GetDragAttributes(theDrag, &attributes);
|
||||
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
||||
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||
|
||||
switch(theMessage)
|
||||
{
|
||||
case kDragTrackingEnterHandler:
|
||||
@@ -447,6 +457,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
localMouse = mouse;
|
||||
GlobalToLocal(&localMouse);
|
||||
|
||||
|
||||
|
||||
// if (attributes & kDragHasLeftSenderWindow)
|
||||
{
|
||||
wxPoint point(localMouse.h , localMouse.v) ;
|
||||
@@ -478,14 +490,39 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
trackingGlobals->m_currentTargetWindow = win ;
|
||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||
{
|
||||
wxDragResult result = wxDragNone ;
|
||||
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
localx , localy , result ) ;
|
||||
}
|
||||
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
trackingGlobals->m_currentTarget->OnDragOver(
|
||||
localx , localy , result ) ;
|
||||
}
|
||||
}
|
||||
|
||||
// set cursor for OnEnter and OnDragOver
|
||||
if ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||
{
|
||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
||||
@@ -514,29 +551,6 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
}
|
||||
}
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
trackingGlobals->m_currentTarget->OnDragOver(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||
break;
|
||||
@@ -575,7 +589,11 @@ pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
|
||||
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
||||
if ( trackingGlobals->m_currentTarget->OnDrop( localx , localy ) )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->OnData( localx , localy , wxDragCopy ) ;
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||
trackingGlobals->m_currentTarget->OnData( localx , localy , result ) ;
|
||||
}
|
||||
}
|
||||
return(noErr);
|
||||
|
@@ -378,7 +378,11 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
|
||||
DisposeDrag(theDrag);
|
||||
gTrackingGlobals.m_currentSource = NULL ;
|
||||
|
||||
return wxDragCopy ;
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult dndresult = optionDown ? wxDragCopy : wxDragMove;
|
||||
return dndresult;
|
||||
}
|
||||
|
||||
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||
@@ -429,6 +433,12 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
DragAttributes attributes;
|
||||
GetDragAttributes(theDrag, &attributes);
|
||||
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
||||
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||
|
||||
switch(theMessage)
|
||||
{
|
||||
case kDragTrackingEnterHandler:
|
||||
@@ -447,6 +457,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
localMouse = mouse;
|
||||
GlobalToLocal(&localMouse);
|
||||
|
||||
|
||||
|
||||
// if (attributes & kDragHasLeftSenderWindow)
|
||||
{
|
||||
wxPoint point(localMouse.h , localMouse.v) ;
|
||||
@@ -478,14 +490,39 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
trackingGlobals->m_currentTargetWindow = win ;
|
||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||
{
|
||||
wxDragResult result = wxDragNone ;
|
||||
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
localx , localy , result ) ;
|
||||
}
|
||||
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
trackingGlobals->m_currentTarget->OnDragOver(
|
||||
localx , localy , result ) ;
|
||||
}
|
||||
}
|
||||
|
||||
// set cursor for OnEnter and OnDragOver
|
||||
if ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||
{
|
||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
||||
@@ -514,29 +551,6 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
}
|
||||
}
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
trackingGlobals->m_currentTarget->OnDragOver(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||
break;
|
||||
@@ -575,7 +589,11 @@ pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
|
||||
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
||||
if ( trackingGlobals->m_currentTarget->OnDrop( localx , localy ) )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->OnData( localx , localy , wxDragCopy ) ;
|
||||
KeyMap keymap;
|
||||
GetKeys((BigEndianLong*)&keymap);
|
||||
bool optionDown = keymap[1] & 4;
|
||||
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||
trackingGlobals->m_currentTarget->OnData( localx , localy , result ) ;
|
||||
}
|
||||
}
|
||||
return(noErr);
|
||||
|
Reference in New Issue
Block a user