--- a/WinWorkstation.st Thu Oct 25 12:09:24 2018 +0200
+++ b/WinWorkstation.st Fri Oct 26 09:39:16 2018 +0200
@@ -956,6 +956,7 @@
DWORD fileDialogThreadId;
BOOL fileDialogDidReturn;
+ BOOL didPerformCroppedBaseNameHack; /* the open dialog cropps the default basename https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/644328 */
} fileDialogData;
DWORD WINAPI OpenFileDialog(void *arg) {
@@ -1020,6 +1021,35 @@
return TRUE;
};
+BOOL CALLBACK enumChildWindowsForCroppedBaseNameHackProc(HWND hwnd, LPARAM lparam) {
+ fileDialogData *pFdd = (fileDialogData*)lparam;
+ char className[5];
+
+ GetClassName(hwnd, className, sizeof(className));
+ if (strcmp("Edit", className) == 0) {
+ if (IsWindowVisible(hwnd)) {
+ LONG lAlign = GetWindowLong(hwnd, GWL_EXSTYLE);
+ lAlign ^= WS_EX_RTLREADING;
+ SetWindowLong(hwnd, GWL_EXSTYLE, lAlign);
+ lAlign ^= WS_EX_RTLREADING;
+ SetWindowLong(hwnd, GWL_EXSTYLE, lAlign);
+
+ pFdd->didPerformCroppedBaseNameHack = TRUE;
+ }
+ }
+
+ return TRUE;
+};
+
+BOOL CALLBACK enumWindowsToForCroppedBaseNameHackProc(HWND hwnd, LPARAM lparam) {
+ fileDialogData *pFdd = (fileDialogData*)lparam;
+ if (GetWindowThreadProcessId(hwnd, NULL) == (DWORD)pFdd->fileDialogThreadId) {
+ EnumChildWindows(hwnd, enumChildWindowsForCroppedBaseNameHackProc, lparam);
+ }
+
+ return TRUE;
+};
+
%}
! !
@@ -16656,6 +16686,17 @@
dataAddress := dataAddressAndThreadAddress first.
+ trueForSave ifFalse:[
+ "hack for display bug (cropped default basename)
+ https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/644328"
+ [
+ self primTryCroppedBaseNameHackByDataAddress:dataAddress
+ ] whileFalse:[
+ "/ loop until the dialog has opened
+ Delay waitForMilliseconds:10.
+ ].
+ ].
+
[
windowGroup notNil ifTrue:[
windowGroup sensor eventSemaphore waitWithTimeout:100 milliseconds.
@@ -16696,7 +16737,7 @@
Display
nativeFileDialogWithTitle:'Hello World'
- defaultFilename:'C:\users\sr\desktop'
+ defaultFilename:'C:\users\sr\desktop\dsfjbgfhkbsdhzbret.ets'
owningTopView:nil
filter:
'expecco Testsuite', null, '*.ets', null,
@@ -16783,6 +16824,7 @@
"
"Created: / 25-10-2018 / 10:54:52 / sr"
+ "Modified: / 26-10-2018 / 09:35:38 / sr"
!
primCloseNativeFileDialogByDataAddress:dataAddress
@@ -16941,6 +16983,28 @@
with:fileDialogThreadHandle
"Created: / 23-10-2018 / 10:59:50 / sr"
+!
+
+primTryCroppedBaseNameHackByDataAddress:dataAddress
+ "hack for display bug (cropped default basename)
+ https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/644328"
+
+%{ /* STACK: 100000 */
+ if (__isExternalAddress(dataAddress)) {
+ fileDialogData *pFdd = __externalAddressVal(dataAddress);
+ pFdd->didPerformCroppedBaseNameHack = FALSE;
+ EnumWindows(enumWindowsToForCroppedBaseNameHackProc, pFdd);
+
+ if (pFdd->didPerformCroppedBaseNameHack) {
+ RETURN (true);
+ } else {
+ RETURN (false);
+ }
+ }
+%}.
+
+ "Created: / 25-10-2018 / 15:37:52 / sr"
+ "Modified: / 26-10-2018 / 09:09:16 / sr"
! !
!WinWorkstation methodsFor:'native widget support'!