From 5a754e4a418e767ea3355521fd04878197cfe7aa Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 19 Feb 2023 17:50:00 +0300 Subject: fixes #2357 (NewStory: links in log/history should be clickable) --- plugins/ExternalAPI/m_text.h | 19 ++++++++++++------- plugins/NewStory/src/history_control.cpp | 5 ++++- 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'plugins') diff --git a/plugins/ExternalAPI/m_text.h b/plugins/ExternalAPI/m_text.h index 0780b58bd1..2039de8ba1 100644 --- a/plugins/ExternalAPI/m_text.h +++ b/plugins/ExternalAPI/m_text.h @@ -8,8 +8,10 @@ #ifdef MTEXTCONTROL_EXPORTS #define MTEXTCONTROL_EXPORT __declspec(dllexport) + typedef struct TextObject *HText; #else #define MTEXTCONTROL_EXPORT __declspec(dllimport) + typedef HANDLE HText; #endif #define MTEXTCONTROL_DLL(T) MTEXTCONTROL_EXPORT T __stdcall @@ -47,29 +49,32 @@ enum MTEXTCONTROL_DLL(HANDLE) MTextRegister(const char *userTitle, DWORD options); // allocate text object (unicode) -MTEXTCONTROL_DLL(HANDLE) MTextCreateW(HANDLE userHandle, const char *szProto, const wchar_t *text); +MTEXTCONTROL_DLL(HText) MTextCreateW(HANDLE userHandle, const char *szProto, const wchar_t *text); // allocate text object (advanced) -MTEXTCONTROL_DLL(HANDLE) MTextCreateEx(HANDLE userHandle, void *text, DWORD flags); +MTEXTCONTROL_DLL(HText) MTextCreateEx(HANDLE userHandle, void *text, DWORD flags); // destroys text object -MTEXTCONTROL_DLL(int) MTextDestroy(HANDLE text); +MTEXTCONTROL_DLL(int) MTextDestroy(HText text); + +// activates text object +MTEXTCONTROL_DLL(int) MTextActivate(HText text, bool bActivate = true); // measures text object // result = 1 (success), 0 (failure) // sz->cx is interpreted as maximum width allowed. // wrapped text size is stored in sz, text -MTEXTCONTROL_DLL(int) MTextMeasure(HDC dc, SIZE *sz, HANDLE text); +MTEXTCONTROL_DLL(int) MTextMeasure(HDC dc, SIZE *sz, HText text); // display text object // result = 1 (success), 0 (failure) -MTEXTCONTROL_DLL(int) MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text); +MTEXTCONTROL_DLL(int) MTextDisplay(HDC dc, POINT pos, SIZE sz, HText text); // set parent window for text object (this is required for mouse handling, etc) -MTEXTCONTROL_DLL(int) MTextSetParent(HANDLE text, HWND hwnd); +MTEXTCONTROL_DLL(int) MTextSetParent(HText text, HWND hwnd); // send message to an object -MTEXTCONTROL_DLL(int) MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lParam); +MTEXTCONTROL_DLL(int) MTextSendMessage(HWND hwnd, HText text, UINT msg, WPARAM wParam, LPARAM lParam); #ifdef __cplusplus } diff --git a/plugins/NewStory/src/history_control.cpp b/plugins/NewStory/src/history_control.cpp index 2ce131b9a3..348f955c41 100644 --- a/plugins/NewStory/src/history_control.cpp +++ b/plugins/NewStory/src/history_control.cpp @@ -823,6 +823,9 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM if (data->caret != idx) data->EndEditItem(false); + auto *pItem = data->items[idx]; + MTextActivate(pItem->data, true); + if (wParam & MK_CONTROL) { SendMessage(hwnd, NSM_TOGGLEITEMS, idx, idx); SendMessage(hwnd, NSM_SETCARET, idx, TRUE); @@ -832,7 +835,6 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM SendMessage(hwnd, NSM_SETCARET, idx, TRUE); } else { - auto *pItem = data->items[idx]; pt.y -= pItem->savedTop; if (pItem->isLink(pt)) { Utils_OpenUrlW(pItem->getWBuf()); @@ -847,6 +849,7 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM SendMessage(hwnd, NSM_SELECTITEMS2, idx, idx); SendMessage(hwnd, NSM_SETCARET, idx, TRUE); } + MTextActivate(pItem->data, false); } SetFocus(hwnd); -- cgit v1.2.3