diff --git a/ivette/src/frama-c/kernel/Messages.tsx b/ivette/src/frama-c/kernel/Messages.tsx index 474ada645add85312787054f7df812ccb78a1bd8..c570560a0564778a4396fcc4a538a980369c919a 100644 --- a/ivette/src/frama-c/kernel/Messages.tsx +++ b/ivette/src/frama-c/kernel/Messages.tsx @@ -424,17 +424,24 @@ export default function RenderMessages() { const [filter] = filterState; const [selection, updateSelection] = States.useSelection(); const selectedFct = selection?.current?.fct; - const [message, setMessage] = React.useState(''); + const [selectedMsg, selectMsg] = React.useState<Message|undefined>(undefined); + const [text, setText] = React.useState(''); + + React.useEffect(() => { + if (selectedFct !== selectedMsg?.fct) + selectMsg(undefined); + }, [selectedFct, selectedMsg?.fct]); React.useEffect(() => { model.setFilter((msg: Message) => filterMessage(filter, selectedFct, msg)); }, [model, filter, selectedFct]); const onMessageSelection = React.useCallback( - ({ fct, marker, message: msg }: Message) => { - setMessage(msg); - if (fct && marker) { - const location = { fct, marker }; + (msg: Message) => { + selectMsg(msg); + setText(msg.message); + if (msg.fct && msg.marker) { + const location = { fct:msg.fct, marker:msg.marker }; updateSelection({ location }); } }, [updateSelection], @@ -448,11 +455,11 @@ export default function RenderMessages() { <IconButton icon="CROSS" title="Close" - onClick={() => setMessage('')} + onClick={() => setText('')} style={{ margin: '0 auto' }} /> <Scroll> - <Page className="message-page"> {message} </Page> + <Page className="message-page"> {text} </Page> </Scroll> </Vbox> ); @@ -476,11 +483,12 @@ export default function RenderMessages() { <BSplit settings="ivette.messages.messageSplit" defaultPosition={90} - unfold={message !== ''} + unfold={text !== ''} > <Table<string, Message> model={model} sorting={model} + selection={selectedMsg?.key} onSelection={onMessageSelection} settings="ivette.messages.table" >