| 463 |
463 |
| 464 CopyRect(workingAreaRc, &(info.rcWork)); |
464 CopyRect(workingAreaRc, &(info.rcWork)); |
| 465 return TRUE; |
465 return TRUE; |
| 466 } |
466 } |
| 467 |
467 |
| 468 void winpidgin_ensure_onscreen(GtkWidget *win) { |
|
| 469 RECT winR, wAR, intR; |
|
| 470 HWND hwnd = GDK_WINDOW_HWND(win->window); |
|
| 471 typedef HRESULT (WINAPI* DwmIsCompositionEnabledFunction)(BOOL*); |
468 typedef HRESULT (WINAPI* DwmIsCompositionEnabledFunction)(BOOL*); |
| 472 typedef HRESULT (WINAPI* DwmGetWindowAttributeFunction)(HWND, DWORD, PVOID, DWORD); |
469 typedef HRESULT (WINAPI* DwmGetWindowAttributeFunction)(HWND, DWORD, PVOID, DWORD); |
| 473 static HMODULE dwmapi_module = NULL; |
470 static HMODULE dwmapi_module = NULL; |
| 474 static DwmIsCompositionEnabledFunction DwmIsCompositionEnabled = NULL; |
471 static DwmIsCompositionEnabledFunction DwmIsCompositionEnabled = NULL; |
| 475 static DwmGetWindowAttributeFunction DwmGetWindowAttribute = NULL; |
472 static DwmGetWindowAttributeFunction DwmGetWindowAttribute = NULL; |
| 479 |
476 |
| 480 static RECT |
477 static RECT |
| 481 get_actualWindowRect(HWND hwnd) |
478 get_actualWindowRect(HWND hwnd) |
| 482 { |
479 { |
| 483 RECT winR; |
480 RECT winR; |
| 484 |
481 |
| 485 GetWindowRect(hwnd, &winR); |
482 GetWindowRect(hwnd, &winR); |
| 486 |
483 |
| 487 if (dwmapi_module == NULL) { |
484 if (dwmapi_module == NULL) { |
| 488 dwmapi_module = GetModuleHandleW(L"dwmapi.dll"); |
485 dwmapi_module = GetModuleHandleW(L"dwmapi.dll"); |
| 489 if (dwmapi_module != NULL) { |
486 if (dwmapi_module != NULL) { |
| 490 DwmIsCompositionEnabled = (DwmIsCompositionEnabledFunction) GetProcAddress(dwmapi_module, "DwmIsCompositionEnabled"); |
487 DwmIsCompositionEnabled = (DwmIsCompositionEnabledFunction) GetProcAddress(dwmapi_module, "DwmIsCompositionEnabled"); |
| 491 DwmGetWindowAttribute = (DwmGetWindowAttributeFunction) GetProcAddress(dwmapi_module, "DwmGetWindowAttribute"); |
488 DwmGetWindowAttribute = (DwmGetWindowAttributeFunction) GetProcAddress(dwmapi_module, "DwmGetWindowAttribute"); |
| 492 } |
489 } |
| 493 } |
490 } |
| 494 |
491 |
| 495 if (DwmIsCompositionEnabled != NULL && DwmGetWindowAttribute != NULL) { |
492 if (DwmIsCompositionEnabled != NULL && DwmGetWindowAttribute != NULL) { |
| 496 BOOL pfEnabled; |
493 BOOL pfEnabled; |
| 497 if (SUCCEEDED(DwmIsCompositionEnabled(&pfEnabled))) { |
494 if (SUCCEEDED(DwmIsCompositionEnabled(&pfEnabled))) { |
| 498 RECT tempR; |
495 RECT tempR; |
| 499 if (SUCCEEDED(DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &tempR, sizeof(tempR)))) { |
496 if (SUCCEEDED(DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &tempR, sizeof(tempR)))) { |
| 500 winR = tempR; |
497 winR = tempR; |
| 501 } |
498 } |
| 502 } |
499 } |
| 503 } |
500 } |
| 504 |
501 |
| 505 return winR; |
502 return winR; |
| 506 } |
503 } |
| 507 |
504 |
| |
505 void winpidgin_ensure_onscreen(GtkWidget *win) { |
| |
506 RECT winR, wAR, intR; |
| |
507 HWND hwnd = GDK_WINDOW_HWND(win->window); |
| 508 |
508 |
| 509 g_return_if_fail(hwnd != NULL); |
509 g_return_if_fail(hwnd != NULL); |
| 510 winR = get_actualWindowRect(hwnd); |
510 winR = get_actualWindowRect(hwnd); |
| 511 |
511 |
| 512 purple_debug_info("win32placement", |
512 purple_debug_info("win32placement", |