Mon, 24 Apr 2006 20:05:48 +0000
[gaim-migrate @ 16088]
SF Patch #1474731 from Casey Harkins
"This patch increases the time (from 3 sec to 5 sec)
that gaim waits for a message from the notification
area that the docklet icon was created successfully. It
should fix bug #1466092."
5 seconds doesn't seem too bad and it should help people with slower systems.
committer: Richard Laager <rlaager@pidgin.im>
| 11709 | 1 | /* MinimizeToTray |
| 2 | * | |
| 3 | * A couple of routines to show how to make it produce a custom caption | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
4 | * animation to make it look like we are minimizing to and maximizing |
| 11709 | 5 | * from the system tray |
| 6 | * | |
| 7 | * These routines are public domain, but it would be nice if you dropped | |
| 8 | * me a line if you use them! | |
| 9 | * | |
| 10 | * 1.0 29.06.2000 Initial version | |
| 11 | * 1.1 01.07.2000 The window retains it's place in the Z-order of windows | |
| 12 | * when minimized/hidden. This means that when restored/shown, it doesn't | |
| 13 | * always appear as the foreground window unless we call SetForegroundWindow | |
| 14 | * | |
| 15 | * Copyright 2000 Matthew Ellis <m.t.ellis@bigfoot.com> | |
| 16 | */ | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
17 | #define _WIN32_WINNT 0x0500 |
|
11845
7dc7b5b05a9a
[gaim-migrate @ 14136]
Daniel Atallah <datallah@pidgin.im>
parents:
11709
diff
changeset
|
18 | #include <windows.h> |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
19 | #include "MinimizeToTray.h" |
| 11709 | 20 | |
| 21 | #define DEFAULT_RECT_WIDTH 150 | |
| 22 | #define DEFAULT_RECT_HEIGHT 30 | |
| 23 | ||
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
24 | static void GetTrayWndRect(LPRECT lpTrayRect) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
25 | APPBARDATA appBarData; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
26 | HWND hShellTrayWnd = FindWindowEx(NULL, NULL, TEXT("Shell_TrayWnd"), |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
27 | NULL); |
| 11709 | 28 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
29 | if(hShellTrayWnd) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
30 | HWND hTrayNotifyWnd = FindWindowEx(hShellTrayWnd, NULL, |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
31 | TEXT("TrayNotifyWnd"), NULL); |
| 11709 | 32 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
33 | if(hTrayNotifyWnd) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
34 | GetWindowRect(hTrayNotifyWnd,lpTrayRect); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
35 | return; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
36 | } |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
37 | } |
| 11709 | 38 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
39 | appBarData.cbSize = sizeof(appBarData); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
40 | if(SHAppBarMessage(ABM_GETTASKBARPOS, &appBarData)) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
41 | switch(appBarData.uEdge) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
42 | case ABE_LEFT: |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
43 | case ABE_RIGHT: |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
44 | lpTrayRect->top = appBarData.rc.bottom - 100; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
45 | lpTrayRect->bottom = appBarData.rc.bottom - 16; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
46 | lpTrayRect->left = appBarData.rc.left; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
47 | lpTrayRect->right = appBarData.rc.right; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
48 | break; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
49 | case ABE_TOP: |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
50 | case ABE_BOTTOM: |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
51 | lpTrayRect->top = appBarData.rc.top; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
52 | lpTrayRect->bottom = appBarData.rc.bottom; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
53 | lpTrayRect->left = appBarData.rc.right - 100; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
54 | lpTrayRect->right = appBarData.rc.right - 16; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
55 | break; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
56 | } |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
57 | return; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
58 | } |
| 11709 | 59 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
60 | hShellTrayWnd = FindWindowEx(NULL, NULL, TEXT("Shell_TrayWnd"), NULL); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
61 | if(hShellTrayWnd) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
62 | GetWindowRect(hShellTrayWnd, lpTrayRect); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
63 | if(lpTrayRect->right-lpTrayRect->left > DEFAULT_RECT_WIDTH) |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
64 | lpTrayRect->left = lpTrayRect->right - DEFAULT_RECT_WIDTH; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
65 | if(lpTrayRect->bottom-lpTrayRect->top > DEFAULT_RECT_HEIGHT) |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
66 | lpTrayRect->top=lpTrayRect->bottom - DEFAULT_RECT_HEIGHT; |
| 11709 | 67 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
68 | return; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
69 | } |
| 11709 | 70 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
71 | SystemParametersInfo(SPI_GETWORKAREA, 0, lpTrayRect, 0); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
72 | lpTrayRect->left = lpTrayRect->right - DEFAULT_RECT_WIDTH; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
73 | lpTrayRect->top = lpTrayRect->bottom - DEFAULT_RECT_HEIGHT; |
| 11709 | 74 | } |
| 75 | ||
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
76 | static BOOL GetDoAnimateMinimize(void) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
77 | ANIMATIONINFO ai; |
| 11709 | 78 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
79 | ai.cbSize = sizeof(ai); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
80 | SystemParametersInfo(SPI_GETANIMATION, sizeof(ai), &ai, 0); |
| 11709 | 81 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
82 | return ai.iMinAnimate ? TRUE : FALSE; |
| 11709 | 83 | } |
| 84 | ||
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
85 | void MinimizeWndToTray(HWND hWnd) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
86 | |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
87 | if(!IsWindowVisible(hWnd)) |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
88 | return; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
89 | |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
90 | if(GetDoAnimateMinimize()) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
91 | RECT rcFrom, rcTo; |
| 11709 | 92 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
93 | GetWindowRect(hWnd, &rcFrom); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
94 | GetTrayWndRect(&rcTo); |
| 11709 | 95 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
96 | DrawAnimatedRects(hWnd, IDANI_CAPTION, &rcFrom, &rcTo); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
97 | } |
| 11709 | 98 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
99 | ShowWindow(hWnd, SW_HIDE); |
| 11709 | 100 | } |
| 101 | ||
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
102 | void RestoreWndFromTray(HWND hWnd) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
103 | |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
104 | if(IsWindowVisible(hWnd)) |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
105 | return; |
| 11709 | 106 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
107 | if(GetDoAnimateMinimize()) { |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
108 | RECT rcFrom, rcTo; |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
109 | GetTrayWndRect(&rcFrom); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
110 | GetWindowRect(hWnd, &rcTo); |
| 11709 | 111 | |
|
13433
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
112 | DrawAnimatedRects(hWnd, IDANI_CAPTION, &rcFrom, &rcTo); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
113 | } |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
114 | |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
115 | ShowWindow(hWnd, SW_SHOW); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
116 | SetActiveWindow(hWnd); |
|
1baadf9fa403
[gaim-migrate @ 15807]
Daniel Atallah <datallah@pidgin.im>
parents:
11845
diff
changeset
|
117 | SetForegroundWindow(hWnd); |
| 11709 | 118 | } |
| 119 |