1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-03-19 09:13:33 +01:00

WINGs: fix cursor ghosting issue in wtextfield

The cursor is moved using right/left arrows but as it's blinking
and a XOR function is used to hide/unhide it, it happens the cursor
can be not hidden properly from its previous position.
Better to refresh the view to avoid such issues.
This commit is contained in:
David Maciejak
2026-01-20 23:26:36 -05:00
committed by Carlos R. Mafra
parent d2b2c3238b
commit a542934e67

View File

@@ -1036,7 +1036,6 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
case XK_Left:
if (tPtr->cursorPosition > 0) {
int i;
paintCursor(tPtr);
i = tPtr->cursorPosition;
i += oneUTF8CharBackward(&tPtr->text[i], i);
@@ -1052,9 +1051,8 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
if (tPtr->cursorPosition < tPtr->viewPosition) {
tPtr->viewPosition = tPtr->cursorPosition;
refresh = 1;
} else
paintCursor(tPtr);
}
refresh = 1;
}
if (shifted)
cancelSelection = 0;
@@ -1077,7 +1075,6 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
case XK_Right:
if (tPtr->cursorPosition < tPtr->textLen) {
int i;
paintCursor(tPtr);
i = tPtr->cursorPosition;
if (controled) {
@@ -1090,10 +1087,8 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
}
tPtr->cursorPosition = i;
refresh = incrToFit2(tPtr);
if (!refresh)
paintCursor(tPtr);
incrToFit2(tPtr);
refresh = 1;
}
if (shifted)
cancelSelection = 0;
@@ -1116,13 +1111,11 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
case XK_Home:
if (!controled) {
if (tPtr->cursorPosition > 0) {
paintCursor(tPtr);
tPtr->cursorPosition = 0;
if (tPtr->viewPosition > 0) {
tPtr->viewPosition = 0;
refresh = 1;
} else
paintCursor(tPtr);
}
refresh = 1;
}
if (shifted)
cancelSelection = 0;
@@ -1145,14 +1138,11 @@ static void handleTextFieldKeyPress(TextField * tPtr, XEvent * event)
case XK_End:
if (!controled) {
if (tPtr->cursorPosition < tPtr->textLen) {
paintCursor(tPtr);
tPtr->cursorPosition = tPtr->textLen;
tPtr->viewPosition = 0;
refresh = incrToFit(tPtr);
if (!refresh)
paintCursor(tPtr);
incrToFit(tPtr);
refresh = 1;
}
if (shifted)
cancelSelection = 0;