Hi,applications (as far as I could). A that time winehq was at 1.6 version, and now is 5.1, may be is easier or better now. Unfortunately, Wineskin seems to be discontinued, and is not compatibly with recent winehq versions that why I plan to use Crossover.
Does anybody have the winefix.st file?. I would like to make some testing with winehq and crossover and the file is not anymore in OA site. Some years ago I used Wineskin and OA tutorials, they worked but the compatility was not enought for "real world"
If anyone is working on something similar, please let me know. Thank you.
Diego Coronel
Hi,applications (as far as I could). A that time winehq was at 1.6 version, and now is 5.1, may be is easier or better now. Unfortunately, Wineskin seems to be discontinued, and is not compatibly with recent winehq versions that why I plan to use Crossover.
Does anybody have the winefix.st file?. I would like to make some testing with winehq and crossover and the file is not anymore in OA site. Some years ago I used Wineskin and OA tutorials, they worked but the compatility was not enought for "real world"
If anyone is working on something similar, please let me know. Thank you.
Diego Coronel
mandag den 10. august 2020 kl. 19.02.36 UTC+2 skrev Diego Coronel:world" applications (as far as I could). A that time winehq was at 1.6 version, and now is 5.1, may be is easier or better now. Unfortunately, Wineskin seems to be discontinued, and is not compatibly with recent winehq versions that why I plan to use
Hi,
Does anybody have the winefix.st file?. I would like to make some testing with winehq and crossover and the file is not anymore in OA site. Some years ago I used Wineskin and OA tutorials, they worked but the compatility was not enought for "real
If anyone is working on something similar, please let me know. Thank you.
Diego CoronelHere is my winefix.st version - maybe it will help, it worked for me.
"File in to make Dolphin 6.0x, 6.1x images compatible with Wine"!#yellow 16r100000F) #(#blue 16r1000010) #(#magenta 16r1000011) #(#cyan 16r1000012) #(#white 16r1000013))
"** WF1 ** Label the image as Wine compatible and running under Mac OS/X if applicable"!
!KernelLibrary class methodsFor!
isMacOSX
"Answer true if this image is running under Mac OS/X under WINE"
#wineFix.
^self isWine and: [true]!
isWine
"Answer true if this image is running under WINE"
#wineFix.
^true! !
!KernelLibrary class categoriesFor: #isMacOSX!public!wine fix! ! !KernelLibrary class categoriesFor: #isWine!public!wine fix! !
"** WF2 ** Wine doesn't yet implement EM_SETMARGINS "!
!TextEdit methodsFor!
setMarginWidths: anArray
| margins |
KernelLibrary isWine
ifTrue:
[ #wineFix.
^self].
margins := (DWORD new)
highWord: anArray first;
lowWord: anArray last.
self
sendMessage: EM_SETMARGINS
wParam: (EC_LEFTMARGIN bitOr: EC_RIGHTMARGIN)
lParam: margins asParameter! !
!TextEdit categoriesFor: #setMarginWidths:!accessing!private!wine fix! !
"** WF3 ** Wine doesn't yet implement GDILibrary>>getPaletteEntries:..."! !IndexedColor methodsFor!
asRGBUsingNoPalette
"Answer the receiver as an RGB when no palette is available ."
| colorNameMap stdColorName |
#wineFix.
colorNameMap := LookupTable new.
#(#(#black 16r1000000) #(#darkRed 16r1000001) #(#darkGreen 16r1000002) #(#brown 16r1000003) #(#darkBlue 16r1000004) #(#darkMagenta 16r1000005) #(#darkCyan 16r1000006) #(#gray 16r1000007) #(#darkGray 16r100000C) #(#red 16r100000D) #(#green 16r100000E) #(
do: [:each | colorNameMap at: each second put: each first].228 73 68 65 84 56 79 157 147 61 14 131 48 12 133 57 81 47 211 51 177 177 48 114 13 174 18 88 122 128 174 84 72 45 205 15 184 121 73 29 153 160 74 161 150 158 244 108 147 207 102 112 53 12 3 157 81 219 182 84 201 24 199 209 82 97 204 243 76 125 223 211
stdColorName := colorNameMap at: index.
^RGB stdColor: stdColorName! !
!IndexedColor categoriesFor: #asRGBUsingNoPalette!converting!public!wine fix! !
!IndexedColor methodsFor!
asRGB
"Answer the receiver as an RGB using the default palette."
#wineFix.
KernelLibrary isWine ifTrue: [
^self asRGBUsingNoPalette].
^self asRGBUsingPalette: self defaultPalette! !
!IndexedColor categoriesFor: #asRGBUsingPalette:!converting!public!wine fix! !
"** WF4 ** ListView watermark in system folder causes problems"! !SmalltalkSystemShell methodsFor!
onViewCreated
"Private - The receiver's has been created (that is the CreateWindow() API call has returned), but may
not yet be connected to the receiver (if the view-presenter pair is being instantiated, then
the connection will not have been made, but if the view is being restored from saved state
in the image then the presenter will be connected). This is an appropriate point for
subclasses to apply any dynamic view configuration that must be performed every time the
view is created. Typically this might involve customising some feature of the view that it
does not itself save, perhaps because a feature of the underlying control does not have full
support in the wrapper class. Note that one should normally override #onViewAvailable to
restore user configuration settings, since the views will normally save and restore all
relevant settings across an image save."
KernelLibrary isWine ifFalse: [
#wineFix.
[self setListViewWatermark] postToMessageQueue].
self registerHotKey.
^super onViewCreated! !
!SmalltalkSystemShell categoriesFor: #onViewCreated!event handling!private!wine fix! !
"** WF5 ** Wine does not support the ComCtrlLibrary>>loadIconWithScaleDown:.. method which is normally availble under Vista
and later. Hence we don't allow this to be called even if the Windows version indicates Vista is available"!
!Icon methodsFor!
valueWithHandle: operation forExtent: aPoint
"Private - Evaluate the <monadicValuable>, operation, with a handle for the receiver's icon at the best possible
rendering for the specified extent. On Vista and later platforms the icon will be scaled down from the next largest
icon if the requested size is not available."
| hModule ident |
self handle = self class question handle
ifTrue:
["If the icon failed to load, the standard question icon will have been substituted"
hModule := 0.
ident := self class question identifier]
ifFalse:
[ident := self identifier.
hModule := instanceHandle asParameter].
hModule isNull
ifTrue:
["If loaded from a file or a standard system icon, then need to reload to ensure has correct extent"
instanceHandle isNil
ifTrue:
[(self loadFromFile: self fileSpec extent: aPoint) ifNotNil: [:hIcon | ^operation value: hIcon]]
ifFalse:
[(hModule == 0
and: [aPoint ~= SystemMetrics current largeIconExtent and: [#wineFix. OSVERSIONINFO current isWinVista & KernelLibrary isWine not ]])
ifTrue:
[(self
load: ident
fromInstance: hModule
extent: aPoint) ifNotNil: [:hIcon | ^operation value: hIcon]]]].
^operation value: self asParameter! !
!Icon categoriesFor: #valueWithHandle:forExtent:!helpers!private!wine fix! !
"** WF6 ** Suppressible message boxes under Wine have a bug where they ignore the buttonStyles #yesNo and #yesNoCancel and will
always answer #ok or #cancel instead. Here we map the return button ids to the correct values"!
!MessageBox methodsFor!
result
"Answer a portable symbolic constant describing the button that was pressed by the user
to close the receiver."
KernelLibrary isWine
ifTrue:
[#wineFix.
"Suppressible message boxes under Wine have a bug where they ignore the buttonStyles #yesNo and #yesNoCancel and will
always answer #ok or #cancel instead. Here we map the return button ids to the correct values"
(self buttonStyle == #yesNo or: [self buttonStyle == #yesNoCancel])
ifTrue:
[button = IDOK ifTrue: [button := IDYES].
button = IDCANCEL ifTrue: [button := IDNO]]].
^ButtonMap at: button! !
!MessageBox categoriesFor: #result!accessing!public!wine fix! !
"** WF7 ** Helper method to edit view resources - will appear in D6.2"!
!ResourceIdentifier methodsFor!
editViewUsing: aMonadicBlock
| view |
view := self loadWithContext: View desktop.
aMonadicBlock value: view.
self assign: view literalStoreArray.
view destroy! !
!ResourceIdentifier categoriesFor: #editViewUsing:!operations!public! !
"** WF8 ** Wine gives error when turning of theming"!
!View methodsFor!
beNotThemed
"Turns off any visual theme for the receiver. Only effective on Windows XP and above"
KernelLibrary isWine ifTrue: [
"Wine currently errors on this, so ignore"
#wineFix.
^self].
ThemeLibrary default
setWindowTheme: self handle
pszSubAppName: '' asUnicodeString
pszSubIdList: '' asUnicodeString! !
!View categoriesFor: #beNotThemed!modes!wine fix!public! !
"** WF9 ** Having autoSelectPackages option turned on in System Browser gives unpleasant scrolling effect when many multiple packages
are selected. This also happens in Package Browser. Problem under Wine traced to LVIS_FOCUSED option in ListView>>selectIndex:. Not
sure what overall effect it will have turning this off."!
!ListView methodsFor!
selectIndex: anInteger set: aBoolean
"Private - Set/reset the selection state of the object at the specified one-based <integer>
index within the receiver according to the <boolean> argument."
| anLvItem mask |
anLvItem := LVITEM new.
mask := ##(LVIS_SELECTED|LVIS_FOCUSED).
KernelLibrary isWine ifTrue: [
#wineFix.
mask := mask maskClear: LVIS_FOCUSED
].
anLvItem stateMask: mask.
aBoolean ifTrue: [anLvItem dwState: mask].
self lvmSetItem: anInteger - 1 state: anLvItem! !
!ListView categoriesFor: #selectIndex:set:!private!selection! !
"** WF10 ** Wine ListViews seem to expect image indices to always be set in ListView>>onDisplayDetailsRequired:, even if we don't want
images to appear. Normally, we don't set an image if none is required. In Wine we set an image index of 0"!
!ListViewColumn methodsFor!
imageFromRow: item
"Private - Answer the image for this column extracted from the <Object>, item,
which is an element of the receiver's parent <ListView>.
As of Dolphin 3.0 the image block is permitted to be nil for the common case where the columns does not have images."
KernelLibrary isWine ifTrue: [
#wineFix.
"WF10: Wine ListViews seem to expect image indices to always be set in ListView>>onDisplayDetailsRequired:,
even if we don't want images to appear. Normally, we answer nil here if no image is required.
In Wine we must answer an image index of 0"
getImageBlock ifNil: [^0]].
^getImageBlock isNil ifFalse: [
getImageBlock value: (self contentFromRow: item)].
! !
!ListViewColumn categoriesFor: #imageFromRow:!adapters!private!wine fix! !
!ListView methodsFor!
imageFromRow: item
"Private - Answer the image for row which represents the <Object>, item.
As of Dolphin 3.0 the image block is permitted to be nil for the common case where the list does not have images."
self viewMode == #thumbnails ifTrue: [^self getThumbnailOf: item].
KernelLibrary isWine ifTrue: [
#wineFix.
"WF10: Wine ListViews seem to expect image indices to always be set in ListView>>onDisplayDetailsRequired:,
even if we don't want images to appear. Normally, we answer nil here if no image is required.
In Wine we must answer an image index of 0"
getImageBlock ifNil: [^0]].
^self getImageBlock isNil ifFalse: [getImageBlock value: item]! !
!ListView categoriesFor: #imageFromRow:!adapters!private!wine fix! !
"** WF11 ** Wine doesn't appear to support setting drag cursors from image lists. Until available we fall back to using the old (non-specific) drag and drop cursors"!
!InternalDragDropSession methodsFor!
giveFeedback
"Private - Set the drag cursor to indicate the effect of a drop on the current target."
| imageKey |
(imageKey := self imageKey) ~~ lastImageKey
ifTrue:
[| dragIm |
KernelLibrary isWine
ifTrue:
[| cursorSelector |
#wineFix.
"WF11: Wine doesn't appear to support setting drag cursors
from image lists. Until available we fall back to using the
old (non-specific) drag and drop cursors"
cursorSelector := ##((LookupTable new)
at: #none put: #ddNone;
at: #move put: #ddMove;
at: #copy put: #ddCopy;
at: #copyScroll put: #ddCopyScroll;
at: #moveScroll put: #ddMoveScroll;
at: #linkScroll put: #ddLinkScroll;
yourself) at: self imageKey.
(Cursor perform: cursorSelector) makeCurrent.
lastImageKey := imageKey].
dragIm := dragImages at: imageKey.
imageList
setDragCursorImage: dragIm key
hotSpotX: dragIm value x
hotSpotY: dragIm value y.
lastImageKey := imageKey].
imageList dragMoveTo: self dragPoint! !
!InternalDragDropSession categoriesFor: #giveFeedback!operations!wine fix!private! !
"** WF 12 ** Fixes for Registry Editor sample (which can be quite useful). They are mainly to do
with the pulling or resource items out of the genuine Microsoft RegEdit.exe, which isn't available. These fixes should be migrated back into the main code as they make it less dependent on changes to the underlying Windows OS"!
!RegEdit class methodsFor!
displayStringForValue: anObject
"Private - Answer an appropriate registry editor display string for the argument, anObject.
Not clean, but we don't want to add these as polymorphic operations into the types
of object in the registry.
This method also illustrates the use of the C-runtime library function sprintf() for
fast string formatting."
| s n max |
anObject isNil
ifTrue:
[^'(value not set)'].
anObject isInteger ifTrue: [^'0x%08x (%u)' sprintfWith: anObject with: anObject].
(anObject isKindOf: String) ifTrue: [^'"' , anObject , '"'].
"Assume its a byte array"
anObject isEmpty
ifTrue:
[^'(zero-length binary value)'].
n := anObject size.
max := 64 min: n.
s := String writeStream: (max + 1) * 3.
(1 to: max) do: [:i | s nextPutAll: ('%02x' sprintfWith: (anObject basicAt: i))]
separatedBy: [s space].
max < n ifTrue: [s nextPutAll: '...'].
^s contents! !
!RegEdit class categoriesFor: #displayStringForValue:!displaying!private! !
!RegEdit class methodsFor!
binaryIcon
"Answers an Icon that can be used to represent binary values."
^InternalIcon
fromBytes: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 16 0 0 0 16 8 6 0 0 0 31 243 255 97 0 0 0 1 115 82 71 66 0 174 206 28 233 0 0 0 4 103 65 77 65 0 0 177 143 11 252 97 5 0 0 0 9 112 72 89 115 0 0 14 195 0 0 14 195 1 199 111 168 100 0 0 0
!RegEdit class categoriesFor: #binaryIcon!constants!public! !168 100 0 0 2 87 73 68 65 84 56 79 205 146 191 111 82 81 20 199 49 198 31 131 131 113 49 174 141 255 128 131 78 46 14 198 65 55 83 135 46 117 209 166 134 98 218 52 74 211 2 86 83 36 252 104 161 242 67 232 243 1 22 8 60 124 175 200 143 148 39 5 11 181 208
!RegEdit class methodsFor!
keyIcon
"Answers an Icon that can be used to registry keys."
^InternalIcon fromBytes: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 16 0 0 0 16 8 6 0 0 0 31 243 255 97 0 0 0 1 115 82 71 66 0 174 206 28 233 0 0 0 4 103 65 77 65 0 0 177 143 11 252 97 5 0 0 0 9 112 72 89 115 0 0 14 195 0 0 14 195 1 199 111
!RegEdit class categoriesFor: #keyIcon!constants!public! !220 73 68 65 84 56 79 157 147 219 13 131 48 12 69 153 168 203 116 50 62 89 131 85 18 126 186 4 21 31 133 60 192 205 77 117 145 41 169 20 26 233 40 142 81 142 13 194 141 181 86 174 208 182 173 52 122 13 195 16 164 114 77 211 36 125 223 203 65 146 170 87
!RegEdit class methodsFor!
stringIcon
"Answers an Icon that can be used to string values."
^InternalIcon
fromBytes: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 16 0 0 0 16 8 6 0 0 0 31 243 255 97 0 0 0 1 115 82 71 66 0 174 206 28 233 0 0 0 4 103 65 77 65 0 0 177 143 11 252 97 5 0 0 0 9 112 72 89 115 0 0 14 195 0 0 14 195 1 199 111 168 100 0 0 0
!RegEdit class categoriesFor: #stringIcon!constants!public! !real registry editor extreme care and expert knowledge are required to avoid damaging the installation of the operating system or other software on your machine if any modifications to the registry are attempted. Please take care - we accept no
!RegEdit methodsFor!
newKey
"Add a new, empty, sub-key under the currently selected key,
and leave the receiver in key renaming mode."
| i sel newKey |
i := 1.
sel := self selectedKey.
"Generate a unique key name"
[newKey := 'New Key #', i displayString. sel includesKey: newKey] whileTrue: [i := i + 1].
newKey := sel createKey: newKey.
keyPresenter model add: newKey asChildOf: sel.
keyPresenter
selection: newKey;
view editSelectionLabel! !
!RegEdit categoriesFor: #newKey!commands!public! !
!RegEdit methodsFor!
newValueName
"Private - Answer a new unique value name under the currently selected key."
| i sel unique |
i := 1.
sel := self selectedKey subValues.
[unique := 'New Value #' , i displayString.
sel includesKey: unique] whileTrue: [i := i + 1].
^unique! !
!RegEdit categoriesFor: #newValueName!commands!private! !
!RegEdit methodsFor!
deleteSelectedKey
"Private - Delete the selected registry key."
| key mb |
key := self selectedKey.
key isRoot ifTrue: [^nil]. "Can't delete root key."
mb := MessageBox new.
mb text: 'Are you sure you want to permanently delete this key and all of its subkeys?'.
mb caption: 'Confirm Key Delete'.
mb icon: Warning icon.
mb buttonStyle: #yesNo.
mb open == #yes
ifTrue:
[| parentKey |
parentKey := key parentKey.
[parentKey removeKey: key name ifAbsent: [^self].
keyPresenter model remove: key]
on: HRESULTError
do: [:e | e okCancel]]! !
!RegEdit categoriesFor: #deleteSelectedKey!commands!private! !
!RegEdit methodsFor!
deleteSelectedValue
"Private - Delete the selected registry value."
| idx mb |
idx := valuesPresenter selectionByIndex.
idx == 0 ifTrue: [^self].
mb := MessageBox new.
mb text: 'Deleting certain registry values could cause system instability. Are you sure you want to permanently delete these values?'.
mb caption: 'Confirm Value Delete'.
mb icon: Warning icon.
mb buttonStyle: #yesNo.
mb open == #yes
ifTrue:
[
[| value |
value := valuesPresenter model at: idx.
self selectedKey subValues removeKey: value key ifAbsent: [^self].
value value: nil.
value key isEmpty
ifTrue: [valuesPresenter model refreshAtIndex: idx]
ifFalse: [valuesPresenter model removeAtIndex: idx]]
on: HRESULTError
do: [:e | e okCancel]]! !
!RegEdit categoriesFor: #deleteSelectedValue!commands!private! !
!RegEdit class methodsFor!
about
"Private - Pop up a little helpful info. about this sample program."
(MessageBox new)
caption: 'About Dolphin Registry Editor';
text: ('Simple Registry Editor Sample. Copyright (c) Object Arts Ltd, 1998-2011.<n><1s><n>
This is a reduced functionality implementation of the standard system utility REGEDIT.EXE, intended to demonstrate various features of Dolphin''s application framework such as virtual tree models, and in-place label editing.<n>
DISCLAIMER: This software is freely provided purely as an educational sample and as such it is provided "as is", WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Furthermore, as with the
expandMacrosWith: VMLibrary default fullVersion);
open! !
!RegEdit class categoriesFor: #about!enquiries!private! !
"** WF13 ** Uninstall Simple Web Browser sample since it requires IE component"!
| swb |
swb := (Package manager packageNamed: 'Simple Web Browser' ifNone:[]).
swb notNil ifTrue: [swb uninstall]!
"** WF14 ** Remove CodeMentorPlugin from all browsers since it requires IE component"!
Smalltalk at: #CodeMentorPlugin ifPresent: [:cmp |
ClassBrowserShell plugins: (ClassBrowserShell plugins reject: [:each | each==cmp]).
(Smalltalk at: #SystemBrowserShell) plugins: (ClassBrowserShell plugins reject: [:each | each==cmp])]!
"Appearances for Mac OS/X"!
KernelLibrary isMacOSX ifTrue: [
| macSystemFont |
macSystemFont := (Font name: 'Lucida Grande' pointSize: 10) . SmalltalkWorkspace defaultFont: macSystemFont.
SmalltalkSystem current defaultFont: macSystemFont.
SmalltalkSystemShell defaultBackcolor: (RGB red: 0 green: 128 blue: 192). (ResourceIdentifier class: SmalltalkSystemShell name: 'Default view') editViewUsing: [:shell |
(shell viewNamed: 'systemFolder')
forecolor: Color white;
iconSpacing: 96@96].
]!
"Reset UI"!
SmalltalkSystem current panic !
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 296 |
Nodes: | 16 (2 / 14) |
Uptime: | 54:37:43 |
Calls: | 6,650 |
Calls today: | 2 |
Files: | 12,200 |
Messages: | 5,330,629 |