What is this?

UPDATE: the branch has now been merged to master

The client-side-windows branch is a branch of Gtk+ with the intent of making all normal subwindows of Gtk be handled by Gdk instead of the X server. There are several advantages to this:

  • Causes less flicker when resizing windows
  • Moves lot of code from the backends to the common code, thus making ports easier and ensuring that the behaviour is the same on all backends
  • Allows elimination of all 32bit emulation from backends, greatly simplifying them
  • Allows implementation of "offscreen window" which can be used to e.g. display Gtk widgets inside clutter or a canvas widget
  • Allows support for partially transparent child windows even for Xservers that don't support composite

The Code

The branch is available in the gtk+ git repo on git.gnome.org in the client-side-windows branch.


A branch of clutter-gtk with client-side window support is available at:


Its currently feature complete and seems to work on X, but could use more testing and review. The non-X backends needs some work.

Nice Features we may want to add

  • Emulation of composited subwindows

Various cleanups we may want to do

  • Maybe we could move the is-toplevel tracking code in the reparent code to the common code to clean up the backend code duplication
  • Have a gdk_offscreen_window_set_embedding_window() instead of get_parent signal and has_offscreen children

Problems that will require application changes

  • emacs 23 (with gtk):
    • Sometimes when pressing Ctrl-L the scrollbars are overdrawn with white and not repainted. This is due to emacs using raw X primitives to draw on the window, while the scrollbars are client side emulated windows. Emacs could make the scrollbars native and this would make sure they weren't overdrawn

Known regressions

Known regressions are tracked by using "csw" in the status whiteboard field in bugzilla.

Here is are the current open bugs.

Projects/GTK/ClientSideWindows (last edited 2018-12-05 15:47:05 by EmmanueleBassi)