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+ – 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.

This Week in GTK+ – 21

In this last week, the master branch of GTK+ has seen 335 commits, with 13631 lines added and 37699 lines removed.

Planning and status
  • Emmanuele merged his wip/ebassi/gsk-renderer branch into the master branch, effectively adding GSK to the API; there is an ongoing effort in improving its performance profile, as well as porting more widgets to the GskRenderNode API
  • Benjamin added new GdkWindow constructors for input and child windows, which will eventually replace the generic gdk_window_new() API
  • Timm removed more deprecated API from GTK+
  • Timm also replaced all the get_preferred_* family of virtual functions with a single GtkWidgetClass.measure virtual function, thus simplifying the implementation of widgets
  • Matthias started a new migration guide for application developers that wish to port their code from GTK+ 3.x to GTK+ 4.x
  • Chun-wei Fan updated the Windows backend of GDK following the deprecations and API changes
  • The GTK+ road map is available on the wiki.
Notable changes
  • GDK now tries to do a better job at detecting if a GL context is using OpenGL ES, a core OpenGL profile, or a legacy OpenGL profile.
  • New deprecations in the gtk-3-22 branch for API that has been removed from the master branch:
    • gdk_window_set_debug_updates() — will be replaced by appropriate rendering in GSK
    • GtkContainer:child — no replacement, as it’s just a C convenience property for use in variadic arguments functions
    • gdk_window_set_background* family of functions — no replacement
    • gdk_window_set_wmclass() — no replacement, as it was already marked as “do not use”
    • gdk_drag_dest_set_proxy() — no replacement
    • various GdkScreen API — replaced by GdkMonitor
  • Jaime Velasco Juan vastly improved the “native” Windows theme in the gtk-3-22 branch, to better match the Windows 7 visuals
  • Lapo Calamandrei has fixed the appearance of circular buttons in Adwaita
Bugs fixed
  • 772922 GtkMenu: Try using gdk_window_move_to_rect() more often
  • 773029 [gucharmap] style-set signal problem
  • 773246 Typo in css color definitions documentation
  • 773180 Don’t second-guess whether our GDK GL context is GLES
  • 773113 tests: fix clipboard test by loading correct icon
  • 771694 GtkSourceView completion popup window not shown, no grabbed seat found
  • 771205 Buttons with circular style class have a suddenly clipped shadow at the bottom
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+ – 20

In this last week, the master branch of GTK+ has seen 191 commits, with 4159 lines added and 64248 lines removed.

Planning and status
  • Benjamin merged his wip/otte/gtk4 branch, which removed various deprecated GDK and GTK+ API, into master
  • Timm merged parts of his wip/baedert/box branch, which removed the deprecated themeing engine API and other old style API, into master
  • The GTK+ road map is available on the wiki.
Notable changes
  • Emmanuele added various compiler flags to the default build in master, in order to catch issues earlier — and, hopefully, before pushing to the remote repository — during development
  • Matthias added new compiler requirements for GTK+; if you wish to build GTK+, your compiler must support at least a known subset of C99
Bugs fixed
  • 772683 Usage of FALSE instead of gint in glarea demo
  • 772926 shortcutswindow: working version of set_section_name()
  • 772775 menu bindings needs attribute to force LTR for horizontal-buttons display-hint
  • 771320 [Wayland] Maps widget is displayed at wrong position inside gnome-contacts
  • 767713 Fullscreen in wayland is buggy
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+ – 19

In this last week, the master branch of GTK+ has seen 24 commits, with 3731 lines added and 3351 lines removed.

Planning and status
  • Matthias released GTK+ 3.22.1, and created the gtk-3-22 branch for stable releases
  • The window on the master branch is now open for the 4.0 development
  • Benjamin Otte has started working on the removal of the 3.x deprecated API in his wip/otte/gtk4 branch
  • Timm Bäder is removing the deprecated style API in his wip/baedert/box branch
  • The GTK+ road map is available on the wiki.
Notable changes
  • Matthias is working on the build system to ensure that the master branch is parallel installable with the gtk-3-22 and gtk-2-24 stable branches
  • The old and deprecated AM_PATH_GTK_3_0 m4 macro for autotools-based build systems has been removed from the master branch; projects depending on GTK+ 3.x should already have been ported to just use pkg-config and the PKG_CHECK_MODULES macro instead.
Bugs fixed
  • 772695 Show the keyboard shortcuts from left to right even in RTL
  • 772345 placesviewrow: busy_spinner when visible offsets the rest of the widgets on the row
  • 772415 Avoid calling eglGetDisplay
  • 772389 Appending a character to a GtkEntry control in overwrite mode rings the bell
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.