changeset 2236:e7060d262939

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 05 Jan 2021 01:52:35 +0000
parents bd642d04d7c6
children 3e9c5bff0a57
files dw.h dwtest.c makefile.mingw makefile.vc win/dw.c
diffstat 5 files changed, 39 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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;
 
--- 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 };
 
 /*
--- 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
--- 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)
--- 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 <richedit.h>
 
+#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;
     }