src/win32/systray.c

Sat, 01 Feb 2003 02:54:55 +0000

author
Herman Bloggs <herman@bluedigits.com>
date
Sat, 01 Feb 2003 02:54:55 +0000
changeset 4500
99f0188eb8cf
parent 4106
e730b87aa901
child 4715
714d2fa57d79
permissions
-rwxr-xr-x

[gaim-migrate @ 4775]
Fix for 'no menu' problem after failed connect

3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
1 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
2 * systray.c
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
3 *
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
4 * Author: Herman Bloggs <hermanator12002@yahoo.com>
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
5 * Date: November, 2002
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
6 * Description: Gaim systray functionality
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
7 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
8 #include <windows.h>
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
9 #include <gdk/gdkwin32.h>
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
10 #include "resource.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
11 #include "gaim.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
12 #include "win32dep.h"
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
13 #include "MinimizeToTray.h"
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
14 #include "ui.h"
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
15
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
16 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
17 * DEFINES, MACROS & DATA TYPES
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
18 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
19 #define GAIM_SYSTRAY_HINT _("Gaim Instant Messenger")
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
20 #define GAIM_SYSTRAY_DISCONN_HINT _("Gaim Instant Messenger - Signed off")
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
21 #define GAIM_SYSTRAY_AWAY_HINT _("Gaim Instant Messenger - Away")
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
22 #define WM_TRAYMESSAGE WM_USER /* User defined WM Message */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
23 #define MAX_AWY_MESSAGES 50
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
24
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
25 enum _SYSTRAY_STATE {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
26 SYSTRAY_STATE_ONLINE,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
27 SYSTRAY_STATE_ONLINE_CONNECTING,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
28 SYSTRAY_STATE_OFFLINE,
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
29 SYSTRAY_STATE_OFFLINE_CONNECTING,
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
30 SYSTRAY_STATE_AWAY,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
31 SYSTRAY_STATE_COUNT
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
32 };
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
33 typedef enum _SYSTRAY_STATE SYSTRAY_STATE;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
34
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
35 enum _SYSTRAY_CMND {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
36 SYSTRAY_CMND_MENU_EXIT,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
37 SYSTRAY_CMND_SIGNON,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
38 SYSTRAY_CMND_SIGNOFF,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
39 SYSTRAY_CMND_AUTOLOGIN,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
40 SYSTRAY_CMND_PREFS,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
41 SYSTRAY_CMND_BACK,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
42 SYSTRAY_CMND_SET_AWY_NEW,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
43 SYSTRAY_CMND_SET_AWY,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
44 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
45 };
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
46 typedef enum _SYSTRAY_CMND SYSTRAY_CMND;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
47
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
48 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
49 * LOCALS
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
50 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
51 static HWND systray_hwnd=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
52 static HICON sysicon_disconn=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
53 static HICON sysicon_conn=0;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
54 static HICON sysicon_away=0;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
55 static NOTIFYICONDATA wgaim_nid;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
56 static SYSTRAY_STATE st_state=SYSTRAY_STATE_OFFLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
57 static HMENU systray_menu=0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
58 static HMENU systray_away_menu=0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
59
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
60 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
61 * GLOBALS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
62 */
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
63 extern GtkWidget *imaway;
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 * PRIVATE CODE
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
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
69 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
70 * SYSTRAY HELPERS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
71 ********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
72
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
73 /* Returns 1 if menu item exists, 0 if not */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
74 static int IsMenuItem( HMENU hMenu, UINT id ) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
75 if(0xFFFFFFFF == GetMenuState(hMenu, id, MF_BYCOMMAND))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
76 return 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
77 else
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
78 return 1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
79 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
80
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
81 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
82 * WGAIM SYSTRAY GUI
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
83 ********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
84
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
85 static HMENU systray_create_awy_menu(void) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
86 int item_count = SYSTRAY_CMND_SET_AWY;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
87 struct away_message *a = NULL;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
88 GSList *awy = away_messages;
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 /* Delete previous away submenu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
91 if(systray_away_menu) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
92 DestroyMenu(systray_away_menu);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
93 systray_away_menu = 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
94 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
95 systray_away_menu = CreatePopupMenu();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
96 while (awy && (item_count <= SYSTRAY_CMND_SET_AWY+MAX_AWY_MESSAGES)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
97 a = (struct away_message *)awy->data;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
98 AppendMenu(systray_away_menu, MF_STRING, item_count, a->name);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
99 awy = g_slist_next(awy);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
100 item_count+=1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
101 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
102 AppendMenu(systray_away_menu, MF_SEPARATOR, 0, 0);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
103 AppendMenu(systray_away_menu, MF_STRING, SYSTRAY_CMND_SET_AWY_NEW, _("New"));
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
104 return systray_away_menu;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
105 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
106
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
107 static void systray_show_menu(int x, int y, BOOL connected) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
108 /* 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
109 of the menu scope */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
110 SetForegroundWindow(systray_hwnd);
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 /* Different menus depending on signed on/off state */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
113 if(connected) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
114 /* If signoff item dosn't exist.. create it */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
115 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNOFF)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
116 DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNON, MF_BYCOMMAND);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
117 InsertMenu(systray_menu, SYSTRAY_CMND_MENU_EXIT,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
118 MF_BYCOMMAND | MF_STRING, SYSTRAY_CMND_SIGNOFF, _("Signoff"));
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
119 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
120 /* if away menu exists, remove and rebuild it */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
121 if(systray_away_menu) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
122 if(!DeleteMenu(systray_menu, (UINT)systray_away_menu, MF_BYCOMMAND))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
123 debug_printf("Error using DeleteMenu\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
124 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
125 InsertMenu(systray_menu, SYSTRAY_CMND_PREFS,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
126 MF_BYCOMMAND | MF_POPUP | MF_STRING, (UINT)systray_create_awy_menu(),
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
127 _("Set Away Message"));
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
128 EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_GRAYED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
129 /* If away, put "I'm Back" option in menu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
130 if(st_state == SYSTRAY_STATE_AWAY) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
131 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_BACK)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
132 InsertMenu(systray_menu, (UINT)systray_away_menu,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
133 MF_BYCOMMAND | MF_STRING, SYSTRAY_CMND_BACK,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
134 _("I'm Back"));
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
135 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
136 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
137 /* Delete I'm Back item if it exists */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
138 DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
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 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
141 /* If signon item dosn't exist.. create it */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
142 if(!IsMenuItem(systray_menu, SYSTRAY_CMND_SIGNON)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
143 DeleteMenu(systray_menu, SYSTRAY_CMND_SIGNOFF, MF_BYCOMMAND);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
144 InsertMenu(systray_menu, SYSTRAY_CMND_MENU_EXIT,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
145 MF_BYCOMMAND | MF_STRING, SYSTRAY_CMND_SIGNON, _("Sign On"));
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
146 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
147 EnableMenuItem(systray_menu, SYSTRAY_CMND_AUTOLOGIN, MF_ENABLED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
148 EnableMenuItem(systray_menu, (UINT)systray_away_menu, MF_GRAYED);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
149 /* Delete I'm Back item if it exists */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
150 DeleteMenu(systray_menu, SYSTRAY_CMND_BACK, MF_BYCOMMAND);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
151 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
152
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
153 TrackPopupMenu(systray_menu, // handle to shortcut menu
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
154 TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
155 x, // horizontal position, in screen coordinates
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
156 y, // vertical position, in screen coordinates
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
157 0, // reserved, must be zero
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
158 systray_hwnd, // handle to owner window
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
159 NULL // ignored
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
160 );
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
161 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
162
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
163 /* Set nth away message from away_messages list */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
164 static void systray_set_away(int nth) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
165 int item_count = 0;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
166 GSList *awy = away_messages;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
167 struct away_message *a = NULL;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
168
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
169 while (awy && (item_count != nth)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
170 awy = g_slist_next(awy);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
171 item_count+=1;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
172 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
173 if(awy) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
174 a = (struct away_message *)awy->data;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
175 do_away_message(NULL, a);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
176 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
177 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
178
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
179 static LRESULT CALLBACK systray_mainmsg_handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
180
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
181 switch(msg) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
182 case WM_CREATE:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
183 debug_printf("WM_CREATE\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
184 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
185
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
186 case WM_TIMER:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
187 debug_printf("WM_TIMER\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
188 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
189
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
190 case WM_DESTROY:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
191 debug_printf("WM_DESTROY\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
192 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
193
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
194 case WM_COMMAND:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
195 debug_printf("WM_COMMAND\n");
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
196 switch(LOWORD(wparam)) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
197 case SYSTRAY_CMND_MENU_EXIT:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
198 do_quit();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
199 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
200 case SYSTRAY_CMND_SIGNON:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
201 debug_printf("signon\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
202 show_login();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
203 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
204 case SYSTRAY_CMND_SIGNOFF:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
205 debug_printf("signoff\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
206 signoff_all();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
207 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
208 case SYSTRAY_CMND_AUTOLOGIN:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
209 debug_printf("autologin\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
210 auto_login();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
211 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
212 case SYSTRAY_CMND_PREFS:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
213 debug_printf("Prefs\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
214 show_prefs();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
215 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
216 case SYSTRAY_CMND_BACK:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
217 debug_printf("I'm back\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
218 do_im_back(NULL, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
219 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
220 case SYSTRAY_CMND_SET_AWY_NEW:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
221 debug_printf("New away item\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
222 create_away_mess(NULL, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
223 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
224 default:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
225 /* SYSTRAY_CMND_SET_AWY */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
226 if((LOWORD(wparam) >= SYSTRAY_CMND_SET_AWY) &&
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
227 (LOWORD(wparam) <= (SYSTRAY_CMND_SET_AWY + MAX_AWY_MESSAGES))) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
228 debug_printf("Set away message\n");
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
229 systray_set_away(LOWORD(wparam)-SYSTRAY_CMND_SET_AWY);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
230 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
231 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
232 break;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
233 case WM_TRAYMESSAGE:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
234 {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
235 if( lparam == WM_LBUTTONDBLCLK ) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
236 /* Double Click */
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
237 /* Either hide or show current window (login or buddy) */
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
238 docklet_toggle();
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
239 /* if away.. hide/show I'm back win too */
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
240 if(st_state == SYSTRAY_STATE_AWAY) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
241 if(GTK_WIDGET_VISIBLE(blist) && !GTK_WIDGET_VISIBLE(imaway)) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
242 RestoreWndFromTray(GDK_WINDOW_HWND(GTK_WIDGET(imaway)->window));
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
243 gtk_window_present(GTK_WINDOW(imaway));
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
244 } else if(!GTK_WIDGET_VISIBLE(blist) && GTK_WIDGET_VISIBLE(imaway)) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
245 wgaim_systray_minimize(imaway);
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
246 gtk_widget_hide(imaway);
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
247 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
248 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
249 debug_printf("Systray got double click\n");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
250 }
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
251 if( lparam == WM_RBUTTONUP ) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
252 /* Right Click */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
253 POINT mpoint;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
254 GetCursorPos(&mpoint);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
255
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
256 switch(st_state) {
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
257 case SYSTRAY_STATE_OFFLINE:
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
258 case SYSTRAY_STATE_OFFLINE_CONNECTING:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
259 systray_show_menu(mpoint.x, mpoint.y, 0);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
260 break;
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
261 default:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
262 systray_show_menu(mpoint.x, mpoint.y, 1);
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
263 }
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
264 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
265 break;
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
266 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
267 default:
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
268 }/* end switch */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
269
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
270 return DefWindowProc(hwnd, msg, wparam, lparam);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
271 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
272
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
273 /* Create hidden window to process systray messages */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
274 static HWND systray_create_hiddenwin() {
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
275 WNDCLASSEX wcex;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
276 TCHAR wname[32];
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
277
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
278 strcpy(wname, "GaimWin");
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
279
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
280 wcex.cbSize = sizeof(WNDCLASSEX);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
281
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
282 wcex.style = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
283 wcex.lpfnWndProc = (WNDPROC)systray_mainmsg_handler;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
284 wcex.cbClsExtra = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
285 wcex.cbWndExtra = 0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
286 wcex.hInstance = wgaim_hinstance();
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
287 wcex.hIcon = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
288 wcex.hCursor = NULL,
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
289 wcex.hbrBackground = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
290 wcex.lpszMenuName = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
291 wcex.lpszClassName = wname;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
292 wcex.hIconSm = NULL;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
293
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
294 RegisterClassEx(&wcex);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
295
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
296 // Create the window
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
297 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
298 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
299
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
300 static void systray_create_menu(void) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
301 /* create popup menu */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
302 if((systray_menu = CreatePopupMenu())) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
303 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_PREFS, _("Preferences")))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
304 debug_printf("AppendMenu error: %d\n", GetLastError());
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
305 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_AUTOLOGIN, _("Auto-login")))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
306 debug_printf("AppendMenu error: %d\n", GetLastError());
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
307 if(!AppendMenu(systray_menu, MF_SEPARATOR, 0, 0))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
308 debug_printf("AppendMenu error: %d\n", GetLastError());
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
309 if(!AppendMenu(systray_menu, MF_STRING, SYSTRAY_CMND_MENU_EXIT, _("Exit")))
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
310 debug_printf("AppendMenu error: %d\n", GetLastError());
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
311 } else
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
312 debug_printf("CreatePopupMenu error: %d\n", GetLastError());
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
313 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
314
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
315 static void systray_init_icon(HWND hWnd, HICON icon) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
316 ZeroMemory(&wgaim_nid,sizeof(wgaim_nid));
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
317 wgaim_nid.cbSize=sizeof(NOTIFYICONDATA);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
318 wgaim_nid.hWnd=hWnd;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
319 wgaim_nid.uID=0;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
320 wgaim_nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
321 wgaim_nid.uCallbackMessage=WM_TRAYMESSAGE;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
322 wgaim_nid.hIcon=icon;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
323 strcpy(wgaim_nid.szTip,GAIM_SYSTRAY_DISCONN_HINT);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
324
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
325 Shell_NotifyIcon(NIM_ADD,&wgaim_nid);
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
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
328 static void systray_change_icon(HICON icon, char* text) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
329 wgaim_nid.hIcon = icon;
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
330 lstrcpy(wgaim_nid.szTip, text);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
331 Shell_NotifyIcon(NIM_MODIFY,&wgaim_nid);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
332 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
333
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
334 static void systray_remove_nid(void) {
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
335 Shell_NotifyIcon(NIM_DELETE,&wgaim_nid);
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
336 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
337
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
338 static void systray_update_icon() {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
339 switch(st_state) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
340 case SYSTRAY_STATE_ONLINE:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
341 systray_change_icon(sysicon_conn, GAIM_SYSTRAY_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
342 break;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
343 case SYSTRAY_STATE_ONLINE_CONNECTING:
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
344 case SYSTRAY_STATE_OFFLINE_CONNECTING:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
345 break;
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
346 case SYSTRAY_STATE_OFFLINE:
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
347 systray_change_icon(sysicon_disconn, GAIM_SYSTRAY_DISCONN_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
348 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
349 case SYSTRAY_STATE_AWAY:
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
350 systray_change_icon(sysicon_away, GAIM_SYSTRAY_AWAY_HINT);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
351 break;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
352 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
353 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
354
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
355 static void systray_update_status() {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
356 SYSTRAY_STATE old_state = st_state;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
357
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
358 if(connections) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
359 if(awaymessage) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
360 st_state = SYSTRAY_STATE_AWAY;
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
361 } else if(connecting_count) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
362 st_state = SYSTRAY_STATE_ONLINE_CONNECTING;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
363 } else {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
364 st_state = SYSTRAY_STATE_ONLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
365 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
366 } else {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
367 if(connecting_count) {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
368 /* Don't rely on this state.. signoff in multi.c sends
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
369 event_signoff before decrementing connecting_count
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
370 for a reason unknown to me..
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
371 */
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
372 st_state = SYSTRAY_STATE_OFFLINE_CONNECTING;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
373 } else {
4500
99f0188eb8cf [gaim-migrate @ 4775]
Herman Bloggs <herman@bluedigits.com>
parents: 4106
diff changeset
374 st_state = SYSTRAY_STATE_OFFLINE;
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
375 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
376 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
377 if(st_state != old_state) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
378 systray_update_icon();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
379 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
380 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
381
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
382 /*
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
383 * GAIM EVENT CALLBACKS
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
384 ***********************/
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
385
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
386 static void st_signon(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
387 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
388 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
389
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
390 static void st_signoff(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
391 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
392 }
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
393
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
394 static void st_away(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
395 systray_update_status();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
396 }
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
397
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
398 static void st_back(struct gaim_connection *gc, void *data) {
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
399 systray_update_status();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
400 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
401
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
402 static void st_im_recieve(struct gaim_connection *gc, void *data) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
403
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
404 }
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
405
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
406 /*
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
407 * PUBLIC CODE
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
408 */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
409
4106
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
410 /*
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
411 * GAIM WINDOW FILTERS
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
412 **********************/
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
413
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
414 GdkFilterReturn st_buddywin_filter( GdkXEvent *xevent, GdkEvent *event, gpointer data) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
415
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
416 MSG *msg = (MSG*)xevent;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
417
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
418 switch( msg->message ) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
419 case WM_SYSCOMMAND:
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
420 if( msg->wParam == SC_MINIMIZE ) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
421 hide_buddy_list();
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
422 return GDK_FILTER_REMOVE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
423 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
424 break;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
425 case WM_CLOSE:
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
426 hide_buddy_list();
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
427 return GDK_FILTER_REMOVE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
428 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
429
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
430 return GDK_FILTER_CONTINUE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
431 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
432
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
433 GdkFilterReturn st_loginwin_filter( GdkXEvent *xevent, GdkEvent *event, gpointer data) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
434 MSG *msg = (MSG*)xevent;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
435
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
436 switch( msg->message ) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
437 case WM_CLOSE:
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
438 wgaim_systray_minimize(mainwindow);
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
439 gtk_widget_hide(mainwindow);
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
440 return GDK_FILTER_REMOVE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
441 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
442
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
443 return GDK_FILTER_CONTINUE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
444 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
445
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
446 GdkFilterReturn st_backwin_filter( GdkXEvent *xevent, GdkEvent *event, gpointer data) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
447 MSG *msg = (MSG*)xevent;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
448
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
449 switch( msg->message ) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
450 case WM_SYSCOMMAND:
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
451 if( msg->wParam == SC_MINIMIZE ) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
452 if(imaway) {
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
453 wgaim_systray_minimize(imaway);
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
454 gtk_widget_hide(imaway);
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
455 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
456 return GDK_FILTER_REMOVE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
457 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
458 break;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
459 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
460 return GDK_FILTER_CONTINUE;
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
461 }
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
462
e730b87aa901 [gaim-migrate @ 4321]
Herman Bloggs <herman@bluedigits.com>
parents: 4101
diff changeset
463
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
464 /* Create a hidden window and associate it with the systray icon.
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
465 We use this hidden window to proccess WM_TRAYMESSAGE msgs. */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
466 void wgaim_systray_init(void) {
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
467 docklet_add();
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
468
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
469 /* dummy window to process systray messages */
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
470 systray_hwnd = systray_create_hiddenwin();
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
471
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
472 systray_create_menu();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
473
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
474 /* Load icons, and init systray notify icon */
4101
a27b5966a1ac [gaim-migrate @ 4316]
Herman Bloggs <herman@bluedigits.com>
parents: 4087
diff changeset
475 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
476 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
477 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
478
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
479 /* Create icon in systray */
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
480 systray_init_icon(systray_hwnd, sysicon_disconn);
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
481
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
482 /* Register Gaim event callbacks */
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
483 gaim_signal_connect(NULL, event_signon, st_signon, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
484 gaim_signal_connect(NULL, event_signoff, st_signoff, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
485 gaim_signal_connect(NULL, event_away, st_away, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
486 gaim_signal_connect(NULL, event_back, st_back, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
487 /*gaim_signal_connect(NULL, event_connecting, wgaim_st_connecting, NULL);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
488 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
489 }
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
490
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
491 void wgaim_systray_cleanup(void) {
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
492 docklet_remove();
3946
653883db841c [gaim-migrate @ 4125]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
493 systray_remove_nid();
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
494 DestroyMenu(systray_menu);
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
495 DestroyWindow(systray_hwnd);
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
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
498 void wgaim_systray_minimize( GtkWidget *window ) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
499 MinimizeWndToTray(GDK_WINDOW_HWND(window->window));
3959
3d86547a1d75 [gaim-migrate @ 4141]
Herman Bloggs <herman@bluedigits.com>
parents: 3946
diff changeset
500 }
3972
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
501
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
502 void wgaim_systray_maximize( GtkWidget *window ) {
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
503 RestoreWndFromTray(GDK_WINDOW_HWND(window->window));
3ae6879c1bae [gaim-migrate @ 4156]
Herman Bloggs <herman@bluedigits.com>
parents: 3959
diff changeset
504 }

mercurial