tSwitch from RichEdit 1.0 to 2.0; make it work with Unicode, text tags and its bizarre idea of where the selection is. - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 3d23b76f8d82c9bb7b144565b54711e716307dd9
(DIR) parent b8f9b8713494529edc1e305a2f3a665fc6e52c9d
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Mon, 2 Sep 2002 13:45:12 +0000
Switch from RichEdit 1.0 to 2.0; make it work with Unicode, text tags and
its bizarre idea of where the selection is.
Diffstat:
M src/gtkport/gtkport.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
t@@ -1151,7 +1151,7 @@ void win32_init(HINSTANCE hInstance, HINSTANCE hPrevInstance,
}
InitCommonControls();
- LoadLibrary("RICHED32.DLL");
+ LoadLibrary("RICHED20.DLL");
/* Rich Edit controls have two different class names, depending on whether
* we want ANSI or Unicode - argh! */
t@@ -1160,7 +1160,6 @@ void win32_init(HINSTANCE hInstance, HINSTANCE hPrevInstance,
} else {
RichEditClass = "RichEdit20A";
}
- RichEditClass = "RichEdit";
HaveRichEdit = GetClassInfo(hInstance, RichEditClass, &wc);
if (!hPrevInstance) {
t@@ -1958,11 +1957,19 @@ static void gtk_text_view_set_format(GtkTextView *textview,
CHARFORMAT *cf, cfdef;
GtkWidget *widget = GTK_WIDGET(textview);
GtkTextBuffer *buffer;
+ DWORD st, end;
if (!GTK_WIDGET_REALIZED(widget)) {
return;
}
+ /* RichEdit controls do something odd behind the scenes with line ends,
+ * so we use our guess for the last character position, and then read
+ * back the resultant selection to get the true "length" of the control */
+ mySendMessage(widget->hWnd, EM_SETSEL, (WPARAM)endpos, (LPARAM)endpos);
+ mySendMessage(widget->hWnd, EM_GETSEL, (WPARAM)&st, (LPARAM)&end);
+ endpos = (gint)end;
+
mySendMessage(widget->hWnd, EM_SETSEL, (WPARAM)(endpos - len),
(LPARAM)endpos);
t@@ -2029,8 +2036,13 @@ void gtk_editable_set_position(GtkEditable *editable, gint position)
if (!GTK_WIDGET_REALIZED(widget))
return;
hWnd = widget->hWnd;
+
+ /* RichEdit 2.0 doesn't appear to show the caret unless we show the
+ * selection */
+ mySendMessage(hWnd, EM_HIDESELECTION, 0, 0);
mySendMessage(hWnd, EM_SETSEL, (WPARAM)position, (LPARAM)position);
mySendMessage(hWnd, EM_SCROLLCARET, 0, 0);
+ mySendMessage(hWnd, EM_HIDESELECTION, 1, 0);
}
gint gtk_editable_get_position(GtkEditable *editable)