@@ -229,7 +229,7 @@ module View = {
229229
230230 let deco =
231231 (
232- ~expand_selection= false ,
232+ ~expand_selection,
233233 ~syntax: CachedSyntax . t ,
234234 ~globals: Globals . t ,
235235 z: Zipper . t ,
@@ -263,65 +263,86 @@ module View = {
263263 ),
264264 ] ;
265265
266+ type selected =
267+ | Yes
268+ | JustHighlight
269+ | No ;
270+
266271 let view =
267272 (
268273 ~globals: Globals . t ,
269274 ~signal: event => Ui_effect . t (unit ),
270275 ~inject: Update . t => Ui_effect . t (unit ),
271- ~selected: bool ,
276+ ~selected: selected ,
272277 ~overlays: list (Node . t )=[] ,
273278 ~dynamics: Language . Dynamics . Map . t ,
274- ~expand_selection=? ,
279+ ~expand_selection= false ,
275280 model: Model . t ,
276281 ) => {
277282 /* Sync document-level click listener for closing context menu */
278283 ContextMenuListener . sync(
279- selected && Model . context_menu_is_open(model),
284+ selected == Yes && Model . context_menu_is_open(model),
280285 inject(ContextMenu (ContextMenu . Model . Close )),
281286 );
282287 let edit_decos =
283- selected
284- ? deco(
285- ~expand_selection? ,
288+ switch (selected) {
289+ | Yes =>
290+ deco(
291+ ~expand_selection,
292+ ~syntax= model. editor. syntax,
293+ ~globals,
294+ model. editor. state. zipper,
295+ )
296+ @ [
297+ Arms . Refractors . all(
298+ ~font_metrics= globals. font_metrics,
286299 ~syntax= model. editor. syntax,
287- ~globals ,
300+ ~dynamics ,
288301 model. editor. state. zipper,
289- )
290- @ [
291- Arms . Refractors . all(
292- ~font_metrics= globals. font_metrics,
293- ~syntax= model. editor. syntax,
294- ~dynamics,
295- model. editor. state. zipper,
296- ),
297- ]
298- @ (
299- switch (model. context_menu) {
300- | Some (selected_index ) => [
301- /* Backdrop for scroll-close. Click handling is done via
302- ContextMenuListener's document-level event listener. */
303- Node . div(
304- ~attrs= [
305- Attr . classes([ "context-menu-backdrop" ] ),
306- Attr . on_wheel(_ =>
307- inject(ContextMenu (ContextMenu . Model . Close ))
308- ),
309- ] ,
310- [] ,
311- ),
312- ContextMenu . view(
313- ~inject= a => inject(Perform (a)),
314- ~syntax= model. editor. syntax,
315- ~info_map= model. statics. info_map,
316- ~font_metrics= globals. font_metrics,
317- ~selected_index,
318- model. editor. state. zipper,
319- ),
320- ]
321- | None => []
322- }
323- )
324- : [] ;
302+ ),
303+ ]
304+ @ (
305+ switch (model. context_menu) {
306+ | Some (selected_index ) => [
307+ /* Backdrop for scroll-close. Click handling is done via
308+ ContextMenuListener's document-level event listener. */
309+ Node . div(
310+ ~attrs= [
311+ Attr . classes([ "context-menu-backdrop" ] ),
312+ Attr . on_wheel(_ =>
313+ inject(ContextMenu (ContextMenu . Model . Close ))
314+ ),
315+ ] ,
316+ [] ,
317+ ),
318+ ContextMenu . view(
319+ ~inject= a => inject(Perform (a)),
320+ ~syntax= model. editor. syntax,
321+ ~info_map= model. statics. info_map,
322+ ~font_metrics= globals. font_metrics,
323+ ~selected_index,
324+ model. editor. state. zipper,
325+ ),
326+ ]
327+ | None => []
328+ }
329+ )
330+ | JustHighlight => [
331+ (
332+ expand_selection
333+ ? Highlight . selection_expanded(
334+ ~term_data= model. editor. syntax. term_data,
335+ )
336+ : Highlight . selection
337+ )(
338+ ~measured= model. editor. syntax. measured,
339+ ~shape_map= model. editor. syntax. shape_map,
340+ ~font_metrics= globals. font_metrics,
341+ model. editor. state. zipper,
342+ ),
343+ ]
344+ | No => []
345+ };
325346 let zipper = model. editor. state. zipper;
326347 let refractor_data =
327348 RefractorView . mk_data(
@@ -336,7 +357,7 @@ module View = {
336357 ~statics= model. statics. info_map,
337358 ~dynamics,
338359 ~sample_cursor= zipper. refractors. sample_cursor,
339- ~editor_active= selected,
360+ ~editor_active= selected != No ,
340361 );
341362 let visible = globals. visible_rows;
342363 let refractors_model =
@@ -361,7 +382,7 @@ module View = {
361382 ~statics= model. statics. info_map,
362383 ~dynamics,
363384 ~sample_cursor= zipper. refractors. sample_cursor,
364- ~editor_active= selected,
385+ ~editor_active= selected != No ,
365386 ),
366387 model. editor. syntax. projector_list,
367388 );
@@ -441,7 +462,7 @@ module View = {
441462 Node . div(
442463 ~attrs= [
443464 Attr . classes(
444- [ "cell-item" , "code-editor" ] @ (selected ? [ "selected" ] : [] ),
465+ [ "cell-item" , "code-editor" ] @ (selected != No ? [ "selected" ] : [] ),
445466 ),
446467 Attr . on_contextmenu(evt =>
447468 switch (Pointer . Event . mk(evt)) {
0 commit comments