aboutsummaryrefslogtreecommitdiff
path: root/Src/winampa/SYSTRAY.C
diff options
context:
space:
mode:
Diffstat (limited to 'Src/winampa/SYSTRAY.C')
-rw-r--r--Src/winampa/SYSTRAY.C76
1 files changed, 76 insertions, 0 deletions
diff --git a/Src/winampa/SYSTRAY.C b/Src/winampa/SYSTRAY.C
new file mode 100644
index 00000000..b8d0d464
--- /dev/null
+++ b/Src/winampa/SYSTRAY.C
@@ -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));
+} \ No newline at end of file