diff win/dw.c @ 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
line wrap: on
line diff
--- 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;
     }