# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1609811555 0 # Node ID e7060d262939e50ff6b709c022fab3f257f2a125 # Parent bd642d04d7c693bc680c352b62e24ef361382208 Win: Switched to using Rich Edit MLE by default on Windows. Added DW_FEATURE_MLE_RICH_EDIT option to dw_feature_set() to turn it off. diff -r bd642d04d7c6 -r e7060d262939 dw.h --- a/dw.h Mon Jan 04 14:29:24 2021 +0000 +++ b/dw.h Tue Jan 05 01:52:35 2021 +0000 @@ -1508,6 +1508,7 @@ DW_FEATURE_NOTEBOOK_STATUS_TEXT, /* Supports status text area on notebook/tabbed controls */ DW_FEATURE_NOTIFICATION, /* Supports sending system notifications */ DW_FEATURE_UTF8_UNICODE, /* Supports UTF8 encoded Unicode text */ + DW_FEATURE_MLE_RICH_EDIT, /* Supports Rich Edit based MLE control (Windows) */ DW_FEATURE_MAX } DWFEATURE; diff -r bd642d04d7c6 -r e7060d262939 dwtest.c --- a/dwtest.c Mon Jan 04 14:29:24 2021 +0000 +++ b/dwtest.c Tue Jan 05 01:52:35 2021 +0000 @@ -1797,6 +1797,7 @@ "Supports status text area on notebook/tabbed controls", "Supports sending system notifications", "Supports UTF8 encoded Unicode text", + "Supports Rich Edit based MLE control (Windows)", NULL }; /* diff -r bd642d04d7c6 -r e7060d262939 makefile.mingw --- a/makefile.mingw Mon Jan 04 14:29:24 2021 +0000 +++ b/makefile.mingw Tue Jan 05 01:52:35 2021 +0000 @@ -24,7 +24,7 @@ # Had to add -Wno-unused-value due to every Win32 macro generating this warning... # GCC has marked this as WONTFIX http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24900 # This seems to be fixed in Mingw-w64 8.1 readd the option below if using an old compiler -CFLAGS = -O -g -DMSVC $(PLATFORM_DEF) $(PLATFORM_CFLAGS) -D__WIN32__ -DBUILD_DLL -DGDIPLUS -DTOOLBAR -DUNICODE -D_UNICODE -DISOLATION_AWARE_ENABLED=1 -I./win -I. -I./platform -Wall -mthreads -o $(@) +CFLAGS = -O -g -DMSVC $(PLATFORM_DEF) $(PLATFORM_CFLAGS) -D__WIN32__ -DBUILD_DLL -DGDIPLUS -DRICHEDIT -DTOOLBAR -DUNICODE -D_UNICODE -DISOLATION_AWARE_ENABLED=1 -I./win -I. -I./platform -Wall -mthreads -o $(@) LDFLAGS = -shared -mwindows -mthreads -lcomctl32 -lole32 -loleaut32 -luserenv -lmsimg32 -lgdiplus -luuid COMPATOBJECTS = dwcompat.o dirent.o diff -r bd642d04d7c6 -r e7060d262939 makefile.vc --- a/makefile.vc Mon Jan 04 14:29:24 2021 +0000 +++ b/makefile.vc Tue Jan 05 01:52:35 2021 +0000 @@ -119,7 +119,7 @@ # These options will hide the deprecation warnings; Comment the next line to see them CRT_FLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNING -D_WINSOCK_DEPRECATED_NO_WARNINGS -CFLAGS = -c $(PLATFORM_DEF) -D__WIN32__ -DMSVC -DTOOLBAR -DGDIPLUS -DAEROGLASS -D_UNICODE -DUNICODE -DBUILD_DLL -DISOLATION_AWARE_ENABLED=1 -I$(SRCDIR)\platform -I$(SRCDIR) $(WEBVIEW2INC) $(WINTOASTINC) $(SVNVERSION) $(CRT_FLAGS) +CFLAGS = -c $(PLATFORM_DEF) -D__WIN32__ -DMSVC -DRICHEDIT -DTOOLBAR -DGDIPLUS -DAEROGLASS -D_UNICODE -DUNICODE -DBUILD_DLL -DISOLATION_AWARE_ENABLED=1 -I$(SRCDIR)\platform -I$(SRCDIR) $(WEBVIEW2INC) $(WINTOASTINC) $(SVNVERSION) $(CRT_FLAGS) LIBS = wsock32.lib kernel32.lib user32.lib comctl32.lib gdi32.lib advapi32.lib shell32.lib comdlg32.lib ole32.lib oleaut32.lib userenv.lib msimg32.lib gdiplus.lib $(WEBVIEW2LIB) RES = LINKFLAGS = -machine:$(TARGET_CPU) -manifest $(LINK_DEBUG) diff -r bd642d04d7c6 -r e7060d262939 win/dw.c --- a/win/dw.c Mon Jan 04 14:29:24 2021 +0000 +++ b/win/dw.c Tue Jan 05 01:52:35 2021 +0000 @@ -40,6 +40,10 @@ #endif #include +#ifdef RICHEDIT +int _DW_MLE_RICH_EDIT = DW_FEATURE_UNSUPPORTED; +#endif + #define STATICCLASSNAME TEXT("STATIC") #define COMBOBOXCLASSNAME TEXT("COMBOBOX") #define LISTBOXCLASSNAME TEXT("LISTBOX") @@ -4878,6 +4882,9 @@ if(!(hrichedit = LoadLibrary(TEXT("riched20")))) hrichedit = LoadLibrary(TEXT("riched32")); } + /* Enable Rich Edit by default if supported */ + if(_DW_MLE_RICH_EDIT == DW_FEATURE_UNSUPPORTED && (hmsftedit || hrichedit)) + _DW_MLE_RICH_EDIT = DW_FEATURE_ENABLED; #endif #ifdef BUILD_TOAST _dw_toast_init(UTF8toWide(_dw_app_name), UTF8toWide(_dw_app_id)); @@ -6946,9 +6953,12 @@ */ HWND API dw_mle_new(ULONG id) { - HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, - hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME), +#ifdef RICHEDIT + _DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED ? (hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME)) : EDITCLASSNAME, +#else + EDITCLASSNAME, +#endif NULL, WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | @@ -6968,7 +6978,7 @@ } #ifdef RICHEDIT - if(hrichedit || hmsftedit) + if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) cinfo->cinfo.pOldProc = SubclassWindow(tmp, _richeditwndproc); else #endif @@ -9368,7 +9378,7 @@ void API dw_mle_set_word_wrap(HWND handle, int state) { /* If it is a rich edit control use the rich edit message */ - if(hrichedit || hmsftedit) + if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) { SendMessage(handle, EM_SHOWSCROLLBAR, (WPARAM)SB_HORZ, (LPARAM)(state ? FALSE : TRUE)); SendMessage(handle, EM_SETTARGETDEVICE, 0, state ? 0 : 1); @@ -9394,7 +9404,7 @@ void API dw_mle_set_cursor(HWND handle, int point) { SendMessage(handle, EM_SETSEL, (WPARAM)point, (LPARAM)point); - if(hrichedit || hmsftedit) + if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) SendMessage(handle, EM_HIDESELECTION, 0, 0); SendMessage(handle, EM_SCROLLCARET, 0, 0); } @@ -9438,7 +9448,7 @@ if(retval) { SendMessage(handle, EM_SETSEL, (WPARAM)retval - textlen, (LPARAM)retval); - if(hrichedit || hmsftedit) + if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) SendMessage(handle, EM_HIDESELECTION, 0, 0); SendMessage(handle, EM_SCROLLCARET, 0, 0); } @@ -13788,6 +13798,14 @@ return DW_FEATURE_UNSUPPORTED; } #endif +#ifdef RICHEDIT + case DW_FEATURE_MLE_RICH_EDIT: + { + if(hmsftedit || hrichedit) + return _DW_MLE_RICH_EDIT; + return DW_FEATURE_UNSUPPORTED; + } +#endif default: return DW_FEATURE_UNSUPPORTED; } @@ -13844,6 +13862,17 @@ return DW_ERROR_GENERAL; } #endif +#ifdef RICHEDIT + case DW_FEATURE_MLE_RICH_EDIT: + { + if(state >= DW_FEATURE_DISABLED && state <= DW_FEATURE_ENABLED) + { + _DW_MLE_RICH_EDIT = state; + return DW_ERROR_NONE; + } + return DW_ERROR_GENERAL; + } +#endif default: return DW_FEATURE_UNSUPPORTED; }