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:
Julian Smart
2003-06-01 12:41:00 +00:00
parent dab7302127
commit f43084de97
2 changed files with 100 additions and 64 deletions

View File

@@ -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);

View File

@@ -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);