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:
|
||||||
@@ -446,6 +456,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
GetDragMouse(theDrag, &mouse, 0L);
|
GetDragMouse(theDrag, &mouse, 0L);
|
||||||
localMouse = mouse;
|
localMouse = mouse;
|
||||||
GlobalToLocal(&localMouse);
|
GlobalToLocal(&localMouse);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (attributes & kDragHasLeftSenderWindow)
|
// if (attributes & kDragHasLeftSenderWindow)
|
||||||
{
|
{
|
||||||
@@ -478,41 +490,14 @@ 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 ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
|
||||||
{
|
|
||||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
|
||||||
{
|
|
||||||
switch( result )
|
|
||||||
{
|
|
||||||
case wxDragCopy :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
case wxDragMove :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_ARROW) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
case wxDragNone :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( result != wxDragNone )
|
if ( result != wxDragNone )
|
||||||
{
|
{
|
||||||
@@ -533,9 +518,38 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
{
|
{
|
||||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||||
trackingGlobals->m_currentTarget->OnDragOver(
|
trackingGlobals->m_currentTarget->OnDragOver(
|
||||||
localx , localy , wxDragCopy ) ;
|
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 )
|
||||||
|
{
|
||||||
|
switch( result )
|
||||||
|
{
|
||||||
|
case wxDragCopy :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxDragMove :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_ARROW) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxDragNone :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// MyTrackItemUnderMouse(localMouse, theWindow);
|
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||||
@@ -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:
|
||||||
@@ -446,6 +456,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
GetDragMouse(theDrag, &mouse, 0L);
|
GetDragMouse(theDrag, &mouse, 0L);
|
||||||
localMouse = mouse;
|
localMouse = mouse;
|
||||||
GlobalToLocal(&localMouse);
|
GlobalToLocal(&localMouse);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (attributes & kDragHasLeftSenderWindow)
|
// if (attributes & kDragHasLeftSenderWindow)
|
||||||
{
|
{
|
||||||
@@ -478,41 +490,14 @@ 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 ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
|
||||||
{
|
|
||||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
|
||||||
{
|
|
||||||
switch( result )
|
|
||||||
{
|
|
||||||
case wxDragCopy :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
case wxDragMove :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_ARROW) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
case wxDragNone :
|
|
||||||
{
|
|
||||||
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
|
||||||
cursor.MacInstall() ;
|
|
||||||
}
|
|
||||||
break ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( result != wxDragNone )
|
if ( result != wxDragNone )
|
||||||
{
|
{
|
||||||
@@ -533,9 +518,38 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
|||||||
{
|
{
|
||||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||||
trackingGlobals->m_currentTarget->OnDragOver(
|
trackingGlobals->m_currentTarget->OnDragOver(
|
||||||
localx , localy , wxDragCopy ) ;
|
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 )
|
||||||
|
{
|
||||||
|
switch( result )
|
||||||
|
{
|
||||||
|
case wxDragCopy :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxDragMove :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_ARROW) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxDragNone :
|
||||||
|
{
|
||||||
|
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
||||||
|
cursor.MacInstall() ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// MyTrackItemUnderMouse(localMouse, theWindow);
|
// MyTrackItemUnderMouse(localMouse, theWindow);
|
||||||
@@ -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