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);
|
DisposeDrag(theDrag);
|
||||||
gTrackingGlobals.m_currentSource = NULL ;
|
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)
|
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||||
@@ -429,6 +433,12 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
DragAttributes attributes;
|
DragAttributes attributes;
|
||||||
GetDragAttributes(theDrag, &attributes);
|
GetDragAttributes(theDrag, &attributes);
|
||||||
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
||||||
|
|
||||||
|
KeyMap keymap;
|
||||||
|
GetKeys((BigEndianLong*)&keymap);
|
||||||
|
bool optionDown = keymap[1] & 4;
|
||||||
|
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||||
|
|
||||||
switch(theMessage)
|
switch(theMessage)
|
||||||
{
|
{
|
||||||
case kDragTrackingEnterHandler:
|
case kDragTrackingEnterHandler:
|
||||||
@@ -447,6 +457,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
localMouse = mouse;
|
localMouse = mouse;
|
||||||
GlobalToLocal(&localMouse);
|
GlobalToLocal(&localMouse);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (attributes & kDragHasLeftSenderWindow)
|
// if (attributes & kDragHasLeftSenderWindow)
|
||||||
{
|
{
|
||||||
wxPoint point(localMouse.h , localMouse.v) ;
|
wxPoint point(localMouse.h , localMouse.v) ;
|
||||||
@@ -478,14 +490,39 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
trackingGlobals->m_currentTargetWindow = win ;
|
trackingGlobals->m_currentTargetWindow = win ;
|
||||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||||
{
|
{
|
||||||
wxDragResult result = wxDragNone ;
|
|
||||||
if ( trackingGlobals->m_currentTarget )
|
if ( trackingGlobals->m_currentTarget )
|
||||||
{
|
{
|
||||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
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 && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||||
{
|
{
|
||||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( 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);
|
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||||
break;
|
break;
|
||||||
@@ -575,7 +589,11 @@ pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
|
|||||||
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
||||||
if ( trackingGlobals->m_currentTarget->OnDrop( 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);
|
return(noErr);
|
||||||
|
@@ -378,7 +378,11 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
|
|||||||
DisposeDrag(theDrag);
|
DisposeDrag(theDrag);
|
||||||
gTrackingGlobals.m_currentSource = NULL ;
|
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)
|
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||||
@@ -429,6 +433,12 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
DragAttributes attributes;
|
DragAttributes attributes;
|
||||||
GetDragAttributes(theDrag, &attributes);
|
GetDragAttributes(theDrag, &attributes);
|
||||||
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
|
||||||
|
|
||||||
|
KeyMap keymap;
|
||||||
|
GetKeys((BigEndianLong*)&keymap);
|
||||||
|
bool optionDown = keymap[1] & 4;
|
||||||
|
wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
|
||||||
|
|
||||||
switch(theMessage)
|
switch(theMessage)
|
||||||
{
|
{
|
||||||
case kDragTrackingEnterHandler:
|
case kDragTrackingEnterHandler:
|
||||||
@@ -447,6 +457,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
localMouse = mouse;
|
localMouse = mouse;
|
||||||
GlobalToLocal(&localMouse);
|
GlobalToLocal(&localMouse);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (attributes & kDragHasLeftSenderWindow)
|
// if (attributes & kDragHasLeftSenderWindow)
|
||||||
{
|
{
|
||||||
wxPoint point(localMouse.h , localMouse.v) ;
|
wxPoint point(localMouse.h , localMouse.v) ;
|
||||||
@@ -478,14 +490,39 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
trackingGlobals->m_currentTargetWindow = win ;
|
trackingGlobals->m_currentTargetWindow = win ;
|
||||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||||
{
|
{
|
||||||
wxDragResult result = wxDragNone ;
|
|
||||||
if ( trackingGlobals->m_currentTarget )
|
if ( trackingGlobals->m_currentTarget )
|
||||||
{
|
{
|
||||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
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 && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||||
{
|
{
|
||||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( 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);
|
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||||
break;
|
break;
|
||||||
@@ -575,7 +589,11 @@ pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
|
|||||||
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
|
||||||
if ( trackingGlobals->m_currentTarget->OnDrop( 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);
|
return(noErr);
|
||||||
|
Reference in New Issue
Block a user