Linux: better tracking of window activation.

- Reverted back to using SDL focus in/out notifications.
- Focus notification delay reduced to 0. Potential problems with getting focus notifications while switching to full screen mode need to be addressed at later point.
- Two separate window classes for menu and tooltips (using _NET_WM_WINDOW_TYPE_DOCK for the latter was suggested by yaakuro on IRC).

[CL 2361491 by Dmitry Rekman in Main branch]
This commit is contained in:
Dmitry Rekman
2014-11-16 01:40:16 -05:00
committed by UnrealBot
parent 660bafdda1
commit faeddc8393
9 changed files with 61 additions and 15 deletions

View File

@@ -17621,8 +17621,8 @@
<File Name="Engine/Source/ThirdParty/SDL/lib/x86/SDL.lib" Hash="5d64248864b8553229abf5d2d33a0ba35bfd32e6" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/arm-unknown-linux-gnueabihf/libSDL2.a" Hash="aee09f4624e2fa8b8531cd5cf97b6787c1c968fd" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/arm-unknown-linux-gnueabihf/libSDL2_fPIC.a" Hash="b20fda686015027cf5f1a8a1aa9cfe3f16a70bac" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/x86_64-unknown-linux-gnu/libSDL2.a" Hash="c92a0b8ec4edbaa99dbd67b29f1b7e4189ef903c" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/x86_64-unknown-linux-gnu/libSDL2_fPIC.a" Hash="624b06b4d0ab5e08bff9905bf816e08cf415560d" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/x86_64-unknown-linux-gnu/libSDL2.a" Hash="80179f2c1a16e940ec93bbe1d0882c6753f6fc92" />
<File Name="Engine/Source/ThirdParty/SDL2/SDL-gui-backend/lib/Linux/x86_64-unknown-linux-gnu/libSDL2_fPIC.a" Hash="958c5e6aa72f9f842cfa82a991a1bc34b09b97b7" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/MacOSX/Debug/libSpeedTreeCore.a" Hash="4ebdf90531fdda5bf3fc5e03641959a0c96932cd" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/MacOSX/Release/libSpeedTreeCore.a" Hash="4e658d01ea67573abaff030c662d7088ae7b5201" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/Windows/VC11.x64/SpeedTreeCore_Windows_v7.0_VC11_MTDLL64_Static.lib" Hash="13bef20d19726c62d4baa968520621321781978f" />
@@ -23320,7 +23320,6 @@
<Blob Hash="624068df7ffb99eab20949f390c3f2f068c46839" Size="2660" PackHash="bd39b0b570b0dfa470a935a355ef2fd6b225472a" PackOffset="1760212" />
<Blob Hash="6248e0c452a11166b7bd86cbd3f76d8d70c9e24d" Size="19528" PackHash="470d0cb6b14a6b5730d60154509a1253caf1253d" PackOffset="2016765" />
<Blob Hash="624acfdc997245ffe0be2bbcefbb296cee983468" Size="58643" PackHash="4d5d78d27c4922fd22a476d2ec14006c570f7551" PackOffset="1282174" />
<Blob Hash="624b06b4d0ab5e08bff9905bf816e08cf415560d" Size="6759688" PackHash="624b06b4d0ab5e08bff9905bf816e08cf415560d" PackOffset="0" />
<Blob Hash="62576958a741f0b0f852379fb385055ea6df4bfa" Size="4475" PackHash="9c76c9c81d78673e5865576b8ccb1a47a9963757" PackOffset="594071" />
<Blob Hash="62599b3027fb6c8140ab7b08f3f777dd0f8692b2" Size="16845" PackHash="fad4922d96e8f7dac8036475cb70c460139105f8" PackOffset="1866220" />
<Blob Hash="6261fffd49b29f07a9ac06dbaa4f0ecab5ec016a" Size="4031" PackHash="449604b84499ea29716084c8cfbd0503d5eb5a58" PackOffset="1773198" />
@@ -24701,6 +24700,7 @@
<Blob Hash="8009139c4948d946fd6399131b6baf2534941709" Size="4511" PackHash="9c76c9c81d78673e5865576b8ccb1a47a9963757" PackOffset="1391012" />
<Blob Hash="8016a5eba4988137b809a77773c8977895b01876" Size="10240" PackHash="fdb3aea3fe1cfb827763a92f24a85ab40a51ab54" PackOffset="2019120" />
<Blob Hash="80170d820606a6227175a5dcd52aa5e83b3dbf2b" Size="4301536" PackHash="80170d820606a6227175a5dcd52aa5e83b3dbf2b" PackOffset="0" />
<Blob Hash="80179f2c1a16e940ec93bbe1d0882c6753f6fc92" Size="9311520" PackHash="80179f2c1a16e940ec93bbe1d0882c6753f6fc92" PackOffset="0" />
<Blob Hash="801ef1624ccc1b90d6a224f2621894bc48fddad2" Size="16856" PackHash="2d622d8619eafc9c408331719f39f003563cb123" PackOffset="1208750" />
<Blob Hash="8027064f988ab5f21b2ab851cc376bed59c48eb7" Size="19101" PackHash="b76f0425b7c949b9febe6064f0a7f0bedf21fbb5" PackOffset="2072649" />
<Blob Hash="802f0f01b9eceabfb686d40e3b87661eca3db4ae" Size="3233" PackHash="52c214780ebe41aa896fe68aa9299c3756cfed9b" PackOffset="269964" />
@@ -25705,6 +25705,7 @@
<Blob Hash="957b31552fd163862d14f1b0c5186ceb434a9f80" Size="16474" PackHash="b5aa94fa42b8d4a699c721a6a1e79016091332c5" PackOffset="366568" />
<Blob Hash="9586f23685b2501e4ad31da6e818e65d88209228" Size="12800" PackHash="367c106773773607276e2a6d06ec79c263028e9a" PackOffset="1822208" />
<Blob Hash="958965248a5b339bfbda88634029c23bc48982db" Size="11867" PackHash="5da18bf2c6d72f6121a3b79a614ecf72b457e586" PackOffset="1089093" />
<Blob Hash="958c5e6aa72f9f842cfa82a991a1bc34b09b97b7" Size="9348688" PackHash="958c5e6aa72f9f842cfa82a991a1bc34b09b97b7" PackOffset="0" />
<Blob Hash="958cea4d51f7c09bb1068aa071c3bee9ce319614" Size="70387332" PackHash="958cea4d51f7c09bb1068aa071c3bee9ce319614" PackOffset="0" />
<Blob Hash="958f413dea173bb5231e32239a51704f8e60eb32" Size="2374" PackHash="6158b7de7da9b510a9eef3faec047c1a05f67fed" PackOffset="1807884" />
<Blob Hash="9598be555ed43aaf112979316f4994bb4b8c1c86" Size="3439" PackHash="449604b84499ea29716084c8cfbd0503d5eb5a58" PackOffset="1026189" />
@@ -28106,7 +28107,6 @@
<Blob Hash="c914fa33af04f21a54c23cd365871aff20258553" Size="119296" PackHash="520746c7e47d7ab55f0104b2638e7ad90f4948e0" PackOffset="1854464" />
<Blob Hash="c926af9c864c69667455cf02a66e79e9758d9c1a" Size="29456" PackHash="917b2aae542bb265fcbc3fee66fbffaf61cdff60" PackOffset="718839" />
<Blob Hash="c9278f8a6bca2133ec5b8e01d0dd51245616c0e8" Size="37408" PackHash="52c214780ebe41aa896fe68aa9299c3756cfed9b" PackOffset="1584441" />
<Blob Hash="c92a0b8ec4edbaa99dbd67b29f1b7e4189ef903c" Size="6759688" PackHash="c92a0b8ec4edbaa99dbd67b29f1b7e4189ef903c" PackOffset="0" />
<Blob Hash="c92f18a0f2c4c86456b02c5d308c42fd0ff7d149" Size="4436" PackHash="aa377bb27ab1efee864c9767b3b95aa20d7efe41" PackOffset="1059159" />
<Blob Hash="c935875d850eeba71fd8319248c791faba8297d0" Size="427" PackHash="2ea86e430148a84310403e398e984f9edac5d9d1" PackOffset="520122" />
<Blob Hash="c942c746524a79baa987732298ac5558851db25a" Size="10269" PackHash="60b00bd9d1bdf6f14bcae0ded71af8432db3f3e5" PackOffset="1365604" />
@@ -31133,7 +31133,6 @@
<Pack Hash="61a435619ac5daf9b4ba8258591553aed9351972" Size="6397166" CompressedSize="1343261" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="61aa8c7ee8e0b6bb047d53cc065122f039f00169" Size="2167324" CompressedSize="549315" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="622e024f0e221aa4a7c07bb1a969d803821069f0" Size="5680918" CompressedSize="1112058" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="624b06b4d0ab5e08bff9905bf816e08cf415560d" Size="6759688" CompressedSize="1696375" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="62deaf16c6d0861f9c856c9d181df18dacaf73ea" Size="2097057" CompressedSize="1738500" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="62e3e40c89a377e9ffea31f4547544f755e596f8" Size="6802269" CompressedSize="6802748" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="632b9cd10cc4e611f3908f2f976a67a9a6574810" Size="3474368" CompressedSize="385218" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
@@ -31275,6 +31274,7 @@
<Pack Hash="7f52ed1b7b02ae78a37eacac031233d96c671aa3" Size="2097081" CompressedSize="770075" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="80131fd864d919633c5b5b813bbc5bba126ee983" Size="2097148" CompressedSize="576329" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="80170d820606a6227175a5dcd52aa5e83b3dbf2b" Size="4301536" CompressedSize="898344" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="80179f2c1a16e940ec93bbe1d0882c6753f6fc92" Size="9311520" CompressedSize="2411413" RemotePath="2361491-124f5e166a5740948c33bbc506c5fa95" />
<Pack Hash="80d01b932fa43c4fc0ec59c9bf357a52e8d82ed1" Size="2167518" CompressedSize="595579" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="80d63ab6949dae28d05c9a0e3f4fb3c180f33edb" Size="5975566" CompressedSize="722805" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="8173601adec884e79de2a970cf6923155687b60e" Size="4245074" CompressedSize="819495" RemotePath="2361483-354e7d73af9d4a26a94dd72f704ee0be" />
@@ -31350,6 +31350,7 @@
<Pack Hash="9423d94d2945b88db4613717a6eef749feb495f4" Size="7976464" CompressedSize="1778218" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="942455464ffd67e26c45b97151e071a1638deb9f" Size="2097146" CompressedSize="1365289" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="954e91d00a9c116c1161728dd2142bd0f110fe2b" Size="5037712" CompressedSize="267105" RemotePath="2361480-3e6eba509a294ad7ba2543c32a5bdd4d" />
<Pack Hash="958c5e6aa72f9f842cfa82a991a1bc34b09b97b7" Size="9348688" CompressedSize="2426942" RemotePath="2361491-124f5e166a5740948c33bbc506c5fa95" />
<Pack Hash="958cea4d51f7c09bb1068aa071c3bee9ce319614" Size="70387332" CompressedSize="17510136" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="95dc31ffdf428fbfbc7cb6a45c9d2f443e31f579" Size="2097085" CompressedSize="2084066" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="95febc63c087980c8f862a079bcf8f41a3d3bc7b" Size="2140154" CompressedSize="407563" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
@@ -31583,7 +31584,6 @@
<Pack Hash="c8fadc230ed08b6596b078e92440d12e0c6bc055" Size="2097130" CompressedSize="456091" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="c90746511fb0a19a57110b8653199e1192a65e58" Size="2097141" CompressedSize="660147" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="c9131789445c329cde152b2f66d168dbae3ac2f4" Size="31913280" CompressedSize="9460644" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="c92a0b8ec4edbaa99dbd67b29f1b7e4189ef903c" Size="6759688" CompressedSize="1696419" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="c96f0df82116a83489951584be560e84820e4108" Size="2097134" CompressedSize="805482" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="c9b4f5928b43f20c1ae1372da4686737a2a099c5" Size="3876494" CompressedSize="1100172" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />
<Pack Hash="ca5003187c4ccafa1168b652e3b62948022e1628" Size="24998390" CompressedSize="5871333" RemotePath="2353938-1746fc55bc904d39810a1ce04615cfc1" />

