equal
deleted
inserted
replaced
81 HWND hWnd; |
81 HWND hWnd; |
82 UINT uID; |
82 UINT uID; |
83 GUID guidItem; |
83 GUID guidItem; |
84 }; |
84 }; |
85 |
85 |
|
86 #define Q_MSGFLT_ALLOW 1 |
|
87 |
86 typedef HRESULT (WINAPI *PtrShell_NotifyIconGetRect)(const Q_NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation); |
88 typedef HRESULT (WINAPI *PtrShell_NotifyIconGetRect)(const Q_NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation); |
|
89 typedef BOOL (WINAPI *PtrChangeWindowMessageFilter)(UINT message, DWORD dwFlag); |
|
90 typedef BOOL (WINAPI *PtrChangeWindowMessageFilterEx)(HWND hWnd, UINT message, DWORD action, void* pChangeFilterStruct); |
87 |
91 |
88 class QSystemTrayIconSys : QWidget |
92 class QSystemTrayIconSys : QWidget |
89 { |
93 { |
90 public: |
94 public: |
91 QSystemTrayIconSys(QSystemTrayIcon *object); |
95 QSystemTrayIconSys(QSystemTrayIcon *object); |
141 |
145 |
142 // For restoring the tray icon after explorer crashes |
146 // For restoring the tray icon after explorer crashes |
143 if (!MYWM_TASKBARCREATED) { |
147 if (!MYWM_TASKBARCREATED) { |
144 MYWM_TASKBARCREATED = RegisterWindowMessage(L"TaskbarCreated"); |
148 MYWM_TASKBARCREATED = RegisterWindowMessage(L"TaskbarCreated"); |
145 } |
149 } |
|
150 |
|
151 // Allow the WM_TASKBARCREATED message through the UIPI filter on Windows Vista and higher |
|
152 static PtrChangeWindowMessageFilterEx pChangeWindowMessageFilterEx = |
|
153 (PtrChangeWindowMessageFilterEx)QLibrary::resolve(QLatin1String("user32"), "ChangeWindowMessageFilterEx"); |
|
154 |
|
155 if (pChangeWindowMessageFilterEx) { |
|
156 // Call the safer ChangeWindowMessageFilterEx API if available |
|
157 pChangeWindowMessageFilterEx(winId(), MYWM_TASKBARCREATED, Q_MSGFLT_ALLOW, 0); |
|
158 } else { |
|
159 static PtrChangeWindowMessageFilter pChangeWindowMessageFilter = |
|
160 (PtrChangeWindowMessageFilter)QLibrary::resolve(QLatin1String("user32"), "ChangeWindowMessageFilter"); |
|
161 |
|
162 if (pChangeWindowMessageFilter) { |
|
163 // Call the deprecated ChangeWindowMessageFilter API otherwise |
|
164 pChangeWindowMessageFilter(MYWM_TASKBARCREATED, Q_MSGFLT_ALLOW); |
|
165 } |
|
166 } |
146 } |
167 } |
147 |
168 |
148 QSystemTrayIconSys::~QSystemTrayIconSys() |
169 QSystemTrayIconSys::~QSystemTrayIconSys() |
149 { |
170 { |
150 if (hIcon) |
171 if (hIcon) |