@@ -175,6 +175,13 @@ long gtk_draw (long widget, long cairo) {
175
175
return result ;
176
176
}
177
177
178
+ @ Override
179
+ void gtk4_draw (long widget , long cairo , Rectangle bounds ) {
180
+ if ((state & OBSCURED ) != 0 ) return ;
181
+ super .gtk4_draw (widget , cairo , bounds );
182
+ drawCaretInFocus (widget , cairo );
183
+ }
184
+
178
185
void drawCaretInFocus (long widget , long cairo ) {
179
186
/*
180
187
* blink is needed to be checked as gtk_draw() signals sent from other parts of the canvas
@@ -197,7 +204,9 @@ private void drawCaret(long widget, long cairo) {
197
204
Cairo .cairo_save (cairo );
198
205
199
206
if (caret .image != null && !caret .image .isDisposed () && caret .image .mask == 0 ) {
200
- Cairo .cairo_set_source_rgb (cairo , 1 , 1 , 1 );
207
+ if (!GTK .GTK4 ) {
208
+ Cairo .cairo_set_source_rgb (cairo , 1 , 1 , 1 );
209
+ }
201
210
Cairo .cairo_set_operator (cairo , Cairo .CAIRO_OPERATOR_DIFFERENCE );
202
211
long surface = Cairo .cairo_get_target (cairo );
203
212
int nWidth = 0 ;
@@ -215,7 +224,9 @@ private void drawCaret(long widget, long cairo) {
215
224
Cairo .cairo_set_source_surface (cairo , caret .image .surface , 0 , 0 );
216
225
Cairo .cairo_paint (cairo );
217
226
} else {
218
- Cairo .cairo_set_source_rgb (cairo , 1 , 1 , 1 );
227
+ if (!GTK .GTK4 ) {
228
+ Cairo .cairo_set_source_rgb (cairo , 1 , 1 , 1 );
229
+ }
219
230
Cairo .cairo_set_operator (cairo , Cairo .CAIRO_OPERATOR_DIFFERENCE );
220
231
int nWidth = caret .width , nHeight = caret .height ;
221
232
if (nWidth <= 0 ) nWidth = Caret .DEFAULT_WIDTH ;
@@ -248,6 +259,15 @@ long gtk_focus_out_event (long widget, long event) {
248
259
return result ;
249
260
}
250
261
262
+ @ Override
263
+ void gtk4_focus_window_event (long handle , long event ) {
264
+ if (event == SWT .FocusIn ) {
265
+ gtk_focus_in_event (handle , event );
266
+ if (caret != null ) caret .setFocus ();
267
+ }
268
+ else gtk_focus_out_event (handle , event );
269
+ }
270
+
251
271
@ Override
252
272
long gtk_preedit_changed (long imcontext ) {
253
273
if (ime != null ) {
0 commit comments