Skip to content

Commit

Permalink
add methods to manipulate TextEditState undoer
Browse files Browse the repository at this point in the history
This feels awful, @emilk why does this have to be an Arc?

Should the Arc be replaced with a new one when set_undoer is called,
or should it just replace the undoer inside the Arc?

Fixes emilk#3436
  • Loading branch information
LoganDark committed Oct 17, 2023
1 parent 2338a85 commit 7c795f1
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions crates/egui/src/widgets/text_edit/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::*;

use super::{CCursorRange, CursorRange};

type Undoer = crate::util::undoer::Undoer<(CCursorRange, String)>;
pub type TextEditUndoer = crate::util::undoer::Undoer<(CCursorRange, String)>;

/// The text edit state stored between frames.
///
Expand Down Expand Up @@ -42,7 +42,7 @@ pub struct TextEditState {

/// Wrapped in Arc for cheaper clones.
#[cfg_attr(feature = "serde", serde(skip))]
pub(crate) undoer: Arc<Mutex<Undoer>>,
pub(crate) undoer: Arc<Mutex<TextEditUndoer>>,

// If IME candidate window is shown on this text edit.
#[cfg_attr(feature = "serde", serde(skip))]
Expand Down Expand Up @@ -81,6 +81,18 @@ impl TextEditState {
self.ccursor_range = None;
}

pub fn undoer(&self) -> TextEditUndoer {
self.undoer.lock().clone()
}

pub fn set_undoer(&mut self, undoer: TextEditUndoer) {
*self.undoer.lock() = undoer;
}

pub fn clear_undoer(&mut self) {
self.set_undoer(TextEditUndoer::default());
}

pub fn cursor_range(&mut self, galley: &Galley) -> Option<CursorRange> {
self.cursor_range
.map(|cursor_range| {
Expand Down

0 comments on commit 7c795f1

Please sign in to comment.