aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/main_wndproc.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/main_wndproc.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/main_wndproc.cpp')
-rw-r--r--Src/Winamp/main_wndproc.cpp253
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