diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index 09e3d97..3a992fb 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -88,12 +88,6 @@ void ToggleConsole() { } } -struct GotoCrumb { - BufferID buffer_id; - Caret caret; -}; -Array GotoCrumbs; - void CheckpointBeforeGoto() { Window *window = GetWindow(GetLastActiveWindow()); View *view = GetView(window->active_view); diff --git a/src/text_editor/lua_api.cpp b/src/text_editor/lua_api.cpp index 4e89265..738f845 100644 --- a/src/text_editor/lua_api.cpp +++ b/src/text_editor/lua_api.cpp @@ -140,8 +140,8 @@ int LuaOpenBigBuffer(lua_State *L) { // @todo: ViewOpenBuffer - new or old view for specified buffer Buffer *buffer = CreateBuffer(GetSystemAllocator(), "big", 2500000 * 4); LoadBigTextAndBigLine(buffer); - View *view = CreateView(buffer->id); - SetActiveView(window, view->id); + View *view = CreateView(buffer->id); + window->active_view = view->id; SetActiveWindow(window->id); return 0; diff --git a/src/text_editor/management.cpp b/src/text_editor/management.cpp index ac08d4c..52c2bfd 100644 --- a/src/text_editor/management.cpp +++ b/src/text_editor/management.cpp @@ -20,9 +20,10 @@ WindowID ConsoleWindowID; // Remember that WindowCommand works on window handed it down from HandleEvent // just because we don't have NextActiveWindow doesn't mean that we work on new // window all of a sudden in that function call! -WindowID ActiveWindow; -Array WindowSwitchHistory; // @todo: probably better as a circular buffer -Int CaretChangeID; +WindowID ActiveWindow; +Array WindowSwitchHistory; // @todo: probably better as a circular buffer +Array GotoCrumbs; +Int CaretChangeID; Window *ScrollbarSelected = NULL; Window *DocumentSelected = NULL; @@ -126,11 +127,6 @@ void SetActiveWindow(WindowID window) { } } -void SetActiveView(Window *window, ViewID view_id) { - window->active_view = view_id; - Add(&window->view_history, view_id); -} - Window *GetWindowWithView(ViewID view_id) { ForItem(window, Windows) { if (window.active_view.id == view_id.id) { @@ -258,14 +254,14 @@ View *WindowOpenBufferView(Window *new_parent_window, String name) { View *view = FindViewWithBufferName(name); if (!view) { - View *result = OpenBufferView(name); - SetActiveView(new_parent_window, result->id); + View *result = OpenBufferView(name); + new_parent_window->active_view = result->id; return result; } Window *window = GetWindowWithView(view->id); if (!window) { - SetActiveView(new_parent_window, view->id); + new_parent_window->active_view = view->id; return view; } if (window == new_parent_window) { diff --git a/src/text_editor/text_editor.h b/src/text_editor/text_editor.h index 7bab666..7f040c4 100644 --- a/src/text_editor/text_editor.h +++ b/src/text_editor/text_editor.h @@ -59,9 +59,8 @@ struct View { }; struct Window { - WindowID id; - ViewID active_view; - CircularArray view_history; // @todo: use this + WindowID id; + ViewID active_view; WindowID title_bar_window; Int title_bar_last_buffer_change_id; @@ -96,6 +95,11 @@ struct Scroller { Int line_count; }; +struct GotoCrumb { + BufferID buffer_id; + Caret caret; +}; + // @WARNING: be careful about using this, should only be used for debugging // the problem with this is that we want events to be reproducible. // We eat as many events as we can in a frame, we abstract the frame and so on. diff --git a/src/text_editor/window.cpp b/src/text_editor/window.cpp index 522dcf2..7b62e8c 100644 --- a/src/text_editor/window.cpp +++ b/src/text_editor/window.cpp @@ -52,7 +52,6 @@ Window *CreateInfobar(Window *parent_window) { Buffer *b = CreateBuffer(sys_allocator, name); View *v = CreateView(b->id); window->active_view = v->id; - SetActiveView(window, v->id); parent_window->title_bar_window = window->id; window->title_bar_window = parent_window->id; @@ -71,10 +70,10 @@ Int GetTitleBarSize(Window *window) { } void AddColumnWindow() { - Window *window = CreateWindow(); - window->is_column = true; - View *view = OpenBufferView("*scratch*"); - SetActiveView(window, view->id); + Window *window = CreateWindow(); + window->is_column = true; + View *view = OpenBufferView("*scratch*"); + window->active_view = view->id; CreateInfobar(window); } @@ -82,8 +81,8 @@ void AddRowWindow() { Window *window = CreateWindow(); WindowID window_id = window->id; - View *view = OpenBufferView("*scratch*"); - SetActiveView(window, view->id); + View *view = OpenBufferView("*scratch*"); + window->active_view = view->id; CreateInfobar(window); Window *active_window = GetActiveWindow(); @@ -123,7 +122,6 @@ void InitWindows(View *null_view) { LoadUnicode(buffer); // LoadBigTextAndBigLine(buffer, 10000000); window->active_view = view->id; - SetActiveView(window, view->id); CreateInfobar(window); } @@ -134,8 +132,9 @@ void InitWindows(View *null_view) { Buffer *buffer = CreateBuffer(sys_allocator, "*console*"); // buffer->no_history = true; - View *view = CreateView(buffer->id); - SetActiveView(window, view->id); + View *view = CreateView(buffer->id); + window->active_view = view->id; + CreateInfobar(window); SetVisibility(window, false); @@ -153,11 +152,10 @@ void InitWindows(View *null_view) { window->visible = false; buffer->no_history = true; View *view = CreateView(buffer->id); - window->active_view = view->id; window->z = 2; - SetActiveView(window, view->id); - Window *titlebar = CreateInfobar(window); - titlebar->z = 2; + window->active_view = view->id; + Window *titlebar = CreateInfobar(window); + titlebar->z = 2; SetVisibility(window, false); DebugWindowID = window->id; } @@ -175,8 +173,8 @@ void InitWindows(View *null_view) { View *v = CreateView(b->id); v->fuzzy_search = true; - SetActiveView(w, v->id); - w->z = 1; + w->active_view = v->id; + w->z = 1; Window *titlebar = CreateInfobar(w); titlebar->z = 1; @@ -196,7 +194,8 @@ void InitWindows(View *null_view) { w->deactivate_on_escape = true; Buffer *b = CreateBuffer(sys_allocator, "*search*"); View *v = CreateView(b->id); - SetActiveView(w, v->id); + w->active_view = v->id; + CreateInfobar(w); SetVisibility(w, false); @@ -216,7 +215,8 @@ void InitWindows(View *null_view) { Buffer *b = CreateBuffer(sys_allocator, "*popup*"); b->no_history = true; View *v = CreateView(b->id); - SetActiveView(w, v->id); + w->active_view = v->id; + Window *infobar = CreateInfobar(w); infobar->z = 2; SetVisibility(w, false);