ecere/gui/XInterface; Win32Interface: Fixes to FlashWindow to flash owner instead
authorJerome St-Louis <jerome@ecere.com>
Thu, 10 Jul 2014 07:09:59 +0000 (03:09 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 10 Jul 2014 08:21:26 +0000 (04:21 -0400)
ecere/src/gui/drivers/Win32Interface.ec
ecere/src/gui/drivers/XInterface.ec

index b02dd85..9239168 100644 (file)
@@ -1590,9 +1590,14 @@ class Win32Interface : Interface
 
    void FlashRootWindow(Window window)
    {
+      HWND hwnd = window.windowHandle;
       FLASHWINFO flashInfo = { 0 };
+      Window master = window.master, rootWindow = (master && master != guiApp.desktop) ? master.rootWindow : null;
+      if(!window.style.showInTaskBar && rootWindow && (window._isModal || window.style.interim))
+         hwnd = rootWindow.windowHandle;
+
       flashInfo.cbSize = sizeof(FLASHWINFO);
-      flashInfo.hwnd = window.windowHandle;
+      flashInfo.hwnd = hwnd;
       flashInfo.uCount = 1;
       flashInfo.dwFlags = FLASHW_TRAY; // FLASHW_ALL;
       guiApp.Unlock();
index eac0b95..c525cf6 100644 (file)
@@ -3116,8 +3116,13 @@ class XInterface : Interface
 
    void FlashRootWindow(Window window)
    {
+      void * hwnd = window.windowHandle;
+      Window master = window.master, rootWindow = (master && master != guiApp.desktop) ? master.rootWindow : null;
+      if(!window.style.showInTaskBar && rootWindow && (window._isModal || window.style.interim))
+         hwnd = rootWindow.windowHandle;
+
       // printf("Attempting to flash root window\n");
-      SetNETWMState((X11Window)window.windowHandle, true, add, atoms[_net_wm_state_demands_attention], 0);
+      SetNETWMState((X11Window)hwnd, true, add, atoms[_net_wm_state_demands_attention], 0);
    }
 
    void ActivateRootWindow(Window window)