File is now ignored if _WIN_CONSOLE is defined.
[privoxy.git] / w32taskbar.c
1 const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 1.1.1.1 2001/05/15 13:59:08 oes Exp $";
2 /*********************************************************************
3  *
4  * File        :  $Source: /cvsroot/ijbswa/current/w32taskbar.c,v $
5  *
6  * Purpose     :  Functions for creating, setting and destroying the
7  *                workspace tray icon
8  *
9  * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
10  *                IJBSWA team.  http://ijbswa.sourceforge.net
11  *
12  *                Written by and Copyright (C) 1999 Adam Lock
13  *                <locka@iol.ie>
14  *
15  *                This program is free software; you can redistribute it 
16  *                and/or modify it under the terms of the GNU General
17  *                Public License as published by the Free Software
18  *                Foundation; either version 2 of the License, or (at
19  *                your option) any later version.
20  *
21  *                This program is distributed in the hope that it will
22  *                be useful, but WITHOUT ANY WARRANTY; without even the
23  *                implied warranty of MERCHANTABILITY or FITNESS FOR A
24  *                PARTICULAR PURPOSE.  See the GNU General Public
25  *                License for more details.
26  *
27  *                The GNU General Public License should be included with
28  *                this file.  If not, you can view it at
29  *                http://www.gnu.org/copyleft/gpl.html
30  *                or write to the Free Software Foundation, Inc., 59
31  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  *
33  * Revisions   :
34  *    $Log: w32taskbar.c,v $
35  *    Revision 1.1.1.1  2001/05/15 13:59:08  oes
36  *    Initial import of version 2.9.3 source tree
37  *
38  *
39  *********************************************************************/
40 \f
41
42 #include "config.h"
43
44 #include <stdio.h>
45
46 #include <windows.h>
47
48 #include "w32taskbar.h"
49 #include "w32res.h"
50 #include "w32log.h"
51
52 const char w32taskbar_h_rcs[] = W32TASKBAR_H_VERSION;
53 \r
54 #ifndef _WIN_CONSOLE /* entire file */\r
55
56 #define WM_TRAYMSG WM_USER+1
57
58 static HMENU g_hmenuTray;
59 static HWND g_hwndTrayX;
60
61 static LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
62
63
64 /*********************************************************************
65  *
66  * Function    :  CreateTrayWindow
67  *
68  * Description :  Creates and returns the invisible window responsible for processing tray messages.
69  *
70  * Parameters  :
71  *          1  :  hInstance = instance handle of this application
72  *
73  * Returns     :  Handle of the systray window.
74  *
75  *********************************************************************/
76 HWND CreateTrayWindow(HINSTANCE hInstance)
77 {
78    WNDCLASS wc;
79    static const char *szWndName = "JunkbusterTrayWindow";
80
81    wc.style          = 0;
82    wc.lpfnWndProc    = TrayProc;
83    wc.cbClsExtra     = 0;
84    wc.cbWndExtra     = 0;
85    wc.hInstance      = hInstance;
86    wc.hIcon          = 0;
87    wc.hCursor        = 0;
88    wc.hbrBackground  = 0;
89    wc.lpszMenuName   = 0;
90    wc.lpszClassName  = szWndName;
91
92    RegisterClass(&wc);
93
94    g_hwndTrayX = CreateWindow(szWndName, szWndName,
95       WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
96       CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
97
98    ShowWindow(g_hwndTrayX, SW_HIDE);
99    UpdateWindow(g_hwndTrayX);
100
101    g_hmenuTray = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_TRAYMENU));
102
103    return g_hwndTrayX;
104
105 }
106
107
108 /*********************************************************************
109  *
110  * Function    :  TraySetIcon
111  *
112  * Description :  Sets the tray icon to the specified shape.
113  *
114  * Parameters  :
115  *          1  :  hwnd = handle of the systray window
116  *          2  :  uID = user message number to notify systray window
117  *          3  :  hicon = set the current icon to this handle
118  *
119  * Returns     :  Same value as `Shell_NotifyIcon'.
120  *
121  *********************************************************************/
122 BOOL TraySetIcon(HWND hwnd, UINT uID, HICON hicon)
123 {
124    NOTIFYICONDATA nid;
125
126    memset(&nid, 0, sizeof(nid));
127
128    nid.cbSize = sizeof(nid);
129    nid.hWnd = hwnd;
130    nid.uID = uID;
131    nid.uFlags = NIF_ICON;
132    nid.uCallbackMessage = 0;
133    nid.hIcon = hicon;
134
135    return( Shell_NotifyIcon(NIM_MODIFY, &nid) );
136
137 }
138
139
140 /*********************************************************************
141  *
142  * Function    :  TrayAddIcon
143  *
144  * Description :  Adds a tray icon.
145  *
146  * Parameters  :
147  *          1  :  hwnd = handle of the systray window
148  *          2  :  uID = user message number to notify systray window
149  *          3  :  hicon = handle of icon to add to systray window
150  *          4  :  pszToolTip = tool tip when mouse hovers over systray window
151  *
152  * Returns     :  Same as `Shell_NotifyIcon'.
153  *
154  *********************************************************************/
155 BOOL TrayAddIcon(HWND hwnd, UINT uID, HICON hicon, const char *pszToolTip)
156 {
157    NOTIFYICONDATA nid;
158
159    memset(&nid, 0, sizeof(nid));
160
161    nid.cbSize = sizeof(nid);
162    nid.hWnd = hwnd;
163    nid.uID = uID;
164    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
165    nid.uCallbackMessage = WM_TRAYMSG;
166    nid.hIcon = hicon;
167
168    if (pszToolTip)
169    {
170       strcpy(nid.szTip, pszToolTip);
171    }
172
173    return( Shell_NotifyIcon(NIM_ADD, &nid) );
174
175 }
176
177
178 /*********************************************************************
179  *
180  * Function    :  TrayDeleteIcon
181  *
182  * Description :  Deletes a tray icon.
183  *
184  * Parameters  :
185  *          1  :  hwnd = handle of the systray window
186  *          2  :  uID = user message number to notify systray window
187  *
188  * Returns     :  Same as `Shell_NotifyIcon'.
189  *
190  *********************************************************************/
191 BOOL TrayDeleteIcon(HWND hwnd, UINT uID)
192 {
193    NOTIFYICONDATA nid;
194
195    memset(&nid, 0, sizeof(nid));
196
197    nid.cbSize = sizeof(nid);
198    nid.hWnd = hwnd;
199    nid.uID = uID;
200
201    return( Shell_NotifyIcon(NIM_DELETE, &nid) );
202
203 }
204
205
206 /*********************************************************************
207  *
208  * Function    :  TrayProc
209  *
210  * Description :  Call back procedure processes tray messages.
211  *
212  * Parameters  :
213  *          1  :  hwnd = handle of the systray window
214  *          2  :  msg = message number
215  *          3  :  wParam = first param for this message
216  *          4  :  lParam = next param for this message
217  *
218  * Returns     :  Appropriate M$ window message handler codes.
219  *
220  *********************************************************************/
221 LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
222 {
223    switch (msg)
224    {
225       case WM_CREATE:
226          return 0;
227
228       case WM_CLOSE:
229          PostQuitMessage(0);
230          return 0;
231
232       case WM_TRAYMSG:
233       {
234          UINT uID = (UINT) wParam;
235          UINT uMouseMsg = (UINT) lParam;
236
237          if (uMouseMsg == WM_RBUTTONDOWN)
238          {
239             POINT pt;
240             HMENU hmenu = GetSubMenu(g_hmenuTray,0);
241             GetCursorPos(&pt);
242             SetForegroundWindow(g_hwndLogFrame);
243             TrackPopupMenu(hmenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, g_hwndLogFrame, NULL);
244             PostMessage(g_hwndLogFrame, WM_NULL, 0, 0 ) ;
245          }
246          else if (uMouseMsg == WM_LBUTTONDBLCLK)
247          {
248             ShowLogWindow(TRUE);
249          }
250       }
251       return 0;
252
253       default:
254          /* DO NOTHING */
255          break;
256    }
257
258    return DefWindowProc(hwnd, msg, wParam, lParam);
259
260 }
261
262
263 #endif /* ndef _WIN_CONSOLE - entire file */\r
264 \r
265 /*
266   Local Variables:
267   tab-width: 3
268   end:
269 */