diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/main_wndproc.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Winamp/main_wndproc.cpp')
-rw-r--r-- | Src/Winamp/main_wndproc.cpp | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/Src/Winamp/main_wndproc.cpp b/Src/Winamp/main_wndproc.cpp new file mode 100644 index 00000000..5a868fc7 --- /dev/null +++ b/Src/Winamp/main_wndproc.cpp @@ -0,0 +1,253 @@ +/** (c) Nullsoft, Inc. C O N F I D E N T I A L + ** Filename: + ** Project: + ** Description: + ** Author: + ** Created: + **/ +#include "main.h" +#include "../nu/ns_wc.h" +#include "../nu/AutoChar.h" +#include "../nu/AutoWide.h" +#include "../nu/AutoWideFn.h" +#include "./api.h" +#include "resource.h" +#include "wintheme.h" + +// WM_CREATE handler +LRESULT Main_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) +{ + // srand(GetTickCount()); + hMainWindow = hwnd; + DisableVistaPreview(); + + HACCEL hAccel = LoadAcceleratorsW(language_pack_instance, MAKEINTRESOURCEW(IDR_ACCELERATOR_GLOBAL)); + if (!hAccel && language_pack_instance != hMainInstance) hAccel = LoadAcceleratorsW(hMainInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR_GLOBAL)); + if (hAccel) WASABI_API_APP->app_addAccelerators(hwnd, &hAccel, 1, TRANSLATE_MODE_GLOBAL); + + hAccel = LoadAcceleratorsW(language_pack_instance, MAKEINTRESOURCEW(IDR_ACCELERATOR_MAIN)); + if (!hAccel && language_pack_instance != hMainInstance) hAccel = LoadAcceleratorsW(hMainInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR_MAIN)); + if (hAccel) WASABI_API_APP->app_addAccelerators(hwnd, &hAccel, 1, TRANSLATE_MODE_NORMAL); + + WASABI_API_APP->app_registerGlobalWindow(hwnd); + + return 1; +} // Main_OnCreate() + +// Message sent from system notification area +LRESULT Main_OnWASystray(HWND hwnd, int id) +{ + POINT p; + switch (id) + { + case WM_LBUTTONUP: + if (GetAsyncKeyState(VK_CONTROL) & (1 << 15)) + SendMessageW(hwnd, WM_COMMAND, WINAMP_FILE_LOC, 0); + else if (GetAsyncKeyState(VK_SHIFT) & (1 << 15)) + SendMessageW(hwnd, WM_COMMAND, WINAMP_FILE_PLAY, 0); + else if (!IsWindowVisible(hwnd)) + { + ShowWindow(hwnd, SW_RESTORE); + ShowWindow(hwnd, SW_SHOW); + } + else SetForegroundWindow(hwnd); + + break; + case WM_RBUTTONUP: + GetCursorPos(&p); + SetForegroundWindow(hwnd); + //DoTrackPopup(main_menu, TPM_RIGHTBUTTON, p.x, p.y, hwnd); + TrackPopupMenu(main_menu, TPM_RIGHTBUTTON, p.x, p.y, 0, hwnd, NULL); + break; + } + return 1; +} + + +// WM_SIZE handler, to detect minizations. +LRESULT Main_OnSize(HWND hwnd, UINT state, int cx, int cy) +{ + + if (state == SIZE_MINIMIZED) + { + int q = GetAsyncKeyState(VK_SHIFT) >> 15; + if (config_taskbar || q || minimize_hack_winamp) ShowWindow(hwnd, SW_HIDE); + if (q || minimize_hack_winamp) + { + systray_minimize(caption); + config_minimized = 2; + } + else config_minimized = 1; + if (config_pe_open && hPLWindow){ + HWND parent = GetParent(GetParent(hPLWindow)); + if(IsWindow(parent) && IsWindowVisible(hPLWindow)){} + else ShowWindow(hPLWindow,SW_HIDE); + } + //if (config_mb_open&&hMBWindow) ShowWindow(hMBWindow,SW_HIDE); + if (config_eq_open && hEQWindow) ShowWindow(hEQWindow,SW_HIDE); + minimize_hack_winamp = 0; + } + else if (state == SIZE_RESTORED) + { + + if (config_minimized == 2 && !(config_taskbar == 1 || config_taskbar == 2)) + { + systray_restore(); + } + if (g_taskbar_dirty) + { + g_taskbar_dirty = 0; + set_taskbar(); + } + if (!IsWindowVisible(hwnd) && !deferring_show) ShowWindow(hwnd, SW_SHOWNA); + if (config_minimized) set_aot(0); + if (!config_mw_open) MoveOffscreen(hwnd); + config_minimized = 0; + SendMessageW(hwnd, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0); + if (!deferring_show) SetForegroundWindow(hwnd); + if (config_pe_open && hPLWindow) ShowWindow(hPLWindow, SW_SHOWNA); + //if (config_mb_open&&hMBWindow) ShowWindow(hMBWindow,SW_SHOWNA); + if (config_eq_open && hEQWindow) ShowWindow(hEQWindow,SW_SHOWNA); + if (config_video_open && hVideoWindow) ShowWindow(hVideoWindow, SW_SHOWNA); + set_aot(0); +// Browser_toggleVisible(1); + } + return 1; +} + + +// Sent by decode thread to let the main program know it's done +LRESULT Main_OnWAMPEGEOF(HWND hwnd) +{ + return PlayQueue_OnEOF(); +} + +// Drag&Drop handler +LRESULT Main_OnDropFiles(HWND hwnd, HDROP hdrop) +{ + wchar_t temp[MAX_PATH] = {0}; + int s = (GetAsyncKeyState(VK_SHIFT) & (1 << 15)) ? 0 : 1; + int y = DragQueryFileW(hdrop, 0xffffffff, temp, MAX_PATH); + if (s) + { + PlayList_delete(); + PlayList_randpos(0); + } + for (int x = 0; x < y; x ++) + { + DragQueryFileW(hdrop, x, temp, MAX_PATH); + + PlayList_appendthing(temp, 0, 0); + } + if (s) + BeginPlayback(); + + plEditRefresh(); + + return 1; +} + +LRESULT Main_OnCopyData(HWND sendingHWND, COPYDATASTRUCT *cds) +{ + switch (cds->dwData) + { + case IPC_SETSKIN: + if (cds->lpData && lstrlenA((char *)cds->lpData)) + { + AutoWide dataW((char*)cds->lpData); + if (_wcsicmp(config_skin, dataW)) + { + StringCchCopyW(config_skin, MAX_PATH, dataW); + } + SendMessageW(hMainWindow, WM_COMMAND, WINAMP_REFRESHSKIN, 0); + } + return TRUE; + case IPC_SETSKINW: + if (cds->lpData && lstrlenW((wchar_t*)cds->lpData)) + { + if (_wcsicmp(config_skin, (wchar_t*)cds->lpData)) + { + StringCchCopyW(config_skin, MAX_PATH, (wchar_t*)cds->lpData); + } + SendMessageW(hMainWindow, WM_COMMAND, WINAMP_REFRESHSKIN, 0); + } + return TRUE; + case IPC_CHDIR: + SetCurrentDirectoryA((char *) cds->lpData); + return TRUE; + case IPC_PLAYFILE: + { + char *filename = (char *)cds->lpData; + PlayList_appendthing(AutoWideFn(filename), 0, 0); + plEditRefresh(); + } + return TRUE; + case IPC_PLAYFILEW: + { + wchar_t *filename = (wchar_t *)cds->lpData; + PlayList_appendthing(filename, 0, 0); + plEditRefresh(); + } + return TRUE; + case IPC_GETMODULENAME: + { + char b[512] = {0}, b2[512] = {0}; + GetModuleFileNameA(hMainInstance, b, sizeof(b)); + GetShortPathNameA(b, b2, 511); + GetShortPathNameA((char *)cds->lpData, b, 511); + stat_isit = _stricmp(b, b2); + } + return TRUE; + case IPC_ADDBOOKMARK: + { + wchar_t* file = AutoWide((char *)cds->lpData); + Bookmark_additem(file, PlayList_gettitle(file, 1)); + } + return TRUE; + case IPC_ADDBOOKMARKW: + { + Bookmark_additem((wchar_t *)cds->lpData, PlayList_gettitle((const wchar_t *)cds->lpData, 1)); + } + return TRUE; + case IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE: + { + wchar_t *filename = (wchar_t *)cds->lpData; + wchar_t *tagname = filename + wcslen(filename) + 1; + + extendedFileInfoStructW info; + info.filename = filename; + info.metadata = tagname; + wchar_t ret[1024]=L""; + info.ret = ret; + info.retlen = 1024; + + if (0 == SendMessageW(hMainWindow, WM_WA_IPC, (WPARAM)&info, IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE)) + ret[0] = L'\0'; + + COPYDATASTRUCT answer; + answer.lpData = info.ret; + answer.cbData = sizeof(ret); + answer.dwData = IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE; + return SendMessageW(sendingHWND, WM_COPYDATA, (WPARAM)hMainWindow, (LPARAM)&answer); + } + case IPC_GET_PLAYING_FILENAME: + { + COPYDATASTRUCT answer; + answer.lpData = FileName; + answer.cbData = (DWORD)(sizeof(wchar_t) * (wcslen(FileName) + 1)); + answer.dwData = IPC_GET_PLAYING_FILENAME; + return SendMessageW(sendingHWND, WM_COPYDATA, (WPARAM)hMainWindow, (LPARAM)&answer); + } + case IPC_OPEN_URL: + { + myOpenURL(hMainWindow, (wchar_t *)cds->lpData); + return TRUE; + } + case IPC_HANDLE_URI: + { + HandleFilename((wchar_t *)cds->lpData); + return TRUE; + } + } + return FALSE; +}
\ No newline at end of file |