pidgin/plugins/win32/winprefs/gtkappbar.c

changeset 35896
bfee243ed8b1
parent 31294
73607ab89c6f
child 40079
a37a1e349491
equal deleted inserted replaced
35895:bd19d3cd93e3 35896:bfee243ed8b1
41 typedef HMONITOR WINAPI purple_MonitorFromWindow(HWND, DWORD); 41 typedef HMONITOR WINAPI purple_MonitorFromWindow(HWND, DWORD);
42 typedef BOOL WINAPI purple_GetMonitorInfo(HMONITOR, LPMONITORINFO); 42 typedef BOOL WINAPI purple_GetMonitorInfo(HMONITOR, LPMONITORINFO);
43 43
44 static void gtk_appbar_do_dock(GtkAppBar *ab, UINT side); 44 static void gtk_appbar_do_dock(GtkAppBar *ab, UINT side);
45 45
46 static inline HWND
47 appbar_get_handle(GtkAppBar *ab)
48 {
49 return GDK_WINDOW_HWND(gtk_widget_get_window(ab->win));
50 }
51
46 /* Retrieve the rectangular display area from the specified monitor 52 /* Retrieve the rectangular display area from the specified monitor
47 * Return TRUE if successful, otherwise FALSE 53 * Return TRUE if successful, otherwise FALSE
48 */ 54 */
49 static gboolean 55 static gboolean
50 get_rect_from_monitor(HMODULE hmod, HMONITOR monitor, RECT *rect) { 56 get_rect_from_monitor(HMODULE hmod, HMONITOR monitor, RECT *rect) {
356 static void show_hide(GtkAppBar *ab, gboolean hide) { 362 static void show_hide(GtkAppBar *ab, gboolean hide) {
357 purple_debug_info("gtkappbar", "show_hide(%d)\n", hide); 363 purple_debug_info("gtkappbar", "show_hide(%d)\n", hide);
358 364
359 if (hide) { 365 if (hide) {
360 purple_debug_info("gtkappbar", "hidden\n"); 366 purple_debug_info("gtkappbar", "hidden\n");
361 gtk_appbar_unregister(ab, GDK_WINDOW_HWND(ab->win->window)); 367 gtk_appbar_unregister(ab, appbar_get_handle(ab));
362 ab->docked = TRUE; 368 ab->docked = TRUE;
363 ab->iconized = TRUE; 369 ab->iconized = TRUE;
364 } else { 370 } else {
365 ab->iconized = FALSE; 371 ab->iconized = FALSE;
366 purple_debug_info("gtkappbar", "shown\n"); 372 purple_debug_info("gtkappbar", "shown\n");
455 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "wnd_size\n"); 461 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "wnd_size\n");
456 462
457 if(msg->wParam == SIZE_MINIMIZED) { 463 if(msg->wParam == SIZE_MINIMIZED) {
458 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "Minimize\n"); 464 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "Minimize\n");
459 if(ab->docked) { 465 if(ab->docked) {
460 gtk_appbar_unregister(ab, GDK_WINDOW_HWND(ab->win->window)); 466 gtk_appbar_unregister(ab, appbar_get_handle(ab));
461 ab->docked = TRUE; 467 ab->docked = TRUE;
462 } 468 }
463 } 469 }
464 else if(msg->wParam == SIZE_RESTORED) { 470 else if(msg->wParam == SIZE_RESTORED) {
465 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "Restore\n"); 471 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "Restore\n");
598 static void gtk_appbar_do_dock(GtkAppBar *ab, UINT side) { 604 static void gtk_appbar_do_dock(GtkAppBar *ab, UINT side) {
599 RECT orig, windowRect; 605 RECT orig, windowRect;
600 606
601 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "gtk_appbar_do_dock\n"); 607 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "gtk_appbar_do_dock\n");
602 608
603 if(!ab || !IsWindow(GDK_WINDOW_HWND(ab->win->window))) 609 if (!ab || !IsWindow(appbar_get_handle(ab)))
604 return; 610 return;
605 611
606 ab->side = side; 612 ab->side = side;
607 get_window_normal_rc(GDK_WINDOW_HWND(ab->win->window), &(ab->docked_rect)); 613 get_window_normal_rc(appbar_get_handle(ab), &(ab->docked_rect));
608 CopyRect(&orig, &(ab->docked_rect)); 614 CopyRect(&orig, &(ab->docked_rect));
609 get_rect_of_window(GDK_WINDOW_HWND(ab->win->window), &windowRect); 615 get_rect_of_window(appbar_get_handle(ab), &windowRect);
610 gtk_appbar_querypos(ab, GDK_WINDOW_HWND(ab->win->window), windowRect); 616 gtk_appbar_querypos(ab, appbar_get_handle(ab), windowRect);
611 if(EqualRect(&orig, &(ab->docked_rect)) == 0) 617 if(EqualRect(&orig, &(ab->docked_rect)) == 0)
612 MoveWindow(GDK_WINDOW_HWND(ab->win->window), 618 MoveWindow(appbar_get_handle(ab),
613 ab->docked_rect.left, 619 ab->docked_rect.left,
614 ab->docked_rect.top, 620 ab->docked_rect.top,
615 ab->docked_rect.right - ab->docked_rect.left, 621 ab->docked_rect.right - ab->docked_rect.left,
616 ab->docked_rect.bottom - ab->docked_rect.top, TRUE); 622 ab->docked_rect.bottom - ab->docked_rect.top, TRUE);
617 gtk_appbar_setpos(ab, GDK_WINDOW_HWND(ab->win->window)); 623 gtk_appbar_setpos(ab, appbar_get_handle(ab));
618 ab->docked = TRUE; 624 ab->docked = TRUE;
619 } 625 }
620 626
621 void gtk_appbar_dock(GtkAppBar *ab, UINT side) { 627 void gtk_appbar_dock(GtkAppBar *ab, UINT side) {
622 HWND hwnd; 628 HWND hwnd;
623 629
624 g_return_if_fail(ab != NULL); 630 g_return_if_fail(ab != NULL);
625 631
626 hwnd = GDK_WINDOW_HWND(ab->win->window); 632 hwnd = appbar_get_handle(ab);
627 633
628 g_return_if_fail(IsWindow(hwnd)); 634 g_return_if_fail(IsWindow(hwnd));
629 635
630 ab->iconized = IsIconic(hwnd); 636 ab->iconized = IsIconic(hwnd);
631 637
652 return NULL; 658 return NULL;
653 ab = g_new0(GtkAppBar, 1); 659 ab = g_new0(GtkAppBar, 1);
654 ab->win = win; 660 ab->win = win;
655 661
656 /* init docking coords */ 662 /* init docking coords */
657 get_window_normal_rc(GDK_WINDOW_HWND(win->window), &(ab->docked_rect)); 663 get_window_normal_rc(appbar_get_handle(ab), &(ab->docked_rect));
658 664
659 /* Add main window filter */ 665 /* Add main window filter */
660 gdk_window_add_filter(win->window, 666 gdk_window_add_filter(gtk_widget_get_window(win),
661 gtk_appbar_event_filter, 667 gtk_appbar_event_filter,
662 ab); 668 ab);
663 return ab; 669 return ab;
664 } 670 }
665 671
668 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "gtk_appbar_remove\n"); 674 purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "gtk_appbar_remove\n");
669 675
670 if(!ab) 676 if(!ab)
671 return; 677 return;
672 678
673 hwnd = GDK_WINDOW_HWND(ab->win->window); 679 hwnd = appbar_get_handle(ab);
674 gdk_window_remove_filter(ab->win->window, 680 gdk_window_remove_filter(gtk_widget_get_window(ab->win),
675 gtk_appbar_event_filter, 681 gtk_appbar_event_filter,
676 ab); 682 ab);
677 if(ab->docked) { 683 if(ab->docked) {
678 gtk_window_resize(GTK_WINDOW(ab->win), 684 gtk_window_resize(GTK_WINDOW(ab->win),
679 ab->docked_rect.right - ab->docked_rect.left, 685 ab->docked_rect.right - ab->docked_rect.left,

mercurial