src/win32/systray.c

Tue, 27 May 2003 03:38:52 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 27 May 2003 03:38:52 +0000
changeset 5537
812794b97b08
parent 5399
f27120021822
child 5746
3603ba25c56d
permissions
-rwxr-xr-x

[gaim-migrate @ 5937]
This is:
-AIM over OSCAR use Christian's new, kick ass
gaim_notify_email stuff for new mail notification. This
should be good, but it's kind of a pain to test. Let me
know if you have any problems

-Minor fix to the translation README

-2 minor changes to the doxygen of 2 major header files
(this means you'll have to recompile a lot of files :-) )

-If your global proxy setting is "No Proxy" and your global
proxy host is empty, but $http_proxy is set to something,
gaim used to switch your global proxy setting to "HTTP." It
no longer does this. This makes more sense to me. If you
disagree, please let me know--this is open to debate, and
what not. Also, the use of environmental proxy settings
will be changed a bit in the next day or two

3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
1 /*
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
2 * gaim - Windows Gaim systray module
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
3 *
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
4 * File: systray.c
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
5 * Date: November, 2002
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
6 *
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
7 * Copyright (C) 2002, Herman Bloggs <hermanator12002@yahoo.com>
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
8 *
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
9 * This program is free software; you can redistribute it and/or modify
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
10 * it under the terms of the GNU General Public License as published by
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
12 * (at your option) any later version.
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
13 *
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
14 * This program is distributed in the hope that it will be useful,
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
17 * GNU General Public License for more details.
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
18 *
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
19 * You should have received a copy of the GNU General Public License
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
20 * along with this program; if not, write to the Free Software
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
22 *
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
23 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
24 #include <windows.h>
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
25 #include <gdk/gdkwin32.h>
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
26 #include "resource.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
27 #include "gaim.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
28 #include "win32dep.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
29 #include "MinimizeToTray.h"
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
30 #include "ui.h"
5248
f4f944f4dbe0 [gaim-migrate @ 5620]
Mark Doliner <markdoliner@pidgin.im>
parents: 5084
diff changeset
31 #include "gtkblist.h"
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
32
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
33 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
34 * DEFINES, MACROS & DATA TYPES
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
35 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
36 #define GAIM_SYSTRAY_HINT _("Gaim Instant Messenger")
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
37 #define GAIM_SYSTRAY_DISCONN_HINT _("Gaim Instant Messenger - Signed off")
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
38 #define GAIM_SYSTRAY_AWAY_HINT _("Gaim Instant Messenger - Away")
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
39 #define WM_TRAYMESSAGE WM_USER /* User defined WM Message */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
40 #define MAX_AWY_MESSAGES 50
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
41
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
42 enum _SYSTRAY_STATE {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
43 SYSTRAY_STATE_ONLINE,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
44 SYSTRAY_STATE_ONLINE_CONNECTING,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
45 SYSTRAY_STATE_OFFLINE,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
46 SYSTRAY_STATE_OFFLINE_CONNECTING,
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
47 SYSTRAY_STATE_AWAY,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
48 SYSTRAY_STATE_COUNT
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
49 };
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
50 typedef enum _SYSTRAY_STATE SYSTRAY_STATE;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
51
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
52 enum _SYSTRAY_CMND {
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
53 SYSTRAY_CMND_MENU_EXIT=100,
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
54 SYSTRAY_CMND_SIGNON,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
55 SYSTRAY_CMND_SIGNOFF,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
56 SYSTRAY_CMND_AUTOLOGIN,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
57 SYSTRAY_CMND_PREFS,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
58 SYSTRAY_CMND_BACK,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
59 SYSTRAY_CMND_SET_AWY_NEW,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
60 SYSTRAY_CMND_SET_AWY,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
61 SYSTRAY_CMND_SET_AWY_LAST=SYSTRAY_CMND_SET_AWY+MAX_AWY_MESSAGES
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
62 };
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
63 typedef enum _SYSTRAY_CMND SYSTRAY_CMND;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
64
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
65 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
66 * LOCALS
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
67 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
68 static HWND systray_hwnd=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
69 static HICON sysicon_disconn=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
70 static HICON sysicon_conn=0;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
71 static HICON sysicon_away=0;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
72 static NOTIFYICONDATA wgaim_nid;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
73 static SYSTRAY_STATE st_state=SYSTRAY_STATE_OFFLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
74 static HMENU systray_menu=0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
75 static HMENU systray_away_menu=0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
76
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
77 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
78 * GLOBALS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
79 */
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
80 extern GtkWidget *imaway;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
81
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
82 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
83 * PRIVATE CODE
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
84 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
85
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
86 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
87 * SYSTRAY HELPERS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
88 ********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
89
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
90 /* Returns 1 if menu item exists, 0 if not */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
91 static int IsMenuItem( HMENU hMenu, UINT id ) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
92 if(0xFFFFFFFF == GetMenuState(hMenu, id, MF_BYCOMMAND))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
93 return 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
94 else
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
95 return 1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
96 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
97
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
98 static int GetMenuItemPosition( HMENU hMenu, UINT id ) {
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
99 int count = GetMenuItemCount(hMenu);
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
100 int i;
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
101
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
102 for(i=0;i<count;i++) {
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
103 if(GetMenuItemID(hMenu, i)==id)
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
104 return i;
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
105 }
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
106 return -1;
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
107 }
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
108
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
109 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
110 * WGAIM SYSTRAY GUI
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
111 ********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
112
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
113 static HMENU systray_create_awy_menu(void) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
114 int item_count = SYSTRAY_CMND_SET_AWY;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
115 struct away_message *a = NULL;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
116 GSList *awy = away_messages;
5377
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
117 char* locenc=NULL;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
118
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
119 /* Delete previous away submenu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
120 if(systray_away_menu) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
121 DestroyMenu(systray_away_menu);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
122 systray_away_menu = 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
123 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
124 systray_away_menu = CreatePopupMenu();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
125 while (awy && (item_count <= SYSTRAY_CMND_SET_AWY+MAX_AWY_MESSAGES)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
126 a = (struct away_message *)awy->data;
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
127 locenc = g_locale_from_utf8(a->name, -1, NULL, NULL, NULL);
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
128 AppendMenu(systray_away_menu, MF_STRING, item_count, locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
129 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
130 awy = g_slist_next(awy);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
131 item_count+=1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
132 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
133 AppendMenu(systray_away_menu, MF_SEPARATOR, 0, 0);
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
134 locenc = g_locale_from_utf8(_("New"), -1, NULL, NULL, NULL);
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
135 AppendMenu(systray_away_menu, MF_STRING, SYSTRAY_CMND_SET_AWY_NEW, locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
136 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
137 return systray_away_menu;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
138 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
139
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
140 static void systray_show_menu(int x, int y, BOOL connected) {
5377
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
141 char* locenc=NULL;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
142 /* need to call this so that the menu disappears if clicking outside
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
143 of the menu scope */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
144 SetForegroundWindow(systray_hwnd);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
145
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
146 /* in both connected and disconnected case delete away message menu */
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
147 if(systray_away_menu) {
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
148 if(!DeleteMenu(systray_menu, (UINT)systray_away_menu, MF_BYCOMMAND))
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
149 debug_printf("Error using DeleteMenu\n");
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
150 }
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
151
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
152
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
153 /* Different menus depending on signed on/off state */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
154 if(connected) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
155 /* If signoff item dosn't exist.. create it */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
156 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNOFF)) {
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
157 int pos;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
158 DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNON, MF_BYCOMMAND);
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
159 locenc = g_locale_from_utf8(_("Signoff"), -1, NULL, NULL, NULL);
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
160 pos = GetMenuItemPosition(systray_menu, SYSTRAY_CMND_MENU_EXIT) - 1;
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
161 if(!InsertMenu(systray_menu, pos,
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
162 MF_BYPOSITION | MF_STRING, SYSTRAY_CMND_SIGNOFF, locenc))
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
163 debug_printf("InsertMenu failed: %s\n", GetLastError());
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
164 debug_printf("Inserted Menu with ID: %d\n", SYSTRAY_CMND_SIGNOFF);
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
165 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
166 }
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
167 locenc = g_locale_from_utf8(_("Set Away Message"), -1, NULL, NULL, NULL);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
168 InsertMenu(systray_menu, SYSTRAY_CMND_PREFS,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
169 MF_BYCOMMAND | MF_POPUP | MF_STRING, (UINT)systray_create_awy_menu(),
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
170 locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
171 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
172 EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_GRAYED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
173 /* If away, put "I'm Back" option in menu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
174 if(st_state == SYSTRAY_STATE_AWAY) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
175 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_BACK)) {
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
176 locenc = g_locale_from_utf8(_("I'm Back"), -1, NULL, NULL, NULL);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
177 InsertMenu(systray_menu, (UINT)systray_away_menu,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
178 MF_BYCOMMAND | MF_STRING, SYSTRAY_CMND_BACK,
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
179 locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
180 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
181 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
182 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
183 /* Delete I'm Back item if it exists */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
184 DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
185 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
186 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
187 /* If signon item dosn't exist.. create it */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
188 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNON)) {
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
189 int pos;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
190 DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNOFF, MF_BYCOMMAND);
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
191 locenc = g_locale_from_utf8(_("Sign On"), -1, NULL, NULL, NULL);
5399
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
192 pos = GetMenuItemPosition(systray_menu, SYSTRAY_CMND_MENU_EXIT) - 1;
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
193 if(!InsertMenu(systray_menu, pos,
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
194 MF_BYPOSITION | MF_STRING, SYSTRAY_CMND_SIGNON, locenc))
f27120021822 [gaim-migrate @ 5775]
Herman Bloggs <herman@bluedigits.com>
parents: 5389
diff changeset
195 debug_printf("InsertMenu failed: %s\n", GetLastError());
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
196 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
197 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
198 EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_ENABLED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
199 EnableMenuItem(systray_menu, (UINT)systray_away_menu, MF_GRAYED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
200 /* Delete I'm Back item if it exists */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
201 DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
202 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
203
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
204 TrackPopupMenu(systray_menu, // handle to shortcut menu
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
205 TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
206 x, // horizontal position, in screen coordinates
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
207 y, // vertical position, in screen coordinates
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
208 0, // reserved, must be zero
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
209 systray_hwnd, // handle to owner window
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
210 NULL // ignored
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
211 );
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
212 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
213
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
214 /* Set nth away message from away_messages list */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
215 static void systray_set_away(int nth) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
216 int item_count = 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
217 GSList *awy = away_messages;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
218 struct away_message *a = NULL;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
219
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
220 while (awy && (item_count != nth)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
221 awy = g_slist_next(awy);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
222 item_count+=1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
223 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
224 if(awy) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
225 a = (struct away_message *)awy->data;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
226 do_away_message(NULL, a);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
227 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
228 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
229
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
230 static LRESULT CALLBACK systray_mainmsg_handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
5389
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
231 static UINT taskbarRestartMsg; /* static here means value is kept across multiple calls to this func */
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
232
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
233 switch(msg) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
234 case WM_CREATE:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
235 debug_printf("WM_CREATE\n");
5389
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
236 taskbarRestartMsg = RegisterWindowMessage("TaskbarCreated");
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
237 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
238
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
239 case WM_TIMER:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
240 debug_printf("WM_TIMER\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
241 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
242
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
243 case WM_DESTROY:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
244 debug_printf("WM_DESTROY\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
245 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
246
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
247 case WM_COMMAND:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
248 debug_printf("WM_COMMAND\n");
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
249 switch(LOWORD(wparam)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
250 case SYSTRAY_CMND_MENU_EXIT:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
251 do_quit();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
252 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
253 case SYSTRAY_CMND_SIGNON:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
254 debug_printf("signon\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
255 show_login();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
256 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
257 case SYSTRAY_CMND_SIGNOFF:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
258 debug_printf("signoff\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
259 signoff_all();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
260 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
261 case SYSTRAY_CMND_AUTOLOGIN:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
262 debug_printf("autologin\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
263 auto_login();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
264 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
265 case SYSTRAY_CMND_PREFS:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
266 debug_printf("Prefs\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
267 show_prefs();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
268 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
269 case SYSTRAY_CMND_BACK:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
270 debug_printf("I'm back\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
271 do_im_back(NULL, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
272 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
273 case SYSTRAY_CMND_SET_AWY_NEW:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
274 debug_printf("New away item\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
275 create_away_mess(NULL, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
276 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
277 default:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
278 /* SYSTRAY_CMND_SET_AWY */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
279 if((LOWORD(wparam) >= SYSTRAY_CMND_SET_AWY) &&
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
280 (LOWORD(wparam) <= (SYSTRAY_CMND_SET_AWY + MAX_AWY_MESSAGES))) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
281 debug_printf("Set away message\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
282 systray_set_away(LOWORD(wparam)-SYSTRAY_CMND_SET_AWY);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
283 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
284 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
285 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
286 case WM_TRAYMESSAGE:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
287 {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
288 if( lparam == WM_LBUTTONDBLCLK ) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
289 /* Double Click */
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
290 /* Either hide or show current window (login or buddy) */
4715
714d2fa57d79 [gaim-migrate @ 5026]
Herman Bloggs <herman@bluedigits.com>
parents: 4500
diff changeset
291 gaim_gtk_blist_docklet_toggle();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
292 debug_printf("Systray got double click\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
293 }
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
294 if( lparam == WM_RBUTTONUP ) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
295 /* Right Click */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
296 POINT mpoint;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
297 GetCursorPos(&mpoint);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
298
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
299 switch(st_state) {
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
300 case SYSTRAY_STATE_OFFLINE:
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
301 case SYSTRAY_STATE_OFFLINE_CONNECTING:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
302 systray_show_menu(mpoint.x, mpoint.y, 0);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
303 break;
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
304 default:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
305 systray_show_menu(mpoint.x, mpoint.y, 1);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
306 }
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
307 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
308 break;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
309 }
5389
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
310 default:
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
311 if (msg == taskbarRestartMsg) {
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
312 /* explorer crashed and left us hanging...
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
313 This will put the systray icon back in it's place, when it restarts */
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
314 Shell_NotifyIcon(NIM_ADD,&wgaim_nid);
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
315 }
d557e64e6d8c [gaim-migrate @ 5765]
Herman Bloggs <herman@bluedigits.com>
parents: 5377
diff changeset
316 break;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
317 }/* end switch */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
318
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
319 return DefWindowProc(hwnd, msg, wparam, lparam);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
320 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
321
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
322 /* Create hidden window to process systray messages */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
323 static HWND systray_create_hiddenwin() {
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
324 WNDCLASSEX wcex;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
325 TCHAR wname[32];
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
326
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
327 strcpy(wname, "GaimWin");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
328
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
329 wcex.cbSize = sizeof(WNDCLASSEX);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
330
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
331 wcex.style = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
332 wcex.lpfnWndProc = (WNDPROC)systray_mainmsg_handler;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
333 wcex.cbClsExtra = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
334 wcex.cbWndExtra = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
335 wcex.hInstance = wgaim_hinstance();
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
336 wcex.hIcon = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
337 wcex.hCursor = NULL,
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
338 wcex.hbrBackground = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
339 wcex.lpszMenuName = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
340 wcex.lpszClassName = wname;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
341 wcex.hIconSm = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
342
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
343 RegisterClassEx(&wcex);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
344
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
345 // Create the window
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
346 return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, wgaim_hinstance(), 0));
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
347 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
348
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
349 static void systray_create_menu(void) {
5377
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
350 char* locenc=NULL;
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
351
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
352 /* create popup menu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
353 if((systray_menu = CreatePopupMenu())) {
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
354 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_PREFS,
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
355 (locenc=g_locale_from_utf8(_("Preferences"), -1, NULL, NULL, NULL))))
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
356 debug_printf("AppendMenu error: %ld\n", GetLastError());
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
357 g_free(locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
358 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_AUTOLOGIN,
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
359 (locenc=g_locale_from_utf8(_("Auto-login"), -1, NULL, NULL, NULL))))
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
360 debug_printf("AppendMenu error: %ld\n", GetLastError());
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
361 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
362 if(!AppendMenu(systray_menu, MF_SEPARATOR, 0, 0))
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
363 debug_printf("AppendMenu error: %ld\n", GetLastError());
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
364 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_MENU_EXIT,
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
365 (locenc=g_locale_from_utf8(_("Exit"), -1, NULL, NULL, NULL))))
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
366 debug_printf("AppendMenu error: %ld\n", GetLastError());
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
367 g_free(locenc);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
368 } else
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
369 debug_printf("CreatePopupMenu error: %ld\n", GetLastError());
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
370 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
371
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
372 static void systray_init_icon(HWND hWnd, HICON icon) {
5377
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
373 char* locenc=NULL;
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
374
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
375 ZeroMemory(&wgaim_nid,sizeof(wgaim_nid));
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
376 wgaim_nid.cbSize=sizeof(NOTIFYICONDATA);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
377 wgaim_nid.hWnd=hWnd;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
378 wgaim_nid.uID=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
379 wgaim_nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
380 wgaim_nid.uCallbackMessage=WM_TRAYMESSAGE;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
381 wgaim_nid.hIcon=icon;
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
382 locenc=g_locale_from_utf8(GAIM_SYSTRAY_DISCONN_HINT, -1, NULL, NULL, NULL);
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
383 strcpy(wgaim_nid.szTip, locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
384 g_free(locenc);
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
385 Shell_NotifyIcon(NIM_ADD,&wgaim_nid);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
386 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
387
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
388 static void systray_change_icon(HICON icon, char* text) {
5377
621008da1987 [gaim-migrate @ 5753]
Herman Bloggs <herman@bluedigits.com>
parents: 5376
diff changeset
389 char *locenc=NULL;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
390 wgaim_nid.hIcon = icon;
5376
742cacf926ef [gaim-migrate @ 5752]
Herman Bloggs <herman@bluedigits.com>
parents: 5365
diff changeset
391 locenc = g_locale_from_utf8(text, -1, NULL, NULL, NULL);
5365
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
392 lstrcpy(wgaim_nid.szTip, locenc);
9708d37a3b21 [gaim-migrate @ 5741]
Herman Bloggs <herman@bluedigits.com>
parents: 5248
diff changeset
393 g_free(locenc);
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
394 Shell_NotifyIcon(NIM_MODIFY,&wgaim_nid);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
395 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
396
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
397 static void systray_remove_nid(void) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
398 Shell_NotifyIcon(NIM_DELETE,&wgaim_nid);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
399 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
400
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
401 static void systray_update_icon() {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
402 switch(st_state) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
403 case SYSTRAY_STATE_ONLINE:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
404 systray_change_icon(sysicon_conn, GAIM_SYSTRAY_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
405 break;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
406 case SYSTRAY_STATE_ONLINE_CONNECTING:
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
407 case SYSTRAY_STATE_OFFLINE_CONNECTING:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
408 break;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
409 case SYSTRAY_STATE_OFFLINE:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
410 systray_change_icon(sysicon_disconn, GAIM_SYSTRAY_DISCONN_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
411 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
412 case SYSTRAY_STATE_AWAY:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
413 systray_change_icon(sysicon_away, GAIM_SYSTRAY_AWAY_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
414 break;
5084
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
415 case SYSTRAY_STATE_COUNT: /* not a state, here to avoid warning */
21d2e7ec99ce [gaim-migrate @ 5439]
Herman Bloggs <herman@bluedigits.com>
parents: 4881
diff changeset
416 default:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
417 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
418 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
419
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
420 static void systray_update_status() {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
421 SYSTRAY_STATE old_state = st_state;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
422
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
423 if(connections) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
424 if(awaymessage) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
425 st_state = SYSTRAY_STATE_AWAY;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
426 } else if(connecting_count) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
427 st_state = SYSTRAY_STATE_ONLINE_CONNECTING;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
428 } else {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
429 st_state = SYSTRAY_STATE_ONLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
430 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
431 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
432 if(connecting_count) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
433 /* Don't rely on this state.. signoff in multi.c sends
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
434 event_signoff before decrementing connecting_count
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
435 for a reason unknown to me..
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
436 */
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
437 st_state = SYSTRAY_STATE_OFFLINE_CONNECTING;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
438 } else {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
439 st_state = SYSTRAY_STATE_OFFLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
440 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
441 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
442 if(st_state != old_state) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
443 systray_update_icon();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
444 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
445 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
446
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
447 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
448 * GAIM EVENT CALLBACKS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
449 ***********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
450
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
451 static void st_signon(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
452 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
453 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
454
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
455 static void st_signoff(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
456 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
457 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
458
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
459 static void st_away(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
460 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
461 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
462
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
463 static void st_back(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
464 systray_update_status();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
465 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
466
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
467 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
468 * PUBLIC CODE
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
469 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
470
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
471 /* Create a hidden window and associate it with the systray icon.
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
472 We use this hidden window to proccess WM_TRAYMESSAGE msgs. */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
473 void wgaim_systray_init(void) {
4715
714d2fa57d79 [gaim-migrate @ 5026]
Herman Bloggs <herman@bluedigits.com>
parents: 4500
diff changeset
474 gaim_gtk_blist_docklet_add();
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
475
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
476 /* dummy window to process systray messages */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
477 systray_hwnd = systray_create_hiddenwin();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
478
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
479 systray_create_menu();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
480
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
481 /* Load icons, and init systray notify icon */
4101
a27b5966a1ac [gaim-migrate @ 4316]
Herman Bloggs <herman@bluedigits.com>
parents: 4087
diff changeset
482 sysicon_disconn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
a27b5966a1ac [gaim-migrate @ 4316]
Herman Bloggs <herman@bluedigits.com>
parents: 4087
diff changeset
483 sysicon_conn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
a27b5966a1ac [gaim-migrate @ 4316]
Herman Bloggs <herman@bluedigits.com>
parents: 4087
diff changeset
484 sysicon_away = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON), IMAGE_ICON, 16, 16, 0);
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
485
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
486 /* Create icon in systray */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
487 systray_init_icon(systray_hwnd, sysicon_disconn);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
488
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
489 /* Register Gaim event callbacks */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
490 gaim_signal_connect(NULL, event_signon, st_signon, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
491 gaim_signal_connect(NULL, event_signoff, st_signoff, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
492 gaim_signal_connect(NULL, event_away, st_away, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
493 gaim_signal_connect(NULL, event_back, st_back, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
494 /*gaim_signal_connect(NULL, event_connecting, wgaim_st_connecting, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
495 gaim_signal_connect(NULL, event_im_displayed_rcvd, wgaim_st_im_displayed_recv, NULL);*/
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
496 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
497
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
498 void wgaim_systray_cleanup(void) {
4728
048393024194 [gaim-migrate @ 5041]
Herman Bloggs <herman@bluedigits.com>
parents: 4715
diff changeset
499 /*gaim_gtk_blist_docklet_remove();*/
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
500 systray_remove_nid();
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
501 DestroyMenu(systray_menu);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
502 DestroyWindow(systray_hwnd);
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
503 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
504
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
505 void wgaim_systray_minimize( GtkWidget *window ) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
506 MinimizeWndToTray(GDK_WINDOW_HWND(window->window));
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
507 }
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
508
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
509 void wgaim_systray_maximize( GtkWidget *window ) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
510 RestoreWndFromTray(GDK_WINDOW_HWND(window->window));
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
511 }

mercurial