1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-15 15:49:36 +02:00

ExtImport: Fix drag'n'drop Plugin reordering on Linux

wxCustomFindItem() function is now used only on Windows
where it is necessary, because wxListCtrl::HitTest() is
broken here.
This commit is contained in:
LRN1986 2010-04-24 13:18:59 +00:00
parent 6151d3d4e2
commit d01839c89d

View File

@ -651,41 +651,12 @@ wxDragResult ExtImportPrefsDropTarget::OnData(wxCoord x, wxCoord y,
return def; return def;
} }
bool ExtImportPrefsDropTarget::OnDrop(wxCoord x, wxCoord y) #if defined(__WXMSW__)
{
if (mPrefs == NULL)
return false;
wxListCtrl *PluginList = mPrefs->GetPluginList();
Grid *RuleTable = mPrefs->GetRuleTable();
if (mPrefs->GetDragFocus() == RuleTable)
{
if (RuleTable->YToRow (y -
RuleTable->GetColLabelSize ()) == wxNOT_FOUND)
return false;
}
else if (mPrefs->GetDragFocus() == PluginList)
{
long item = PluginList->FindItem (-1, wxPoint (x, y), 0);
if (item >= 0)
{
wxRect r;
PluginList->GetItemRect (item, r);
if (!r.Contains(x, y))
return false;
}
}
return true;
}
wxDragResult ExtImportPrefsDropTarget::OnEnter(wxCoord x, wxCoord y,
wxDragResult def)
{
return OnDragOver(x, y, def);
}
/* wxListCtrl::FindItem() in wxPoint()-taking mode works only for lists in /* wxListCtrl::FindItem() in wxPoint()-taking mode works only for lists in
* Small/Large-icon mode * Small/Large-icon mode
* wxListCtrl::HitTest() on Windows only hits item label rather than its whole
* row, which makes it difficult to drag over items with short or non-existent
* labels.
*/ */
long wxCustomFindItem(wxListCtrl *list, int x, int y) long wxCustomFindItem(wxListCtrl *list, int x, int y)
{ {
@ -701,6 +672,40 @@ long wxCustomFindItem(wxListCtrl *list, int x, int y)
} }
return -1; return -1;
} }
#endif
bool ExtImportPrefsDropTarget::OnDrop(wxCoord x, wxCoord y)
{
if (mPrefs == NULL)
return false;
wxListCtrl *PluginList = mPrefs->GetPluginList();
Grid *RuleTable = mPrefs->GetRuleTable();
if (mPrefs->GetDragFocus() == RuleTable)
{
if (RuleTable->YToRow (y -
RuleTable->GetColLabelSize ()) == wxNOT_FOUND)
return false;
}
else if (mPrefs->GetDragFocus() == PluginList)
{
#if defined(__WXMSW__)
long item = wxCustomFindItem (PluginList, x, y);
#else
int flags = 0;
long item = PluginList->HitTest (wxPoint (x, y), flags, NULL);
#endif
if (item < 0)
return false;
}
return true;
}
wxDragResult ExtImportPrefsDropTarget::OnEnter(wxCoord x, wxCoord y,
wxDragResult def)
{
return OnDragOver(x, y, def);
}
wxDragResult ExtImportPrefsDropTarget::OnDragOver(wxCoord x, wxCoord y, wxDragResult ExtImportPrefsDropTarget::OnDragOver(wxCoord x, wxCoord y,
wxDragResult def) wxDragResult def)
@ -728,9 +733,12 @@ wxDragResult ExtImportPrefsDropTarget::OnDragOver(wxCoord x, wxCoord y,
} }
else if (mPrefs->GetDragFocus() == PluginList) else if (mPrefs->GetDragFocus() == PluginList)
{ {
wxRect r; #if defined(__WXMSW__)
long item = wxCustomFindItem (PluginList, x, y); long item = wxCustomFindItem (PluginList, x, y);
#else
int flags = 0;
long item = PluginList->HitTest (wxPoint (x, y), flags, NULL);
#endif
if (item < 0) if (item < 0)
return wxDragNone; return wxDragNone;