Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 22 Apr 2016 08:34:39 +0100
branchjv
changeset 19636 cfa029c95cfc
parent 19635 875eb54afd2c (current diff)
parent 19634 6b8ab3b097e4 (diff)
child 19637 aceade7525bb
Merge
ApplicationDefinition.st
ProjectDefinition.st
UninterpretedBytes.st
UserPreferences.st
--- a/ApplicationDefinition.st	Thu Apr 21 07:59:19 2016 +0100
+++ b/ApplicationDefinition.st	Fri Apr 22 08:34:39 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 2006 by eXept Software AG
               All Rights Reserved
@@ -963,6 +961,15 @@
     "Modified: / 15-05-2007 / 17:27:04 / cg"
 !
 
+bmake_dot_mak_mappings
+    ^ super bmake_dot_mak_mappings
+        at:'SKIP_IF_ARG_IS_APP_TARGET' put:'
+@IF "%%1" EQU "exe" exit /b 0
+@IF "%%1" EQU "setup" exit /b 0
+@IF "%%1" EQU "pluginSetup" exit /b 0
+'
+!
+
 buildDate_dot_h_mappings
     |d|
 
@@ -2249,6 +2256,31 @@
     "Created: / 15-05-2007 / 17:27:37 / cg"
 !
 
+bmake_dot_mak
+    "the template code for the bmake.bat file
+     Notice: duplicate %'s if they are needed as such in the generated file"
+
+    ^
+'@REM -------
+@REM make using Borland bcc32
+@REM type bmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+@SET DEFINES=
+
+make.exe -N -f bc.mak  %%DEFINES%% %%*
+
+@IF "%%1" EQU "exe" exit /b 0
+@IF "%%1" EQU "setup" exit /b 0
+@IF "%%1" EQU "pluginSetup" exit /b 0
+
+%(SUBPROJECT_BMAKE_CALLS)
+'
+
+    "Created: / 17-08-2006 / 20:04:14 / cg"
+    "Modified: / 04-09-2012 / 11:46:22 / cg"
+!
+
 buildDate_dot_h
     "the template code for the buildDate.h file"
 
@@ -2892,7 +2924,7 @@
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
 SectionEnd
 
-LangString appOpen ${LANG_GERMAN}  "Mit %(PRODUCT_NAME) öffnen"
+LangString appOpen ${LANG_GERMAN}  "Mit %(PRODUCT_NAME) ffnen"
 LangString appOpen ${LANG_ENGLISH} "Open with %(PRODUCT_NAME)"
 
 LangString DESC_Section1 ${LANG_ENGLISH} "Program components of %(PRODUCT_NAME)"
@@ -2926,7 +2958,7 @@
 
 Function un.onInit
 !!insertmacro MUI_UNGETLANGUAGE
-  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Möchten Sie %(PRODUCT_NAME) und alle seine Komponenten deinstallieren?" IDYES +2
+  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Mchten Sie %(PRODUCT_NAME) und alle seine Komponenten deinstallieren?" IDYES +2
   Abort
 FunctionEnd
 
--- a/ProjectDefinition.st	Thu Apr 21 07:59:19 2016 +0100
+++ b/ProjectDefinition.st	Fri Apr 22 08:34:39 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 2006 by eXept Software AG
               All Rights Reserved
@@ -2746,6 +2744,7 @@
     "Created: / 18-08-2006 / 12:51:38 / cg"
 ! !
 
+
 !ProjectDefinition class methodsFor:'description - project information'!
 
 applicationAdditionalIconFileNames
@@ -4781,6 +4780,7 @@
     ^ self subProjectMakeCallsUsing:'call vcmake %1 %2'.
 ! !
 
+
 !ProjectDefinition class methodsFor:'file templates'!
 
 autopackage_default_dot_apspec
@@ -4908,10 +4908,8 @@
 
 make.exe -N -f bc.mak  %%DEFINES%% %%*
 
+%(SKIP_IF_ARG_IS_APP_TARGET)
 @IF "%%1" EQU "test" exit /b 0
-@IF "%%1" EQU "exe" exit /b 0
-@IF "%%1" EQU "setup" exit /b 0
-@IF "%%1" EQU "pluginSetup" exit /b 0
 
 %(SUBPROJECT_BMAKE_CALLS)
 '
@@ -4991,10 +4989,8 @@
 @REM -------
 make.exe -N -f bc.mak -DUSELCC=1 %%*
 
