The Inbox: Morphic-ct.1718.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Morphic-ct.1718.mcz

commits-2
A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-ct.1718.mcz

==================== Summary ====================

Name: Morphic-ct.1718
Author: ct
Time: 24 January 2021, 5:22:59.352273 pm
UUID: f630cc0f-15e2-5642-94f6-6277bb8d7bd4
Ancestors: Morphic-mt.1710

PluggableTextMorph: Fixes #selectAll to keep the current scroll position intact, as it is best practice in most modern editor implementations such as Chromium.

I'm very open to refactoring proposals, but otherwise I don't care if you merge this as-is. :-)

=============== Diff against Morphic-mt.1710 ===============

Item was changed:
  ----- Method: Editor>>selectAll: (in category 'typing/selecting keys') -----
  selectAll: aKeyboardEvent
  "select everything, invoked by cmd-a.  1/17/96 sw"
 
  self insertAndCloseTypeIn.
  self selectFrom: 1 to: self string size.
+ morph skipOnceScrollSelectionIntoView.
  ^ true!

Item was changed:
  ----- Method: PluggableTextMorph>>scrollSelectionIntoView: (in category 'editor access') -----
  scrollSelectionIntoView: event
  "Scroll my text into view. Due to line composition mechanism, we must never use the right of a character block because the lines last character block right value always comes from a global container and is *not* line specific."
 
  self rememberSelectionInterval.
 
+ (self valueOfProperty: #skipScrollSelectionIntoView ifAbsent: [false]) ifTrue: [
+ self removeProperty: #skipScrollSelectionIntoView.
+ ^ true].
+
  textMorph editor hasSelection
  ifFalse: [self scrollToShow: (textMorph editor startBlock withWidth: 1)]
  ifTrue: [
  self scrollToShow: (textMorph editor startBlock topLeft corner: textMorph editor stopBlock bottomLeft).
  self scrollToShow: (textMorph editor pointBlock withWidth: 1). "Ensure text cursor visibility."].
 
  ^ true!

Item was added:
+ ----- Method: TextMorph>>skipOnceScrollSelectionIntoView (in category 'as yet unclassified') -----
+ skipOnceScrollSelectionIntoView
+
+ self owner owner setProperty: #skipScrollSelectionIntoView toValue: true.!


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Morphic-ct.1718.mcz

marcel.taeumel
Hi :-)

-1 for adding #skipOnceScrollSelectionIntoView this way

What's exactly the benefit of putting this extra effort into the implementation? Under which circumstances is that extra scrolling a distraction? What do you want to do after "select all"? For all that we know, it might be accidental in other systems. :-) 

Yet, I do like "visual stability" for such interactions. Maybe we can find a better "rule" to achieve that. Or maybe we can establish a paramter to "selectFrom:to:". There is already "invisible selection". Maybe we can add "stableSelection"? Or something like that.

Best,
Marcel

P.S.: All these "skip once if"-blah rules with little to no benefits can quickly blow up the code base. ;-) 

Am 24.01.2021 17:23:15 schrieb [hidden email] <[hidden email]>:

A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-ct.1718.mcz

==================== Summary ====================

Name: Morphic-ct.1718
Author: ct
Time: 24 January 2021, 5:22:59.352273 pm
UUID: f630cc0f-15e2-5642-94f6-6277bb8d7bd4
Ancestors: Morphic-mt.1710

PluggableTextMorph: Fixes #selectAll to keep the current scroll position intact, as it is best practice in most modern editor implementations such as Chromium.

I'm very open to refactoring proposals, but otherwise I don't care if you merge this as-is. :-)

=============== Diff against Morphic-mt.1710 ===============

Item was changed:
----- Method: Editor>>selectAll: (in category 'typing/selecting keys') -----
selectAll: aKeyboardEvent
"select everything, invoked by cmd-a. 1/17/96 sw"

self insertAndCloseTypeIn.
self selectFrom: 1 to: self string size.
+ morph skipOnceScrollSelectionIntoView.
^ true!

Item was changed:
----- Method: PluggableTextMorph>>scrollSelectionIntoView: (in category 'editor access') -----
scrollSelectionIntoView: event
"Scroll my text into view. Due to line composition mechanism, we must never use the right of a character block because the lines last character block right value always comes from a global container and is *not* line specific."

self rememberSelectionInterval.

+ (self valueOfProperty: #skipScrollSelectionIntoView ifAbsent: [false]) ifTrue: [
+ self removeProperty: #skipScrollSelectionIntoView.
+ ^ true].
+
textMorph editor hasSelection
ifFalse: [self scrollToShow: (textMorph editor startBlock withWidth: 1)]
ifTrue: [
self scrollToShow: (textMorph editor startBlock topLeft corner: textMorph editor stopBlock bottomLeft).
self scrollToShow: (textMorph editor pointBlock withWidth: 1). "Ensure text cursor visibility."].

^ true!

Item was added:
+ ----- Method: TextMorph>>skipOnceScrollSelectionIntoView (in category 'as yet unclassified') -----
+ skipOnceScrollSelectionIntoView
+
+ self owner owner setProperty: #skipScrollSelectionIntoView toValue: true.!