View File

@@ -357,7 +357,6 @@ void FLinuxApplication::ProcessDeferredMessage( SDL_Event Event )
}
else
{
TrackActivationChanges(CurrentEventWindow, EWindowActivation::ActivateByMouse);
if (buttonEvent.clicks == 2)
{
MessageHandler->OnMouseDoubleClick(CurrentEventWindow, button);
@@ -717,8 +716,24 @@ void FLinuxApplication::ProcessDeferredMessage( SDL_Event Event )
}
break;
case SDL_WINDOWEVENT_FOCUS_GAINED: // seems to be spurious and does not always reflect actual focus changes, ignore for now
case SDL_WINDOWEVENT_FOCUS_LOST: // seems to be spurious and does not always reflect actual focus changes, ignore for now
case SDL_WINDOWEVENT_FOCUS_GAINED:
{
if (CurrentEventWindow.IsValid())
{
TrackActivationChanges(CurrentEventWindow, EWindowActivation::Activate);
}
}
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
{
if (CurrentEventWindow.IsValid())
{
TrackActivationChanges(CurrentEventWindow, EWindowActivation::Deactivate);
}
}
break;
case SDL_WINDOWEVENT_HIDDEN: // intended fall-through
case SDL_WINDOWEVENT_EXPOSED: // intended fall-through
case SDL_WINDOWEVENT_MINIMIZED: // intended fall-through

View File

@@ -84,8 +84,17 @@ void FLinuxWindow::Initialize( FLinuxApplication* const Application, const TShar
if ( !Definition->AppearsInTaskbar )
{
WindowStyle |= SDL_WINDOW_UTILITY;
}
if ( Definition->AcceptsInput )
{
UE_LOG(LogLinuxWindow, Verbose, TEXT("Creating an utility window '%s'."), *Definition->Title);
WindowStyle |= SDL_WINDOW_UTILITY;
}
else
{
UE_LOG(LogLinuxWindow, Verbose, TEXT("Creating a tooltip window '%s'."), *Definition->Title);
WindowStyle |= SDL_WINDOW_TOOLTIP;
}
}
}
if ( Definition->HasSizingFrame )

