This week in GTK+ – 33

The past two weeks we’ve had DevConf and FOSDEM back to back, so the development slowed down a bit. Expect it to pick up again, now that we’re close to the GNOME 3.24 release.

In these last two weeks, the master branch of GTK+ has seen 34 commits, with 20973 lines added and 21593 lines removed.

Planning and status
Notable changes

On the master branch:

  • Timm Bäder removed gtk_widget_class_list_style_properties() in the continuing effort to deprecate the style properties inside GtkWidget and replace them with CSS properties
  • Timm also moved some of the state used only by GtkToggleButton subclasses into those types
  • William Hua improved the Mir GDK backend for proper positioning of menus
Bugs fixed
  • 777547 Notebook arrow icon wrong color after closing final tab
  • 773686 Software when launched shows in dash with wrong icon, name and menu
  • 775864 getting-started: typo tie->the
  • 778009 menu drawn on top of menubar in Fedora
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 32

In this last week, the master branch of GTK+ has seen 106 commits, with 7340 lines added and 12138 lines removed.

Planning and status
  • Matthias Clasen released GTK+ 3.89.3
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Benjamin Otte simplified the clipping shaders for the Vulkan renderers
  • Benjamin also removed the “assume numbers without dimensions are pixels” fallback code from the CSS parser
  • Daniel Boles landed various fixes to the GtkMenuGtkComboBox and GtkScale widgets
  • Daniel also simplified the internals of GtkComboBox and moved most of its internal widgets to GtkBuilder UI files
  • Matthias Clasen removed command line argument handling from the GTK+ initialization functions; gtk_init() now takes no arguments. Additionally, gdk_init() has been removed, as GDK ceased to be a separate shared library. The recommended way to write GTK+ applications remains using GtkApplication, which handles library initialization and the main loop
  • Timm Bäder merged his branch that makes GtkWidget visible by default, except for the GtkWindow and GtkPopover classes; Timm also removed gtk_widget_show_all() from the API, as it’s not useful any more
  • Timm modified GtkShortcutsShortcut, GtkFileChooserButton, and GtkFontButton to inherit directly from GtkWidget, taking advantage of the new scene graph API inside the base GtkWidget class

On the gtk-3-22 stable branch:

  • Ruslan Izhbulatov fixed the Windows backend for GDK to ensure that it works with remote displays
Bugs fixed
  • 777527 GDK W32: Invisible drop-down menus in GTK apps when working via RDP
  • 770112 The documented <alt>left shortcut doesn’t work on Wayland
  • 776225 [wayland] dropdown placed somewhere in the screen
  • 777363 [PATCH] wayland: avoid an unnecessary g_list_length call
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 31

In this last week, the master branch of GTK+ has seen 52 commits, with 10254 lines added and 9466 lines removed.

Planning and status
  • Alex Larsson is working on two separate branches to optimize the memory allocation and fragmentation when building the GSK render tree, after profiling the tree building code
  • Timm Bäder is working on a topic branch to switch widgets to be visible by default
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Rui Matos added support in the Wayland backend for the gtk-enable-primary-paste settings key; this requires a newer version of the gsettings-desktop-schemas
  • Matthias Clasen and Alex Larsson refactored some of the GSK,  GtkWidget, and CSS internals to avoid excessive type casting and type checking after profiling the rendering code
  • Matthias added a “system” tab to the GtkAboutDialog widget, for free-form, system-related information
  • Matthias also updated the porting documentation for -gtk-icon-filter
  • Benjamin Otte changed the X11 backend to always call XInitThreads() unconditionally, in order to safely use the Vulkan rendering API; this should be safe, but testing is encouraged
  • Benjamin updated the GtkSnapshot API to ensure that render nodes are available only after the snapshot is complete
  • Benjamin also fixed the handling of CSS images that have no explicit size but should be scaled according to their aspect ratio
  • Timm Bäder added a revealed property to the GtkInfoBar widget and ported the GtkActionBar code to use it

