#include "main.h" #include "api__ml_local.h" #include "resource.h" static WNDPROC PE_oldWndProc; static HMENU last_viewmenu = NULL; static WORD waCmdMenuID; static INT_PTR CALLBACK PE_newWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_COMMAND && wParam > 45000 && wParam < 57000) { int n = wParam - 45000; if (m_query_list[n]) { queryItem *item = m_query_list[n]; wchar_t configDir[MAX_PATH] = {0}; PathCombineW(configDir, g_viewsDir, item->metafn); C_Config viewconf(configDir); main_playQuery(&viewconf, item->query, 0, 0); return 0; } } else if (uMsg == WM_INITMENUPOPUP) { HMENU hmenuPopup = (HMENU) wParam; if (hmenuPopup == wa_playlists_cmdmenu) { if (!waCmdMenuID) { waCmdMenuID = (WORD)SendMessage(plugin.hwndWinampParent,WM_WA_IPC,0,IPC_REGISTER_LOWORD_COMMAND); } if (last_viewmenu) { RemoveMenu(wa_playlists_cmdmenu, waCmdMenuID, MF_BYCOMMAND); DestroyMenu(last_viewmenu); last_viewmenu = NULL; } mlGetTreeStruct mgts = { 1000, 45000, -1}; last_viewmenu = (HMENU)SendMessage(plugin.hwndLibraryParent, WM_ML_IPC, (WPARAM) & mgts, ML_IPC_GETTREE); if (last_viewmenu) { MENUITEMINFOW menuItem = {sizeof(MENUITEMINFOW), MIIM_SUBMENU | MIIM_ID | MIIM_TYPE, MFT_STRING, MFS_ENABLED, waCmdMenuID, last_viewmenu, NULL, NULL, NULL, WASABI_API_LNGSTRINGW(IDS_OPEN_MEDIA_LIBRARY_VIEW_RESULTS), 0}; if (GetMenuItemCount(last_viewmenu) > 0) { InsertMenuItemW(wa_playlists_cmdmenu, 1, TRUE, &menuItem); } else { DestroyMenu(last_viewmenu); last_viewmenu=0; } } } } return CallWindowProc(PE_oldWndProc, hwndDlg, uMsg, wParam, lParam); } static HWND hwnd_pe = NULL; void HookPlaylistEditor() { hwnd_pe = (HWND)SendMessage(plugin.hwndWinampParent, WM_WA_IPC, IPC_GETWND_PE, IPC_GETWND); if (IsWindow(hwnd_pe)) PE_oldWndProc = (WNDPROC) SetWindowLongPtrW(hwnd_pe, GWLP_WNDPROC, (LONG_PTR)PE_newWndProc); } void UnhookPlaylistEditor() { SetWindowLongPtrW(hwnd_pe, GWLP_WNDPROC, (LONG_PTR)PE_oldWndProc); }