@@ -62,6 +62,11 @@ use std::{
6262 time:: Duration ,
6363} ;
6464
65+ struct ImeState {
66+ marked_text : String ,
67+ marked_range_utf16 : Option < Range < usize > > ,
68+ }
69+
6570const CURSOR_BLINK_INTERVAL : Duration = Duration :: from_millis ( 500 ) ;
6671const TERMINAL_SCROLLBAR_WIDTH : Pixels = px ( 12. ) ;
6772
@@ -138,8 +143,7 @@ pub struct TerminalView {
138143 scroll_handle : TerminalScrollHandle ,
139144 show_scrollbar : bool ,
140145 hide_scrollbar_task : Option < Task < ( ) > > ,
141- marked_text : Option < String > ,
142- marked_range_utf16 : Option < Range < usize > > ,
146+ ime_state : Option < ImeState > ,
143147 _subscriptions : Vec < Subscription > ,
144148 _terminal_subscriptions : Vec < Subscription > ,
145149}
@@ -263,8 +267,7 @@ impl TerminalView {
263267 show_scrollbar : !Self :: should_autohide_scrollbar ( cx) ,
264268 hide_scrollbar_task : None ,
265269 cwd_serialized : false ,
266- marked_text : None ,
267- marked_range_utf16 : None ,
270+ ime_state : None ,
268271 _subscriptions : vec ! [
269272 focus_in,
270273 focus_out,
@@ -323,24 +326,27 @@ impl TerminalView {
323326 pub ( crate ) fn set_marked_text (
324327 & mut self ,
325328 text : String ,
326- range : Range < usize > ,
329+ range : Option < Range < usize > > ,
327330 cx : & mut Context < Self > ,
328331 ) {
329- self . marked_text = Some ( text) ;
330- self . marked_range_utf16 = Some ( range) ;
332+ self . ime_state = Some ( ImeState {
333+ marked_text : text,
334+ marked_range_utf16 : range,
335+ } ) ;
331336 cx. notify ( ) ;
332337 }
333338
334339 /// Gets the current marked range (UTF-16).
335340 pub ( crate ) fn marked_text_range ( & self ) -> Option < Range < usize > > {
336- self . marked_range_utf16 . clone ( )
341+ self . ime_state
342+ . as_ref ( )
343+ . and_then ( |state| state. marked_range_utf16 . clone ( ) )
337344 }
338345
339346 /// Clears the marked (pre-edit) text state.
340347 pub ( crate ) fn clear_marked_text ( & mut self , cx : & mut Context < Self > ) {
341- if self . marked_text . is_some ( ) {
342- self . marked_text = None ;
343- self . marked_range_utf16 = None ;
348+ if self . ime_state . is_some ( ) {
349+ self . ime_state = None ;
344350 cx. notify ( ) ;
345351 }
346352 }
0 commit comments