*** empty log message ***
[privoxy.git] / w32taskbar.c
diff --git a/w32taskbar.c b/w32taskbar.c
new file mode 100644 (file)
index 0000000..62f269d
--- /dev/null
@@ -0,0 +1,262 @@
+const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 1.1 2001/05/13 21:57:07 administrator Exp $";
+/*********************************************************************
+ *
+ * File        :  $Source: /home/administrator/cvs/ijb/w32taskbar.c,v $
+ *
+ * Purpose     :  Functions for creating, setting and destroying the
+ *                workspace tray icon
+ *
+ * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ *                IJBSWA team.  http://ijbswa.sourceforge.net
+ *
+ *                Written by and Copyright (C) 1999 Adam Lock
+ *                <locka@iol.ie>
+ *
+ *                This program is free software; you can redistribute it 
+ *                and/or modify it under the terms of the GNU General
+ *                Public License as published by the Free Software
+ *                Foundation; either version 2 of the License, or (at
+ *                your option) any later version.
+ *
+ *                This program is distributed in the hope that it will
+ *                be useful, but WITHOUT ANY WARRANTY; without even the
+ *                implied warranty of MERCHANTABILITY or FITNESS FOR A
+ *                PARTICULAR PURPOSE.  See the GNU General Public
+ *                License for more details.
+ *
+ *                The GNU General Public License should be included with
+ *                this file.  If not, you can view it at
+ *                http://www.gnu.org/copyleft/gpl.html
+ *                or write to the Free Software Foundation, Inc., 59
+ *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Revisions   :
+ *    $Log: w32taskbar.c,v $
+ *
+ *********************************************************************/
+\f
+
+#include "config.h"
+
+#include <stdio.h>
+
+#include <windows.h>
+
+#include "w32taskbar.h"
+#include "w32res.h"
+#include "w32log.h"
+
+const char w32taskbar_h_rcs[] = W32TASKBAR_H_VERSION;
+
+#define WM_TRAYMSG WM_USER+1
+
+static HMENU g_hmenuTray;
+static HWND g_hwndTrayX;
+
+static LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+
+
+/*********************************************************************
+ *
+ * Function    :  CreateTrayWindow
+ *
+ * Description :  Creates and returns the invisible window responsible for processing tray messages.
+ *
+ * Parameters  :
+ *          1  :  hInstance = instance handle of this application
+ *
+ * Returns     :  Handle of the systray window.
+ *
+ *********************************************************************/
+HWND CreateTrayWindow(HINSTANCE hInstance)
+{
+   WNDCLASS wc;
+   static const char *szWndName = "JunkbusterTrayWindow";
+
+   wc.style          = 0;
+   wc.lpfnWndProc    = TrayProc;
+   wc.cbClsExtra     = 0;
+   wc.cbWndExtra     = 0;
+   wc.hInstance      = hInstance;
+   wc.hIcon          = 0;
+   wc.hCursor        = 0;
+   wc.hbrBackground  = 0;
+   wc.lpszMenuName   = 0;
+   wc.lpszClassName  = szWndName;
+
+   RegisterClass(&wc);
+
+   g_hwndTrayX = CreateWindow(szWndName, szWndName,
+      WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+      CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
+
+   ShowWindow(g_hwndTrayX, SW_HIDE);
+   UpdateWindow(g_hwndTrayX);
+
+   g_hmenuTray = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_TRAYMENU));
+
+   return g_hwndTrayX;
+
+}
+
+
+/*********************************************************************
+ *
+ * Function    :  TraySetIcon
+ *
+ * Description :  Sets the tray icon to the specified shape.
+ *
+ * Parameters  :
+ *          1  :  hwnd = handle of the systray window
+ *          2  :  uID = user message number to notify systray window
+ *          3  :  hicon = set the current icon to this handle
+ *
+ * Returns     :  Same value as `Shell_NotifyIcon'.
+ *
+ *********************************************************************/
+BOOL TraySetIcon(HWND hwnd, UINT uID, HICON hicon)
+{
+   NOTIFYICONDATA nid;
+
+   memset(&nid, 0, sizeof(nid));
+
+   nid.cbSize = sizeof(nid);
+   nid.hWnd = hwnd;
+   nid.uID = uID;
+   nid.uFlags = NIF_ICON;
+   nid.uCallbackMessage = 0;
+   nid.hIcon = hicon;
+
+   return( Shell_NotifyIcon(NIM_MODIFY, &nid) );
+
+}
+
+
+/*********************************************************************
+ *
+ * Function    :  TrayAddIcon
+ *
+ * Description :  Adds a tray icon.
+ *
+ * Parameters  :
+ *          1  :  hwnd = handle of the systray window
+ *          2  :  uID = user message number to notify systray window
+ *          3  :  hicon = handle of icon to add to systray window
+ *          4  :  pszToolTip = tool tip when mouse hovers over systray window
+ *
+ * Returns     :  Same as `Shell_NotifyIcon'.
+ *
+ *********************************************************************/
+BOOL TrayAddIcon(HWND hwnd, UINT uID, HICON hicon, const char *pszToolTip)
+{
+   NOTIFYICONDATA nid;
+
+   memset(&nid, 0, sizeof(nid));
+
+   nid.cbSize = sizeof(nid);
+   nid.hWnd = hwnd;
+   nid.uID = uID;
+   nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
+   nid.uCallbackMessage = WM_TRAYMSG;
+   nid.hIcon = hicon;
+
+   if (pszToolTip)
+   {
+      strcpy(nid.szTip, pszToolTip);
+   }
+
+   return( Shell_NotifyIcon(NIM_ADD, &nid) );
+
+}
+
+
+/*********************************************************************
+ *
+ * Function    :  TrayDeleteIcon
+ *
+ * Description :  Deletes a tray icon.
+ *
+ * Parameters  :
+ *          1  :  hwnd = handle of the systray window
+ *          2  :  uID = user message number to notify systray window
+ *
+ * Returns     :  Same as `Shell_NotifyIcon'.
+ *
+ *********************************************************************/
+BOOL TrayDeleteIcon(HWND hwnd, UINT uID)
+{
+   NOTIFYICONDATA nid;
+
+   memset(&nid, 0, sizeof(nid));
+
+   nid.cbSize = sizeof(nid);
+   nid.hWnd = hwnd;
+   nid.uID = uID;
+
+   return( Shell_NotifyIcon(NIM_DELETE, &nid) );
+
+}
+
+
+/*********************************************************************
+ *
+ * Function    :  TrayProc
+ *
+ * Description :  Call back procedure processes tray messages.
+ *
+ * Parameters  :
+ *          1  :  hwnd = handle of the systray window
+ *          2  :  msg = message number
+ *          3  :  wParam = first param for this message
+ *          4  :  lParam = next param for this message
+ *
+ * Returns     :  Appropriate M$ window message handler codes.
+ *
+ *********************************************************************/
+LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+   switch (msg)
+   {
+      case WM_CREATE:
+         return 0;
+
+      case WM_CLOSE:
+         PostQuitMessage(0);
+         return 0;
+
+      case WM_TRAYMSG:
+      {
+         UINT uID = (UINT) wParam;
+         UINT uMouseMsg = (UINT) lParam;
+
+         if (uMouseMsg == WM_RBUTTONDOWN)
+         {
+            POINT pt;
+            HMENU hmenu = GetSubMenu(g_hmenuTray,0);
+            GetCursorPos(&pt);
+            SetForegroundWindow(g_hwndLogFrame);
+            TrackPopupMenu(hmenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, g_hwndLogFrame, NULL);
+            PostMessage(g_hwndLogFrame, WM_NULL, 0, 0 ) ;
+         }
+         else if (uMouseMsg == WM_LBUTTONDBLCLK)
+         {
+            ShowLogWindow(TRUE);
+         }
+      }
+      return 0;
+
+      default:
+         /* DO NOTHING */
+         break;
+   }
+
+   return DefWindowProc(hwnd, msg, wParam, lParam);
+
+}
+
+
+/*
+  Local Variables:
+  tab-width: 3
+  end:
+*/