View File

@@ -114,7 +114,8 @@ typedef enum
/* EG BEGIN */
#ifdef SDL_WITH_EPIC_EXTENSIONS
,
SDL_WINDOW_UTILITY = 0x08000000 /**< window should not appear on taskbar nor accept input> */
SDL_WINDOW_UTILITY = 0x08000000, /**< window should not appear on taskbar> */
SDL_WINDOW_TOOLTIP = 0x04000000 /**< window should not appear on taskbar nor accept input> */
#endif /* SDL_WITH_EPIC_EXTENSIONS */
/* EG END */

View File

@@ -1185,7 +1185,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)
/* EG BEGIN */
#ifdef SDL_WITH_EPIC_EXTENSIONS
#define CREATE_FLAGS \
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_UTILITY)
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP)
#else
#define CREATE_FLAGS \
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI)

View File

@@ -362,6 +362,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
/* EG BEGIN */
#ifdef SDL_WITH_EPIC_EXTENSIONS
Atom _NET_WM_WINDOW_TYPE_UTILITY;
Atom _NET_WM_WINDOW_TYPE_DOCK;
#endif /* SDL_WITH_EPIC_EXTENSIONS */
/* EG END */
@@ -545,6 +546,11 @@ X11_CreateWindow(_THIS, SDL_Window * window)
X11_XChangeProperty(display, w, _NET_WM_WINDOW_TYPE, XA_ATOM, 32,
PropModeReplace,
(unsigned char *)&_NET_WM_WINDOW_TYPE_UTILITY, 1);
} else if (window->flags & SDL_WINDOW_TOOLTIP) {
_NET_WM_WINDOW_TYPE_DOCK = X11_XInternAtom(display, "_NET_WM_WINDOW_TYPE_DOCK", False);
X11_XChangeProperty(display, w, _NET_WM_WINDOW_TYPE, XA_ATOM, 32,
PropModeReplace,
(unsigned char *)&_NET_WM_WINDOW_TYPE_DOCK, 1);
} else
#endif /* SDL_WITH_EPIC_EXTENSIONS */
{

View File

@@ -23,12 +23,27 @@
#ifndef _SDL_x11window_h
#define _SDL_x11window_h
/* EG BEGIN */
#ifdef SDL_WITH_EPIC_EXTENSIONS
/* In order to cut the latency, dispatch immediately. Considering comment below,
* proper solution should probably detect whether video mode change is under way
* and queue focus changes with a delay only for the duration of it.
*/
#define PENDING_FOCUS_IN_TIME 0
#define PENDING_FOCUS_OUT_TIME 0
#else
/* EG END */
/* We need to queue the focus in/out changes because they may occur during
video mode changes and we can respond to them by triggering more mode
changes.
*/
#define PENDING_FOCUS_IN_TIME 200
#define PENDING_FOCUS_OUT_TIME 200
/* EG BEGIN */
#endif // SDL_WITH_EPIC_EXTENSIONS
/* EG END */
#if SDL_VIDEO_OPENGL_EGL
#include <EGL/egl.h>

View File

@@ -6,7 +6,7 @@ BUILD_DIR=build-$SDL_DIR
cd $BUILD_DIR
CFLAGS=-fPIC cmake -DCMAKE_BUILD_TYPE=Debug ../$SDL_DIR
cmake -DCMAKE_BUILD_TYPE=Debug ../$SDL_DIR
make
cp --remove-destination libSDL2.a ../$SDL_DIR/lib/Linux/x86_64-unknown-linux-gnu/libSDL2.a
cp --remove-destination libSDL2_fPIC.a ../$SDL_DIR/lib/Linux/x86_64-unknown-linux-gnu/libSDL2_fPIC.a

View File

@@ -8,7 +8,7 @@ rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR
cd $BUILD_DIR
CFLAGS=-fPIC cmake -DCMAKE_BUILD_TYPE=Debug ../$SDL_DIR
cmake -DCMAKE_BUILD_TYPE=Debug ../$SDL_DIR
make
cp --remove-destination libSDL2.a ../$SDL_DIR/lib/Linux/x86_64-unknown-linux-gnu/libSDL2.a
cp --remove-destination libSDL2_fPIC.a ../$SDL_DIR/lib/Linux/x86_64-unknown-linux-gnu/libSDL2_fPIC.a