@@ -5,7 +5,7 @@ use crate::sbc::chonsole::framework::{
55 ChonsoleLine , ChonsoleLineKind , ChonsoleResponse , TextInput ,
66} ;
77
8- use super :: view_render:: { draw_texture_preview, render_body } ;
8+ use super :: view_render:: draw_texture_preview;
99use super :: view_rml:: { ChonsoleRml , SuggestionClickQueue , SuggestionHoverQueue } ;
1010use super :: view_suggestions:: SuggestionView ;
1111
@@ -28,6 +28,7 @@ pub(super) struct ChonsoleView {
2828 suggestion_hovers : SuggestionHoverQueue ,
2929 hovered_suggestion : Option < usize > ,
3030 reset_suggestion_scroll : bool ,
31+ suggestion_events_dirty : bool ,
3132}
3233
3334impl ChonsoleView {
@@ -48,7 +49,17 @@ impl ChonsoleView {
4849 }
4950
5051 pub ( super ) fn update ( & mut self , interface : & NativeInterfaceRef ) -> Result < ( ) , Error > {
51- self . rml . update ( interface)
52+ self . rml . update ( interface) ?;
53+ if self . suggestion_events_dirty {
54+ self . rml . bind_suggestion_events (
55+ interface,
56+ self . suggestions . len ( ) ,
57+ self . suggestion_clicks . clone ( ) ,
58+ self . suggestion_hovers . clone ( ) ,
59+ ) ?;
60+ self . suggestion_events_dirty = false ;
61+ }
62+ Ok ( ( ) )
5263 }
5364
5465 pub ( super ) fn draw_screen ( & mut self , interface : & NativeInterfaceRef ) -> Result < ( ) , Error > {
@@ -213,7 +224,7 @@ impl ChonsoleView {
213224 index. is_some_and ( |index| self . suggestions . select ( core, & mut self . input , index) )
214225 }
215226
216- pub ( super ) fn process_suggestion_hovers ( & mut self , interface : & NativeInterfaceRef ) {
227+ pub ( super ) fn process_suggestion_hovers ( & mut self ) {
217228 let hovered = self . suggestion_hovers . borrow_mut ( ) . pop ( ) ;
218229 self . suggestion_hovers . borrow_mut ( ) . clear ( ) ;
219230 let Some ( hovered) = hovered else {
@@ -222,11 +233,13 @@ impl ChonsoleView {
222233 if hovered == self . hovered_suggestion {
223234 return ;
224235 }
225- self . rml
226- . set_suggestion_hovered ( interface, self . hovered_suggestion , hovered) ;
227236 self . hovered_suggestion = hovered;
228- self . rml
229- . set_suggestion_details ( interface, self . suggestions . detail ( hovered) ) ;
237+ let _ = self
238+ . rml
239+ . set_suggestion_rows ( & self . suggestions . rml_rows ( hovered) ) ;
240+ let _ = self
241+ . rml
242+ . set_suggestion_details ( self . suggestions . detail ( hovered) ) ;
230243 }
231244
232245 pub ( super ) fn refresh (
@@ -235,7 +248,7 @@ impl ChonsoleView {
235248 core : & ChonsoleCore ,
236249 ) -> Result < ( ) , Error > {
237250 self . refresh_suggestions ( core) ;
238- let body = render_body ( & self . input , & self . output , & self . suggestions ) ;
251+ let suggestion_rows = self . suggestions . rml_rows ( None ) ;
239252 let scroll_top = ( !self . reset_suggestion_scroll )
240253 . then ( || self . rml . suggestion_scroll_top ( interface) )
241254 . flatten ( ) ;
@@ -244,16 +257,18 @@ impl ChonsoleView {
244257 . selected_index ( )
245258 . map ( |selected| reveal_suggestion_scroll_top ( scroll_top. unwrap_or_default ( ) , selected) )
246259 . or ( scroll_top) ;
247- self . rml . refresh ( interface, & body, scroll_top) ?;
260+ self . rml . refresh (
261+ & self . input ,
262+ & self . output ,
263+ & suggestion_rows,
264+ self . suggestions . detail ( None ) ,
265+ scroll_top,
266+ ) ?;
248267 self . reset_suggestion_scroll = false ;
249268 self . hovered_suggestion = None ;
250269 self . suggestion_hovers . borrow_mut ( ) . clear ( ) ;
251- self . rml . bind_suggestion_events (
252- interface,
253- self . suggestions . len ( ) ,
254- self . suggestion_clicks . clone ( ) ,
255- self . suggestion_hovers . clone ( ) ,
256- )
270+ self . suggestion_events_dirty = true ;
271+ Ok ( ( ) )
257272 }
258273
259274 pub ( super ) fn process_key_up (
0 commit comments