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