mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-19 02:45:45 -04:00
Initial community commit
This commit is contained in:
76
Src/winampa/SYSTRAY.C
Normal file
76
Src/winampa/SYSTRAY.C
Normal file
@ -0,0 +1,76 @@
|
||||
#include "main.h"
|
||||
|
||||
#define SYSTRAY_ICON_BASE 1024
|
||||
|
||||
int ist = 0;
|
||||
|
||||
BOOL systray_isintray(void)
|
||||
{
|
||||
return ist;
|
||||
}
|
||||
|
||||
void CopyCharW(wchar_t *dest, const wchar_t *src)
|
||||
{
|
||||
wchar_t *end = CharNextW(src);
|
||||
int count = (int)(end-src);
|
||||
while (count--)
|
||||
{
|
||||
*dest++=*src++;
|
||||
}
|
||||
}
|
||||
|
||||
static void mktipstr(wchar_t *out, wchar_t *in, size_t outlen)
|
||||
{
|
||||
wchar_t *nextOut;
|
||||
size_t outpos=0;
|
||||
while (outpos < outlen-1 && *in)
|
||||
{
|
||||
if (*in == L'&')
|
||||
{
|
||||
if ((outpos+=2) >= outlen-1) break;
|
||||
*out++=L'&';
|
||||
*out++=L'&';
|
||||
}
|
||||
|
||||
CopyCharW(out, in);
|
||||
nextOut = CharNextW(out);
|
||||
in = CharNextW(in);
|
||||
outpos+=(nextOut-out);
|
||||
out=nextOut;
|
||||
}
|
||||
*out=0;
|
||||
}
|
||||
|
||||
BOOL systray_add(HWND hwnd, HICON hIcon, LPWSTR lpszTip)
|
||||
{
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = SYSTRAY_ICON_BASE;
|
||||
tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
|
||||
tnid.uCallbackMessage = WM_USER+8;
|
||||
tnid.hIcon = hIcon;
|
||||
mktipstr(tnid.szTip, lpszTip, sizeof(tnid.szTip)/sizeof(wchar_t));
|
||||
ist = 1;
|
||||
return Shell_NotifyIconW(NIM_ADD, &tnid);
|
||||
}
|
||||
|
||||
BOOL systray_mod(HWND hwnd, HICON hIcon, LPWSTR lpszTip) {
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = SYSTRAY_ICON_BASE;
|
||||
tnid.hIcon = hIcon;
|
||||
tnid.uFlags = (lpszTip ? NIF_TIP : 0) | (hIcon ? NIF_ICON : 0);
|
||||
if (lpszTip) mktipstr(tnid.szTip, lpszTip, sizeof(tnid.szTip)/sizeof(wchar_t));
|
||||
return (Shell_NotifyIconW(NIM_MODIFY, &tnid));
|
||||
}
|
||||
|
||||
BOOL systray_del(HWND hwnd) {
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = SYSTRAY_ICON_BASE;
|
||||
ist = 0;
|
||||
return(Shell_NotifyIconW(NIM_DELETE, &tnid));
|
||||
}
|
Reference in New Issue
Block a user