Mercurial > pidgin.yaz
changeset 4555:75f75ef235e4
[gaim-migrate @ 4835]
Hack to circumvent win32 gtk_window_move bug
committer: Tailor Script <tailor@pidgin.im>
author | Herman Bloggs <hermanator12002@yahoo.com> |
---|---|
date | Fri, 07 Feb 2003 23:26:47 +0000 |
parents | fbf9f873abfc |
children | f7f0c7fef6be |
files | src/win32/win32dep.c src/win32/win32dep.h |
diffstat | 2 files changed, 41 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/win32/win32dep.c Fri Feb 07 22:52:19 2003 +0000 +++ b/src/win32/win32dep.c Fri Feb 07 23:26:47 2003 +0000 @@ -87,14 +87,13 @@ * PUBLIC CODE */ -/* Misc Wingaim functions */ HINSTANCE wgaim_hinstance(void) { return gaimexe_hInstance; } /* Escape windows dir separators. This is needed when paths are saved, and on being read back have their '\' chars used as an escape char. - Returns and allocated string which needs to be freed. + Returns an allocated string which needs to be freed. */ char* wgaim_escape_dirsep( char* filename ) { int sepcount=0; @@ -119,6 +118,32 @@ return ret; } +/* + * This is a hack to circumvent the conflict between the + * windows behaviour of gtk_window_get_pos and gtk_window_move, which + * exists in GTK+ v2.2.0. GTK+ documentation explains the following + * should be true for gtk_window_get_pos: + * This function returns the position you need to pass to + * gtk_window_move() to keep window in its current position. + * This is false (for windows). gtk_window_get_pos returns + * client coords, whereas gtk_window_move accepts non-client coords. + * Our solution, until this is fixed, is to anticipate the offset and + * adjust the coordinates passed to gtk_window_move. + */ +void wgaim_gtk_window_move(GtkWindow *window, gint x, gint y) { + LONG style, extended_style; + RECT trect; + HWND hWnd = GDK_WINDOW_HWND(GTK_WIDGET(window)->window); + + style = GetWindowLong(hWnd, GWL_STYLE); + extended_style = GetWindowLong (hWnd, GWL_EXSTYLE); + GetClientRect (hWnd, &trect); + AdjustWindowRectEx (&trect, style, FALSE, extended_style); + + gtk_window_move(window, x + (-1 * trect.left) , y + (-1 * trect.top)); +} + + /* Determine whether the specified dll contains the specified procedure. If so, load it (if not already loaded). */ FARPROC wgaim_find_and_loadproc( char* dllname, char* procedure ) { @@ -137,11 +162,13 @@ } if((proc=GetProcAddress(hmod, procedure))) { - debug_printf("This version of %s contains %s\n", dllname, procedure); + debug_printf("This version of %s contains %s\n", + dllname, procedure); return proc; } else { - debug_printf("Function: %s not found in dll: %s\n", procedure, dllname); + debug_printf("Function: %s not found in dll: %s\n", + procedure, dllname); if(did_load) { /* unload dll */ FreeLibrary(hmod); @@ -227,8 +254,12 @@ WGAIM_FLASH_INFO *finfo = g_new0(WGAIM_FLASH_INFO, 1); /* Start Flashing window */ - finfo->t_handle = g_timeout_add(1000, flash_window_cb, GDK_WINDOW_HWND(window->window)); - finfo->sig_handler = g_signal_connect(G_OBJECT(window), "focus-in-event", G_CALLBACK(halt_flash_filter), finfo); + finfo->t_handle = g_timeout_add(1000, + flash_window_cb, + GDK_WINDOW_HWND(window->window)); + finfo->sig_handler = g_signal_connect(G_OBJECT(window), + "focus-in-event", + G_CALLBACK(halt_flash_filter), finfo); } }
--- a/src/win32/win32dep.h Fri Feb 07 22:52:19 2003 +0000 +++ b/src/win32/win32dep.h Fri Feb 07 23:26:47 2003 +0000 @@ -44,6 +44,10 @@ #define LIBDIR wgaim_lib_dir() #define LOCALEDIR wgaim_locale_dir() +/* Temp solution for gtk_window_get_pos & gtk_window_move conflict */ +#define gtk_window_move( window, x, y ) \ +wgaim_gtk_window_move( ## window ##, ## x ##, ## y ## ) + /* * Gtk specific */