From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Plugins/General/gen_tray/GEN_TRAY.sln | 30 + Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj | 296 ++++ .../General/gen_tray/GEN_TRAY.vcxproj.filters | 64 + Src/Plugins/General/gen_tray/RESOURCE.H | 66 + Src/Plugins/General/gen_tray/TRAYCTL.C | 1526 ++++++++++++++++++++ Src/Plugins/General/gen_tray/WINAMPCMD.H | 62 + Src/Plugins/General/gen_tray/api__gen_tray.h | 8 + Src/Plugins/General/gen_tray/gen_tray.rc | 178 +++ Src/Plugins/General/gen_tray/icons/compact.bmp | Bin 0 -> 126 bytes Src/Plugins/General/gen_tray/icons/icon1.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon2.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon3.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon4.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon5.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon7.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon8.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/icons/icon9.ico | Bin 0 -> 318 bytes Src/Plugins/General/gen_tray/version.rc2 | 39 + 18 files changed, 2269 insertions(+) create mode 100644 Src/Plugins/General/gen_tray/GEN_TRAY.sln create mode 100644 Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj create mode 100644 Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj.filters create mode 100644 Src/Plugins/General/gen_tray/RESOURCE.H create mode 100644 Src/Plugins/General/gen_tray/TRAYCTL.C create mode 100644 Src/Plugins/General/gen_tray/WINAMPCMD.H create mode 100644 Src/Plugins/General/gen_tray/api__gen_tray.h create mode 100644 Src/Plugins/General/gen_tray/gen_tray.rc create mode 100644 Src/Plugins/General/gen_tray/icons/compact.bmp create mode 100644 Src/Plugins/General/gen_tray/icons/icon1.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon2.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon3.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon4.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon5.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon7.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon8.ico create mode 100644 Src/Plugins/General/gen_tray/icons/icon9.ico create mode 100644 Src/Plugins/General/gen_tray/version.rc2 (limited to 'Src/Plugins/General/gen_tray') diff --git a/Src/Plugins/General/gen_tray/GEN_TRAY.sln b/Src/Plugins/General/gen_tray/GEN_TRAY.sln new file mode 100644 index 00000000..51910ecb --- /dev/null +++ b/Src/Plugins/General/gen_tray/GEN_TRAY.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29424.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_tray", "GEN_TRAY.vcxproj", "{DD15E699-90D2-4301-921A-7C2C48B25766}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DD15E699-90D2-4301-921A-7C2C48B25766}.Debug|Win32.ActiveCfg = Debug|Win32 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Debug|Win32.Build.0 = Debug|Win32 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Debug|x64.ActiveCfg = Debug|x64 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Debug|x64.Build.0 = Debug|x64 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Release|Win32.ActiveCfg = Release|Win32 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Release|Win32.Build.0 = Release|Win32 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Release|x64.ActiveCfg = Release|x64 + {DD15E699-90D2-4301-921A-7C2C48B25766}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9B581402-0754-4899-8AEE-E886596F3A19} + EndGlobalSection +EndGlobal diff --git a/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj b/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj new file mode 100644 index 00000000..b6287a69 --- /dev/null +++ b/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj @@ -0,0 +1,296 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + gen_tray + {DD15E699-90D2-4301-921A-7C2C48B25766} + gen_tray + 10.0.19041.0 + + + + DynamicLibrary + v142 + Unicode + + + DynamicLibrary + v142 + Unicode + + + DynamicLibrary + v142 + Unicode + + + DynamicLibrary + v142 + Unicode + + + + + + + + + + + + + + + + + + + false + $(PlatformShortName)_$(Configuration)\ + $(PlatformShortName)_$(Configuration)\ + $(IncludePath) + $(LibraryPath) + + + false + $(PlatformShortName)_$(Configuration)\ + $(PlatformShortName)_$(Configuration)\ + + + false + $(PlatformShortName)_$(Configuration)\ + $(PlatformShortName)_$(Configuration)\ + $(IncludePath) + $(LibraryPath) + true + + + false + $(PlatformShortName)_$(Configuration)\ + $(PlatformShortName)_$(Configuration)\ + + + false + + + Debug + + + Debug + + + + Disabled + .;..\..\..\Wasabi;%(AdditionalIncludeDirectories) + _WIN32_WINNT=0x0601;WINVER=0x0601;WIN32;_DEBUG;_WINDOWS;_USRDLL;GEN_TRAY_EXPORTS;UNICODE;%(PreprocessorDefinitions) + false + true + EnableFastChecks + MultiThreadedDebugDLL + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + ProgramDatabase + 4996;%(DisableSpecificWarnings) + true + true + + + _WIN32_WINNT=0x0601;WINVER=0x0601;_UNICODE;UNICODE;%(PreprocessorDefinitions) + 0x0409 + + + shlwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(IntDir)$(TargetName).pdb + false + $(IntDir)$(TargetName).lib + MachineX86 + false + %(AdditionalLibraryDirectories) + Windows + + + xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ +xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ + Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\' + + + + + Disabled + .;../Wasabi;%(AdditionalIncludeDirectories) + _WIN32_WINNT=0x0601;WINVER=0x0601;WIN64;_DEBUG;_WINDOWS;_USRDLL;GEN_TRAY_EXPORTS;UNICODE;%(PreprocessorDefinitions) + false + true + EnableFastChecks + MultiThreadedDebugDLL + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + ProgramDatabase + 4996;%(DisableSpecificWarnings) + true + true + + + _WIN32_WINNT=0x0601;WINVER=0x0601;_UNICODE;UNICODE;%(PreprocessorDefinitions) + 0x0409 + + + shlwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(IntDir)$(TargetName).pdb + false + $(IntDir)$(TargetName).lib + false + %(AdditionalLibraryDirectories) + Windows + + + xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ +xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ + Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\' + + + + + MinSpace + OnlyExplicitInline + Size + .;..\..\..\Wasabi;%(AdditionalIncludeDirectories) + _WIN32_WINNT=0x0601;WINVER=0x0601;WIN32;NDEBUG;_WINDOWS;_USRDLL;GEN_TRAY_EXPORTS;UNICODE;%(PreprocessorDefinitions) + true + true + MultiThreadedDLL + true + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + None + 4996;%(DisableSpecificWarnings) + true + + + _WIN32_WINNT=0x0601;WINVER=0x0601;_UNICODE;UNICODE;%(PreprocessorDefinitions) + 0x0409 + + + shlwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + false + $(IntDir)$(TargetName).pdb + true + true + false + $(IntDir)$(TargetName).lib + MachineX86 + false + %(AdditionalLibraryDirectories) + Windows + + + xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ + Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\' + + + + + MinSpace + OnlyExplicitInline + Size + .;..\..\..\Wasabi;%(AdditionalIncludeDirectories) + _WIN32_WINNT=0x0601;WINVER=0x0601;WIN64;NDEBUG;_WINDOWS;_USRDLL;GEN_TRAY_EXPORTS;UNICODE;%(PreprocessorDefinitions) + true + true + MultiThreadedDLL + true + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + None + 4996;%(DisableSpecificWarnings) + true + + + _WIN32_WINNT=0x0601;WINVER=0x0601;_UNICODE;UNICODE;%(PreprocessorDefinitions) + 0x0409 + + + shlwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + false + $(IntDir)$(TargetName).pdb + true + true + false + $(IntDir)$(TargetName).lib + false + %(AdditionalLibraryDirectories) + Windows + + + xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ + Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\' + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + {3e0bfa8a-b86a-42e9-a33f-ec294f823f7f} + + + + + + \ No newline at end of file diff --git a/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj.filters b/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj.filters new file mode 100644 index 00000000..40a2e389 --- /dev/null +++ b/Src/Plugins/General/gen_tray/GEN_TRAY.vcxproj.filters @@ -0,0 +1,64 @@ + + + + + Header Files + + + Header Files + + + Header Files + + + + + Image Files + + + Image Files + + + Image Files + + + Image Files + + + Image Files + + + Image Files + + + Image Files + + + Image Files + + + + + {96125085-f1a0-41bb-a9be-181833e83c26} + + + {79c08881-db4b-4236-bf7d-aedeb08c65b2} + + + {642a812f-646c-4a9b-ba39-93c8405dcf96} + + + {ec91a377-7c2d-47f3-8508-27f333a2c638} + + + + + Ressource Files + + + + + Source Files + + + \ No newline at end of file diff --git a/Src/Plugins/General/gen_tray/RESOURCE.H b/Src/Plugins/General/gen_tray/RESOURCE.H new file mode 100644 index 00000000..b0425e8b --- /dev/null +++ b/Src/Plugins/General/gen_tray/RESOURCE.H @@ -0,0 +1,66 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by SCRIPT1.RC +// +#define IDS_PREVIOUS_TRACK 0 +#define IDS_PLAY_PAUSE 1 +#define IDS_STOP 2 +#define IDC_APPLY 3 +#define IDS_NEXT_TRACK 3 +#define IDS_OPEN_FILE 4 +#define IDS_COMPACT_MODE 5 +#define IDS_DECREASE_VOLUME 6 +#define IDS_INCREASE_VOLUME 7 +#define IDS_HOLD_CTRL 8 +#define IDS_HOLD_SHIFT 9 +// #define IDS_WIN2K_PLUS 10 +#define IDS_CTRL_TO_DECREASE 11 +#define IDS_CTRL_TO_INCREASE 12 +#define IDS_STOPPED_STR 13 +#define IDS_PAUSED_STR 14 +#define IDS_DEFAULT_ICONS 15 +#define IDS_CUSTOM_ICON_PACK 16 +#define IDS_CONFIG_INFO 17 +#define IDS_OFD_FILTER_STR 18 +#define IDS_OFD_TITLE_STR 19 +#define IDS_STRING22 20 +#define IDS_GET_ICON_PACKS 21 +#define IDS_DO_YOU_ALSO_WANT_TO_REMOVE_SETTINGS 22 +#define IDD_DIALOG1 101 +#define IDD_DIALOG2 102 +#define IDI_ICON1 103 +#define IDI_ICON2 104 +#define IDI_ICON3 105 +#define IDI_ICON4 106 +#define IDI_ICON5 107 +#define IDI_ICON6 108 +#define IDI_ICON7 109 +#define IDI_ICON8 110 +#define IDB_BITMAP1 111 +#define IDC_ONOFF 1000 +#define IDC_PREV 1001 +#define IDC_PREV2 1002 +#define IDC_PREV3 1003 +#define IDC_PREV4 1004 +#define IDC_PREV5 1005 +#define IDC_PREV6 1006 +#define IDC_PREV7 1007 +#define IDC_PREV8 1008 +#define IDC_COMBO1 1009 +#define IDC_EDIT1 1010 +#define IDC_BUTTON1 1011 +#define ID_INFO 1012 +#define IDC_COMBO2 1013 +#define IDC_LINK 1014 +#define IDS_NULLSOFT_TRAY_CONTROL 65534 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 117 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1015 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Src/Plugins/General/gen_tray/TRAYCTL.C b/Src/Plugins/General/gen_tray/TRAYCTL.C new file mode 100644 index 00000000..43725e62 --- /dev/null +++ b/Src/Plugins/General/gen_tray/TRAYCTL.C @@ -0,0 +1,1526 @@ +#define PLUGIN_NAME L"Nullsoft Tray Control" +#define PLUGIN_VERSION L"2.49" + +// Winamp general purpose plug-in mini-SDK +// Copyright (C) 1997, Justin Frankel/Nullsoft +// Modifications and useability enhancements by DrO aka Darren Owen 2006-2014 +#include +#include +#include +#include "../winamp/gen.h" +#include "../winamp/wa_ipc.h" +#include "../winamp/ipc_pe.h" +#include "resource.h" +#include "winampcmd.h" +#include "api__gen_tray.h" +#include + + +#ifndef _DEBUG +BOOL WINAPI _DllMainCRTStartup(HINSTANCE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + DisableThreadLibraryCalls(hInst); + return TRUE; +} +#endif + + +#define NUM_ICONS 8 +#define FOURWAY_NUM 7 +#define SYSTRAY_ICON_BASE 1024 + +// used for Win7+ usage inorder to get the direct location of the icon instead of the prior hacks (thanks MS!) +typedef HRESULT (WINAPI *SHELL_NOTIFYICONGETRECT)(const NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation); +SHELL_NOTIFYICONGETRECT g_Shell_NotifyIconGetRect = 0; + +// Use a guid to uniquely identify our icon +class __declspec(uuid("B4E5FE9B-6A22-450e-9565-941EF50CFEEB")) CompactIcon; + + +// wasabi based services for localisation support +api_service *WASABI_API_SVC = 0; +api_language *WASABI_API_LNG = 0; +HINSTANCE WASABI_API_LNG_HINST = 0, WASABI_API_ORIG_HINST = 0; + +int config_enabled = 0, + xporhigher = 0, + custom_enabled = 0, + winver = 0, + flip = 0, + on = 1, + update_file = 0, + isX64 = 0, + no_uninstall = 1, + dlg_init = 0; + +UINT s_uTaskbarRestart=0; +HWND configwnd = 0; +WNDPROC lpWndProcOld = 0; +HICON Icons[NUM_ICONS] = {0}, dummyIcon = 0; +HBITMAP compact = 0; +fileinfo2W file = {0}; + +wchar_t ico_pack[MAX_PATH] = {0}, + ico_pack_base[MAX_PATH] = {0}, + ico_pack_safe[MAX_PATH] = {0}, + wa_path[MAX_PATH] = {0}, + *ini_file = 0, + szDescription[256] = {0}; + +int tips[NUM_ICONS] = { + IDS_PREVIOUS_TRACK, + IDS_PLAY_PAUSE, + IDS_STOP, + IDS_NEXT_TRACK, + IDS_OPEN_FILE, + IDS_COMPACT_MODE, + IDS_DECREASE_VOLUME, + IDS_INCREASE_VOLUME, +}; + +int tips_ex[NUM_ICONS] = { + IDS_HOLD_CTRL, + IDS_HOLD_CTRL, + IDS_HOLD_SHIFT, + -1, + -1, +// IDS_WIN2K_PLUS, + -1, + IDS_CTRL_TO_DECREASE, + IDS_CTRL_TO_INCREASE, +}; + +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK ConfigProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +HICON CreateInternalIcon(void); +int FileExists(char* filename); +void config(void); +void quit(void); +int init(void); +void config_write(); +void config_read(); + +extern "C" winampGeneralPurposePlugin plugin = +{ + GPPHDR_VER_U, + "nullsoft(gen_tray.dll)", + init, + config, + quit, +}; + +extern "C" __declspec(dllexport) winampGeneralPurposePlugin * winampGetGeneralPurposePlugin() { return &plugin; } + + +HWND GetPlaylistWnd(HWND winamp){ +HWND pl_wnd = 0; + + // get the playlist editor window (either v2.9x method or the older + // for compatibility incase < 2.9x are used + if(SendMessage(winamp,WM_WA_IPC,0,IPC_GETVERSION) >= 0x2900) + { + pl_wnd = (HWND)SendMessage(winamp,WM_WA_IPC,IPC_GETWND_PE,IPC_GETWND); + } + if(!pl_wnd) + { + pl_wnd = FindWindow(L"Winamp PE",0); + } + return pl_wnd; +} + +void FormCompactText(wchar_t* szTip, int szTipLength){ +int got = 0; + + // only update if we really have to (to better mimick Winamp's title behaviour, etc) + // otherwise we query in all cases which can often reflect what appears to be the wrong information since + // the current playlist entry is altered, etc on playlist modification hence an incorrect observation + if(!update_file){ + update_file = 1; + file.fileindex = (int)SendMessage(GetPlaylistWnd(plugin.hwndParent),WM_WA_IPC,IPC_PE_GETCURINDEX,0); + got = (int)SendMessage(GetPlaylistWnd(plugin.hwndParent),WM_WA_IPC,IPC_PE_GETINDEXTITLEW,(LPARAM)&file); + } + + // if it returns 0 then track information was received + if(!got && file.filetitle[0]){ + int time = (int)SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETOUTPUTTIME); + wchar_t buf[MAX_PATH*2] = {0}, temp[1024] = {0}, *t = temp, *p = 0; + int over = 0, state = 0, blah = 0; + wchar_t stateStr[32] = {0}; + + switch(SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_ISPLAYING)){ + case 0: + WASABI_API_LNGSTRINGW_BUF(IDS_STOPPED_STR,stateStr,32); + state = lstrlen(stateStr); + break; + case 3: + WASABI_API_LNGSTRINGW_BUF(IDS_PAUSED_STR,stateStr,32); + state = lstrlen(stateStr); + break; + } + + p = file.filetitle; + while(p && *p){ + *t++ = *p++; + if(*(p-1) == '&'){ + *t++ = '&'; + *t++ = '&'; + } + } + *t = 0; + + StringCchPrintf(buf,MAX_PATH*2,L"%d. %s",(file.fileindex)+1,file.filetitle); + over = lstrlen(buf); + if(over > szTipLength - 1){over = szTipLength - 1;} + lstrcpyn(szTip,buf,szTipLength); + + if(time != -1){ + time = time/1000; + + if(file.filelength[0]){ + StringCchPrintf(buf,MAX_PATH*2,L" [%02d:%02d/%s]",(time/60),time%60,file.filelength); + blah = lstrlen(buf); + } + else{ + StringCchPrintf(buf,MAX_PATH*2,L" [%02d:%02d]",(time/60),time%60); + blah = lstrlen(buf); + } + } + + if((over + blah + state) > szTipLength){ + int adj = szTipLength-blah-state-1; + szTip[adj] = 0; + szTip[adj-1] = L'.'; + szTip[adj-2] = L'.'; + szTip[adj-3] = L'.'; + } + + if(time != -1){ + StringCchCat(szTip,szTipLength,buf); + } + + if(state){ + StringCchCat(szTip,szTipLength,stateStr); + } + } + + // fall back to the Winamp version just incase + else{ + wchar_t temp[16] = {0}; + StringCchPrintf(temp,16,L"%X",SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETVERSION)); + StringCchPrintf(szTip,szTipLength,L"Winamp %c.%s",temp[0],&temp[2]); + } +} + +void free_icons(void){ +int i = 0; + for (i = 0; i < NUM_ICONS; i++) + { + if( Icons[i] ) { + DestroyIcon(Icons[i]); + Icons[i] = 0; + } + } + + if(dummyIcon) { + DestroyIcon(dummyIcon); + dummyIcon = 0; + } + + if(compact) { + DeleteObject(compact); + } +} + +void do_icons(int force) +{ + static int l=0; + int i=NUM_ICONS; + + if (l == config_enabled && !force) return; + + if( force ) free_icons(); + + while (i--) + { + if (l & (1<-1:i < NUM_ICONS); (xporhigher?i --:i ++)) + { + if (config_enabled & (1<