src/gui/util/qsystemtrayicon_win.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    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)