On the gtk-3-22 stable branch:

  • Ruslan Izhbulatov worked on fixing various cases of keyboard handling under Windows, including interaction with AeroSnap; Ruslan also fixed bug 165385, which was going to be 12 years old in 10 days
  • Carlos Garnacho changed the EGL handling inside the Wayland backend to disable swap interval, as the compositor is in charge of timing the rendering
  • Matthias Clasen deprecated additional API that has been removed from the development branch
Bugs fixed
  • 776031 W32: Winkey+down minimizes maximized window instead of restoring it
  • 165385 Win32 keyboard handling still incomplete
  • 769835 On Wayland, application containing GtkGLArea stops responding if it’s not on current workspace
  • 774726 GtkTreeView dnd: gtk_drag_finish remove row when reorder sinse 3.20
  • 769214 keyval field not filled correctly for Pause key
  • 776485 GDK W32: Impossible to restore maximized window via system menu
  • 776604 about dialog: Add a “system” tab
  • 775846 gdk/wayland: Add support for the gtk-enable-primary-paste gsetting
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 30

In this last week, the master branch of GTK+ has seen 81 commits, with 12205 lines added and 12625 lines removed.

Planning and status
  • Welcome back to This Week in GTK+ after the end of the year break
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Timm Bädert merged his work on moving the scene graph of widgets directly into the GtkWidget class; this allows widgets to have internal children without necessarily subclassing GtkContainer
  • Timm also worked on porting widgets currently using the internal CSS gadget API to be composite widgets, like GtkSwitch
  • Benjamin Otte and Georges Basile Stavracas Neto have been working on making the Vulkan GSK renderer work on Wayland
  • Benjamin also worked on improving the efficiency of the Vulkan renderer
  • William Hua worked on improving the Mir backend of GDK with regards to clipboard support

On the gtk-3-22 stable branch:

  • Matthias Clasen released GTK+ 3.22.6
Bugs fixed
  • 776627 Correct PostScript capitalization
  • 776868 Improve the documentation of GtkEntry:attributes
  • 776560 icon-browser: window opens at very narrow size, only showing 1 column of icons
  • 775732 mir: clipboard support missing
  • 776736 build: Fix vulkan detection
  • 776807 GtkInspector doesn’t show up when Gtk is initialized through option group
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 29

In this last week, the master branch of GTK+ has seen 20 commits, with 883 lines added and 2740 lines removed.

Planning and status
  • Alex Larsson worked on a simplification of GdkWindow that removed native and foreign child windows; the long term plan is to have native windowing system surfaces only for top levels
  • Alex also sent a review on gtk-devel-list of Benjamin’s wip/otte/rendernode branch, with ideas on future work for the GSK rendering API
  • Chun-wei Fan updated the Windows backend to ensure that it continues to build and work on the master branch
  • Benjamin Otte implemented the snapshot() virtual function in more GtkWidget subclasses.
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Olivier Fourdan updated the Wayland backend to ensure that empty input shapes are updated on sub-surfaces when needed; this allows other toolkits, like Clutter, to use the GDK sub-surface API
  • Alex Larsson removed gdk_window_reparent() from the GDK API, since it’s unused and allows for the goal of only having top level GDK windows
  • Benjamin Otte removed the ad hoc code from GdkCellView to modify its background, as the cell view can use CSS to achieve the same (or better) results
  • Benjamin also removed the border node from the GtkFrame CSS nodes, as it performed additional immediate mode clipping that complicates the rendering

On the gtk-3-22 stable branch:

  • Emmanuele pushed fixes for the GL rendering when using GtkGLArea with OpenGL ES 2.0 implementations that are missing the GL_EXT_framebuffer_blit extension
Bugs fixed
  • 776132 Mention the difference between gdk_window_create_similar_image_surface and cairo_surface_create_similar_image
  • 774534 [wayland] input shape and opaque region not applied without begin_paint()/end_paint()
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 28

In this last week, the master branch of GTK+ has seen 103 commits, with 5986 lines added and 1896 lines removed.

