SUGGESTED FIX
------- awt_TextArea.cpp -------
*** /tmp/sccs.vpaqT4 Tue Sep 14 14:29:00 2004
--- awt_TextArea.cpp Mon Sep 13 15:00:06 2004
***************
*** 176,182 ****
--- 176,187 ----
}
void AwtTextArea::EditSetSel(CHARRANGE &cr) {
+ // Fix for 5003402: added restoring/hiding selection to enable automatic scrolling
+ LockWindowUpdate(GetHWnd());
+ SendMessage(EM_HIDESELECTION, FALSE, TRUE);
SendMessage(EM_EXSETSEL, 0, reinterpret_cast<LPARAM>(&cr));
+ SendMessage(EM_HIDESELECTION, TRUE, TRUE);
+ LockWindowUpdate(NULL);
}
void AwtTextArea::EditGetSel(CHARRANGE &cr) {
***************
*** 907,913 ****
CHARRANGE cr;
cr.cpMin = getWin32SelPos(start);
cr.cpMax = getWin32SelPos(end);
! SendMessage(EM_EXSETSEL, 0, (LPARAM)&cr);
}
/************************************************************************
--- 912,918 ----
CHARRANGE cr;
cr.cpMin = getWin32SelPos(start);
cr.cpMax = getWin32SelPos(end);
! EditSetSel(cr);
}
/************************************************************************
***************
*** 1001,1008 ****
--- 1006,1018 ----
buffer[length-1] = '\0';
c->CheckLineSeparator(buffer);
c->RemoveCR(buffer);
+ // Fix for 5003402: added restoring/hiding selection to enable automatic scrolling
+ LockWindowUpdate(c->GetHWnd());
+ c->SendMessage(EM_HIDESELECTION, FALSE, TRUE);
c->SendMessageW(EM_SETSEL, start, end);
c->SendMessageW(EM_REPLACESEL, FALSE, (LPARAM)buffer);
+ c->SendMessage(EM_HIDESELECTION, TRUE, TRUE);
+ LockWindowUpdate(NULL);
delete[] buffer;
CATCH_BAD_ALLOC;
void AwtTextArea::EditSetSel(CHARRANGE &cr) {
+ // Fix for 5003402: added restoring/hiding selection to enable automatic scrolling
+ LockWindowUpdate(c->GetHWnd());
+ c->SendMessage(EM_HIDESELECTION, FALSE, TRUE);
SendMessage(EM_EXSETSEL, 0, reinterpret_cast<LPARAM>(&cr));
+ c->SendMessage(EM_HIDESELECTION, TRUE, TRUE);
+ LockWindowUpdate(NULL);
}
void AwtTextArea::EditGetSel(CHARRANGE &cr) {
SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
}
*** 905,915 ****
void AwtTextArea::SetSelRange(LONG start, LONG end)
{
CHARRANGE cr;
cr.cpMin = getWin32SelPos(start);
cr.cpMax = getWin32SelPos(end);
! SendMessage(EM_EXSETSEL, 0, (LPARAM)&cr);
}
/************************************************************************
* TextArea native methods
*/
--- 910,920 ----
void AwtTextArea::SetSelRange(LONG start, LONG end)
{
CHARRANGE cr;
cr.cpMin = getWin32SelPos(start);
cr.cpMax = getWin32SelPos(end);
! EditSetSel(cr);
}
/************************************************************************
* TextArea native methods
*/
*** 999,1010 ****
--- 1004,1020 ----
WCHAR *buffer = new WCHAR[length];
env->GetStringRegion(text, 0, length-1, buffer);
buffer[length-1] = '\0';
c->CheckLineSeparator(buffer);
c->RemoveCR(buffer);
+ // Fix for 5003402: added restoring/hiding selection to enable automatic scrolling
+ LockWindowUpdate(c->GetHWnd());
+ c->SendMessage(EM_HIDESELECTION, FALSE, TRUE);
c->SendMessageW(EM_SETSEL, start, end);
c->SendMessageW(EM_REPLACESEL, FALSE, (LPARAM)buffer);
+ c->SendMessage(EM_HIDESELECTION, TRUE, TRUE);
+ LockWindowUpdate(NULL);
delete[] buffer;
CATCH_BAD_ALLOC;
}
###@###.### 2004-09-14
|