Fixing ActiveWindow switching, actual happens switch after event is handled

This commit is contained in:
Krzosa Karol
2024-08-04 08:01:25 +02:00
parent cc04fec1de
commit 324e5e1ea1
2 changed files with 17 additions and 5 deletions

View File

@@ -18,6 +18,7 @@ WindowID ConsoleWindowID;
Array<WindowID> WindowSwitchHistory; // @todo: probably better as a circular buffer
WindowID ActiveWindow;
WindowID NextActiveWindow;
Int CaretChangeID;
inline ViewID AllocViewID() { return {ViewIDs.id++}; }
@@ -101,11 +102,7 @@ WindowID GetLastActiveWindow() {
}
void SetActiveWindow(WindowID window) {
ActiveWindow = window;
Window *w = GetWindow(window);
if (!w->dont_save_in_active_window_history) {
Add(&WindowSwitchHistory, window);
}
NextActiveWindow = window;
}
void SetActiveView(Window *window, ViewID view_id) {

View File

@@ -163,6 +163,21 @@ void Update(const Event &event) {
For(Windows) if (it.is_title_bar) ReplaceTitleBarData(&it);
ReplaceDebugData();
{
if (ActiveWindow.id != NextActiveWindow.id) {
Window *window = GetWindow(ActiveWindow);
window->mouse_selecting = false;
window->mouse_selecting_scrollbar = false;
View *view = GetView(window->active_view);
view->underline_count = 0;
}
ActiveWindow = NextActiveWindow;
Window *w = GetWindow(ActiveWindow);
if (!w->dont_save_in_active_window_history) {
Add(&WindowSwitchHistory, ActiveWindow);
}
}
For(IterateInReverse(&order)) {
Window *window = &Windows[it];
{