+%(SKIP_IF_ARG_IS_APP_TARGET)
 @IF "%%1" EQU "test" exit /b 0
-@IF "%%1" EQU "exe" exit /b 0
-@IF "%%1" EQU "setup" exit /b 0
-@IF "%%1" EQU "pluginSetup" exit /b 0
 
 %(SUBPROJECT_LCCMAKE_CALLS)
 '
@@ -5124,10 +5120,8 @@
 @popd
 make.exe -N -f bc.mak %DEFINES% %%USEMINGW_ARG%% %%*
 
+%(SKIP_IF_ARG_IS_APP_TARGET)
 @IF "%%1" EQU "test" exit /b 0
-@IF "%%1" EQU "exe" exit /b 0
-@IF "%%1" EQU "setup" exit /b 0
-@IF "%%1" EQU "pluginSetup" exit /b 0
 
 %(SUBPROJECT_MINGWMAKE_CALLS)
 '
@@ -5221,9 +5215,7 @@
 make.exe -N -f bc.mak -DUSETCC=1 %%*
 
 @IF "%%1" EQU "test" exit /b 0
-@IF "%%1" EQU "exe" exit /b 0
-@IF "%%1" EQU "setup" exit /b 0
-@IF "%%1" EQU "pluginSetup" exit /b 0
+%(SKIP_IF_ARG_IS_APP_TARGET)
 
 
 %(SUBPROJECT_TCCMAKE_CALLS)
@@ -5255,10 +5247,8 @@
 
 make.exe -N -f bc.mak -DUSEVC=1 %DEFINES% %*
 
+%(SKIP_IF_ARG_IS_APP_TARGET)
 @IF "%%1" EQU "test" exit /b 0
-@IF "%%1" EQU "exe" exit /b 0
-@IF "%%1" EQU "setup" exit /b 0
-@IF "%%1" EQU "pluginSetup" exit /b 0
 
 %(SUBPROJECT_VCMAKE_CALLS)
 '
--- a/UninterpretedBytes.st	Thu Apr 21 07:59:19 2016 +0100
+++ b/UninterpretedBytes.st	Fri Apr 22 08:34:39 2016 +0100
@@ -1912,7 +1912,7 @@
      The index is a smalltalk index (i.e. 1-based).
      Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
      Notice also, that the bytes are expected to be in this machine's
-     float representation - if the bytearray originated from another
+     float representation and byte order - if the bytearray originated from another
      machine, some conversion is usually needed."
 
     |newFloat|
@@ -1991,7 +1991,7 @@
      The index is a smalltalk index (i.e. 1-based).
      Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
      Notice also, that the bytes are expected to be in this machine's
-     float representation - if the bytearray originated from another
+     float representation and byte order - if the bytearray originated from another
      machine, some conversion is usually needed."
 
     |flt|
@@ -2071,7 +2071,7 @@
      therefore this method reads a 4-byte float from the byteArray and returns
      a float object which keeps an 8-byte double internally.
      Notice also, that the bytes are expected to be in this machine's
-     float representation and order - if the bytearray originated from another
+     float representation and byte order - if the bytearray originated from another
      machine, some conversion is usually needed."
 
     |newFloat|
@@ -2144,7 +2144,7 @@
      The index is a smalltalk index (i.e. 1-based).
      Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
      Notice also, that the bytes are expected to be in this machines
-     float representation - if the bytearray originated from another
+     float representation and byte order - if the bytearray originated from another
      machine, some conversion is usually needed."
 
     |sflt|
@@ -2220,7 +2220,7 @@
     "retrieve the 8 bytes starting at index as a float.
      The index is a smalltalk index (i.e. 1-based).
      The 8 bytes are assumed to be in IEEE floating point single precision
-     number format."
+     number format in the native byte order."
 
     "
      currently, we assume that the machine's native number format is already
@@ -2240,7 +2240,7 @@
     "store the value of the argument, aFloat into the receiver
      The index is a smalltalk index (i.e. 1-based).
      starting at index. Storage is in IEEE floating point double precision format.
-     (i.e. 8 bytes are stored)."
+     (i.e. 8 bytes are stored in the native byte order)."
 
     "
      currently, we assume that the machine's native number format is already
@@ -2260,7 +2260,7 @@
     "retrieve the 4 bytes starting at index as a float.
      The index is a smalltalk index (i.e. 1-based).
      The 4 bytes are assumed to be in IEEE floating point single precision
