Repository navigation
GTK4 issues found by SWT test suite #3743
Copy link
Copy link
Open
Description
A while ago @akurtakov asked me to test GTK4, which I finally found the time for.
Here are the GTK4 bugs our internal SWT test harness found.
Each one is a difference from SWT on GTK3, which behaves like Win32 and Cocoa here.
Tested on master (3376e19), GTK 4.22.4 against GTK 3.24.52, X11 backend (GDK_BACKEND=x11).
If a description is not sufficient, let me know.
Input and events
-
Display.postsynthesizes nothing and returns false for every event type, so SWT tests cannot post mouse or key input on GTK4. - Clicks on
Button,List,TableandTreesend noMouseDown/MouseUp;Listsends aMouseUpwithout theMouseDownbefore it. Listeners that react to mouse down/up (drag start, context actions) never run. -
TextandCombosendModifywithout a precedingVerifywhen typing, soVerifyListeners that filter or reject input (numeric fields, length limits) have no effect. - A double click sends
MouseDoubleClickbefore the secondMouseDown; GTK3, Win32 and Cocoa sendMouseDown(withcount2) first and thenMouseDoubleClick, so code that handles the press inMouseDownsees the double click first. - Shifted letters and symbols report the shifted character as
keyCode(72'H'for Shift+h, 33'!'for Shift+1), while GTK3, Win32 and Cocoa report the unshifted key (104'h', 49'1'). Key bindings that checkkeyCodetogether withSWT.SHIFTstop matching. -
FocusInis also sent to the ancestor composites of the control that receives focus, so focus-tracking code (for example part activation) sees extra focus events. Seen forText,List,Table,TreeandSpinner, by click, Tab traversal andforceFocus(). - Check
Buttontoggled with Space:Selectionarrives betweenKeyDownandKeyUp, instead of after the key is released as on GTK3. -
Spinnersends noVerifywhen its value changes through the arrow buttons, the Up/Down keys or the mouse wheel; GTK3 sends one before theModify. -
SpinnersendsModifybeforeSelection(arrow buttons and Up/Down keys), the reverse of GTK3. -
Slider: a thumb drag ends without the finalSelectionwithdetail = SWT.NONE, the mouse wheel fires noMouseWheelevent and moves by a different step than on GTK3, and the slider takes keyboard focus, which it does not on GTK3.
Table and Tree
- Dragging a column header fires no
TableColumn/TreeColumnResizeorMove, and dragging a movable column does not reorder the columns, so user column resizing and reordering are invisible to the application. - With a visible header, item geometry and hit testing use two different origins:
TableItem.getBounds(int)includes the header height (item 0 at y = 28) whileTableItem.getBounds(),getTextBoundsand allTreeItembounds start below it (y = 0), andgetClientArea()(y = 28),getItem(Point)andtoDisplaycount from the widget top, sogetItemat a point insideitem.getBounds()returns null or the previous row. GTK3 uses one origin for all of them.getItemHeight()also reports 25 while the rows are 23 px apart. -
Control.setOrientation(SWT.RIGHT_TO_LEFT)on aTableorTreethat has columns throwsUnsatisfiedLinkError, because it callsGTK3.gtk_container_forall, which does not exist in GTK4.
Graphics
-
GC.drawFocuspaints nothing (0 pixels fordrawFocus(10, 10, 40, 12)on anImage; GTK3 paints a ring), because it renders with the style context of the shell, which has no focus outline on GTK4.
Display
- The device zoom ignores
GDK_SCALEand stays at 100 withGDK_SCALE=2, so the UI renders at 100% (Display._getDeviceZoom; the GTK4 branch ofgetPrimaryMonitoralways takes monitor 0).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
[GTK4] Draw the focus rectangle in GC.drawFocus
[GTK4] Redraw Link when it gains or loses focus
[GTK4] Draw the focus rectangle in GC.drawFocus
[GTK4] Redraw Link when it gains or loses focus
[GTK4] Send MouseDown before MouseDoubleClick on a double click
[GTK4] Draw the focus rectangle in GC.drawFocus
[GTK4] Redraw Link when it gains or loses focus
[GTK4] Send MouseDown before MouseDoubleClick on a double click
[GTK4] Send MouseDown before MouseDoubleClick on a double click
[GTK4] Send MouseDown for the first press on a List
[GTK4] Send DefaultSelection for a double click and Enter on a List
[GTK4] Count the characters of a single line Text from its buffer
[GTK4] Send Verify for text typed into a single line Text
[GTK4] Send Verify for text typed into an editable Combo
[GTK4] Send Verify for text typed into a Spinner
3 remaining items
[GTK4] Send Verify for text typed into a Spinner
[GTK4] Count the characters of a single line Text from its buffer
[GTK4] Send Verify for text typed into an editable Combo
[GTK4] Send Verify for text typed into a Spinner
[GTK4] Count the characters of a single line Text from its buffer
[GTK4] Send Verify for text typed into a single line Text
[GTK4] Send Verify for text typed into an editable Combo
[GTK4] Send Verify for text typed into a Spinner
[GTK4] Count the characters of a single line Text from its buffer
[GTK4] Mirror columns, menus and expand items for right to left
[GTK4] Mirror columns, menus and expand items for right to left
[GTK4] Mirror columns, menus and expand items for right to left
[GTK4] Mirror columns, menus and expand items for right to left
[GTK4] Mirror columns, menus and expand items for right to left
[GTK4] Mirror columns, menus and expand items for right to left