Planning and status
  • Benjamin Otte is working on a refactoring of the GSK render node API
  • Emmanuele Bassi worked on a 3.x-specific branch that allows GDK to use EGL instead of GLX on X11 platforms
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Benjamin merged the Vulkan renderer for GSK, as comparison point for the GL and Cairo renderers. The Vulkan renderer adds a new optional dependency on a working Vulkan implementation, as well as glslc
  • The Vulkan renderer also resulted in a large refactoring of the GL drawing code inside GDK, though this should not have caused any user-visible changes in the API
  • Benjamin also implemented support for the CSS border-spacing property following the CSS 2.1 specification

On the gtk-3-22 stable branch:

  • Matthias released GTK+ 3.22.5.
Bugs fixed
  • 775651 GdkX11-4.0.gir, GdkWin32-4.0.gir, and Gsk-4.0.gir are generated before Gdk-4.0.gir is ready
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 27

In this last week, the master branch of GTK+ has seen 65 commits, with 1780 lines added and 2429 lines removed.

Planning and status
  • A GTK+ hackfest is planned for March 2017; the main topic is going to be improving performance, especially with regards with rendering
  • Benjamin Otte is reworking the GL renderer for GSK to ensure it’s well integrated into the GDK rendering
  • Additionally, Benjamin is also working on an experimental Vulkan-based renderer for GSK
  • Timm Bäder is changing the GtkWidget and GtkContainer API to converge the two classes into a single scene graph
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Matthias Clasen changed GTK to exit cleanly when it loses the display connection under X11 and Wayland; this change has also been backported to the stable gtk-3-22 branch
  • Timm Bäder cleaned up various widgets to consistently use gtk_widget_measure() when measuring the size of their children
  • Daniel Boles fixed a bug in GtkComboBox that caused a warning in Debian-based distribution that applied a downstream patch; see bug 771242 for more information; this change has also been backported to the stable gtk-3-22 branch

On the gtk-3-22 stable branch:

  • Lapo Calamandrei backported the GtkProgressbar theme fixes for correctly identifying empty and full states
Bugs fixed
  • 774915 [Wayland]: Destroying the parent of a subsurface causes _gdk_window_destroy_hierarchy: assertion failed
  • 771242 3.21: opening menu for certain types of GtkComboBox causes Gdk-CRITICAL assertion ‘GDK_IS_WINDOW (window)’ failed
  • 775410 gsk/Makefile.am runs g-ir-scanner before libgsk-4.la is linked
  • 775319 [Wayland]: gdk_window_get_toplevel() fails to return the toplevel of a child subsurface
  • 775316 gtk_drag_source_set_icon_pixbuf references the pixbuf received once too much
  • 775212 GtkScaleButton does not unref all GtkAdjustment it references
  • 775525 gtk_flow_box_get_child_at_index shouldn’t crash with an invalid index
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 26

In this last week, the master branch of GTK+ has seen 40 commits, with 1551 lines added and 1998 lines removed.

Planning and status
  • Matthias Clasen released the first GTK+ 3.89 development snapshot
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Andrew Chadwick landed a series of fixes for graphic tablets support on Windows
  • Benjamin Otte removed the gtk_cairo_should_draw_window() utility function; the function was introduced for compatibility in the 3.x API, but now it’s not necessary any more
  • Benjamin also removed gdk_window_process_updates() and gdk_window_process_all_updates(); GDK has long since been switched to a frame clock; additionally, only top level GdkWindow can be used as a rendering surface
  • Lapo Calamandrei updated the High Contrast and Adwaita theme with the recent round of CSS improvements for progress bars and gradients
Bugs fixed
  • 774114 Window shadows are repainted even if only the contents of the window change
  • 774695 GtkProgressbar needs full and empty classes
  • 774265 No tilt for wintab devices
  • 774699 [wintab, potential segfault]: list iteration regression causes odd-indexed devices to be ignored during lookup & e.g. present no pressure
  • 775038 Build: Add wayland to GSKs dependencies
  • 774917 [wayland] child subsurfaces need to be placed relative to their parent
  • 774893 Application font sizes scaling gets clamped to 1.00 when starting GtkInspector
  • 774939 GtkLabelAccessible: Initialize link before setting parent
  • 774760 inspector: ensure controller is a GtkGesture
  • 774686 GtkMenu does not unref all GtkCheckMenuItem it creates
  • 774743 GtkNotebook does not unref all GtkBuiltinIcon it creates
  • 774790 GtkTextHandle does not unref all GtkAdjustment it references
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 25

