Tue, 17 Oct 2006 08:13:41 +0000
[gaim-migrate @ 17495]
This should fix the statusbox issues that were keeping us from releasing beta
4 (and which were just really annoying). Thakn sadrul for most of this, I just
added the if (index == -1) bit. Anyway, the way this works now is that for
saved/popular statuses the primitive underlying that status is where the
dropdown for the statusbox starts. If we don't like that we can change it but
I'm not sure we'll find something better.
Also, this might plug a couple leaks, I'm not really sure but it certainly
looks right.
Up next, the patch to make the docklet use the per-protocol statuses in the
top section.
| 14286 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * File: gtkwin32dep.c | |
| 5 | * Date: June, 2002 | |
| 6 | * Description: Windows dependant code for Gaim | |
| 7 | * | |
| 8 | * Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com> | |
| 9 | * | |
| 10 | * This program is free software; you can redistribute it and/or modify | |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 | * | |
| 24 | */ | |
| 25 | #define _WIN32_IE 0x500 | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
26 | #ifndef WINVER |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
27 | #define WINVER 0x0500 /* W2K */ |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
28 | #endif |
| 14286 | 29 | #include <windows.h> |
| 30 | #include <io.h> | |
| 31 | #include <stdlib.h> | |
| 32 | #include <stdio.h> | |
| 33 | #include <winuser.h> | |
| 34 | ||
| 35 | #include <glib.h> | |
| 36 | #include <glib/gstdio.h> | |
| 37 | #include <gtk/gtk.h> | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
38 | #include <gdk/gdkwin32.h> |
| 14286 | 39 | |
| 40 | #include "gaim.h" | |
| 41 | #include "debug.h" | |
| 42 | #include "notify.h" | |
| 43 | ||
| 44 | #include "resource.h" | |
| 45 | #include "idletrack.h" | |
| 46 | #include "zlib.h" | |
| 47 | #include "untar.h" | |
| 48 | ||
| 49 | #include <libintl.h> | |
| 50 | ||
| 51 | #include "gtkwin32dep.h" | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
52 | #include "win32dep.h" |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
53 | #include "gtkconv.h" |
| 14286 | 54 | #include "wspell.h" |
| 55 | ||
| 56 | /* | |
| 57 | * GLOBALS | |
| 58 | */ | |
| 59 | HINSTANCE gaimexe_hInstance = 0; | |
| 60 | HINSTANCE gtkgaimdll_hInstance = 0; | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
61 | HWND messagewin_hwnd; |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
62 | static int gtkwin32_handle; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
63 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
64 | typedef BOOL (CALLBACK* LPFNFLASHWINDOWEX)(PFLASHWINFO); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
65 | static LPFNFLASHWINDOWEX MyFlashWindowEx = NULL; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
66 | |
| 14286 | 67 | |
| 68 | /* | |
| 69 | * PUBLIC CODE | |
| 70 | */ | |
| 71 | ||
| 72 | HINSTANCE gtkwgaim_hinstance(void) { | |
| 73 | return gaimexe_hInstance; | |
| 74 | } | |
| 75 | ||
| 76 | int gtkwgaim_gz_decompress(const char* in, const char* out) { | |
| 77 | gzFile fin; | |
| 78 | FILE *fout; | |
| 79 | char buf[1024]; | |
| 80 | int ret; | |
| 81 | ||
| 82 | if((fin = gzopen(in, "rb"))) { | |
| 83 | if(!(fout = g_fopen(out, "wb"))) { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
84 | gaim_debug_error("gtkwgaim_gz_decompress", "Error opening file: %s\n", out); |
| 14286 | 85 | gzclose(fin); |
| 86 | return 0; | |
| 87 | } | |
| 88 | } | |
| 89 | else { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
90 | gaim_debug_error("gtkwgaim_gz_decompress", "gzopen failed to open: %s\n", in); |
| 14286 | 91 | return 0; |
| 92 | } | |
| 93 | ||
| 94 | while((ret = gzread(fin, buf, 1024))) { | |
| 95 | if(fwrite(buf, 1, ret, fout) < ret) { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
96 | gaim_debug_error("wgaim_gz_decompress", "Error writing %d bytes to file\n", ret); |
| 14286 | 97 | gzclose(fin); |
| 98 | fclose(fout); | |
| 99 | return 0; | |
| 100 | } | |
| 101 | } | |
| 102 | fclose(fout); | |
| 103 | gzclose(fin); | |
| 104 | ||
| 105 | if(ret < 0) { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
106 | gaim_debug_error("gtkwgaim_gz_decompress", "gzread failed while reading: %s\n", in); |
| 14286 | 107 | return 0; |
| 108 | } | |
| 109 | ||
| 110 | return 1; | |
| 111 | } | |
| 112 | ||
| 113 | int gtkwgaim_gz_untar(const char* filename, const char* destdir) { | |
| 114 | char tmpfile[_MAX_PATH]; | |
| 115 | char template[]="wgaimXXXXXX"; | |
| 116 | ||
| 117 | sprintf(tmpfile, "%s%s%s", g_get_tmp_dir(), G_DIR_SEPARATOR_S, _mktemp(template)); | |
| 118 | if(gtkwgaim_gz_decompress(filename, tmpfile)) { | |
| 119 | int ret; | |
| 120 | if(untar(tmpfile, destdir, UNTAR_FORCE | UNTAR_QUIET)) | |
| 121 | ret = 1; | |
| 122 | else { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
123 | gaim_debug_error("gtkwgaim_gz_untar", "Failure untaring %s\n", tmpfile); |
| 14286 | 124 | ret = 0; |
| 125 | } | |
| 126 | g_unlink(tmpfile); | |
| 127 | return ret; | |
| 128 | } | |
| 129 | else { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
130 | gaim_debug_error("gtkwgaim_gz_untar", "Failed to gz decompress %s\n", filename); |
| 14286 | 131 | return 0; |
| 132 | } | |
| 133 | } | |
| 134 | ||
| 135 | void gtkwgaim_notify_uri(const char *uri) { | |
| 136 | ||
| 137 | /* We'll allow whatever URI schemes are supported by the | |
| 138 | * default http browser. | |
| 139 | */ | |
| 140 | ||
| 141 | if (G_WIN32_HAVE_WIDECHAR_API()) { | |
| 142 | SHELLEXECUTEINFOW wsinfo; | |
| 143 | wchar_t *w_uri; | |
| 144 | ||
| 145 | w_uri = g_utf8_to_utf16(uri, -1, NULL, NULL, NULL); | |
| 146 | ||
| 147 | memset(&wsinfo, 0, sizeof(wsinfo)); | |
| 148 | wsinfo.cbSize = sizeof(wsinfo); | |
| 149 | wsinfo.fMask = SEE_MASK_CLASSNAME; | |
| 150 | wsinfo.lpVerb = L"open"; | |
| 151 | wsinfo.lpFile = w_uri; | |
| 152 | wsinfo.nShow = SW_SHOWNORMAL; | |
| 153 | wsinfo.lpClass = L"http"; | |
| 154 | ||
| 155 | if(!ShellExecuteExW(&wsinfo)) | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
156 | gaim_debug_error("gtkwgaim", "Error opening URI: %s error: %d\n", |
| 14286 | 157 | uri, (int) wsinfo.hInstApp); |
| 158 | ||
| 159 | g_free(w_uri); | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
160 | } else { |
| 14286 | 161 | SHELLEXECUTEINFOA sinfo; |
| 162 | gchar *locale_uri; | |
| 163 | ||
| 164 | locale_uri = g_locale_from_utf8(uri, -1, NULL, NULL, NULL); | |
| 165 | ||
| 166 | memset(&sinfo, 0, sizeof(sinfo)); | |
| 167 | sinfo.cbSize = sizeof(sinfo); | |
| 168 | sinfo.fMask = SEE_MASK_CLASSNAME; | |
| 169 | sinfo.lpVerb = "open"; | |
| 170 | sinfo.lpFile = locale_uri; | |
| 171 | sinfo.nShow = SW_SHOWNORMAL; | |
| 172 | sinfo.lpClass = "http"; | |
| 173 | ||
| 174 | if(!ShellExecuteExA(&sinfo)) | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
175 | gaim_debug_error("gtkwgaim", "Error opening URI: %s error: %d\n", |
| 14286 | 176 | uri, (int) sinfo.hInstApp); |
| 177 | ||
| 178 | g_free(locale_uri); | |
| 179 | } | |
| 180 | } | |
| 181 | ||
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
182 | #define WM_FOCUS_REQUEST (WM_APP + 13) |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
183 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
184 | static LRESULT CALLBACK message_window_handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
185 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
186 | if (msg == WM_FOCUS_REQUEST) { |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
187 | gaim_debug_info("gtkwgaim", "Got external Buddy List focus request."); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
188 | gaim_blist_set_visible(TRUE); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
189 | return TRUE; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
190 | } |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
191 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
192 | return DefWindowProc(hwnd, msg, wparam, lparam); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
193 | } |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
194 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
195 | static HWND wgaim_message_window_init(void) { |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
196 | HWND win_hwnd; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
197 | WNDCLASSEX wcx; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
198 | LPCTSTR wname; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
199 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
200 | wname = TEXT("WingaimMsgWinCls"); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
201 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
202 | wcx.cbSize = sizeof(wcx); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
203 | wcx.style = 0; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
204 | wcx.lpfnWndProc = message_window_handler; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
205 | wcx.cbClsExtra = 0; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
206 | wcx.cbWndExtra = 0; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
207 | wcx.hInstance = gtkwgaim_hinstance(); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
208 | wcx.hIcon = NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
209 | wcx.hCursor = NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
210 | wcx.hbrBackground = NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
211 | wcx.lpszMenuName = NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
212 | wcx.lpszClassName = wname; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
213 | wcx.hIconSm = NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
214 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
215 | RegisterClassEx(&wcx); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
216 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
217 | /* Create the window */ |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
218 | if(!(win_hwnd = CreateWindow(wname, TEXT("WingaimMsgWin"), 0, 0, 0, 0, 0, |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
219 | NULL, NULL, gtkwgaim_hinstance(), 0))) { |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
220 | gaim_debug_error("gtkwgaim", |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
221 | "Unable to create message window.\n"); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
222 | return NULL; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
223 | } |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
224 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
225 | return win_hwnd; |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
226 | } |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
227 | |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
228 | static int |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
229 | halt_flash_filter(GtkWidget *widget, GdkEventFocus *event, gpointer data) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
230 | if(MyFlashWindowEx) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
231 | HWND hWnd = data; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
232 | FLASHWINFO info; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
233 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
234 | if(!IsWindow(hWnd)) |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
235 | return 0; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
236 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
237 | memset(&info, 0, sizeof(FLASHWINFO)); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
238 | info.cbSize = sizeof(FLASHWINFO); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
239 | info.hwnd = hWnd; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
240 | info.dwFlags = FLASHW_STOP; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
241 | info.dwTimeout = 0; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
242 | MyFlashWindowEx(&info); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
243 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
244 | return 0; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
245 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
246 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
247 | void |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
248 | gtkwgaim_conv_blink(GaimConversation *conv, GaimMessageFlags flags) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
249 | GaimGtkWindow *win; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
250 | GtkWidget *window; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
251 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
252 | /* Don't flash for our own messages or system messages */ |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
253 | if(flags & GAIM_MESSAGE_SEND || flags & GAIM_MESSAGE_SYSTEM) |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
254 | return; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
255 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
256 | if(conv == NULL) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
257 | gaim_debug_info("gtkwgaim", "No conversation found to blink.\n"); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
258 | return; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
259 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
260 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
261 | win = gaim_gtkconv_get_window(GAIM_GTK_CONVERSATION(conv)); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
262 | if(win == NULL) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
263 | gaim_debug_info("gtkwgaim", "No conversation windows found to blink.\n"); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
264 | return; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
265 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
266 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
267 | window = win->window; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
268 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
269 | if(MyFlashWindowEx) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
270 | FLASHWINFO info; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
271 | /* Don't flash if we have the window focused */ |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
272 | if(GetForegroundWindow() == GDK_WINDOW_HWND(window->window)) |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
273 | return; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
274 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
275 | memset(&info, 0, sizeof(FLASHWINFO)); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
276 | info.cbSize = sizeof(FLASHWINFO); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
277 | info.hwnd = GDK_WINDOW_HWND(window->window); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
278 | info.dwFlags = FLASHW_ALL | FLASHW_TIMER; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
279 | info.dwTimeout = 0; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
280 | MyFlashWindowEx(&info); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
281 | /* Stop flashing when window receives focus */ |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
282 | g_signal_connect(G_OBJECT(window), "focus-in-event", |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
283 | G_CALLBACK(halt_flash_filter), info.hwnd); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
284 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
285 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
286 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
287 | static gboolean |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
288 | gtkwgaim_conv_im_blink(GaimAccount *account, const char *who, char **message, |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
289 | GaimConversation *conv, GaimMessageFlags flags, void *data) |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
290 | { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
291 | gtkwgaim_conv_blink(conv, flags); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
292 | return FALSE; |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
293 | } |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
294 | |
| 14286 | 295 | void gtkwgaim_init(HINSTANCE hint) { |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
296 | |
| 14286 | 297 | gaim_debug_info("gtkwgaim", "gtkwgaim_init start\n"); |
| 298 | ||
| 299 | gaimexe_hInstance = hint; | |
| 300 | ||
| 301 | /* IdleTracker Initialization */ | |
| 302 | if(!wgaim_set_idlehooks()) | |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
303 | gaim_debug_error("gtkwgaim", "Failed to initialize idle tracker\n"); |
| 14286 | 304 | |
| 305 | wgaim_gtkspell_init(); | |
| 306 | gaim_debug_info("gtkwgaim", "GTK+ :%u.%u.%u\n", | |
| 307 | gtk_major_version, gtk_minor_version, gtk_micro_version); | |
| 308 | ||
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
309 | messagewin_hwnd = wgaim_message_window_init(); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
310 | |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
311 | MyFlashWindowEx = (LPFNFLASHWINDOWEX) wgaim_find_and_loadproc("user32.dll", "FlashWindowEx"); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
312 | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
313 | gaim_debug_info("gtkwgaim", "gtkwgaim_init end\n"); |
| 14286 | 314 | } |
| 315 | ||
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
316 | void gtkwgaim_post_init(void) { |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
317 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
318 | gaim_signal_connect(gaim_gtk_conversations_get_handle(), |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
319 | "displaying-im-msg", >kwin32_handle, GAIM_CALLBACK(gtkwgaim_conv_im_blink), |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
320 | NULL); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
321 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
322 | } |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14636
diff
changeset
|
323 | |
| 14286 | 324 | /* Windows Cleanup */ |
| 325 | ||
| 326 | void gtkwgaim_cleanup(void) { | |
|
14319
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
327 | gaim_debug_info("gtkwgaim", "gtkwgaim_cleanup\n"); |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
328 | |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
329 | if(messagewin_hwnd) |
|
b9a35c4948dc
[gaim-migrate @ 16939]
Daniel Atallah <datallah@pidgin.im>
parents:
14286
diff
changeset
|
330 | DestroyWindow(messagewin_hwnd); |
| 14286 | 331 | |
| 332 | /* Idle tracker cleanup */ | |
| 333 | wgaim_remove_idlehooks(); | |
| 334 | ||
| 335 | } | |
| 336 | ||
| 337 | /* DLL initializer */ | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
338 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { |
| 14286 | 339 | gtkgaimdll_hInstance = hinstDLL; |
| 340 | return TRUE; | |
| 341 | } | |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
342 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
343 | typedef HMONITOR WINAPI gaim_MonitorFromWindow(HWND, DWORD); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
344 | typedef BOOL WINAPI gaim_GetMonitorInfo(HMONITOR, LPMONITORINFO); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
345 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
346 | static gboolean |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
347 | get_WorkingAreaRectForWindow(HWND hwnd, RECT *workingAreaRc) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
348 | static gaim_MonitorFromWindow *the_MonitorFromWindow; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
349 | static gaim_GetMonitorInfo *the_GetMonitorInfo; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
350 | static gboolean initialized = FALSE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
351 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
352 | HMONITOR monitor; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
353 | MONITORINFO info; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
354 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
355 | if(!initialized) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
356 | the_MonitorFromWindow = (gaim_MonitorFromWindow*) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
357 | wgaim_find_and_loadproc("user32", "MonitorFromWindow"); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
358 | the_GetMonitorInfo = (gaim_GetMonitorInfo*) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
359 | wgaim_find_and_loadproc("user32", "GetMonitorInfoA"); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
360 | initialized = TRUE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
361 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
362 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
363 | if(!the_MonitorFromWindow) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
364 | return FALSE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
365 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
366 | if(!the_GetMonitorInfo) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
367 | return FALSE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
368 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
369 | monitor = the_MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
370 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
371 | info.cbSize = sizeof(info); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
372 | if(!the_GetMonitorInfo(monitor, &info)) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
373 | return FALSE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
374 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
375 | CopyRect(workingAreaRc, &(info.rcWork)); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
376 | return TRUE; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
377 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
378 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
379 | void gtkwgaim_ensure_onscreen(GtkWidget *win) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
380 | RECT windowRect, workingAreaRect, intersectionRect; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
381 | HWND hwnd = GDK_WINDOW_HWND(win->window); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
382 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
383 | g_return_if_fail(hwnd != NULL); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
384 | GetWindowRect(hwnd, &windowRect); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
385 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
386 | gaim_debug_info("win32placement", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
387 | "Window RECT: L:%ld R:%ld T:%ld B:%ld\n", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
388 | windowRect.left, windowRect.right, |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
389 | windowRect.top, windowRect.bottom); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
390 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
391 | if(!get_WorkingAreaRectForWindow(hwnd, &workingAreaRect)) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
392 | gaim_debug_info("win32placement", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
393 | "Couldn't get multimonitor working area\n"); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
394 | if(!SystemParametersInfo(SPI_GETWORKAREA, 0, &workingAreaRect, FALSE)) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
395 | /* I don't think this will ever happen */ |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
396 | workingAreaRect.left = 0; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
397 | workingAreaRect.top = 0; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
398 | workingAreaRect.bottom = GetSystemMetrics(SM_CYSCREEN); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
399 | workingAreaRect.right = GetSystemMetrics(SM_CXSCREEN); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
400 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
401 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
402 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
403 | gaim_debug_info("win32placement", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
404 | "Working Area RECT: L:%ld R:%ld T:%ld B:%ld\n", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
405 | workingAreaRect.left, workingAreaRect.right, |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
406 | workingAreaRect.top, workingAreaRect.bottom); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
407 | |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
408 | /** If the conversation window doesn't intersect perfectly with the working area, |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
409 | * move it to the top left corner of the working area */ |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
410 | if(!(IntersectRect(&intersectionRect, &windowRect, &workingAreaRect) |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
411 | && EqualRect(&intersectionRect, &windowRect))) { |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
412 | gaim_debug_info("win32placement", |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
413 | "conversation window out of working area, relocating\n"); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
414 | MoveWindow(hwnd, workingAreaRect.left, workingAreaRect.top, |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
415 | (windowRect.right - windowRect.left), |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
416 | (windowRect.bottom - windowRect.top), TRUE); |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
417 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
418 | } |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14319
diff
changeset
|
419 |