diff --git a/src/musikcube/app/layout/LibraryLayout.cpp b/src/musikcube/app/layout/LibraryLayout.cpp index e0b501bd0..f04042308 100755 --- a/src/musikcube/app/layout/LibraryLayout.cpp +++ b/src/musikcube/app/layout/LibraryLayout.cpp @@ -306,7 +306,6 @@ IWindowPtr LibraryLayout::FocusNext() { return this->transportView; } - this->transportView->Blur(); return this->visibleLayout->FocusFirst(); } @@ -319,7 +318,6 @@ IWindowPtr LibraryLayout::FocusPrev() { return this->transportView; } - this->transportView->Blur(); return this->visibleLayout->FocusLast(); } @@ -452,12 +450,10 @@ bool LibraryLayout::KeyPress(const std::string& key) { return true; } else if (this->GetFocus() == this->transportView && Hotkeys::Is(Hotkeys::Up, key)) { - this->transportView->Blur(); this->visibleLayout->FocusLast(); return true; } else if (this->GetFocus() == this->transportView && Hotkeys::Is(Hotkeys::Down, key)) { - this->transportView->Blur(); this->visibleLayout->FocusFirst(); return true; } diff --git a/src/musikcube/app/window/TransportWindow.cpp b/src/musikcube/app/window/TransportWindow.cpp index 0f5c2b627..69da63e08 100755 --- a/src/musikcube/app/window/TransportWindow.cpp +++ b/src/musikcube/app/window/TransportWindow.cpp @@ -360,7 +360,6 @@ void TransportWindow::SetFocus(FocusTarget target) { if (this->focus == FocusNone) { this->lastFocus = last; - this->Blur(); } else { this->Focus(); diff --git a/src/musikcube/cursespp/App.cpp b/src/musikcube/cursespp/App.cpp index 3ba8e25ff..a2990c54d 100755 --- a/src/musikcube/cursespp/App.cpp +++ b/src/musikcube/cursespp/App.cpp @@ -449,10 +449,6 @@ process: void App::UpdateFocusedWindow(IWindowPtr window) { if (this->state.focused != window) { - if (this->state.focused) { - this->state.focused->Blur(); - } - this->state.focused = window; this->state.input = dynamic_cast(window.get()); this->state.keyHandler = dynamic_cast(window.get()); diff --git a/src/musikcube/cursespp/AppLayout.cpp b/src/musikcube/cursespp/AppLayout.cpp index 20e2e10ec..20743be28 100644 --- a/src/musikcube/cursespp/AppLayout.cpp +++ b/src/musikcube/cursespp/AppLayout.cpp @@ -203,11 +203,6 @@ void AppLayout::FocusShortcuts() { if (this->layout) { this->lastFocus = this->layout->GetFocus(); - - if (this->lastFocus) { - this->lastFocus->Blur(); - } - this->layout->SetFocus(IWindowPtr()); } diff --git a/src/musikcube/cursespp/LayoutBase.cpp b/src/musikcube/cursespp/LayoutBase.cpp index cc3c0fc56..e767b840f 100755 --- a/src/musikcube/cursespp/LayoutBase.cpp +++ b/src/musikcube/cursespp/LayoutBase.cpp @@ -67,14 +67,9 @@ bool sortByFocusOrder(IWindowPtr a, IWindowPtr b) { } static inline IWindowPtr adjustFocus(IWindowPtr oldFocus, IWindowPtr newFocus) { - if (oldFocus) { - oldFocus->Blur(); - } - if (newFocus) { newFocus->Focus(); } - return newFocus; } diff --git a/src/musikcube/cursespp/Window.cpp b/src/musikcube/cursespp/Window.cpp index 7561a10a0..10c2e2461 100755 --- a/src/musikcube/cursespp/Window.cpp +++ b/src/musikcube/cursespp/Window.cpp @@ -52,6 +52,7 @@ static int NEXT_ID = 0; static bool drawPending = false; static bool freeze = false; static Window* top = nullptr; +static Window* focused = nullptr; static MessageQueue messageQueue; static std::shared_ptr keys; @@ -147,6 +148,12 @@ Window::Window(IWindow *parent) { Window::~Window() { messageQueue.Remove(this); + if (::top == this) { + ::top = nullptr; + } + if (::focused == this) { + ::focused = nullptr; + } this->Destroy(); } @@ -807,6 +814,10 @@ bool Window::IsParentVisible() { void Window::Focus() { if (!this->isFocused) { + if (::focused && ::focused != this) { + ::focused->Blur(); + } + ::focused = this; this->isFocused = true; this->isDirty = true; this->OnFocusChanged(true); @@ -817,6 +828,9 @@ void Window::Focus() { void Window::Blur() { if (this->isFocused) { + if (::focused == this) { + ::focused = nullptr; + } this->isFocused = false; this->isDirty = true; this->OnFocusChanged(false);