In this last week, the master branch of GTK+ has seen 167 commits, with 8048 lines added and 6858 lines removed.

Planning and status
Notable changes

On the master branch:

  • The default value of the GtkFileChooser:local-only property is now FALSE, which means that file selections dialogs will automatically show non-local resources.
  • Benjamin Otte introduced the GtkSnapshot API, which works as a GskRenderNode builder for widgets, and aims to replace the immediate mode gtk_render_* family of functions.
  • Benjamin also changed the GtkDrawingArea API, which now works using an explicit callback function, instead of a the generic GtkWidget::draw signal.
  • Finally, Benjamin has implemented support for 3D CSS transformations in GTK+.
  • The GDK API to read back the contents of a GdkWindow into a GdkPixbuf have been removed, as their behavior and result are platform-dependent.
  • Matthias Clasen updated the GTK+ 3.x → 4.x porting guide, and the API reference, with the newest API additions.
  • Simon Steinbeiss updated the CSS styling for GtkProgressbar to add the empty and full classes when the progress is set to 0.0 or 1.0, respectively.
Bugs fixed
  • 774475 wayland: gtk+ prevents using subsurfaces if the parent is not root
  • 774476 surfaces with no outputs get scale factor reset
  • 774634 GtkPlacesView does not unref all GDaemonFileEnumerator it references
  • 773007 GtkFilechooser gives completion for non-matching extensions
  • 774609 small fix to foreign drawing spinbutton demo
  • 773587 [PATCH] recent-manager: Add a limit to the list’s size
  • 774352 GtkAppChooserWidget does not unref all GAppInfo it references
  • 774347 Fails to build: unknown type name GdkColor
  • 773601 Display size detected as 0x0 pixels when RANDR is not available
  • 774614 Wrong #include in Print docs
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.

This week in GTK+ – 24

In this last week, the master branch of GTK+ has seen 46 commits, with 1541 lines added and 3471 lines removed.

Planning and status
  • Emmanuele Bassi outlined a list of items to work on GSK on the wiki
  • The GTK+ road map is available on the wiki.
Notable changes

On the master branch:

  • Matthias Clasen worked on removing the custom -gtk-gradient CSS function and ensured that the standard radial-gradient and linear-gradient functions worked as defined by the CSS specifications
  • Lapo Calamandrei ported Adwaita and other themes shipped by GTK+ to the standard CSS gradient definitions
  • Benjamin Otte introduced a GskTexture API inside GSK to cache icon assets from GTK+ and avoid multiple texture uploads
  • Timm Bäder removed the custom style properties used by GtkTreeView and GtkToolItemGroup, and replaced them with standard CSS properties
  • Timm also removed the appears-as-list custom style property from GtkComboBox

On the 3.22 stable branch:

  • Matthias Clasen released GTK+ 3.22.3
  • Chun-wei Fan merged the HiDPI display support for Windows
Bugs fixed
  • 774097 GtkPrintOperation should not truncate job names
  • 772075 GTK+ uses a lot more CPU under Wayland than under X11
  • 773916 GtkComposeTable caches broken: using a same ~/.XCompose does not work twice in a row
  • 773979 GdkGLContext does not chain finalize handler
  • 774046 GtkSpinButton does not always unref priv->{up,down}_button
  • 774066 GtkHeaderBar does not unref all GtkBox and GtkSeparator it creates
  • 774185 GtkPlacesSidebar does not unref itself as many times as it references
Getting involved

Interested in working on GTK+? Look at the list of bugs for newcomers and join the IRC channel #gtk+ on irc.gnome.org.