-     number format."
+     number format in the native byte order."
 
     "
      currently, we assume that the machine's native number format is already
@@ -2280,8 +2280,9 @@
     "store the value of the argument, aFloat into the receiver
      starting at index, which is a smalltalk index (i.e. 1-based).
      Storage is in IEEE floating point single precision format.
-     (i.e. 4 bytes are stored). Since ST/X floats are really doubles, the low-
-     order 4 bytes of the precision is lost."
+     (i.e. 4 bytes are stored in the native byte order). 
+     Since ST/X floats are really doubles, 
+     the low- order 4 bytes of the precision are lost."
 
     "
      currently, we assume that the machine's native number format is already
@@ -2307,7 +2308,7 @@
 
     |w|
 
-    w := self unsignedInt64At:index bigEndian:IsBigEndian.
+    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
     (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
         ^ w - (16r10000000000000000)
     ].
@@ -2356,7 +2357,7 @@
      The index is a smalltalk index (i.e. 1-based).
      Same as #signedQuadWordAt:put: - for ST80 compatibility."
 
-    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
+    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
 !
 
 signedInt64At:byteIndex put:anInteger MSB:msb
@@ -2377,12 +2378,44 @@
     "Modified: / 9.5.1998 / 01:13:34 / cg"
 !
 
+signedInt64AtLSB:byteIndex
+    "return the 8-bytes starting at index as a signed 64bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with least significant byte first"
+
+    ^ self signedInt64At:byteIndex MSB:false
+!
+
+signedInt64AtLSB:byteIndex put:anInteger
+    "set the 8-bytes starting at index from the signed Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self signedInt64At:byteIndex put:anInteger MSB:false
+!
+
+signedInt64AtMSB:byteIndex
+    "return the 8-bytes starting at index as a signed 64bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self signedInt64At:byteIndex MSB:true
+!
+
+signedInt64AtMSB:byteIndex put:anInteger
+    "set the 8-bytes starting at index from the signed Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self signedInt64At:byteIndex put:anInteger MSB:true
+!
+
 unsignedInt64At:byteIndex
     "return the 8-bytes starting at index in the machine's native
      byteorder as an unsigned integer.
      The index is a smalltalk index (i.e. 1-based)"
 
-   ^ self unsignedInt64At:byteIndex MSB:IsBigEndian
+   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
 
     "
      |b|
@@ -2435,7 +2468,7 @@
      The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
      The value is stored in the machine's natural byteorder."
 
-    ^ self unsignedInt64At:byteIndex put:anInteger MSB:IsBigEndian
+    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
 
     "
      |b|
@@ -2482,6 +2515,38 @@
     "
 
     "Created: / 5.3.1998 / 14:06:02 / stefan"
+!
+
+unsignedInt64AtLSB:byteIndex
+    "return the 8-bytes starting at index as an unsigned 64bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self unsignedInt64At:byteIndex MSB:false
+!
+
+unsignedInt64AtLSB:byteIndex put:anInteger
+    "set the 8-bytes starting at index from the unsigned Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
+!
+
+unsignedInt64AtMSB:byteIndex
+    "return the 8-bytes starting at index as an unsigned 64bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self unsignedInt64At:byteIndex MSB:true
+!
+
+unsignedInt64AtMSB:byteIndex put:anInteger
+    "set the 8-bytes starting at index from the unsigned Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
 ! !
 
 !UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
@@ -2963,6 +3028,38 @@
     "Created: / 5.3.1998 / 10:57:18 / stefan"
 !
 
+signedInt32AtLSB:byteIndex
+    "return the 4-bytes starting at index as a signed 32bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with least significant byte first"
+
+    ^ self signedInt32At:byteIndex MSB:false
+!
+
+signedInt32AtLSB:byteIndex put:anInteger
+    "set the 4-bytes starting at index from the signed Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self signedInt32At:byteIndex put:anInteger MSB:false
+!
+
+signedInt32AtMSB:byteIndex
+    "return the 4-bytes starting at index as a signed 32bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self signedInt32At:byteIndex MSB:true
+!
+
+signedInt32AtMSB:byteIndex put:anInteger
+    "set the 4-bytes starting at index from the signed Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with most significant byte first."
+
+    ^ self signedInt32At:byteIndex put:anInteger MSB:true
+!
+
 unsignedInt32At:byteIndex
     "return the 4-bytes starting at index as an (unsigned) Integer.
      The index is a smalltalk index (i.e. 1-based).
