| 150 } |
150 } |
| 151 |
151 |
| 152 static void systray_change_icon(HICON icon, char* text) { |
152 static void systray_change_icon(HICON icon, char* text) { |
| 153 char *locenc=NULL; |
153 char *locenc=NULL; |
| 154 wgaim_nid.hIcon = icon; |
154 wgaim_nid.hIcon = icon; |
| 155 if(text) { |
155 if (text) { |
| 156 locenc = g_locale_from_utf8(text, -1, NULL, NULL, NULL); |
156 locenc = g_locale_from_utf8(text, -1, NULL, NULL, NULL); |
| 157 lstrcpy(wgaim_nid.szTip, locenc); |
157 lstrcpy(wgaim_nid.szTip, locenc); |
| 158 g_free(locenc); |
158 g_free(locenc); |
| 159 } |
159 } |
| 160 Shell_NotifyIcon(NIM_MODIFY,&wgaim_nid); |
160 Shell_NotifyIcon(NIM_MODIFY,&wgaim_nid); |
| 161 } |
161 } |
| 162 |
162 |
| 163 static void systray_remove_nid(void) { |
163 static void systray_remove_nid(void) { |
| 164 Shell_NotifyIcon(NIM_DELETE,&wgaim_nid); |
164 Shell_NotifyIcon(NIM_DELETE,&wgaim_nid); |
| 165 } |
165 } |
| 166 |
166 |
| 167 static void wgaim_tray_update_icon(enum docklet_status icon) { |
167 static void wgaim_tray_update_icon(DockletStatus icon) { |
| 168 switch (icon) { |
168 switch (icon) { |
| 169 case offline: |
169 case DOCKLET_STATUS_OFFLINE: |
| 170 systray_change_icon(sysicon_disconn, GAIM_SYSTRAY_DISCONN_HINT); |
170 systray_change_icon(sysicon_disconn, GAIM_SYSTRAY_DISCONN_HINT); |
| 171 break; |
171 break; |
| 172 case offline_connecting: |
172 case DOCKLET_STATUS_CONNECTING: |
| 173 case online_connecting: |
173 break; |
| 174 break; |
174 case DOCKLET_STATUS_ONLINE: |
| 175 case online: |
|
| 176 systray_change_icon(sysicon_conn, GAIM_SYSTRAY_HINT); |
175 systray_change_icon(sysicon_conn, GAIM_SYSTRAY_HINT); |
| 177 break; |
176 break; |
| 178 case online_pending: |
177 case DOCKLET_STATUS_ONLINE_PENDING: |
| 179 systray_change_icon(sysicon_pend, GAIM_SYSTRAY_HINT); |
178 systray_change_icon(sysicon_pend, GAIM_SYSTRAY_HINT); |
| 180 break; |
179 break; |
| 181 case away: |
180 case DOCKLET_STATUS_AWAY: |
| 182 systray_change_icon(sysicon_away, GAIM_SYSTRAY_AWAY_HINT); |
181 systray_change_icon(sysicon_away, GAIM_SYSTRAY_AWAY_HINT); |
| 183 break; |
182 break; |
| 184 case away_pending: |
183 case DOCKLET_STATUS_AWAY_PENDING: |
| 185 systray_change_icon(sysicon_awypend, GAIM_SYSTRAY_AWAY_HINT); |
184 systray_change_icon(sysicon_awypend, GAIM_SYSTRAY_AWAY_HINT); |
| 186 break; |
185 break; |
| 187 } |
186 } |
| 188 } |
187 } |
| 189 |
188 |
| 190 static void wgaim_tray_blank_icon() { |
189 static void wgaim_tray_blank_icon() { |
| 191 systray_change_icon(sysicon_blank, NULL); |
190 systray_change_icon(sysicon_blank, NULL); |
| 192 } |
191 } |
| 193 |
192 |
| 194 static void wgaim_tray_create() { |
193 static void wgaim_tray_create() { |
| 195 OSVERSIONINFO osinfo; |
194 OSVERSIONINFO osinfo; |
| 196 /* dummy window to process systray messages */ |
195 /* dummy window to process systray messages */ |
| 228 systray_remove_nid(); |
227 systray_remove_nid(); |
| 229 DestroyWindow(systray_hwnd); |
228 DestroyWindow(systray_hwnd); |
| 230 docklet_remove(TRUE); |
229 docklet_remove(TRUE); |
| 231 } |
230 } |
| 232 |
231 |
| |
232 void wgaim_tray_minimize(GtkWidget *window) { |
| |
233 MinimizeWndToTray(GDK_WINDOW_HWND(window->window)); |
| |
234 } |
| |
235 |
| |
236 void wgaim_tray_maximize(GtkWidget *window) { |
| |
237 RestoreWndFromTray(GDK_WINDOW_HWND(window->window)); |
| |
238 } |
| |
239 |
| 233 static struct docklet_ui_ops wgaim_tray_ops = |
240 static struct docklet_ui_ops wgaim_tray_ops = |
| 234 { |
241 { |
| 235 wgaim_tray_create, |
242 wgaim_tray_create, |
| 236 wgaim_tray_destroy, |
243 wgaim_tray_destroy, |
| 237 wgaim_tray_update_icon, |
244 wgaim_tray_update_icon, |
| 238 wgaim_tray_blank_icon, |
245 wgaim_tray_blank_icon, |
| |
246 wgaim_tray_minimize, |
| |
247 wgaim_tray_maximize, |
| 239 NULL |
248 NULL |
| 240 }; |
249 }; |
| 241 |
250 |
| 242 /* Used by docklet's plugin load func */ |
251 /* Used by docklet's plugin load func */ |
| 243 void docklet_ui_init() { |
252 void docklet_ui_init() { |