annotate foosdk/sdk/foobar2000/shared/systray.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "shared.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include <shellapi.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 void SHARED_EXPORT uFixAmpersandChars(const char * src,pfc::string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 while(*src)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 if (*src=='&')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 out.add_string("&&&");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 src++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 while(*src=='&')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 out.add_string("&&");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 src++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 else out.add_byte(*(src++));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 void SHARED_EXPORT uFixAmpersandChars_v2(const char * src,pfc::string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 while(*src)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 if (*src=='&')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 out.add_string("&&");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 src++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 else out.add_byte(*(src++));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 static BOOL run_action(DWORD action,NOTIFYICONDATA * data)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 if (Shell_NotifyIcon(action,data)) return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 if (action==NIM_MODIFY)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 if (Shell_NotifyIcon(NIM_ADD,data)) return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 extern "C"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 BOOL SHARED_EXPORT uShellNotifyIcon(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 NOTIFYICONDATA nid = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 nid.cbSize = sizeof(nid);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 nid.hWnd = wnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 nid.uID = id;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 nid.uFlags = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 if (callbackmsg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 nid.uFlags |= NIF_MESSAGE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 nid.uCallbackMessage = callbackmsg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 if (icon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 nid.uFlags |= NIF_ICON;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 nid.hIcon = icon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 if (tip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 nid.uFlags |= NIF_TIP;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 pfc::stringToBuffer(nid.szTip,pfc::stringcvt::string_os_from_utf8(tip));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 return run_action(action,&nid);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 BOOL SHARED_EXPORT uShellNotifyIconEx(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip,const char * balloon_title,const char * balloon_msg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 NOTIFYICONDATA nid = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 nid.cbSize = sizeof(nid);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 nid.hWnd = wnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 nid.uID = id;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 if (callbackmsg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 nid.uFlags |= NIF_MESSAGE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 nid.uCallbackMessage = callbackmsg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 if (icon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 nid.uFlags |= NIF_ICON;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 nid.hIcon = icon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 if (tip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 nid.uFlags |= NIF_TIP;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 pfc::stringToBuffer(nid.szTip,pfc::stringcvt::string_os_from_utf8(tip));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 nid.dwInfoFlags = NIIF_INFO | NIIF_NOSOUND;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 //if (balloon_title || balloon_msg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 nid.uFlags |= NIF_INFO;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 if (balloon_title) pfc::stringToBuffer(nid.szInfoTitle,pfc::stringcvt::string_os_from_utf8(balloon_title));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 if (balloon_msg) pfc::stringToBuffer(nid.szInfo,pfc::stringcvt::string_os_from_utf8(balloon_msg));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 return run_action(action,&nid);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 }//extern "C"