<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
On 7/4/2022 12:56 PM, Jaromir Matas via Cuis-dev wrote:
<blockquote
cite="mid:BYAPR03MB407279F771D20FF7C838F1F3EEBE9@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Calibri Light";
panose-1:2 15 3 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";
color:black;}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
{mso-style-priority:1;
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";
color:black;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
<div class="WordSection1">
<p class="MsoNormal">Hi Juan</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> We could try resuming the old process.
That would require detecting that a new UI process was created
and terminate it. I don't like this, because it may be the new
process the one that is doing relevant stuff now. Besides,
this could lead to state corruption, depending (for example)
on the state of method temp variables in both processes.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> I think it is reasonable to state that
the UI process, as the other system created processes are a
bit special: The system needs to guarantee that there is
always an UI process ready to run. This might mean the system
messing with these processes occasionally. People wanting to
have absolute control over processes should fork their own.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I've been thinking about it and yes,
controlling two UIs is unreasonably complicated; a reasonable
solution has to be simple and straightforward otherwise it's
better leave as it is (I mean keep your great update #5347
keeping the UI always available for new exceptions).</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I've just tested one more approach in
Squeak; the idea is: To keep the system responsive if the UI
is blocked, start a new UI process in #newProcessIfUI: and let
the old (blocked) one wait and eventually finish its *last
cycle* and then automatically*terminate*; to make sure the old
UI terminates automatically you could e.g. add a simple test
to the #mainLoop</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#mainLoop</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> self clearWaitDelay.</p>
<p class="MsoNormal"> canvas isNil ifTrue: [</p>
<p class="MsoNormal"> self
setMainCanvas ].</p>
<p class="MsoNormal"> self redrawNeeded.</p>
<p class="MsoNormal"> [</p>
<p class="MsoNormal"> self
doOneCycle.</p>
<p class="MsoNormal">
UISupervisor uiProcess isActiveProcess ] "<----- a test
in the spirit of whether the active process really is the
current UI process"</p>
<p class="MsoNormal">
whileTrue: []</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In Squeak this approach seems to work but
Cuis has a different (a bit more complicated) implementation
and I haven't managed to implement the idea correctly.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Does this sound like a reasonable approach
or just another potential can of worms? :)</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Many thanks,</p>
<p class="MsoNormal">Jaromir</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNoSpacing"><span lang="CS">--</span></p>
<p class="MsoNoSpacing"><strong><span style="font-family:
"Calibri Light",sans-serif; color: rgb(51, 51,
51); font-weight: normal;">Jaromír Matas</span></strong><span
style="font-family: "Calibri Light",sans-serif;
color: rgb(85, 85, 85);"><o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-family: "Calibri
Light",sans-serif; color: rgb(46, 117, 182);">+420 777
492 777</span><span style="font-family: "Calibri
Light",sans-serif; color: rgb(85, 85, 85);"><br>
</span><span style="font-family: "Calibri
Light",sans-serif; color: rgb(46, 117, 182);"><a class="moz-txt-link-abbreviated" href="mailto:mail@jaromir.net">mail@jaromir.net</a></span></p>
<br>
</div>
</blockquote>
<br>
Hi Jaromir,<br>
<br>
Doing that properly would require detecting possible inconsistencies
in the Morphic object structure, as now we'd be modifying Morphic
state from two different processes. Giving reasonable guarantees of
not completely breaking the various invariants would require a lot
of complexity. Doing it without any such guarantees is not worth it
in my opinion.<br>
<br>
I think (hope!) that anyone facing these kind of situations is an
experienced Morphic developer, who should better understand what's
going on, and code what they are doing with processes carefully
enough. People not messing with the Morphic UI process should never
face this kind of trouble. In many years of doing Morphic, I only
faced trouble when doing deep redesign of the core classes, and what
I did is to be sure that it is easy enough to start a new Morphic
World in a new Morphic Process if needed.<br>
<br>
Thanks,<br>
<br>
<pre class="moz-signature" cols="72">--
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a class="moz-txt-link-freetext" href="https://independent.academia.edu/JuanVuletich">https://independent.academia.edu/JuanVuletich</a>
<a class="moz-txt-link-freetext" href="https://www.researchgate.net/profile/Juan-Vuletich">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a class="moz-txt-link-freetext" href="https://patents.justia.com/inventor/juan-manuel-vuletich">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a class="moz-txt-link-freetext" href="https://twitter.com/JuanVuletich">https://twitter.com/JuanVuletich</a></pre>
</body>
</html>