<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<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;}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
        {mso-style-priority:1;
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.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>
</head>
<body lang="EN-US" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hi Christoph,</p>
<p class="MsoNormal">I like the #always option :)</p>
<p class="MsoNormal">I’d like to repeat my suggestion to place the new window under the hand asymmetrically: I’m proposing an offset of 20-25% instead of 50% to avoid opening new windows partly outside of the screen if your hand is positioned near the upper
 or left screen edge.</p>
<p class="MsoNormal">Thanks,</p>
<p class="MsoNoSpacing"><span lang="CS">--</span></p>
<p class="MsoNoSpacing"><strong><span style="font-family:"Calibri Light",sans-serif;color:#333333;font-weight:normal">Jaromír Matas</span></strong><span style="font-family:"Calibri Light",sans-serif;color:#555555"><o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-family:"Calibri Light",sans-serif;color:#2E75B6">mail@jaromir.net</span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:christoph.thiede@student.hpi.uni-potsdam.de">christoph.thiede@student.hpi.uni-potsdam.de</a><br>
<b>Sent: </b>Friday, April 1, 2022 16:05<br>
<b>To: </b><a href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</a><br>
<b>Subject: </b>[squeak-dev] Review Request: openToolsInHandStrategy.1.cs</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>=============== Summary ===============</b><br>
<br>
Change Set:        openToolsInHandStrategy<br>
Date:            1 April 2022<br>
Author:            Christoph Thiede<br>
<br>
Revises preferences for opening tools in hand. Deprecates <span style="color:navy">
#openToolsAttachedToMouseCursor</span> and replaces it with a new <span style="color:navy">
#openToolsInHandStrategy</span> that can be set to <span style="color:navy">#never</span>,
<span style="color:navy">#always</span>, or <span style="color:navy">#clicks</span>. The third mode preserves the behavior of the former preference, whereas the second mode is new and will open every tool in hand, independently on whether it was triggered via
 a mouse or keyboard interaction. This behavior has been requested by multiple Squeakers before. See:
<a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2022-February/218981.html">
http://lists.squeakfoundation.org/pipermail/squeak-dev/2022-February/218981.html</a><br>
<br>
Other changes in this patch:<br>
- Update the preference wizard morph to support all strategies.<br>
- Add commonly-used util <span style="color:navy">#dontOpenToolsInHandDuring:</span> on UIManager.<br>
- While installing updates, do not open the transcript in the hand any longer to improve readability.<br>
- Simplify <span style="color:black">SystemWindow</span><span style="color:navy">>>#justDroppedInto:event:</span>.<br>
<br>
<b><span style="color:red">!! Merger note: !!</span></b> When merging interactionModes.cs, make sure to move the new logic from
<span style="color:black">SystemWindow</span><span style="color:navy">>>#openAsTool</span> to
<span style="color:black">UIManager</span><span style="color:navy">>>#shouldOpenToolsInHandNow</span>.<br>
<br>
<b>=============== Postscript ===============</b><br>
<br>
<span style="color:black">PreferenceWizardMorph </span><span style="color:navy">removeSelector:</span><span style="color:black">
</span><span style="color:navy">#toggleAttachToolsToMouse</span><br>
<br>
<b>=============== Diff ===============</b><br>
<br>
<b>BrowseTest>>withImmediatelyOpeningWindowsDo: {private} · ct 3/26/2022 20:34 (changed)</b><br>
withImmediatelyOpeningWindowsDo: aBlock<br>
    "Turn off any preferences that defer to the user to open a window."<br>
<s><span style="color:blue">-     | openToolsAttachedToMouseCursor |<br>
-     (UIManager default respondsTo: #openToolsAttachedToMouseCursor:) ifFalse:<br>
-         [^aBlock value].<br>
</span></s><br>
<s><span style="color:blue">-     openToolsAttachedToMouseCursor := UIManager default openToolsAttachedToMouseCursor.<br>
-     UIManager default openToolsAttachedToMouseCursor: false.<br>
-     ^aBlock ensure:<br>
-         [UIManager default openToolsAttachedToMouseCursor: openToolsAttachedToMouseCursor]<br>
</span></s><span style="color:red">+     ^ UIManager dontOpenToolsInHandDuring: aBlock</span><br>
<br>
<b>MCMcmUpdater>>configureTranscript:during: {private} · ct 4/1/2022 15:26</b><br>
<span style="color:red">+ configureTranscript: interactive during: aBlock<br>
+ <br>
+     self flag: #hacked. "ct: Do not open transcript in hand to guarantee readability of update logs while the update is being performed. Otherwise, the transcript might stick at any corner of the display and cannot be moved before the update is completed."<br>
+     ^ UIManager dontOpenToolsInHandDuring: [<br>
+         | ensureTranscriptSetting |<br>
+         ensureTranscriptSetting := MCConfiguration ensureOpenTranscript.<br>
+         MCConfiguration ensureOpenTranscript: interactive.<br>
+         ^ aBlock ensure:<br>
+             [MCConfiguration ensureOpenTranscript: ensureTranscriptSetting]]</span><br>
<br>
<b>MCMcmUpdater>>doUpdate: {updating} · ct 4/1/2022 15:22 (changed)</b><br>
doUpdate: interactive<br>
    "Update the image by loading all pending updates from the server. If this is<br>
    the default updater for the system, update the system version when complete.<br>
    If interteractive use a modal notifier, otherwise only update the transcript.<br>
    Flush all caches. If a previous download failed this is often helpful"<br>
<br>
<s><span style="color:blue">-     | previousUpdateLevel ensureTranscriptSetting |<br>
</span></s><span style="color:red">+     | previousUpdateLevel |<br>
</span>    previousUpdateLevel := SystemVersion current highestUpdate.<br>
    MCFileBasedRepository flushAllCaches.    <br>
<s><span style="color:blue">-     ensureTranscriptSetting := MCConfiguration ensureOpenTranscript.<br>
-     [MCConfiguration ensureOpenTranscript: interactive.<br>
-      self updateFromRepository<br>
-         ifNil:<br>
-             [interactive ifTrue: [ ^self inform: 'Unable to retrieve updates from remote repository.' translated ].<br>
-             Transcript cr; show: '========== Unable to retrieve updates from remote repository. ==========' translated; cr.<br>
-             ^ self ]<br>
-         ifNotNil: [:config| self logUpdateOf: config previousUpdateLevel: previousUpdateLevel interactive: interactive]]<br>
-         ensure:<br>
-             [MCConfiguration ensureOpenTranscript: ensureTranscriptSetting]<br>
</span></s><span style="color:red">+     self configureTranscript: interactive during:<br>
+         [self updateFromRepository<br>
+             ifNil:<br>
+                 [interactive ifTrue: [ ^self inform: 'Unable to retrieve updates from remote repository.' translated ].<br>
+                 Transcript cr; show: '========== Unable to retrieve updates from remote repository. ==========' translated; cr.<br>
+                 ^ self]<br>
+             ifNotNil: [:config | self logUpdateOf: config previousUpdateLevel: previousUpdateLevel interactive: interactive]]</span><br>
<br>
<b>PreferenceWizardMorph>>adjustSettingsForLowPerformance {support} · ct 3/26/2022 20:41 (changed)</b><br>
adjustSettingsForLowPerformance<br>
<br>
    self updateLowPerformanceLabel: 'Please wait, optimizing performance...' translated.<br>
    self refreshWorld.<br>
    <br>
    self stateGradients "flat look" ifFalse: [self toggleGradients].<br>
    self stateBlinkingCursor ifTrue: [self toggleBlinkingCursor].<br>
    self stateFastDrag ifFalse: [self toggleFastDrag].<br>
    <br>
    self stateSoftShadows ifTrue: [self toggleSoftShadows].<br>
    self stateHardShadows ifTrue: [self toggleHardShadows].<br>
    <br>
    self stateRoundedWindowLook ifTrue: [self toggleRoundedWindowLook].<br>
    self stateRoundedButtonLook ifTrue: [self toggleRoundedButtonLook].<br>
    <br>
<s><span style="color:blue">-     self stateAttachToolsToMouse ifTrue: [self toggleAttachToolsToMouse].<br>
</span></s><span style="color:red">+     self stateAttachToolsToMouseForClicks ifTrue: [self toggleAttachToolsToMouseForClicks].<br>
+     self stateAttachToolsToMouseAlways ifTrue: [self toggleAttachToolsToMouseAlways].<br>
</span>    self stateToolAndMenuIcons ifTrue: [self toggleToolAndMenuIcons].<br>
    <br>
    self stateSmartHorizontalSplitters ifTrue: [self toggleSmartHorizontalSplitters].<br>
    self stateSmartVerticalSplitters ifTrue: [self toggleSmartVerticalSplitters].<br>
    <br>
    PluggableListMorph<br>
        highlightHoveredRow: false;<br>
        filterableLists: false;<br>
        highlightPreSelection: true; "Feedback is important!"<br>
        flashOnErrors: false.<br>
    TheWorldMainDockingBar showSecondsInClock: false.<br>
    Preferences disable: #balloonHelpInMessageLists.<br>
    <br>
    <br>
    "Set simple background."<br>
    self currentWorld setAsBackground: MorphicProject defaultFill.<br>
    <br>
    "Done."<br>
    self updateLowPerformanceLabel: 'Settings were adjusted for optimal performance.' translated.<br>
<br>
<b>PreferenceWizardMorph>>initializePage04InteractionMore {initialization - pages} · ct 3/26/2022 20:38 (changed)</b><br>
initializePage04InteractionMore<br>
<br>
    | currentPage pane |<br>
    currentPage := pages add: self createPage.<br>
    pane := self createScrollPane.<br>
    <br>
    currentPage addMorphBack: (self createLabel: 'Choose more interaction settings' color: Color white).<br>
    currentPage addMorphBack: pane.<br>
    <br>
    pane scroller firstSubmorph addAllMorphsBack: {<br>
        self createCheckbox: 'Windows raise on click' translated for: #WindowsRaiseOnClick help: #(window raise).<br>
        self createCheckbox: 'Windows always active' for: #WindowsAlwaysActive help: #(window content active).<br>
        self createCheckbox: 'Window buttons always active' translated for: #WindowButtonsAlwaysActive help: #(window control active).<br>
        self createVerticalSpace.<br>
        self createCheckbox: 'Smart horizontal splitters' translated for: #SmartHorizontalSplitters help: #(horizontal splitter).<br>
        self createCheckbox: 'Smart vertical splitters' translated for: #SmartVerticalSplitters help: #(vertical splitter).<br>
        self createVerticalSpace.<br>
        self createCheckbox: 'Filterable lists and trees' translated for: #FilterableLists help: 'Type something to filter lists. Press [return] to clear the filter. Press [backspace] to clear and restore prior selection.' translated.<br>
        self createCheckbox: 'Filters clear if unfocused' translated for: #ClearFilterAutomatically help: #(filter clear).<br>
        self createVerticalSpace.<br>
<s><span style="color:blue">-         self createCheckbox: 'Attach tools to mouse' translated for: #AttachToolsToMouse help: #(tools attach).        <br>
</span></s><span style="color:red">+         self createCheckbox: 'Attach tools to mouse - for clicks' translated for: #AttachToolsToMouseForClicks help: #(tools attach).<br>
+         self createCheckbox: 'Attach tools to mouse - always' translated for: #AttachToolsToMouseAlways help: #(tools attach).<br>
</span>        }.<br>
<br>
<b>PreferenceWizardMorph>>stateAttachToolsToMouseAlways {actions - buttons} · ct 3/26/2022 20:40</b><br>
<span style="color:red">+ stateAttachToolsToMouseAlways<br>
+ <br>
+     ^ UIManager openToolsInHandAlways</span><br>
<br>
<b>PreferenceWizardMorph>>stateAttachToolsToMouseForClicks {actions - buttons} · ct 3/26/2022 20:40</b><br>
<span style="color:red">+ stateAttachToolsToMouseForClicks<br>
+ <br>
+     ^ UIManager openToolsInHandForClicks</span><br>
<br>
<b>PreferenceWizardMorph>>toggleAttachToolsToMouseAlways {actions - buttons} · ct 3/26/2022 20:44</b><br>
<span style="color:red">+ toggleAttachToolsToMouseAlways<br>
+ <br>
+     UIManager openToolsInHandAlways: UIManager openToolsInHandAlways not.<br>
+     self changed: #stateAttachToolsToMouseAlways.<br>
+     self changed: #stateAttachToolsToMouseForClicks.</span><br>
<br>
<b>PreferenceWizardMorph>>toggleAttachToolsToMouseForClicks {actions - buttons} · ct 3/26/2022 20:44</b><br>
<span style="color:red">+ toggleAttachToolsToMouseForClicks<br>
+ <br>
+     UIManager openToolsInHandForClicks: UIManager openToolsInHandForClicks not.<br>
+     self changed: #stateAttachToolsToMouseAlways.<br>
+     self changed: #stateAttachToolsToMouseForClicks.</span><br>
<br>
<b>ReleaseBuilder class>>setPreferences {scripts} · ct 3/26/2022 20:35 (changed)</b><br>
setPreferences<br>
    "Preferences class defaultValueTableForCurrentRelease"<br>
<br>
"    Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up."<br>
<br>
    "General User interaction"<br>
    Preferences<br>
        enable: #generalizedYellowButtonMenu ;<br>
        enable: #swapMouseButtons;<br>
        disable: #mouseOverForKeyboardFocus.<br>
    Morph indicateKeyboardFocus: true.<br>
<s><span style="color:blue">-     Project uiManager openToolsAttachedToMouseCursor: false.<br>
</span></s><span style="color:red">+     Project uiManager openToolsInHandStrategy: #never.<br>
</span>    SearchBar useScratchPad: false.<br>
    <br>
    HandMorph sendMouseWheelToKeyboardFocus: false.<br>
    HandMorph synthesizeMouseWheelEvents: true.<br>
    <br>
    "Text input."<br>
    TextEditor<br>
         autoEnclose: true ;<br>
         autoIndent: true ;<br>
         encloseSelection: true ;<br>
         destructiveBackWord: false ;<br>
         blinkingCursor: true ;<br>
         dumbbellCursor: false.<br>
    PluggableTextMorph simpleFrameAdornments: false.<br>
    TextMorphForEditView draggableTextSelection: true.<br>
    <br>
    "Windows"<br>
    SystemWindow reuseWindows: false.<br>
    SystemWindow windowsRaiseOnClick: true.<br>
    SystemWindow windowTitleActiveOnFirstClick: true.<br>
    Model windowActiveOnFirstClick: false. "Not good for little screen real estate."<br>
    Model useColorfulWindows: false. <br>
<br>
    Preferences<br>
        disable: #fastDragWindowForMorphic.<br>
    AbstractResizerMorph<br>
        gripThickness: 4;<br>
        handleLength: 16.<br>
    CornerGripMorph<br>
        drawCornerResizeHandles: false;<br>
        drawEdgeResizeHandles: false.<br>
    ProportionalSplitterMorph<br>
        showSplitterHandles: false;<br>
        smartHorizontalSplitters: false;<br>
        smartVerticalSplitters: false.<br>
<br>
    "Scroll bars."<br>
    Preferences<br>
        enable: #scrollBarsNarrow;<br>
        enable: #scrollBarsOnRight;<br>
        enable: #alwaysHideHScrollbar;<br>
        disable: #alwaysShowHScrollbar;<br>
        disable: #alwaysShowVScrollbar.<br>
    ScrollBar<br>
        scrollBarsWithoutArrowButtons: true;<br>
        scrollBarsWithoutMenuButton: true.<br>
    ScrollPane<br>
        useRetractableScrollBars: false.<br>
<br>
    "Rounded corners."<br>
    Morph preferredCornerRadius: 8.<br>
    SystemWindow roundedWindowCorners: false.<br>
    DialogWindow roundedDialogCorners: false.<br>
    MenuMorph roundedMenuCorners: false.<br>
    PluggableButtonMorph roundedButtonCorners: false.<br>
    ScrollBar roundedScrollBarLook: false.<br>
    <br>
    "Gradients."<br>
    SystemWindow gradientWindow: false.<br>
    DialogWindow gradientDialog: false.<br>
    MenuMorph gradientMenu: false.<br>
    PluggableButtonMorph gradientButton: false.<br>
    ScrollBar gradientScrollBar: false.<br>
<br>
    "Shadows"<br>
    Preferences enable: #menuAppearance3d.<br>
    Morph useSoftDropShadow: true.<br>
    <br>
    "Lists and Trees"<br>
    PluggableListMorph<br>
        filterableLists: true;<br>
        clearFilterAutomatically: false;<br>
        clearFilterDelay: 500;<br>
        highlightHoveredRow: true;<br>
        highlightPreSelection: false;<br>
        menuRequestUpdatesSelection: true.<br>
    PluggableTreeMorph<br>
        filterByLabelsOnly: false;<br>
        maximumSearchDepth: 1.<br>
    <br>
    "Standard Tools"<br>
    TheWorldMainDockingBar<br>
        showWorldMainDockingBar: true;<br>
        showSecondsInClock: true;<br>
        twentyFourHourClock: true.<br>
    SearchBar useSmartSearch: true.<br>
    Workspace shouldStyle: false.<br>
    TranscriptStream<br>
        forceUpdate: true;<br>
        redirectToStdOut: false;<br>
        characterLimit: 20000.<br>
    Browser<br>
        listClassesHierarchically: true;<br>
        showClassIcons: true;<br>
        showMessageIcons: true;<br>
        sortMessageCategoriesAlphabetically: true.<br>
    SystemBrowser browseWithDragNDrop: true.<br>
    MessageSet useUnifiedMessageLabels: true.<br>
    Preferences<br>
        enable: #annotationPanes;<br>
        defaultAnnotationRequests: #(timeStamp author messageCategory implementorsCount allChangeSets);<br>
        enable: #optionalButtons;<br>
        disable: #diffsWithPrettyPrint;<br>
        enable: #traceMessages;<br>
        enable: #alternativeBrowseIt;<br>
        enable: #menuWithIcons;<br>
        enable: #visualExplorer;<br>
        disable: #showSharedFlaps;<br>
        maxBalloonHelpLineLength: 45.<br>
    Preferences disable: #debugLogTimestamp.<br>
<br>
    "Halo"<br>
    Preferences<br>
        enable: #showBoundsInHalo ;<br>
        disable: #alternateHandlesLook;<br>
        disable: #showDirectionHandles;<br>
        enable: #biggerHandles.<br>
    Morph<br>
        haloForAll: true;<br>
        metaMenuForAll: true.<br>
<br>
    "System"<br>
    NetNameResolver enableIPv6: false.<br>
    Scanner<br>
        allowUnderscoreAsAssignment: true;<br>
        prefAllowUnderscoreSelectors: true.<br>
        <br>
    Deprecation showDeprecationWarnings: true<br>
<br>
    "that's all, folks"<br>
<br>
<b>SystemWindow>>justDroppedInto:event: {geometry} · ct 3/26/2022 20:09 (changed)</b><br>
justDroppedInto: aMorph event: anEvent<br>
<br>
    isCollapsed<br>
        ifTrue: [self position: ((self position max: 0@0) grid: 8@8).<br>
                collapsedFrame := self bounds]<br>
        ifFalse: [fullFrame := self bounds].<br>
<br>
    self beKeyWindow.<br>
    self hasDropShadow: Preferences menuAppearance3d. "See #startDragFromLabel:."<br>
            <br>
    aMorph == self world ifTrue: [self assureLabelAreaVisible].<br>
<br>
<s><span style="color:blue">-     (Project uiManager openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop))<br>
-         ifTrue: [<br>
-             self removeProperty: #initialDrop.<br>
</span></s><span style="color:red">+     (self removeProperty: #initialDrop)<br>
+         ifNotNil: [<br>
</span>            (self submorphs detect: [:m | m isKindOf: BottomRightGripMorph] ifNone: [])<br>
                ifNotNil: [:grip | <br>
                    grip<br>
                        referencePoint: anEvent position - grip position;<br>
                        backupAndHideTargetDropShadows. "See MorphicToolBuilder >> #open:"<br>
                    self lookFocused.<br>
                    anEvent hand newMouseFocus: grip]].<br>
            <br>
    ^super justDroppedInto: aMorph event: anEvent<br>
<br>
<b>SystemWindow>>openAsTool {*ToolBuilder-Morphic-opening} · ct 4/1/2022 15:34 (changed)</b><br>
openAsTool<br>
    "Open this window as a tool, that is, honor the preferences such as #reuseWindows and #openToolsAttachedToMouseCursor."<br>
<s><span style="color:blue">- <br>
</span></s><span style="color:red">+     <br>
</span>    | meOrSimilarWindow |<br>
    meOrSimilarWindow := self openInWorldExtent: self extent.<br>
<s><span style="color:blue">-     (Project uiManager openToolsAttachedToMouseCursor "and: [ | event |<br>
-         event := self currentEvent.<br>
-         event isMouse and: [event isMouseUp]]") ifTrue: [<br>
</span></s><span style="color:red">+     Project uiManager shouldOpenToolsInHandNow ifTrue: [<br>
</span>        meOrSimilarWindow setProperty: #initialDrop toValue: true.<br>
        meOrSimilarWindow hasDropShadow: false.<br>
        self currentHand attachMorph: meOrSimilarWindow].<br>
    ^ meOrSimilarWindow<br>
<br>
<b>UIManager class>>dontOpenToolsInHandDuring: {support} · ct 3/26/2022 20:46</b><br>
<span style="color:red">+ dontOpenToolsInHandDuring: aBlock<br>
+     "Utility for various UI test/automation code."<br>
+ <br>
+     | oldStrategy |<br>
+     oldStrategy := self openToolsInHandStrategy.<br>
+     self openToolsInHandStrategy: #never.<br>
+     ^ aBlock ensure: [self openToolsInHandStrategy: oldStrategy]</span><br>
<br>
<b>UIManager class>>openToolsAttachedToMouseCursor {*60Deprecated-preferences} · ct 4/1/2022 15:40 (changed and recategorized)</b><br>
openToolsAttachedToMouseCursor<br>
<br>
<s><span style="color:blue">-     <preference: 'Open Tools Attached to Mouse Cursor'<br>
-         categoryList: #(Tools mouse)<br>
-         description: 'If enabled, new tool windows will be attached to the mouse cursor to be positioned on screen with an additional click-drag. Only occurs if a mouse event triggered that tool opening to not interfere with keyboard-based interaction.'<br>
-         type: #Boolean><br>
-     ^ OpenToolsAttachedToMouseCursor ifNil: [false]<br>
</span></s><span style="color:red">+     self deprecated.<br>
+     ^ self openToolsInHandStrategy ~= #never</span><br>
<br>
<b>UIManager class>>openToolsAttachedToMouseCursor: {*60Deprecated-preferences} · ct 3/26/2022 20:30 (changed and recategorized)</b><br>
openToolsAttachedToMouseCursor: aBoolean<br>
<br>
<s><span style="color:blue">-     OpenToolsAttachedToMouseCursor := aBoolean.<br>
</span></s><span style="color:red">+     self deprecated.<br>
+     self openToolsInHandForClicks: aBoolean.</span><br>
<br>
<b>UIManager class>>openToolsInHandAlways {preferences} · ct 3/26/2022 20:25</b><br>
<span style="color:red">+ openToolsInHandAlways<br>
+ <br>
+     <preference: 'Open Tools Attached to Mouse Cursor - Always'<br>
+         categoryList: #(Tools mouse)<br>
+         description: 'If enabled, new tool windows will be attached to the mouse cursor, allowing users to position and resize them with a single click-drag gesture. NOTE: This mode activates the gesture always, even if the tool was opened via keyboard-based
 interaction.'<br>
+         type: #Boolean><br>
+     ^ self openToolsInHandStrategy = #always</span><br>
<br>
<b>UIManager class>>openToolsInHandAlways: {preferences} · ct 3/26/2022 20:29</b><br>
<span style="color:red">+ openToolsInHandAlways: aBoolean<br>
+ <br>
+     self openToolsInHandStrategy:<br>
+         (aBoolean ifTrue: [#always] ifFalse: [#never]).</span><br>
<br>
<b>UIManager class>>openToolsInHandForClicks {preferences} · ct 3/26/2022 20:25</b><br>
<span style="color:red">+ openToolsInHandForClicks<br>
+ <br>
+     <preference: 'Open Tools Attached to Mouse Cursor - for Clicks'<br>
+         categoryList: #(Tools mouse)<br>
+         description: 'If enabled, new tool windows will be attached to the mouse cursor, allowing users to position and resize them with a single click-drag gesture. NOTE: Only occurs if the tool was opened via a click; keyboard-based interactions remain
 unaffected.'<br>
+         type: #Boolean><br>
+     ^ self openToolsInHandStrategy = #clicks</span><br>
<br>
<b>UIManager class>>openToolsInHandForClicks: {preferences} · ct 3/26/2022 20:28</b><br>
<span style="color:red">+ openToolsInHandForClicks: aBoolean<br>
+ <br>
+     self openToolsInHandStrategy:<br>
+         (aBoolean ifTrue: [#clicks] ifFalse: [#never]).</span><br>
<br>
<b>UIManager class>>openToolsInHandStrategy {preferences} · ct 3/26/2022 20:32</b><br>
<span style="color:red">+ openToolsInHandStrategy<br>
+ <br>
+     self flag: #todo. "Once we have 'enumValues'-style preferences, merge #openToolsInHandAlways and #openToolsInHandForClicks here."<br>
+     ^ OpenToolsInHandStrategy ifNil: [#never]</span><br>
<br>
<b>UIManager class>>openToolsInHandStrategy: {preferences} · ct 3/26/2022 20:15</b><br>
<span style="color:red">+ openToolsInHandStrategy: aSymbol<br>
+ <br>
+     self assert: (#(always clicks never) includes: aSymbol).<br>
+     OpenToolsInHandStrategy := aSymbol.</span><br>
<br>
<b>UIManager>>openToolsAttachedToMouseCursor {*60Deprecated-accessing} · ct 4/1/2022 15:39 (changed and recategorized)</b><br>
openToolsAttachedToMouseCursor<br>
<s><span style="color:blue">-     self flag: #todo. "mt: Let each instances of ui manager have its own setting."<br>
</span></s><span style="color:red">+ <br>
+     self deprecated.<br>
</span>    ^ self class openToolsAttachedToMouseCursor<br>
<br>
<b>UIManager>>openToolsAttachedToMouseCursor: {*60Deprecated-accessing} · ct 3/26/2022 20:35 (changed and recategorized)</b><br>
openToolsAttachedToMouseCursor: aBoolean<br>
<s><span style="color:blue">-     self flag: #todo. "mt: Let each instances of ui manager have its own setting."<br>
-     self class openToolsAttachedToMouseCursor: aBoolean.<br>
</span></s><span style="color:red">+ <br>
+     self deprecated.<br>
+     ^ self class openToolsAttachedToMouseCursor: aBoolean</span><br>
<br>
<b>UIManager>>openToolsInHandStrategy {accessing} · ct 4/1/2022 15:44</b><br>
<span style="color:red">+ openToolsInHandStrategy<br>
+ <br>
+     self flag: #discuss. "Should each instance have its own setting?"<br>
+     ^ self class openToolsInHandStrategy</span><br>
<br>
<b>UIManager>>openToolsInHandStrategy: {accessing} · ct 3/26/2022 20:19</b><br>
<span style="color:red">+ openToolsInHandStrategy: aBoolean<br>
+ <br>
+     self class openToolsInHandStrategy: aBoolean.</span><br>
<br>
<b>UIManager>>shouldOpenToolsInHandNow {accessing} · ct 4/1/2022 15:43</b><br>
<span style="color:red">+ shouldOpenToolsInHandNow<br>
+ <br>
+     ^ self openToolsInHandStrategy caseOf:<br>
+         {[#never] -> [false].<br>
+         [#clicks] -> [<br>
+             | event |<br>
+             self flag: '<<<<<<<<< workingCopy'. "ct: When merging interactionMode.cs, paste new logic from #openAsTool here!"<br>
+             event := self currentEvent.<br>
+             event isMouse or: [event isDropEvent]].<br>
+         [#always] -> [true]}</span><br>
<br>
["openToolsInHandStrategy.1.cs"]<br>
<br>
<span style="color:gray">---<br>
<i>Sent from <a href="https://github.com/hpi-swa-lab/squeak-inbox-talk"><span style="color:gray">Squeak Inbox Talk</span></a></i></span><br>
["openToolsInHandStrategy.1.cs"]<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>