|
@@ -66,7 +66,6 @@ public:
|
|
|
// Safety check during destruction
|
|
// Safety check during destruction
|
|
|
if (!core_ || !app_) return;
|
|
if (!core_ || !app_) return;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// Handle layout changes
|
|
// Handle layout changes
|
|
|
if (event == EditorEvent::WindowLayoutChanged) {
|
|
if (event == EditorEvent::WindowLayoutChanged) {
|
|
|
rebuild_layout();
|
|
rebuild_layout();
|
|
@@ -77,32 +76,24 @@ public:
|
|
|
queue_redraw_all_windows(content_widget_);
|
|
queue_redraw_all_windows(content_widget_);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ bool mode_changed = false;
|
|
|
|
|
+
|
|
|
// Handle mode switching events
|
|
// Handle mode switching events
|
|
|
if (event == EditorEvent::CommandMode) {
|
|
if (event == EditorEvent::CommandMode) {
|
|
|
mode_ = Mode::Command;
|
|
mode_ = Mode::Command;
|
|
|
- command_buffer_.clear();
|
|
|
|
|
- message_line_.clear();
|
|
|
|
|
- if (drawing_area_) drawing_area_->queue_draw();
|
|
|
|
|
|
|
+ mode_changed = true;
|
|
|
} else if (event == EditorEvent::FindFileMode) {
|
|
} else if (event == EditorEvent::FindFileMode) {
|
|
|
mode_ = Mode::FindFile;
|
|
mode_ = Mode::FindFile;
|
|
|
- command_buffer_.clear();
|
|
|
|
|
- message_line_.clear();
|
|
|
|
|
- if (drawing_area_) drawing_area_->queue_draw();
|
|
|
|
|
|
|
+ mode_changed = true;
|
|
|
} else if (event == EditorEvent::BufferSwitchMode) {
|
|
} else if (event == EditorEvent::BufferSwitchMode) {
|
|
|
mode_ = Mode::BufferSwitch;
|
|
mode_ = Mode::BufferSwitch;
|
|
|
- command_buffer_.clear();
|
|
|
|
|
- message_line_.clear();
|
|
|
|
|
- if (drawing_area_) drawing_area_->queue_draw();
|
|
|
|
|
|
|
+ mode_changed = true;
|
|
|
} else if (event == EditorEvent::KillBufferMode) {
|
|
} else if (event == EditorEvent::KillBufferMode) {
|
|
|
mode_ = Mode::KillBuffer;
|
|
mode_ = Mode::KillBuffer;
|
|
|
- command_buffer_.clear();
|
|
|
|
|
- message_line_.clear();
|
|
|
|
|
- if (drawing_area_) drawing_area_->queue_draw();
|
|
|
|
|
|
|
+ mode_changed = true;
|
|
|
} else if (event == EditorEvent::ISearchMode) {
|
|
} else if (event == EditorEvent::ISearchMode) {
|
|
|
mode_ = Mode::ISearch;
|
|
mode_ = Mode::ISearch;
|
|
|
- command_buffer_.clear();
|
|
|
|
|
- message_line_.clear();
|
|
|
|
|
- if (drawing_area_) drawing_area_->queue_draw();
|
|
|
|
|
|
|
+ mode_changed = true;
|
|
|
} else if (event == EditorEvent::Quit) {
|
|
} else if (event == EditorEvent::Quit) {
|
|
|
// Disconnect timer before quitting to prevent segfault
|
|
// Disconnect timer before quitting to prevent segfault
|
|
|
if (cursor_timer_connection_.connected()) {
|
|
if (cursor_timer_connection_.connected()) {
|
|
@@ -115,6 +106,13 @@ public:
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (mode_changed) {
|
|
|
|
|
+ command_buffer_.clear();
|
|
|
|
|
+ message_line_.clear();
|
|
|
|
|
+ history_index_ = minibuffer_history_.size(); // Reset history index to end (new input)
|
|
|
|
|
+ if (content_widget_) queue_redraw_all_windows(content_widget_);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void set_core(EditorCore* core) override {
|
|
void set_core(EditorCore* core) override {
|