fix for (MSLU?) BEGIN/ENDEDITLABEL in Unicode build
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14356 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -137,6 +137,57 @@ static void wxConvertFromMSWListItem(HWND hwndListCtrl,
|
|||||||
static void wxConvertToMSWListCol(int col, const wxListItem& item,
|
static void wxConvertToMSWListCol(int col, const wxListItem& item,
|
||||||
LV_COLUMN& lvCol);
|
LV_COLUMN& lvCol);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// private helper classes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// We have to handle both fooW and fooA notifications in several cases
|
||||||
|
// because of broken commctl.dll and/or unicows.dll. This class is used to
|
||||||
|
// convert LV_ITEMA and LV_ITEMW to LV_ITEM (which is either LV_ITEMA or
|
||||||
|
// LV_ITEMW depending on wxUSE_UNICODE setting), so that it can be processed
|
||||||
|
// by wxConvertToMSWListItem().
|
||||||
|
class wxLV_ITEM
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~wxLV_ITEM() { delete m_buf; }
|
||||||
|
operator LV_ITEM&() const { return *m_item; }
|
||||||
|
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wxLV_ITEM(LV_ITEMW &item) : m_buf(NULL), m_item(&item) {}
|
||||||
|
wxLV_ITEM(LV_ITEMA &item)
|
||||||
|
{
|
||||||
|
m_item = new LV_ITEM((LV_ITEM&)item);
|
||||||
|
if ( (item.mask & LVIF_TEXT) && item.pszText )
|
||||||
|
{
|
||||||
|
m_buf = new wxMB2WXbuf(wxConvLocal.cMB2WX(item.pszText));
|
||||||
|
m_item->pszText = (wxChar*)m_buf->data();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_buf = NULL;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
wxMB2WXbuf *m_buf;
|
||||||
|
|
||||||
|
#else
|
||||||
|
wxLV_ITEM(LV_ITEMW &item)
|
||||||
|
{
|
||||||
|
m_item = new LV_ITEM((LV_ITEM&)item);
|
||||||
|
if ( (item.mask & LVIF_TEXT) && item.pszText )
|
||||||
|
{
|
||||||
|
m_buf = new wxWC2WXbuf(wxConvLocal.cWC2WX(item.pszText));
|
||||||
|
m_item->pszText = (wxChar*)m_buf->data();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_buf = NULL;
|
||||||
|
}
|
||||||
|
wxLV_ITEM(LV_ITEMA &item) : m_buf(NULL), m_item(&item) {}
|
||||||
|
private:
|
||||||
|
wxWC2WXbuf *m_buf;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LV_ITEM *m_item;
|
||||||
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// events
|
// events
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -1620,11 +1671,46 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
event.m_pointDrag.y = nmLV->ptAction.y;
|
event.m_pointDrag.y = nmLV->ptAction.y;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LVN_BEGINLABELEDIT:
|
// NB: we have to handle both *A and *W versions here because some
|
||||||
|
// versions of comctl32.dll send ANSI message to an Unicode app
|
||||||
|
case LVN_BEGINLABELEDITA:
|
||||||
{
|
{
|
||||||
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
wxLV_ITEM item(((LV_DISPINFOA *)lParam)->item);
|
||||||
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
wxConvertFromMSWListItem(GetHwnd(), event.m_item, item);
|
||||||
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LVN_BEGINLABELEDITW:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
||||||
|
wxLV_ITEM item(((LV_DISPINFOW *)lParam)->item);
|
||||||
|
wxConvertFromMSWListItem(GetHwnd(), event.m_item, item);
|
||||||
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_ENDLABELEDITA:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
||||||
|
wxLV_ITEM item(((LV_DISPINFOA *)lParam)->item);
|
||||||
|
wxConvertFromMSWListItem(NULL, event.m_item, item);
|
||||||
|
if ( ((LV_ITEM)item).pszText == NULL ||
|
||||||
|
((LV_ITEM)item).iItem == -1 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LVN_ENDLABELEDITW:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
||||||
|
wxLV_ITEM item(((LV_DISPINFOW *)lParam)->item);
|
||||||
|
wxConvertFromMSWListItem(NULL, event.m_item, item);
|
||||||
|
if ( ((LV_ITEM)item).pszText == NULL ||
|
||||||
|
((LV_ITEM)item).iItem == -1 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
event.m_itemIndex = event.m_item.m_itemId;
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1653,18 +1739,6 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LVN_ENDLABELEDIT:
|
|
||||||
{
|
|
||||||
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
|
||||||
wxConvertFromMSWListItem(NULL, event.m_item, info->item);
|
|
||||||
if ( info->item.pszText == NULL || info->item.iItem == -1 )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
event.m_itemIndex = event.m_item.m_itemId;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_SETDISPINFO:
|
case LVN_SETDISPINFO:
|
||||||
{
|
{
|
||||||
eventType = wxEVT_COMMAND_LIST_SET_INFO;
|
eventType = wxEVT_COMMAND_LIST_SET_INFO;
|
||||||
@@ -1910,7 +1984,8 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case LVN_ENDLABELEDIT:
|
case LVN_ENDLABELEDITA:
|
||||||
|
case LVN_ENDLABELEDITW:
|
||||||
// logic here is inversed compared to all the other messages
|
// logic here is inversed compared to all the other messages
|
||||||
*result = event.IsAllowed();
|
*result = event.IsAllowed();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user