pidgin/win32/gtkdocklet-win32.c

Sun, 25 Feb 2007 22:13:58 +0000

author
Daniel Atallah <datallah@pidgin.im>
date
Sun, 25 Feb 2007 22:13:58 +0000
changeset 15770
e0454c66f042
parent 15765
f281403e98cf
child 15774
c56bb7ff0dd0
permissions
-rw-r--r--

Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.

6278
d0cd8645bf90 [gaim-migrate @ 6777]
Herman Bloggs <herman@bluedigits.com>
parents: 6261
diff changeset
1 /*
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
2 * System tray icon (aka docklet) plugin for Winpidgin
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
3 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
4 * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
5 * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
6 * Inspired by a similar plugin by:
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
7 * John (J5) Palmieri <johnp@martianrock.com>
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
8 *
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
10 * modify it under the terms of the GNU General Public License as
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
11 * published by the Free Software Foundation; either version 2 of the
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
12 * License, or (at your option) any later version.
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
13 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
17 * General Public License for more details.
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
18 *
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
22 * 02111-1307, USA.
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
23 */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
24
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
25 #include <windows.h>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
26 #include <gdk/gdkwin32.h>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
27 #include <gdk/gdk.h>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
28
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
29 #include "internal.h"
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
30 #include "gtkblist.h"
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
31 #include "debug.h"
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
32
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
33 #include "resource.h"
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
34 #include "MinimizeToTray.h"
14286
9ff15ceacd34 [gaim-migrate @ 16905]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
35 #include "gtkwin32dep.h"
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
36 #include "gtkdocklet.h"
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
37 #include "gaimstock.h"
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
38
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
39 /*
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
40 * DEFINES, MACROS & DATA TYPES
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
41 */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
42 #define WM_TRAYMESSAGE WM_USER /* User defined WM Message */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
43
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
44 /*
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
45 * LOCALS
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
46 */
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
47 static HWND systray_hwnd = NULL;
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
48 static HICON cached_icons[DOCKLET_STATUS_CONNECTING + 1];
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
49 static GtkWidget *image = NULL;
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
50 static NOTIFYICONDATA _nicon_data;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
51
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
52 static LRESULT CALLBACK systray_mainmsg_handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
53 static UINT taskbarRestartMsg; /* static here means value is kept across multiple calls to this func */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
54
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
55 switch(msg) {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
56 case WM_CREATE:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
57 gaim_debug_info("docklet", "WM_CREATE\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
58 taskbarRestartMsg = RegisterWindowMessage("TaskbarCreated");
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
59 break;
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
60
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
61 case WM_TIMER:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
62 gaim_debug_info("docklet", "WM_TIMER\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
63 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
64
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
65 case WM_DESTROY:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
66 gaim_debug_info("docklet", "WM_DESTROY\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
67 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
68
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
69 case WM_TRAYMESSAGE:
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
70 {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
71 int type = 0;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
72
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
73 /* We'll use Double Click - Single click over on linux */
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
74 if(lparam == WM_LBUTTONDBLCLK)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
75 type = 1;
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
76 else if(lparam == WM_MBUTTONUP)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
77 type = 2;
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
78 else if(lparam == WM_RBUTTONUP)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
79 type = 3;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
80 else
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
81 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
82
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15522
diff changeset
83 pidgin_docklet_clicked(type);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
84 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
85 }
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
86 default:
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
87 if (msg == taskbarRestartMsg) {
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
88 /* explorer crashed and left us hanging...
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
89 This will put the systray icon back in it's place, when it restarts */
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
90 Shell_NotifyIcon(NIM_ADD, &_nicon_data);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
91 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
92 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
93 }/* end switch */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
94
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
95 return DefWindowProc(hwnd, msg, wparam, lparam);
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
96 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
97
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
98 /* Create hidden window to process systray messages */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
99 static HWND systray_create_hiddenwin() {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
100 WNDCLASSEX wcex;
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
101 LPCTSTR wname;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
102
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
103 wname = TEXT("WinpidginSystrayWinCls");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
104
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
105 wcex.cbSize = sizeof(wcex);
11709
da6e9cd5f6d9 [gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents: 10520
diff changeset
106 wcex.style = 0;
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
107 wcex.lpfnWndProc = systray_mainmsg_handler;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
108 wcex.cbClsExtra = 0;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
109 wcex.cbWndExtra = 0;
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
110 wcex.hInstance = winpidgin_hinstance();
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
111 wcex.hIcon = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
112 wcex.hCursor = NULL,
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
113 wcex.hbrBackground = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
114 wcex.lpszMenuName = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
115 wcex.lpszClassName = wname;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
116 wcex.hIconSm = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
117
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
118 RegisterClassEx(&wcex);
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
119
9863
323e4fe28791 [gaim-migrate @ 10742]
Mark Doliner <markdoliner@pidgin.im>
parents: 9709
diff changeset
120 /* Create the window */
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
121 return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, winpidgin_hinstance(), 0));
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
122 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
123
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
124 static void systray_init_icon(HWND hWnd) {
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
125 ZeroMemory(&_nicon_data, sizeof(_nicon_data));
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
126 _nicon_data.cbSize = sizeof(NOTIFYICONDATA);
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
127 _nicon_data.hWnd = hWnd;
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
128 _nicon_data.uID = 0;
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
129 _nicon_data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
130 _nicon_data.uCallbackMessage = WM_TRAYMESSAGE;
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
131 _nicon_data.hIcon = NULL;
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
132 lstrcpy(_nicon_data.szTip, PIDGIN_NAME);
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
133 Shell_NotifyIcon(NIM_ADD, &_nicon_data);
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15522
diff changeset
134 pidgin_docklet_embedded();
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
135 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
136
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
137 /* This is ganked from GTK+.
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
138 * When we can use GTK+ 2.10 and the GtkStatusIcon stuff, this will no longer be necesary */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
139 #define WIN32_GDI_FAILED(api) printf("GDI FAILED %s\n", api)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
140
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
141 static gboolean
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
142 _gdk_win32_pixbuf_to_hicon_supports_alpha (void)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
143 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
144 static gboolean is_win_xp=FALSE, is_win_xp_checked=FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
145
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
146 if (!is_win_xp_checked)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
147 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
148 is_win_xp_checked = TRUE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
149
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
150 if (!G_WIN32_IS_NT_BASED ())
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
151 is_win_xp = FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
152 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
153 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
154 OSVERSIONINFO version;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
155
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
156 memset (&version, 0, sizeof (version));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
157 version.dwOSVersionInfoSize = sizeof (version);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
158 is_win_xp = GetVersionEx (&version)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
159 && version.dwPlatformId == VER_PLATFORM_WIN32_NT
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
160 && (version.dwMajorVersion > 5
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
161 || (version.dwMajorVersion == 5 && version.dwMinorVersion >= 1));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
162 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
163 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
164 return is_win_xp;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
165 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
166
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
167 static HBITMAP
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
168 create_alpha_bitmap (gint size,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
169 guchar **outdata)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
170 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
171 BITMAPV5HEADER bi;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
172 HDC hdc;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
173 HBITMAP hBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
174
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
175 ZeroMemory (&bi, sizeof (BITMAPV5HEADER));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
176 bi.bV5Size = sizeof (BITMAPV5HEADER);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
177 bi.bV5Height = bi.bV5Width = size;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
178 bi.bV5Planes = 1;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
179 bi.bV5BitCount = 32;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
180 bi.bV5Compression = BI_BITFIELDS;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
181 /* The following mask specification specifies a supported 32 BPP
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
182 * alpha format for Windows XP (BGRA format).
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
183 */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
184 bi.bV5RedMask = 0x00FF0000;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
185 bi.bV5GreenMask = 0x0000FF00;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
186 bi.bV5BlueMask = 0x000000FF;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
187 bi.bV5AlphaMask = 0xFF000000;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
188
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
189 /* Create the DIB section with an alpha channel. */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
190 hdc = GetDC (NULL);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
191 if (!hdc)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
192 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
193 WIN32_GDI_FAILED ("GetDC");
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
194 return NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
195 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
196 hBitmap = CreateDIBSection (hdc, (BITMAPINFO *)&bi, DIB_RGB_COLORS,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
197 (PVOID *) outdata, NULL, (DWORD)0);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
198 if (hBitmap == NULL)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
199 WIN32_GDI_FAILED ("CreateDIBSection");
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
200 ReleaseDC (NULL, hdc);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
201
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
202 return hBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
203 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
204
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
205 static HBITMAP
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
206 create_color_bitmap (gint size,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
207 guchar **outdata,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
208 gint bits)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
209 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
210 struct {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
211 BITMAPV4HEADER bmiHeader;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
212 RGBQUAD bmiColors[2];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
213 } bmi;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
214 HDC hdc;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
215 HBITMAP hBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
216
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
217 ZeroMemory (&bmi, sizeof (bmi));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
218 bmi.bmiHeader.bV4Size = sizeof (BITMAPV4HEADER);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
219 bmi.bmiHeader.bV4Height = bmi.bmiHeader.bV4Width = size;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
220 bmi.bmiHeader.bV4Planes = 1;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
221 bmi.bmiHeader.bV4BitCount = bits;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
222 bmi.bmiHeader.bV4V4Compression = BI_RGB;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
223
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
224 /* when bits is 1, these will be used.
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
225 * bmiColors[0] already zeroed from ZeroMemory()
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
226 */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
227 bmi.bmiColors[1].rgbBlue = 0xFF;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
228 bmi.bmiColors[1].rgbGreen = 0xFF;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
229 bmi.bmiColors[1].rgbRed = 0xFF;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
230
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
231 hdc = GetDC (NULL);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
232 if (!hdc)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
233 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
234 WIN32_GDI_FAILED ("GetDC");
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
235 return NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
236 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
237 hBitmap = CreateDIBSection (hdc, (BITMAPINFO *)&bmi, DIB_RGB_COLORS,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
238 (PVOID *) outdata, NULL, (DWORD)0);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
239 if (hBitmap == NULL)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
240 WIN32_GDI_FAILED ("CreateDIBSection");
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
241 ReleaseDC (NULL, hdc);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
242
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
243 return hBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
244 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
245
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
246 static gboolean
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
247 pixbuf_to_hbitmaps_alpha_winxp (GdkPixbuf *pixbuf,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
248 HBITMAP *color,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
249 HBITMAP *mask)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
250 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
251 /* Based on code from
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
252 * http://www.dotnet247.com/247reference/msgs/13/66301.aspx
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
253 */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
254 HBITMAP hColorBitmap, hMaskBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
255 guchar *indata, *inrow;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
256 guchar *colordata, *colorrow, *maskdata, *maskbyte;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
257 gint width, height, size, i, i_offset, j, j_offset, rowstride;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
258 guint maskstride, mask_bit;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
259
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
260 width = gdk_pixbuf_get_width (pixbuf); /* width of icon */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
261 height = gdk_pixbuf_get_height (pixbuf); /* height of icon */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
262
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
263 /* The bitmaps are created square */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
264 size = MAX (width, height);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
265
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
266 hColorBitmap = create_alpha_bitmap (size, &colordata);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
267 if (!hColorBitmap)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
268 return FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
269 hMaskBitmap = create_color_bitmap (size, &maskdata, 1);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
270 if (!hMaskBitmap)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
271 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
272 DeleteObject (hColorBitmap);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
273 return FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
274 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
275
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
276 /* MSDN says mask rows are aligned to "LONG" boundaries */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
277 maskstride = (((size + 31) & ~31) >> 3);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
278
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
279 indata = gdk_pixbuf_get_pixels (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
280 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
281
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
282 if (width > height)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
283 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
284 i_offset = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
285 j_offset = (width - height) / 2;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
286 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
287 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
288 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
289 i_offset = (height - width) / 2;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
290 j_offset = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
291 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
292
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
293 for (j = 0; j < height; j++)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
294 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
295 colorrow = colordata + 4*(j+j_offset)*size + 4*i_offset;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
296 maskbyte = maskdata + (j+j_offset)*maskstride + i_offset/8;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
297 mask_bit = (0x80 >> (i_offset % 8));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
298 inrow = indata + (height-j-1)*rowstride;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
299 for (i = 0; i < width; i++)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
300 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
301 colorrow[4*i+0] = inrow[4*i+2];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
302 colorrow[4*i+1] = inrow[4*i+1];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
303 colorrow[4*i+2] = inrow[4*i+0];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
304 colorrow[4*i+3] = inrow[4*i+3];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
305 if (inrow[4*i+3] == 0)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
306 maskbyte[0] |= mask_bit; /* turn ON bit */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
307 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
308 maskbyte[0] &= ~mask_bit; /* turn OFF bit */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
309 mask_bit >>= 1;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
310 if (mask_bit == 0)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
311 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
312 mask_bit = 0x80;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
313 maskbyte++;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
314 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
315 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
316 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
317
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
318 *color = hColorBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
319 *mask = hMaskBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
320
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
321 return TRUE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
322 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
323
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
324 static gboolean
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
325 pixbuf_to_hbitmaps_normal (GdkPixbuf *pixbuf,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
326 HBITMAP *color,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
327 HBITMAP *mask)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
328 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
329 /* Based on code from
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
330 * http://www.dotnet247.com/247reference/msgs/13/66301.aspx
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
331 */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
332 HBITMAP hColorBitmap, hMaskBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
333 guchar *indata, *inrow;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
334 guchar *colordata, *colorrow, *maskdata, *maskbyte;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
335 gint width, height, size, i, i_offset, j, j_offset, rowstride, nc, bmstride;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
336 gboolean has_alpha;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
337 guint maskstride, mask_bit;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
338
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
339 width = gdk_pixbuf_get_width (pixbuf); /* width of icon */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
340 height = gdk_pixbuf_get_height (pixbuf); /* height of icon */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
341
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
342 /* The bitmaps are created square */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
343 size = MAX (width, height);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
344
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
345 hColorBitmap = create_color_bitmap (size, &colordata, 24);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
346 if (!hColorBitmap)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
347 return FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
348 hMaskBitmap = create_color_bitmap (size, &maskdata, 1);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
349 if (!hMaskBitmap)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
350 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
351 DeleteObject (hColorBitmap);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
352 return FALSE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
353 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
354
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
355 /* rows are always aligned on 4-byte boundarys */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
356 bmstride = size * 3;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
357 if (bmstride % 4 != 0)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
358 bmstride += 4 - (bmstride % 4);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
359
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
360 /* MSDN says mask rows are aligned to "LONG" boundaries */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
361 maskstride = (((size + 31) & ~31) >> 3);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
362
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
363 indata = gdk_pixbuf_get_pixels (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
364 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
365 nc = gdk_pixbuf_get_n_channels (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
366 has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
367
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
368 if (width > height)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
369 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
370 i_offset = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
371 j_offset = (width - height) / 2;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
372 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
373 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
374 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
375 i_offset = (height - width) / 2;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
376 j_offset = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
377 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
378
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
379 for (j = 0; j < height; j++)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
380 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
381 colorrow = colordata + (j+j_offset)*bmstride + 3*i_offset;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
382 maskbyte = maskdata + (j+j_offset)*maskstride + i_offset/8;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
383 mask_bit = (0x80 >> (i_offset % 8));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
384 inrow = indata + (height-j-1)*rowstride;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
385 for (i = 0; i < width; i++)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
386 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
387 if (has_alpha && inrow[nc*i+3] < 128)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
388 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
389 colorrow[3*i+0] = colorrow[3*i+1] = colorrow[3*i+2] = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
390 maskbyte[0] |= mask_bit; /* turn ON bit */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
391 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
392 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
393 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
394 colorrow[3*i+0] = inrow[nc*i+2];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
395 colorrow[3*i+1] = inrow[nc*i+1];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
396 colorrow[3*i+2] = inrow[nc*i+0];
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
397 maskbyte[0] &= ~mask_bit; /* turn OFF bit */
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
398 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
399 mask_bit >>= 1;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
400 if (mask_bit == 0)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
401 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
402 mask_bit = 0x80;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
403 maskbyte++;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
404 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
405 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
406 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
407
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
408 *color = hColorBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
409 *mask = hMaskBitmap;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
410
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
411 return TRUE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
412 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
413
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
414 static HICON
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
415 pixbuf_to_hicon (GdkPixbuf *pixbuf)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
416 {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
417 gint x = 0, y = 0;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
418 gboolean is_icon = TRUE;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
419 ICONINFO ii;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
420 HICON icon;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
421 gboolean success;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
422
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
423 if (pixbuf == NULL)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
424 return NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
425
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
426 if (_gdk_win32_pixbuf_to_hicon_supports_alpha() && gdk_pixbuf_get_has_alpha (pixbuf))
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
427 success = pixbuf_to_hbitmaps_alpha_winxp (pixbuf, &ii.hbmColor, &ii.hbmMask);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
428 else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
429 success = pixbuf_to_hbitmaps_normal (pixbuf, &ii.hbmColor, &ii.hbmMask);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
430
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
431 if (!success)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
432 return NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
433
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
434 ii.fIcon = is_icon;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
435 ii.xHotspot = x;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
436 ii.yHotspot = y;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
437 icon = CreateIconIndirect (&ii);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
438 DeleteObject (ii.hbmColor);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
439 DeleteObject (ii.hbmMask);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
440 return icon;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
441 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
442
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
443 static HICON load_hicon_from_stock(const char *stock) {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
444 HICON hicon = NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
445 GdkPixbuf *pixbuf = gtk_widget_render_icon(image, stock,
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
446 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), NULL);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
447
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
448 if (pixbuf) {
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
449 hicon = pixbuf_to_hicon(pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
450 g_object_unref(pixbuf);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
451 } else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
452 gaim_debug_error("Unable to load pixbuf for %s.\n", stock);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
453
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
454 return hicon;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
455 }
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
456
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
457
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
458 static void systray_change_icon(HICON hicon) {
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
459 g_return_if_fail(hicon != NULL);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
460
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
461 _nicon_data.hIcon = hicon;
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
462 Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
463 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
464
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
465 static void systray_remove_nid(void) {
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
466 Shell_NotifyIcon(NIM_DELETE, &_nicon_data);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
467 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
468
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
469 static void winpidgin_tray_update_icon(DockletStatus icon) {
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
470
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
471 g_return_if_fail(image != NULL);
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
472 g_return_if_fail(icon < (sizeof(cached_icons) / sizeof(HICON)));
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
473
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
474 /* Look up and cache the HICON if we don't already have it */
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
475 if (cached_icons[icon] == NULL) {
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
476 const gchar *icon_name = NULL;
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
477 switch (icon) {
11709
da6e9cd5f6d9 [gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents: 10520
diff changeset
478 case DOCKLET_STATUS_OFFLINE:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
479 icon_name = PIDGIN_STOCK_TRAY_OFFLINE;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
480 break;
11709
da6e9cd5f6d9 [gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents: 10520
diff changeset
481 case DOCKLET_STATUS_CONNECTING:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
482 icon_name = PIDGIN_STOCK_TRAY_CONNECT;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
483 break;
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
484 case DOCKLET_STATUS_AVAILABLE:
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
485 icon_name = PIDGIN_STOCK_TRAY_AVAILABLE;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
486 break;
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
487 case DOCKLET_STATUS_PENDING:
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
488 icon_name = PIDGIN_STOCK_TRAY_PENDING;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
489 break;
11709
da6e9cd5f6d9 [gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents: 10520
diff changeset
490 case DOCKLET_STATUS_AWAY:
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
491 icon_name = PIDGIN_STOCK_TRAY_AWAY;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
492 break;
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
493 case DOCKLET_STATUS_BUSY:
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
494 icon_name = PIDGIN_STOCK_TRAY_BUSY;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
495 break;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
496 case DOCKLET_STATUS_XA:
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
497 icon_name = PIDGIN_STOCK_TRAY_XA;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
498 break;
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
499 }
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
500
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
501 g_return_if_fail(icon_name != NULL);
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
502
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
503 cached_icons[icon] = load_hicon_from_stock(icon_name);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
504 }
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
505
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
506 systray_change_icon(cached_icons[icon]);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
507 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
508
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
509 static void winpidgin_tray_blank_icon() {
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
510 _nicon_data.hIcon = NULL;
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
511 Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
512 }
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
513
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
514 static void winpidgin_tray_set_tooltip(gchar *tooltip) {
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
515 if (tooltip) {
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
516 char *locenc = NULL;
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
517 locenc = g_locale_from_utf8(tooltip, -1, NULL, NULL, NULL);
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
518 lstrcpyn(_nicon_data.szTip, locenc, sizeof(_nicon_data.szTip) / sizeof(TCHAR));
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
519 g_free(locenc);
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
520 } else {
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
521 lstrcpy(_nicon_data.szTip, PIDGIN_NAME);
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12016
diff changeset
522 }
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
523 Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6425
diff changeset
524 }
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6425
diff changeset
525
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
526 static void winpidgin_tray_minimize(PidginBuddyList *gtkblist) {
12016
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
527 MinimizeWndToTray(GDK_WINDOW_HWND(gtkblist->window->window));
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
528 }
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
529
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
530 static void winpidgin_tray_maximize(PidginBuddyList *gtkblist) {
12016
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
531 RestoreWndFromTray(GDK_WINDOW_HWND(gtkblist->window->window));
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
532 }
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
533
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
534
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
535 static void winpidgin_tray_create() {
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
536 /* dummy window to process systray messages */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
537 systray_hwnd = systray_create_hiddenwin();
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
538
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
539 image = gtk_image_new();
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
540 #if GLIB_CHECK_VERSION(2,10,0)
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
541 g_object_ref_sink(image);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
542 #else
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
543 g_object_ref(image);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
544 gtk_object_sink(GTK_OBJECT(image));
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
545 #endif
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
546
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
547 /* Create icon in systray */
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
548 systray_init_icon(systray_hwnd);
12016
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
549
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15522
diff changeset
550 gaim_signal_connect(pidgin_blist_get_handle(), "gtkblist-hiding",
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
551 pidgin_docklet_get_handle(), GAIM_CALLBACK(winpidgin_tray_minimize), NULL);
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15522
diff changeset
552 gaim_signal_connect(pidgin_blist_get_handle(), "gtkblist-unhiding",
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
553 pidgin_docklet_get_handle(), GAIM_CALLBACK(winpidgin_tray_maximize), NULL);
12016
0517ad5d0196 [gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents: 11709
diff changeset
554
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
555 gaim_debug_info("docklet", "created\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
556 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
557
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
558 static void winpidgin_tray_destroy() {
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
559 int cached_cnt = sizeof(cached_icons) / sizeof(HICON);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
560 systray_remove_nid();
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
561 DestroyWindow(systray_hwnd);
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15522
diff changeset
562 pidgin_docklet_remove();
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
563
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
564 while (--cached_cnt >= 0) {
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
565 if (cached_icons[cached_cnt] != NULL)
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
566 DestroyIcon(cached_icons[cached_cnt]);
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
567 cached_icons[cached_cnt] = NULL;
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
568 }
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
569
15765
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
570 g_object_unref(image);
f281403e98cf Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents: 15574
diff changeset
571 image = NULL;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
572 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
573
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
574 static struct docklet_ui_ops winpidgin_tray_ops =
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
575 {
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
576 winpidgin_tray_create,
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
577 winpidgin_tray_destroy,
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
578 winpidgin_tray_update_icon,
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
579 winpidgin_tray_blank_icon,
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
580 winpidgin_tray_set_tooltip,
10268
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9863
diff changeset
581 NULL
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
582 };
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
583
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
584 /* Used by docklet's plugin load func */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
585 void docklet_ui_init() {
15770
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
586 /* Initialize the cached icons to NULL */
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
587 ZeroMemory(cached_icons, sizeof(cached_icons));
e0454c66f042 Cache the converted docklet HICONs. Sean noticed that there are actually .ico files in pixmaps/tray/16 (something that I missed). I'm not sure if I should just use those and eliminate the stock pixmap to HICON conversion hackery or if we can just get rid of those and avoid the duplication.
Daniel Atallah <datallah@pidgin.im>
parents: 15765
diff changeset
588
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15562
diff changeset
589 pidgin_docklet_set_ui_ops(&winpidgin_tray_ops);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
590 }

mercurial