Don't redraw when launcher window when focus is lost/gained

Fixes launcher window contents getting drawn over another window when you try to switch to another app on ReactOS
This commit is contained in:
UnknownShadow200 2019-08-12 21:38:09 +10:00
parent 996b13436f
commit 18e780ae2e
2 changed files with 3 additions and 18 deletions

View file

@ -88,11 +88,6 @@ bool Launcher_ConnectToServer(const String* hash) {
/*########################################################################################################################* /*########################################################################################################################*
*---------------------------------------------------------Event handler---------------------------------------------------* *---------------------------------------------------------Event handler---------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void Launcher_MaybeRedraw(void* obj) {
/* Only redraw when launcher has been initialised */
if (Launcher_Screen && Window_Exists) Launcher_Redraw();
}
static void Launcher_ReqeustRedraw(void* obj) { static void Launcher_ReqeustRedraw(void* obj) {
/* We may get multiple Redraw events in short timespan */ /* We may get multiple Redraw events in short timespan */
/* So we just request a redraw at next launcher tick */ /* So we just request a redraw at next launcher tick */
@ -170,7 +165,6 @@ static void Launcher_Init(void) {
Event_RegisterVoid(&WindowEvents.Resized, NULL, Launcher_OnResize); Event_RegisterVoid(&WindowEvents.Resized, NULL, Launcher_OnResize);
Event_RegisterVoid(&WindowEvents.StateChanged, NULL, Launcher_OnResize); Event_RegisterVoid(&WindowEvents.StateChanged, NULL, Launcher_OnResize);
Event_RegisterVoid(&WindowEvents.FocusChanged, NULL, Launcher_MaybeRedraw);
Event_RegisterVoid(&WindowEvents.Redraw, NULL, Launcher_ReqeustRedraw); Event_RegisterVoid(&WindowEvents.Redraw, NULL, Launcher_ReqeustRedraw);
Event_RegisterInput(&KeyEvents.Down, NULL, Launcher_KeyDown); Event_RegisterInput(&KeyEvents.Down, NULL, Launcher_KeyDown);
@ -193,7 +187,6 @@ static void Launcher_Init(void) {
static void Launcher_Free(void) { static void Launcher_Free(void) {
Event_UnregisterVoid(&WindowEvents.Resized, NULL, Launcher_OnResize); Event_UnregisterVoid(&WindowEvents.Resized, NULL, Launcher_OnResize);
Event_UnregisterVoid(&WindowEvents.StateChanged, NULL, Launcher_OnResize); Event_UnregisterVoid(&WindowEvents.StateChanged, NULL, Launcher_OnResize);
Event_UnregisterVoid(&WindowEvents.FocusChanged, NULL, Launcher_MaybeRedraw);
Event_UnregisterVoid(&WindowEvents.Redraw, NULL, Launcher_ReqeustRedraw); Event_UnregisterVoid(&WindowEvents.Redraw, NULL, Launcher_ReqeustRedraw);
Event_UnregisterInput(&KeyEvents.Down, NULL, Launcher_KeyDown); Event_UnregisterInput(&KeyEvents.Down, NULL, Launcher_KeyDown);

View file

@ -228,17 +228,12 @@ static void Window_RefreshBounds(void) {
static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) { static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) {
char keyChar; char keyChar;
bool wasFocused;
float wheelDelta; float wheelDelta;
switch (message) { switch (message) {
case WM_ACTIVATE: case WM_ACTIVATE:
wasFocused = Window_Focused;
Window_Focused = LOWORD(wParam) != 0; Window_Focused = LOWORD(wParam) != 0;
Event_RaiseVoid(&WindowEvents.FocusChanged);
if (Window_Focused != wasFocused) {
Event_RaiseVoid(&WindowEvents.FocusChanged);
}
break; break;
case WM_ERASEBKGND: case WM_ERASEBKGND:
@ -1138,12 +1133,9 @@ void Window_ProcessEvents(void) {
case FocusOut: case FocusOut:
/* Don't lose focus when another app grabs key or mouse */ /* Don't lose focus when another app grabs key or mouse */
if (e.xfocus.mode == NotifyGrab || e.xfocus.mode == NotifyUngrab) break; if (e.xfocus.mode == NotifyGrab || e.xfocus.mode == NotifyUngrab) break;
wasFocused = Window_Focused;
Window_Focused = e.type == FocusIn;
if (Window_Focused != wasFocused) { Window_Focused = e.type == FocusIn;
Event_RaiseVoid(&WindowEvents.FocusChanged); Event_RaiseVoid(&WindowEvents.FocusChanged);
}
/* TODO: Keep track of keyboard when focus is lost */ /* TODO: Keep track of keyboard when focus is lost */
if (!Window_Focused) Key_Clear(); if (!Window_Focused) Key_Clear();
break; break;