@@ -3211,6 +3308,38 @@
      b unsignedInt32At:1 put:16rFFFFFFFF.
      (b signedInt32At:1) 
     "
+!
+
+unsignedInt32AtLSB:byteIndex
+    "return the 4-bytes starting at index as an unsigned 32bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with least significant byte first"
+
+    ^ self unsignedInt32At:byteIndex MSB:false
+!
+
+unsignedInt32AtLSB:byteIndex put:anInteger
+    "set the 4-bytes starting at index from the unsigned Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with least significant byte first."
+
+    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
+!
+
+unsignedInt32AtMSB:byteIndex
+    "return the 4-bytes starting at index as an unsigned 32bit Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self unsignedInt32At:byteIndex MSB:true
+!
+
+unsignedInt32AtMSB:byteIndex put:anInteger
+    "set the 4-bytes starting at index from the unsigned Integer anInteger.
+     The index is a smalltalk index (i.e. 1-based).
+     The integer is stored with most significant byte first."
+
+    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
 ! !
 
 !UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
@@ -3369,6 +3498,82 @@
     "Modified: 1.7.1996 / 21:12:13 / cg"
 !
 
+signedInt16AtLSB:byteIndex
+    "return the 2-bytes starting at index as a signed Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with least significant byte first"
+
+    ^ self signedInt16At:byteIndex MSB:false
+
+    "
+     |b|
+     b := ByteArray new:2.
+     b wordAt:1 put:16rFFFE.
+     b signedInt16AtLSB:1.
+     b signedInt16AtMSB:1.
+    "
+
+    "Modified: 1.7.1996 / 21:14:38 / cg"
+!
+
+signedInt16AtLSB:index put:anInteger
+    "set the 2-bytes starting at index from the signed Integer value.
+     The index is a smalltalk index (i.e. 1-based).
+     The stored value must be in the range 0 .. 16rFFFF.
+     The value is stored with least significant byte first"
+
+    ^ self signedInt16At:index put:anInteger MSB:false
+
+    "
+     |b|
+     b := ByteArray new:4.
+     b signedInt16At:1 put:16r0102.
+     b signedInt16At:3 put:16r0304.
+     b inspect
+    "
+
+    "Created: / 5.3.1998 / 11:54:52 / stefan"
+    "Modified: / 5.3.1998 / 14:59:38 / stefan"
+!
+
+signedInt16AtMSB:byteIndex
+    "return the 2-bytes starting at index as a signed Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self signedInt16At:byteIndex MSB:true
+
+    "
+     |b|
+     b := ByteArray new:2.
+     b wordAt:1 put:16rFFFE.
+     b signedInt16AtLSB:1.
+     b signedInt16AtMSB:1.
+    "
+
+    "Modified: 1.7.1996 / 21:14:38 / cg"
+!
+
+signedInt16AtMSB:index put:anInteger
+    "set the 2-bytes starting at index from the signed Integer value.
+     The index is a smalltalk index (i.e. 1-based).
+     The stored value must be in the range 0 .. 16rFFFF.
+     The value is stored with most significant byte first"
+
+    ^ self signedInt16At:index put:anInteger MSB:true
+
+    "
+     |b|
+     b := ByteArray new:4.
+     b signedInt16At:1 put:16r0102.
+     b signedInt16At:3 put:16r0304.
+     b inspect
+    "
+
+    "Created: / 5.3.1998 / 11:54:52 / stefan"
+    "Modified: / 5.3.1998 / 14:59:38 / stefan"
+!
+
 unsignedInt16At:index
     "return the 2-bytes starting at index as an (unsigned) Integer.
      The index is a smalltalk index (i.e. 1-based).
@@ -3536,6 +3741,81 @@
 
     "Modified: / 21.1.1998 / 17:48:15 / cg"
     "Modified: / 5.3.1998 / 11:52:28 / stefan"
