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.

This week in GTK+ – 23

In this last week, the master branch of GTK+ has seen 146 commits, with 10020 lines added and 16435 lines removed.

Planning and status
  • Benjamin Otte worked on clarifying the relationship between various coordinate systems used in GTK+ and in gsk.
  • Benjamin is also making changes throughout the tree in preparation for making all widgets window-less.
  • Emmanule Bassi is working on finer-grained gsk render nodes for CSS rendering.
  • The GTK+ road map is available on the wiki.
Notable changes
  • Benjamin Otte added a frame recorder to the GTK+ inspector. See this post for more information.
  • Timm Bäder and Benjamin converted more widgets to use indirect rendering with gsk render nodes.
  • Matthias Clasen made the GtkTextAttributes structure private, thereby enabling further cleanups and the removal of the deprecated GdkColor type.
  • Benjamin removed visuals.
Bugs fixed
  • 773885 pop down GtkPopover on pressing escape
  • 773299Ensure GTK+-4.x builds and works on Windows
  • 773274[Wayland] Crash under gdk_wayland_window_attach_image()
  • 768081Enable HiDPI support for GDK-Win32
  • 773857 – X11: Add support for gdk_window_fullscreen_on_monitor
  • 773799GtkLevelBar doesn’t update blocks on discrete mode
  • 773954gtkstylecontext: Clarify memory allocation behaviour of getters
  • 773903gtk.h and gtktextiter.h include private gtktextattributes.h
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+ – 22

In this last week, the master branch of GTK+ has seen 132 commits, with 10020 lines added and 16435 lines removed.

Planning and status
Notable changes

On the master branch:

  • Alex Larsson removed the “offscreen” GdkWindow support in GDK, and the GtkOffscreenWindow widget in GTK+, in order to simplify the internals of GDK. Replacing offscreen windows is going to be the job of GSK from now on
  • Alex also changed the way GTK+ is built: from now on, there won’t be a separate GDK and GSK shared libraries; instead, GTK+ will provide a single shared library that includes GDK and GSK symbols. This allows GTK to use internal symbols without having to expose them via private function pointer tables, and reduces the intra PLT jumps to call GDK API
  • Chun-wei Fan improved the OpenGL support in the Windows backend of GDK; GDK will use more accurate GL configuration options, and will fall back to legacy GL contexts if core profiles contexts are not available, just like the X11 and Wayland backends
  • Fan also updated the Visual Studio projects files in order to build GSK; MSVC 2013 is now the minimum required version to compile the next stable version of GTK+
  • Benjamin Otte reworked the way invalidations are queued in GTK, and removed gdk_window_invalidate(); this allowed the inspector to show the updates caused by GTK widget invalidations during rendering
  • Benjamin also removed the API to query visuals from GDK, and the API to check if the windowing system is using RGBA visuals and compositing has been moved to GdkDisplay from GtkWidget
Bugs fixed
  • 773479 Typo in GtkShortcutType developer docs
  • 773100 Merge libgdk.so into libgtk.so
  • 773528 Improve GL support on Windows
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.