mirror of
https://github.com/clangen/musikcube.git
synced 2025-02-22 06:40:54 +00:00
Scary experimental changes to the way focus is tracked to reduce
spaghetti code and fix weird focus bugs with the transport.
This commit is contained in:
parent
76d40a4d42
commit
22900b2c83
@ -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;
|
||||
}
|
||||
|
@ -360,7 +360,6 @@ void TransportWindow::SetFocus(FocusTarget target) {
|
||||
|
||||
if (this->focus == FocusNone) {
|
||||
this->lastFocus = last;
|
||||
this->Blur();
|
||||
}
|
||||
else {
|
||||
this->Focus();
|
||||
|
@ -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<IInput*>(window.get());
|
||||
this->state.keyHandler = dynamic_cast<IKeyHandler*>(window.get());
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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<INavigationKeys> 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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user