From 1d21cf23ef838c54a2f22cbe5fbac10d38d1f9cc Mon Sep 17 00:00:00 2001 From: George Hazan <ghazan@miranda.im> Date: Thu, 21 Feb 2019 19:40:10 +0300 Subject: fixes #1856 (when PpluginUpdater loads a plugin, it goes to Options -> Plugins unchecked) --- src/mir_app/src/pluginopts.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mir_app/src/pluginopts.cpp b/src/mir_app/src/pluginopts.cpp index 570a60d2d3..d7248a08b4 100644 --- a/src/mir_app/src/pluginopts.cpp +++ b/src/mir_app/src/pluginopts.cpp @@ -36,7 +36,7 @@ struct PluginListItemData { wchar_t fileName[MAX_PATH]; HINSTANCE hInst; - int flags, stdPlugin; + int flags, stdPlugin, iRow; bool bRequiresRestart, bWasLoaded, bWasChecked; wchar_t *author, *description, *copyright, *homepage; MUUID uuid; @@ -122,30 +122,31 @@ static BOOL dialogListPlugins(WIN32_FIND_DATA *fd, wchar_t *path, WPARAM, LPARAM CharLower(fd->cFileName); wcsncpy_s(dat->fileName, fd->cFileName, _TRUNCATE); - HWND hwndList = (HWND)lParam; + CCtrlListView *pCtrl = (CCtrlListView*)lParam; bool bNoCheckbox = (dat->flags & STATIC_PLUGIN) != 0; if (bNoCheckbox || hasMuuid(pIds, MIID_CLIST) || hasMuuid(pIds, MIID_SSL)) dat->bRequiresRestart = true; LVITEM it = { 0 }; // column 1: Checkbox + Unicode/ANSI icon + filename + it.iItem = dat->iRow = arPluginList.getCount(); it.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT; it.iImage = (dat->flags & UNICODE_AWARE) ? 0 : 1; it.pszText = fd->cFileName; it.lParam = (LPARAM)dat; - int iRow = ListView_InsertItem(hwndList, &it); + pCtrl->InsertItem(&it); if (bNoCheckbox) { - ListView_SetItemState(hwndList, iRow, 0x3000, LVIS_STATEIMAGEMASK); + pCtrl->SetItemState(dat->iRow, 0x3000, LVIS_STATEIMAGEMASK); } else if (isPluginOnWhiteList(fd->cFileName)) { if (!dat->bRequiresRestart) dat->bWasChecked = true; if (hInst) - ListView_SetItemState(hwndList, iRow, 0x2000, LVIS_STATEIMAGEMASK); + pCtrl->SetItemState(dat->iRow, 0x2000, LVIS_STATEIMAGEMASK); } - if (iRow != -1) { + if (dat->iRow != -1) { // column 2: plugin short name const PLUGININFOEX &ppi = ppb->getInfo(); dat->author = sttUtf8auto(ppi.author); @@ -159,7 +160,7 @@ static BOOL dialogListPlugins(WIN32_FIND_DATA *fd, wchar_t *path, WPARAM, LPARAM wchar_t *shortNameT = mir_a2u(ppi.shortName); if (shortNameT) { - ListView_SetItemText(hwndList, iRow, 1, shortNameT); + pCtrl->SetItemText(dat->iRow, 1, shortNameT); mir_free(shortNameT); } @@ -176,7 +177,7 @@ static BOOL dialogListPlugins(WIN32_FIND_DATA *fd, wchar_t *path, WPARAM, LPARAM } else mir_snwprintf(buf, L"%d.%d.%d.%d", HIBYTE(HIWORD(ppi.version)), LOBYTE(HIWORD(ppi.version)), HIBYTE(LOWORD(ppi.version)), LOBYTE(LOWORD(ppi.version))); - ListView_SetItemText(hwndList, iRow, 2, buf); + pCtrl->SetItemText(dat->iRow, 2, buf); arPluginList.insert(dat); } else mir_free(dat); @@ -312,11 +313,12 @@ public: // scan the plugin dir for plugins, cos arPluginList.destroy(); m_szFilter.Empty(); - enumPlugins(dialogListPlugins, (WPARAM)m_hwnd, (LPARAM)m_plugList.GetHwnd()); + enumPlugins(dialogListPlugins, (WPARAM)m_hwnd, (LPARAM)&m_plugList); for (auto &it : arPluginList) if (!it->bWasLoaded && it->bWasChecked && !it->hInst) - LoadPluginDynamically(it); + if (LoadPluginDynamically(it)) + m_plugList.SetItemState(it->iRow, 0x2000, LVIS_STATEIMAGEMASK); // sort out the headers m_plugList.SetColumnWidth(0, LVSCW_AUTOSIZE); // dll name -- cgit v1.2.3