changeset 6084:9255ff99cb40

[gaim-migrate @ 6543] Systray code is now integrated into the docklet plugin committer: Tailor Script <tailor@pidgin.im>
author Herman Bloggs <hermanator12002@yahoo.com>
date Thu, 10 Jul 2003 23:53:40 +0000
parents 65fad4831077
children 862b1974a69a
files src/win32/systray.c src/win32/systray.h
diffstat 2 files changed, 0 insertions(+), 544 deletions(-) [+]
line wrap: on
line diff
--- a/src/win32/systray.c	Thu Jul 10 23:45:46 2003 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,513 +0,0 @@
-/*
- * gaim
- *
- * File: systray.c
- * Date: November, 2002
- * Description: Windows Gaim systray module
- * 
- * Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com>
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#include <windows.h>
-#include <gdk/gdkwin32.h>
-
-#include "internal.h"
-#include "gtkblist.h"
-#include "gtkprefs.h"
-#include "debug.h"
-
-#include "gaim.h"
-#include "ui.h"
-
-#include "resource.h"
-#include "MinimizeToTray.h"
-
-/*
- *  DEFINES, MACROS & DATA TYPES
- */
-#define GAIM_SYSTRAY_HINT _("Gaim Instant Messenger")
-#define GAIM_SYSTRAY_DISCONN_HINT _("Gaim Instant Messenger - Signed off")
-#define GAIM_SYSTRAY_AWAY_HINT _("Gaim Instant Messenger - Away")
-#define WM_TRAYMESSAGE WM_USER /* User defined WM Message */
-#define MAX_AWY_MESSAGES 50
-
-enum _SYSTRAY_STATE {
-	SYSTRAY_STATE_ONLINE,
-	SYSTRAY_STATE_ONLINE_CONNECTING,
-	SYSTRAY_STATE_OFFLINE,
-	SYSTRAY_STATE_OFFLINE_CONNECTING,
-	SYSTRAY_STATE_AWAY,
-	SYSTRAY_STATE_COUNT
-};
-typedef enum _SYSTRAY_STATE SYSTRAY_STATE;
-
-enum _SYSTRAY_CMND {
-	SYSTRAY_CMND_MENU_EXIT=100,
-	SYSTRAY_CMND_SIGNON,
-	SYSTRAY_CMND_SIGNOFF,
-	SYSTRAY_CMND_AUTOLOGIN,
-	SYSTRAY_CMND_PREFS,
-	SYSTRAY_CMND_BACK,
-	SYSTRAY_CMND_SET_AWY_NEW,
-	SYSTRAY_CMND_SET_AWY,
-	SYSTRAY_CMND_SET_AWY_LAST=SYSTRAY_CMND_SET_AWY+MAX_AWY_MESSAGES
-};
-typedef enum _SYSTRAY_CMND SYSTRAY_CMND;
-
-/*
- *  LOCALS
- */
-static HWND systray_hwnd=0;
-static HICON sysicon_disconn=0;
-static HICON sysicon_conn=0;
-static HICON sysicon_away=0;
-static NOTIFYICONDATA wgaim_nid;
-static SYSTRAY_STATE st_state=SYSTRAY_STATE_OFFLINE;
-static HMENU systray_menu=0;
-static HMENU systray_away_menu=0;
-
-/*
- *  GLOBALS
- */
-extern GtkWidget *imaway;
-
-/*
- *  PRIVATE CODE
- */
-
-/*
- * SYSTRAY HELPERS
- ********************/
-
-/* Returns 1 if menu item exists, 0 if not */
-static int IsMenuItem( HMENU hMenu, UINT id ) {
-	if(0xFFFFFFFF == GetMenuState(hMenu, id, MF_BYCOMMAND))
-		return 0;
-	else
-		return 1;
-}
-
-static int GetMenuItemPosition( HMENU hMenu, UINT id ) {
-	int count  = GetMenuItemCount(hMenu);
-	int i;
-
-	for(i=0;i<count;i++) {
-		if(GetMenuItemID(hMenu, i)==id)
-			return i;
-	}
-	return -1;
-}
-
-/*
- * WGAIM SYSTRAY GUI
- ********************/
-
-static HMENU systray_create_awy_menu(void) {
-	int item_count = SYSTRAY_CMND_SET_AWY;
-	struct away_message *a = NULL;
-	GSList *awy = away_messages;
-	char* locenc=NULL;
-
-	/* Delete previous away submenu */
-	if(systray_away_menu) {
-		DestroyMenu(systray_away_menu);
-		systray_away_menu = 0;
-	}		
-	systray_away_menu = CreatePopupMenu();
-	while (awy && (item_count <= SYSTRAY_CMND_SET_AWY+MAX_AWY_MESSAGES)) {
-		a = (struct away_message *)awy->data;
-		locenc = g_locale_from_utf8(a->name, -1, NULL, NULL, NULL);
-		AppendMenu(systray_away_menu, MF_STRING, item_count, locenc);
-		g_free(locenc);
-		awy = g_slist_next(awy);
-		item_count+=1;
-	}
-	AppendMenu(systray_away_menu, MF_SEPARATOR, 0, 0);
-	locenc = g_locale_from_utf8(_("New"), -1, NULL, NULL, NULL);
-	AppendMenu(systray_away_menu, MF_STRING, SYSTRAY_CMND_SET_AWY_NEW, locenc);
-	g_free(locenc);
-	return systray_away_menu;
-}
-
-static void systray_show_menu(int x, int y, BOOL connected) {
-	char* locenc=NULL;
-	/* need to call this so that the menu disappears if clicking outside
-           of the menu scope */
-	SetForegroundWindow(systray_hwnd);
-
-	/* in both connected and disconnected case delete away message menu */
-	if(systray_away_menu) {
-		if(!DeleteMenu(systray_menu, (UINT)systray_away_menu, MF_BYCOMMAND))
-			gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "Error using DeleteMenu\n");
-	}
-
-
-	/* Different menus depending on signed on/off state */
-	if(connected) {
-		/* If signoff item dosn't exist.. create it */
-		if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNOFF)) {
-			int pos;
-			DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNON, MF_BYCOMMAND);
-			locenc = g_locale_from_utf8(_("Signoff"), -1, NULL, NULL, NULL);
-			pos = GetMenuItemPosition(systray_menu, SYSTRAY_CMND_MENU_EXIT) - 1;
-			if(!InsertMenu(systray_menu, pos, 
-				       MF_BYPOSITION | MF_STRING, SYSTRAY_CMND_SIGNOFF, locenc))
-				gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "InsertMenu failed: %s\n", GetLastError());
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "Inserted Menu with ID: %d\n", SYSTRAY_CMND_SIGNOFF);
-			g_free(locenc);
-		}
-		locenc = g_locale_from_utf8(_("Set Away Message"), -1, NULL, NULL, NULL);
-		InsertMenu(systray_menu, SYSTRAY_CMND_PREFS, 
-			   MF_BYCOMMAND | MF_POPUP | MF_STRING, (UINT)systray_create_awy_menu(),
-			   locenc);
-		g_free(locenc);
-		EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_GRAYED);
-		/* If away, put "I'm Back" option in menu */
-		if(st_state == SYSTRAY_STATE_AWAY) {
-			if(!IsMenuItem(systray_menu, SYSTRAY_CMND_BACK)) {
-				locenc = g_locale_from_utf8(_("I'm Back"), -1, NULL, NULL, NULL);
-				InsertMenu(systray_menu, (UINT)systray_away_menu, 
-					   MF_BYCOMMAND | MF_STRING, SYSTRAY_CMND_BACK,
-					   locenc);
-				g_free(locenc);
-			}
-		} else {
-			/* Delete I'm Back item if it exists */
-			DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
-		}
-	} else {
-		/* If signon item dosn't exist.. create it */
-		if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNON)) {
-			int pos;
-			DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNOFF, MF_BYCOMMAND);
-			locenc = g_locale_from_utf8(_("Sign On"), -1, NULL, NULL, NULL);
-			pos = GetMenuItemPosition(systray_menu, SYSTRAY_CMND_MENU_EXIT) - 1;
-			if(!InsertMenu(systray_menu, pos, 
-				       MF_BYPOSITION | MF_STRING, SYSTRAY_CMND_SIGNON, locenc))
-				gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "InsertMenu failed: %s\n", GetLastError());
-			g_free(locenc);
-		}
-		EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_ENABLED);
-		EnableMenuItem(systray_menu, (UINT)systray_away_menu, MF_GRAYED);
-		/* Delete I'm Back item if it exists */
-		DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
-	}
-
-	TrackPopupMenu(systray_menu,         // handle to shortcut menu
-		       TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
-		       x,                   // horizontal position, in screen coordinates
-		       y,                   // vertical position, in screen coordinates
-		       0,                   // reserved, must be zero
-		       systray_hwnd,        // handle to owner window
-		       NULL                 // ignored
-		       );
-}
-
-/* Set nth away message from away_messages list */
-static void systray_set_away(int nth) {
-	int item_count = 0;
-	GSList *awy = away_messages;
-	struct away_message *a = NULL;
-
-	while (awy && (item_count != nth)) {
-		awy = g_slist_next(awy);
-		item_count+=1;
-	}
-	if(awy) {
-		a = (struct away_message *)awy->data;
-		do_away_message(NULL, a);
-	}
-}
-
-static LRESULT CALLBACK systray_mainmsg_handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
-	static UINT taskbarRestartMsg; /* static here means value is kept across multiple calls to this func */
-
-	switch(msg) {
-	case WM_CREATE:
-		gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "WM_CREATE\n");
-		taskbarRestartMsg = RegisterWindowMessage("TaskbarCreated");
-		break;
-		
-	case WM_TIMER:
-		gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "WM_TIMER\n");
-		break;
-
-	case WM_DESTROY:
-		gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "WM_DESTROY\n");
-		break;
-
-	case WM_COMMAND:
-		gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "WM_COMMAND\n");
-		switch(LOWORD(wparam)) {
-		case SYSTRAY_CMND_MENU_EXIT:
-			do_quit();
-			break;
-		case SYSTRAY_CMND_SIGNON:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "signon\n");
-			show_login();
-			break;
-		case SYSTRAY_CMND_SIGNOFF:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "signoff\n");
-			gaim_connections_disconnect_all();
-			break;
-		case SYSTRAY_CMND_AUTOLOGIN:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "autologin\n");
-			gaim_accounts_auto_login(GAIM_GTK_UI);
-			break;
-		case SYSTRAY_CMND_PREFS:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "Prefs\n");
-			gaim_gtk_prefs_show();
-			break;
-		case SYSTRAY_CMND_BACK:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "I'm back\n");
-			do_im_back(NULL, NULL);
-			break;
-		case SYSTRAY_CMND_SET_AWY_NEW:
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "New away item\n");
-			create_away_mess(NULL, NULL);
-			break;
-		default:
-			/* SYSTRAY_CMND_SET_AWY */
-			if((LOWORD(wparam) >= SYSTRAY_CMND_SET_AWY) &&
-			   (LOWORD(wparam) <= (SYSTRAY_CMND_SET_AWY + MAX_AWY_MESSAGES))) {
-				gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "Set away message\n");
-				systray_set_away(LOWORD(wparam)-SYSTRAY_CMND_SET_AWY);
-			}
-		}
-		break;
-	case WM_TRAYMESSAGE:
-	{
-		if( lparam == WM_LBUTTONDBLCLK ) {
-			/* Double Click */
-			/* Either hide or show current window (login or buddy) */
-			gaim_gtk_blist_docklet_toggle();
-			gaim_debug(GAIM_DEBUG_INFO, "wgaim_systray", "Systray got double click\n");
-		}
-		if( lparam == WM_RBUTTONUP ) {
-			/* Right Click */
-			POINT mpoint;
-			GetCursorPos(&mpoint);
-
-			switch(st_state) {
-			case SYSTRAY_STATE_OFFLINE:
-			case SYSTRAY_STATE_OFFLINE_CONNECTING:
-				systray_show_menu(mpoint.x, mpoint.y, 0);
-				break;
-			default:
-				systray_show_menu(mpoint.x, mpoint.y, 1);
-			}
-		}
-		break;
-	}
-	default: 
-		if (msg == taskbarRestartMsg) {
-			/* explorer crashed and left us hanging... 
-			   This will put the systray icon back in it's place, when it restarts */
-			Shell_NotifyIcon(NIM_ADD,&wgaim_nid);
-		}
-		break;
-	}/* end switch */
-
-	return DefWindowProc(hwnd, msg, wparam, lparam);
-}
-
-/* Create hidden window to process systray messages */
-static HWND systray_create_hiddenwin() {
-	WNDCLASSEX wcex;
-	TCHAR wname[32];
-
-	strcpy(wname, "GaimWin");
-
-	wcex.cbSize = sizeof(WNDCLASSEX);
-
-	wcex.style	        = 0;
-	wcex.lpfnWndProc	= (WNDPROC)systray_mainmsg_handler;
-	wcex.cbClsExtra		= 0;
-	wcex.cbWndExtra		= 0;
-	wcex.hInstance		= wgaim_hinstance();
-	wcex.hIcon		= NULL;
-	wcex.hCursor		= NULL,
-	wcex.hbrBackground	= NULL;
-	wcex.lpszMenuName	= NULL;
-	wcex.lpszClassName	= wname;
-	wcex.hIconSm		= NULL;
-
-	RegisterClassEx(&wcex);
-
-	// Create the window
-	return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, wgaim_hinstance(), 0));
-}
-
-static void systray_create_menu(void) {
-	char* locenc=NULL;
-
-	/* create popup menu */
-	if((systray_menu = CreatePopupMenu())) {
-		if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_PREFS, 
-			       (locenc=g_locale_from_utf8(_("Preferences"), -1, NULL, NULL, NULL))))
-			gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "AppendMenu error: %ld\n", GetLastError());
-		g_free(locenc);
-		if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_AUTOLOGIN, 
-			       (locenc=g_locale_from_utf8(_("Auto-login"), -1, NULL, NULL, NULL))))
-			gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "AppendMenu error: %ld\n", GetLastError());
-		g_free(locenc);
-		if(!AppendMenu(systray_menu, MF_SEPARATOR, 0, 0))
-			gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "AppendMenu error: %ld\n", GetLastError());
-		if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_MENU_EXIT,
-			       (locenc=g_locale_from_utf8(_("Exit"), -1, NULL, NULL, NULL))))
-			gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "AppendMenu error: %ld\n", GetLastError());
-		g_free(locenc);
-	} else
-		gaim_debug(GAIM_DEBUG_ERROR, "wgaim_systray", "CreatePopupMenu error: %ld\n", GetLastError());
-}
-
-static void systray_init_icon(HWND hWnd, HICON icon) {
-	char* locenc=NULL;
-
-	ZeroMemory(&wgaim_nid,sizeof(wgaim_nid));
-	wgaim_nid.cbSize=sizeof(NOTIFYICONDATA);
-	wgaim_nid.hWnd=hWnd;
-	wgaim_nid.uID=0;
-	wgaim_nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
-	wgaim_nid.uCallbackMessage=WM_TRAYMESSAGE;
-	wgaim_nid.hIcon=icon;
-	locenc=g_locale_from_utf8(GAIM_SYSTRAY_DISCONN_HINT, -1, NULL, NULL, NULL);
-	strcpy(wgaim_nid.szTip, locenc);
-	g_free(locenc);
-	Shell_NotifyIcon(NIM_ADD,&wgaim_nid);
-}
-
-static void systray_change_icon(HICON icon, char* text) {
-	char *locenc=NULL;
-	wgaim_nid.hIcon = icon;
-	locenc = g_locale_from_utf8(text, -1, NULL, NULL, NULL);
-	lstrcpy(wgaim_nid.szTip, locenc);
-	g_free(locenc);
-	Shell_NotifyIcon(NIM_MODIFY,&wgaim_nid);
-}
-
-static void systray_remove_nid(void) {
-	Shell_NotifyIcon(NIM_DELETE,&wgaim_nid);
-}
-
-static void systray_update_icon() {
-	switch(st_state) {
-	case SYSTRAY_STATE_ONLINE:
-		systray_change_icon(sysicon_conn, GAIM_SYSTRAY_HINT);
-		break;
-	case SYSTRAY_STATE_ONLINE_CONNECTING:
-	case SYSTRAY_STATE_OFFLINE_CONNECTING:
-		break;
-	case SYSTRAY_STATE_OFFLINE:
-		systray_change_icon(sysicon_disconn, GAIM_SYSTRAY_DISCONN_HINT);
-		break;
-	case SYSTRAY_STATE_AWAY:
-		systray_change_icon(sysicon_away, GAIM_SYSTRAY_AWAY_HINT);
-		break;
-	case SYSTRAY_STATE_COUNT: /* not a state, here to avoid warning */
-	default:
-	}
-}
-
-static void systray_update_status() {
-	SYSTRAY_STATE old_state = st_state;
-
-	if(gaim_connections_get_all()) {
-		if(awaymessage) {
-			st_state = SYSTRAY_STATE_AWAY;
-		} else if(gaim_connections_get_connecting()) {
-			st_state = SYSTRAY_STATE_ONLINE_CONNECTING;
-		} else {
-			st_state = SYSTRAY_STATE_ONLINE;
-		}
-	} else {
-		if(gaim_connections_get_connecting()) {
-			st_state = SYSTRAY_STATE_OFFLINE_CONNECTING;
-		} else {
-			st_state = SYSTRAY_STATE_OFFLINE;
-		}
-	}
-	if(st_state != old_state) {
-		systray_update_icon();
-	}
-}
-
-/*
- * GAIM EVENT CALLBACKS
- ***********************/
-
-static void st_signon(GaimConnection *gc, void *data) {
-	systray_update_status();
-}
-
-static void st_signoff(GaimConnection *gc, void *data) {
-	systray_update_status();
-}
-
-static void st_away(GaimConnection *gc, void *data) {
-	systray_update_status();
-}
-
-static void st_back(GaimConnection *gc, void *data) {
-	systray_update_status();
-}
-
-/*
- *  PUBLIC CODE
- */
-
-/* Create a hidden window and associate it with the systray icon.
-   We use this hidden window to proccess WM_TRAYMESSAGE msgs. */
-void wgaim_systray_init(void) {
-	gaim_gtk_blist_docklet_add();
-
-	/* dummy window to process systray messages */
-	systray_hwnd = systray_create_hiddenwin();
-
-	systray_create_menu();
-
-	/* Load icons, and init systray notify icon */
-	sysicon_disconn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
-	sysicon_conn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
-	sysicon_away = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
-
-	/* Create icon in systray */
-	systray_init_icon(systray_hwnd, sysicon_disconn);
-
-	/* Register Gaim event callbacks */
-	gaim_signal_connect(NULL, event_signon, st_signon, NULL);
-	gaim_signal_connect(NULL, event_signoff, st_signoff, NULL);
-	gaim_signal_connect(NULL, event_away, st_away, NULL);
-	gaim_signal_connect(NULL, event_back, st_back, NULL);
-	/*gaim_signal_connect(NULL, event_connecting, wgaim_st_connecting, NULL);
-	  gaim_signal_connect(NULL, event_im_displayed_rcvd, wgaim_st_im_displayed_recv, NULL);*/
-}
-
-void wgaim_systray_cleanup(void) {
-	/*gaim_gtk_blist_docklet_remove();*/
-	systray_remove_nid();
-	DestroyMenu(systray_menu);
-	DestroyWindow(systray_hwnd);
-}
-
-void wgaim_systray_minimize( GtkWidget *window ) {
-	MinimizeWndToTray(GDK_WINDOW_HWND(window->window));
-}
-
-void wgaim_systray_maximize( GtkWidget *window ) {
-	RestoreWndFromTray(GDK_WINDOW_HWND(window->window));
-}
--- a/src/win32/systray.h	Thu Jul 10 23:45:46 2003 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * gaim
- *
- * File: systray.h
- *
- * Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com>
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#ifndef _SYSTRAY_H_
-#define _SYSTRAY_H_
-
-extern void wgaim_systray_init(void);
-extern void wgaim_created_loginwin( GtkWidget* );
-extern void wgaim_systray_cleanup(void);
-extern void wgaim_systray_minimize( GtkWidget* );
-extern void wgaim_systray_maximize( GtkWidget* );
-#endif /* _SYSTRAY_H_ */