+!
+
+unsignedInt16AtLSB:byteIndex
+    "return the 2-bytes starting at index as an unsigned Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with least significant byte first"
+
+    ^ self unsignedInt16At:byteIndex MSB:false
+
+    "
+     |b|
+     b := ByteArray new:2.
+     b wordAt:1 put:16rFFFE.
+     b unsignedInt16AtLSB:1.
+     b unsignedInt16AtMSB:1.
+    "
+
+    "Modified: 1.7.1996 / 21:14:38 / cg"
+!
+
+unsignedInt16AtLSB:index put:anInteger
+    "set the 2-bytes starting at index from the (unsigned) Integer value.
+     The index is a smalltalk index (i.e. 1-based).
+     The stored value must be in the range 0 .. 16rFFFF.
+     The value is stored with least significant byte first"
+
+    ^ self unsignedInt16At:index put:anInteger MSB:false
+
+    "
+     |b|
+     b := ByteArray new:4.
+     b unsignedInt16At:1 put:16r0102.
+     b unsignedInt16At:3 put:16r0304.
+     b inspect
+    "
+
+    "Created: / 5.3.1998 / 11:54:52 / stefan"
+    "Modified: / 5.3.1998 / 14:59:38 / stefan"
+!
+
+unsignedInt16AtMSB:byteIndex
+    "return the 2-bytes starting at index as an unsigned Integer.
+     The index is a smalltalk index (i.e. 1-based).
+     The value is retrieved with most significant byte first"
+
+    ^ self unsignedInt16At:byteIndex MSB:true
+
+    "
+     |b|
+     b := ByteArray new:2.
+     b wordAt:1 put:16rFFFF.
+     b signedWordAt:1
+    "
+
+    "Modified: 1.7.1996 / 21:14:38 / cg"
+!
+
+unsignedInt16AtMSB:index put:anInteger
+    "set the 2-bytes starting at index from the (unsigned) Integer value.
+     The index is a smalltalk index (i.e. 1-based).
+     The stored value must be in the range 0 .. 16rFFFF.
+     The value is stored with most significant byte first"
+
+    ^ self unsignedInt16At:index put:anInteger MSB:true
+
+    "
+     |b|
+     b := ByteArray new:4.
+     b unsignedInt16At:1 put:16r0102.
+     b unsignedInt16At:3 put:16r0304.
+     b inspect
+    "
+
+    "Created: / 5.3.1998 / 11:54:52 / stefan"
+    "Modified: / 5.3.1998 / 14:59:38 / stefan"
 ! !
 
 !UninterpretedBytes methodsFor:'accessing-strings'!
--- a/UserPreferences.st	Thu Apr 21 07:59:19 2016 +0100
+++ b/UserPreferences.st	Fri Apr 22 08:34:39 2016 +0100
@@ -14,7 +14,7 @@
 "{ NameSpace: Smalltalk }"
 
 IdentityDictionary subclass:#UserPreferences
-	instanceVariableNames:''
+	instanceVariableNames:'modified'
 	classVariableNames:'CurrentPreferences DefaultPreferences'
 	poolDictionaries:''
 	category:'System-Support'
@@ -761,6 +761,7 @@
             s nextPutLine:(' territory:',UserPreferences current languageTerritory storeString,'.').
         ].    
         s syncData.
+        userPrefs beUnmodified.
     ].
 
     "
@@ -838,6 +839,27 @@
     ^ super at:key asSymbol put:value
 
     "Modified: / 15-01-2012 / 14:26:53 / cg"
+!
+
+beModified
+    "this is not needed for settings applications, which notice any modifications
+     themself. Howvever, if someone else modifies the settings (programmatically),
+     the change should be remembered, so that the user can be warned at session end"
+     
+    modified := true
+!
+
+beUnmodified
+    "done when saved"
+    
+    modified := false
+!
+
+isModified
+    "this is set, if someone modifies the settings programmatically,
+     so that the user can be warned at session end"
+
+    ^ modified ? false
 ! !
 
 
@@ -1924,6 +1946,11 @@
     aDictionary isNil ifTrue:[^ self].
 
     self fontPreferencesChanged.
+
+    "
+     UserPreferences current fontPreferences
+     UserPreferences current fontPreferences:nil
+    "
 !
 
 fontPreferencesChanged
@@ -1933,7 +1960,7 @@
     
     dict := self at:#fontPreferences.
     dict isNil ifTrue:[^ self].
-
+    
     getFont := 
         [:key|
             |s fn|
@@ -1943,7 +1970,8 @@
                 fn := Object readFrom:s.
                 self useXftFontsOnly ifTrue:[
                     fn := XftFontDescription for:fn
-                ]    
+                ].    
+                Display notNil ifTrue:[fn := fn onDevice:Display].
             ].
             fn
         ].