Qt4: systray hides the interface when it is visible regardless of focus
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 10 Jan 2009 14:11:54 +0000 (16:11 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 10 Jan 2009 14:16:31 +0000 (16:16 +0200)
Otherwise, if the interface is hidden behind another window, clicking
the tray icon however many times will request user attention in the task
bar and never actually show the interface. This was confusing and
inconvenient (fixes #2396). This new behavior is consistent with KMail.

It would probably be even better to show the interface on top (instead
of hiding it, then show it on the second click). Unfortunately, while it
does seem possible, I do not know how. For sure, the previous scheme did
not work anyway.

modules/gui/qt4/main_interface.cpp

index 056d5fc..747bd62 100644 (file)
@@ -866,7 +866,7 @@ void MainInterface::toggleUpdateSystrayMenu()
     }
     else
     {
-        /* Visible */
+        /* Visible (possibly under other windows) */
 #ifdef WIN32
         /* check if any visible window is above vlc in the z-order,
          * but ignore the ones always on top
@@ -879,18 +879,18 @@ void MainInterface::toggleUpdateSystrayMenu()
                     ( GetWindowInfo( hwnd, &wi ) &&
                       (wi.dwExStyle&WS_EX_NOACTIVATE) ) );
                 hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) );
-        if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
+            if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
                 (wi.dwExStyle&WS_EX_TOPMOST) )
+            {
+                hide();
+            }
+            else
+            {
+                activateWindow();
+            }
 #else
-        if( isActiveWindow() )
+        hide();
 #endif
-        {
-            hide();
-        }
-        else
-        {
-            activateWindow();
-        }
     }
     QVLCMenu::updateSystrayMenu( this, p_intf );
 }