@@ -13,145 +13,145 @@ static HWND hwnd;
13
13
static HMENU hmenu = NULL ;
14
14
15
15
static LRESULT CALLBACK _tray_wnd_proc (HWND hwnd , UINT msg , WPARAM wparam ,
16
- LPARAM lparam ) {
17
- switch (msg ) {
18
- case WM_CLOSE :
19
- DestroyWindow (hwnd );
20
- return 0 ;
21
- case WM_DESTROY :
22
- PostQuitMessage (0 );
23
- return 0 ;
24
- case WM_TRAY_CALLBACK_MESSAGE :
25
- if (lparam == WM_LBUTTONUP || lparam == WM_RBUTTONUP ) {
26
- POINT p ;
27
- GetCursorPos (& p );
28
- SetForegroundWindow (hwnd );
29
- WORD cmd = TrackPopupMenu (hmenu , TPM_LEFTALIGN | TPM_RIGHTBUTTON |
30
- TPM_RETURNCMD | TPM_NONOTIFY ,
31
- p .x , p .y , 0 , hwnd , NULL );
32
- SendMessage (hwnd , WM_COMMAND , cmd , 0 );
33
- return 0 ;
34
- }
35
- break ;
36
- case WM_COMMAND :
37
- if (wparam >= ID_TRAY_FIRST ) {
38
- MENUITEMINFO item = {
39
- .cbSize = sizeof (MENUITEMINFO ), .fMask = MIIM_ID | MIIM_DATA ,
40
- };
41
- if (GetMenuItemInfo (hmenu , wparam , FALSE, & item )) {
42
- struct tray_menu * menu = (struct tray_menu * )item .dwItemData ;
43
- if (menu != NULL && menu -> cb != NULL ) {
44
- menu -> cb (menu );
45
- }
46
- }
47
- return 0 ;
16
+ LPARAM lparam ) {
17
+ switch (msg ) {
18
+ case WM_CLOSE :
19
+ DestroyWindow (hwnd );
20
+ return 0 ;
21
+ case WM_DESTROY :
22
+ PostQuitMessage (0 );
23
+ return 0 ;
24
+ case WM_TRAY_CALLBACK_MESSAGE :
25
+ if (lparam == WM_LBUTTONUP || lparam == WM_RBUTTONUP ) {
26
+ POINT p ;
27
+ GetCursorPos (& p );
28
+ SetForegroundWindow (hwnd );
29
+ WORD cmd = TrackPopupMenu (hmenu , TPM_LEFTALIGN | TPM_RIGHTBUTTON |
30
+ TPM_RETURNCMD | TPM_NONOTIFY ,
31
+ p .x , p .y , 0 , hwnd , NULL );
32
+ SendMessage (hwnd , WM_COMMAND , cmd , 0 );
33
+ return 0 ;
34
+ }
35
+ break ;
36
+ case WM_COMMAND :
37
+ if (wparam >= ID_TRAY_FIRST ) {
38
+ MENUITEMINFO item = {
39
+ .cbSize = sizeof (MENUITEMINFO ), .fMask = MIIM_ID | MIIM_DATA ,
40
+ };
41
+ if (GetMenuItemInfo (hmenu , wparam , FALSE, & item )) {
42
+ struct tray_menu * menu = (struct tray_menu * )item .dwItemData ;
43
+ if (menu != NULL && menu -> cb != NULL ) {
44
+ menu -> cb (menu );
45
+ }
46
+ }
47
+ return 0 ;
48
+ }
49
+ break ;
48
50
}
49
- break ;
50
- }
51
- return DefWindowProc (hwnd , msg , wparam , lparam );
51
+ return DefWindowProc (hwnd , msg , wparam , lparam );
52
52
}
53
53
54
54
static HMENU _tray_menu (struct tray_menu * m , UINT * id ) {
55
- HMENU hmenu = CreatePopupMenu ();
56
- for (; m != NULL && m -> text != NULL ; m ++ , (* id )++ ) {
57
- if (strcmp (m -> text , "-" ) == 0 ) {
58
- InsertMenu (hmenu , * id , MF_SEPARATOR , TRUE, "" );
59
- } else {
60
- MENUITEMINFO item ;
61
- memset (& item , 0 , sizeof (item ));
62
- item .cbSize = sizeof (MENUITEMINFO );
63
- item .fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA ;
64
- item .fType = 0 ;
65
- item .fState = 0 ;
66
- if (m -> submenu != NULL ) {
67
- item .fMask = item .fMask | MIIM_SUBMENU ;
68
- item .hSubMenu = _tray_menu (m -> submenu , id );
69
- }
70
- if (m -> disabled ) {
71
- item .fState |= MFS_DISABLED ;
72
- }
73
- if (m -> checked ) {
74
- item .fState |= MFS_CHECKED ;
75
- }
76
- item .wID = * id ;
77
- item .dwTypeData = m -> text ;
78
- item .dwItemData = (ULONG_PTR )m ;
55
+ HMENU hmenu = CreatePopupMenu ();
56
+ for (; m != NULL && m -> text != NULL ; m ++ , (* id )++ ) {
57
+ if (strcmp (m -> text , "-" ) == 0 ) {
58
+ InsertMenu (hmenu , * id , MF_SEPARATOR , TRUE, "" );
59
+ } else {
60
+ MENUITEMINFO item ;
61
+ memset (& item , 0 , sizeof (item ));
62
+ item .cbSize = sizeof (MENUITEMINFO );
63
+ item .fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA ;
64
+ item .fType = 0 ;
65
+ item .fState = 0 ;
66
+ if (m -> submenu != NULL ) {
67
+ item .fMask = item .fMask | MIIM_SUBMENU ;
68
+ item .hSubMenu = _tray_menu (m -> submenu , id );
69
+ }
70
+ if (m -> disabled ) {
71
+ item .fState |= MFS_DISABLED ;
72
+ }
73
+ if (m -> checked ) {
74
+ item .fState |= MFS_CHECKED ;
75
+ }
76
+ item .wID = * id ;
77
+ item .dwTypeData = m -> text ;
78
+ item .dwItemData = (ULONG_PTR )m ;
79
79
80
- InsertMenuItem (hmenu , * id , TRUE, & item );
80
+ InsertMenuItem (hmenu , * id , TRUE, & item );
81
+ }
81
82
}
82
- }
83
- return hmenu ;
83
+ return hmenu ;
84
84
}
85
85
86
86
int tray_init (struct tray * tray ) {
87
- memset (& wc , 0 , sizeof (wc ));
88
- wc .cbSize = sizeof (WNDCLASSEX );
89
- wc .lpfnWndProc = _tray_wnd_proc ;
90
- wc .hInstance = GetModuleHandle (NULL );
91
- wc .lpszClassName = WC_TRAY_CLASS_NAME ;
92
- if (!RegisterClassEx (& wc )) {
93
- return -1 ;
94
- }
87
+ memset (& wc , 0 , sizeof (wc ));
88
+ wc .cbSize = sizeof (WNDCLASSEX );
89
+ wc .lpfnWndProc = _tray_wnd_proc ;
90
+ wc .hInstance = GetModuleHandle (NULL );
91
+ wc .lpszClassName = WC_TRAY_CLASS_NAME ;
92
+ if (!RegisterClassEx (& wc )) {
93
+ return -1 ;
94
+ }
95
95
96
- hwnd = CreateWindowEx (0 , WC_TRAY_CLASS_NAME , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
97
- if (hwnd == NULL ) {
98
- return -1 ;
99
- }
100
- UpdateWindow (hwnd );
96
+ hwnd = CreateWindowEx (0 , WC_TRAY_CLASS_NAME , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
97
+ if (hwnd == NULL ) {
98
+ return -1 ;
99
+ }
100
+ UpdateWindow (hwnd );
101
101
102
- memset (& nid , 0 , sizeof (nid ));
103
- nid .cbSize = sizeof (NOTIFYICONDATA );
104
- nid .hWnd = hwnd ;
105
- nid .uID = 0 ;
106
- nid .uFlags = NIF_ICON | NIF_MESSAGE ;
107
- nid .uCallbackMessage = WM_TRAY_CALLBACK_MESSAGE ;
108
- Shell_NotifyIcon (NIM_ADD , & nid );
102
+ memset (& nid , 0 , sizeof (nid ));
103
+ nid .cbSize = sizeof (NOTIFYICONDATA );
104
+ nid .hWnd = hwnd ;
105
+ nid .uID = 0 ;
106
+ nid .uFlags = NIF_ICON | NIF_MESSAGE ;
107
+ nid .uCallbackMessage = WM_TRAY_CALLBACK_MESSAGE ;
108
+ Shell_NotifyIcon (NIM_ADD , & nid );
109
109
110
- tray_update (tray );
111
- return 0 ;
110
+ tray_update (tray );
111
+ return 0 ;
112
112
}
113
113
114
114
int tray_loop (int blocking ) {
115
- MSG msg ;
116
- if (blocking ) {
117
- GetMessage (& msg , NULL , 0 , 0 );
118
- } else {
119
- PeekMessage (& msg , NULL , 0 , 0 , PM_REMOVE );
120
- }
121
- if (msg .message == WM_QUIT ) {
122
- return -1 ;
123
- }
124
- TranslateMessage (& msg );
125
- DispatchMessage (& msg );
126
- return 0 ;
115
+ MSG msg ;
116
+ if (blocking ) {
117
+ GetMessage (& msg , NULL , 0 , 0 );
118
+ } else {
119
+ PeekMessage (& msg , NULL , 0 , 0 , PM_REMOVE );
120
+ }
121
+ if (msg .message == WM_QUIT ) {
122
+ return -1 ;
123
+ }
124
+ TranslateMessage (& msg );
125
+ DispatchMessage (& msg );
126
+ return 0 ;
127
127
}
128
128
129
129
void tray_update (struct tray * tray ) {
130
- HMENU prevmenu = hmenu ;
131
- UINT id = ID_TRAY_FIRST ;
132
- hmenu = _tray_menu (tray -> menu , & id );
133
- SendMessage (hwnd , WM_INITMENUPOPUP , (WPARAM )hmenu , 0 );
134
- HICON icon ;
135
- ExtractIconEx (tray -> icon .data , 0 , NULL , & icon , 1 );
136
- if (nid .hIcon ) {
137
- DestroyIcon (nid .hIcon );
138
- }
139
- nid .hIcon = icon ;
140
- Shell_NotifyIcon (NIM_MODIFY , & nid );
130
+ HMENU prevmenu = hmenu ;
131
+ UINT id = ID_TRAY_FIRST ;
132
+ hmenu = _tray_menu (tray -> menu , & id );
133
+ SendMessage (hwnd , WM_INITMENUPOPUP , (WPARAM )hmenu , 0 );
134
+ HICON icon ;
135
+ ExtractIconEx (tray -> icon .data , 0 , NULL , & icon , 1 );
136
+ if (nid .hIcon ) {
137
+ DestroyIcon (nid .hIcon );
138
+ }
139
+ nid .hIcon = icon ;
140
+ Shell_NotifyIcon (NIM_MODIFY , & nid );
141
141
142
- if (prevmenu != NULL ) {
143
- DestroyMenu (prevmenu );
144
- }
142
+ if (prevmenu != NULL ) {
143
+ DestroyMenu (prevmenu );
144
+ }
145
145
}
146
146
147
147
void tray_exit () {
148
- Shell_NotifyIcon (NIM_DELETE , & nid );
149
- if (nid .hIcon != 0 ) {
150
- DestroyIcon (nid .hIcon );
151
- }
152
- if (hmenu != 0 ) {
153
- DestroyMenu (hmenu );
154
- }
155
- PostQuitMessage (0 );
156
- UnregisterClass (WC_TRAY_CLASS_NAME , GetModuleHandle (NULL ));
148
+ Shell_NotifyIcon (NIM_DELETE , & nid );
149
+ if (nid .hIcon != 0 ) {
150
+ DestroyIcon (nid .hIcon );
151
+ }
152
+ if (hmenu != 0 ) {
153
+ DestroyMenu (hmenu );
154
+ }
155
+ PostQuitMessage (0 );
156
+ UnregisterClass (WC_TRAY_CLASS_NAME , GetModuleHandle (NULL ));
157
157
}
0 commit comments