Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
124
Src/Winamp/SYSTRAY.cpp
Normal file
124
Src/Winamp/SYSTRAY.cpp
Normal file
|
@ -0,0 +1,124 @@
|
|||
/** (c) Nullsoft, Inc. C O N F I D E N T I A L
|
||||
** Filename:
|
||||
** Project:
|
||||
** Description:
|
||||
** Author:
|
||||
** Created:
|
||||
**/
|
||||
|
||||
#include "Main.h"
|
||||
#include <stdarg.h>
|
||||
#include "strutil.h"
|
||||
|
||||
#define SYSTRAY_ICON 502
|
||||
#define SYSTRAY_WINDOW hMainWindow
|
||||
|
||||
int systray_intray = 0;
|
||||
|
||||
static BOOL systray_add(HWND hwnd, UINT uID, LPWSTR lpszTip);
|
||||
static BOOL systray_del(HWND hwnd, UINT uID);
|
||||
static BOOL systray_mod(HWND hwnd, UINT uID, LPWSTR lpszTip);
|
||||
static HICON hhIcon;
|
||||
static int hicon_index=-1;
|
||||
|
||||
void systray_minimize(wchar_t *tip)
|
||||
{
|
||||
extern int geticonid(int x);
|
||||
int newindex=geticonid(config_sticon);
|
||||
if (!SYSTRAY_WINDOW) return;
|
||||
if (!hhIcon || hicon_index != newindex) {
|
||||
if (hhIcon) {
|
||||
DestroyIcon(hhIcon);
|
||||
}
|
||||
if(newindex == -666) {
|
||||
wchar_t tmp[MAX_PATH] = {0};
|
||||
StringCchPrintfW(tmp,MAX_PATH,L"%s\\winamp.ico",CONFIGDIR);
|
||||
if(!PathFileExistsW(tmp)) {
|
||||
hhIcon = (HICON)LoadImageW(hMainInstance,MAKEINTRESOURCEW(ICON_XP),IMAGE_ICON,16,16,LR_SHARED);
|
||||
}
|
||||
else {
|
||||
hhIcon = (HICON)LoadImageW(0,tmp,IMAGE_ICON,16,16,LR_LOADFROMFILE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
hhIcon = (HICON)LoadImageW(hMainInstance,MAKEINTRESOURCEW(newindex),IMAGE_ICON,16,16,LR_SHARED);
|
||||
}
|
||||
}
|
||||
hicon_index=newindex;
|
||||
if (!systray_intray) {
|
||||
systray_add(SYSTRAY_WINDOW,SYSTRAY_ICON,tip);
|
||||
systray_intray = 1;
|
||||
}
|
||||
else {
|
||||
systray_mod(SYSTRAY_WINDOW,SYSTRAY_ICON,tip);
|
||||
}
|
||||
}
|
||||
|
||||
void systray_restore(void)
|
||||
{
|
||||
if (systray_intray) {
|
||||
systray_del(SYSTRAY_WINDOW,SYSTRAY_ICON);
|
||||
systray_intray = 0;
|
||||
if (hhIcon) {
|
||||
DestroyIcon(hhIcon);
|
||||
hhIcon=NULL;
|
||||
hicon_index=-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static BOOL systray_add(HWND hwnd, UINT uID, LPWSTR lpszTip)
|
||||
{
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = uID;
|
||||
tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
|
||||
tnid.uCallbackMessage = WM_WA_SYSTRAY;
|
||||
tnid.hIcon = hhIcon;
|
||||
mktipstr(tnid.szTip,lpszTip,sizeof(tnid.szTip)/sizeof(wchar_t));
|
||||
return Shell_NotifyIconW(NIM_ADD, &tnid);
|
||||
}
|
||||
|
||||
static BOOL systray_del(HWND hwnd, UINT uID)
|
||||
{
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = uID;
|
||||
return(Shell_NotifyIconW(NIM_DELETE, &tnid));
|
||||
}
|
||||
|
||||
static BOOL systray_mod(HWND hwnd, UINT uID, LPWSTR lpszTip)
|
||||
{
|
||||
NOTIFYICONDATAW tnid = {0};
|
||||
tnid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||
tnid.hWnd = hwnd;
|
||||
tnid.uID = uID;
|
||||
tnid.uFlags = NIF_TIP|NIF_ICON;
|
||||
tnid.hIcon = hhIcon;
|
||||
mktipstr(tnid.szTip,lpszTip,sizeof(tnid.szTip)/sizeof(wchar_t));
|
||||
return (Shell_NotifyIconW(NIM_MODIFY, &tnid));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue