Client-side decoration

Last updated
Example of an application that uses Client-Side Decoration to draw its own window controls. (GtkHeaderBar widget on GNOME Files, 2014-01) GtkHeaderBar on GNOME Files -- 2014-01.png
Example of an application that uses Client-Side Decoration to draw its own window controls. (GtkHeaderBar widget on GNOME Files, 2014-01)

Client-side decoration (CSD) is the concept of allowing a graphical application software to be responsible for drawing its own window decorations, historically the responsibility of the window manager. [1]

Contents

Sometimes client-side decoration is used to refer to the applications that don't have a traditional title bar, however this is a misuse of the phrase, as even applications that have a basic title bar can be client side decorated. [2]

By using client-side decoration rather than traditional server-side decoration, applications are able to draw their own title bar, which allows for a wide range of possibilities to customize window decorations and add additional functionality (graphical control elements) into what otherwise would be a typical window manager bar with much empty space in the maximized windows. [3]

Terminology

In Linux and Unix-like systems, it is called Client-Side Decoration which comes from X Window System, where a client is the application which renders a window and sends it to the X server. The alternative is called Server-Side Decoration (SSD) even though on X the decoration is drawn by the window manager, which is not actually the "server".

Implementations

Widget toolkits

GTK

GTK was the first GUI toolkit on Linux that implemented client-side decoration using the GtkHeaderBar widget. [4]

GtkHeaderBar merges the title bar, menu bar and tool bar into one unified horizontal bar in order to give more space to the application content, potentially reducing the amount of wasted space by showing empty bars. This can help to achieve a flexible UI and consistent UX across different computer form factors from desktop systems to small form factor devices by removing the traditional desktop-oriented parts from applications. These have first-class support in GNOME Shell and are widely used by GNOME applications.

UWP

Universal Windows Platform applications can choose to draw their own title bars. [5]

macOS

In macOS, AppKit applications use client-side decoration when using the NSWindow widget. [6]

Electron

Electron has the option to use a frame-less window (without toolbar, menu bar, tabs), however the application is responsible for drawing its own shadows. [7]

Deepin Tool Kit

Deepin File Manager, a Qt-based application with client-side decoration. Deepin File Manager 15.4 espanol.png
Deepin File Manager, a Qt-based application with client-side decoration.

Deepin Tool Kit is a small modified widget toolkit based on Qt5, it is used by Deepin Desktop Environment.

Applications

Notable applications with client-side decoration:

Display servers

Wayland

Wayland was designed to have client-side decorations (including the shadows of windows) by default, but has an optional protocol, known as xdg-decoration, which allows an application (client) to query whether the window manager supports server-side decoration and if so for a client to request it. [8] Mutter, the compositor used by GNOME Shell, under Wayland only supports client side decoration, [9] whilst KWin supports both client and server side decoration.

History

See also

Related Research Articles

In computing, a desktop environment (DE) is an implementation of the desktop metaphor made of a bundle of programs running on top of a computer operating system that share a common graphical user interface (GUI), sometimes described as a graphical shell. The desktop environment was seen mostly on personal computers until the rise of mobile computing. Desktop GUIs help the user to easily access and edit files, while they usually do not provide access to all of the features found in the underlying operating system. Instead, the traditional command-line interface (CLI) is still used when full control over the operating system is required.

Xfce

Xfce or XFCE is a free and open-source desktop environment for Linux and BSD operating systems.

freedesktop.org (fd.o) is a project to work on interoperability and shared base technology for free-software desktop environments for the X Window System (X11) and Wayland on Linux and other Unix-like operating systems. It was founded by Havoc Pennington from Red Hat in March 2000. The project's servers are hosted by Portland State University, which in turn are sponsored by HP, Intel and Google.

FLTK

Fast Light Toolkit is a cross-platform widget library for graphical user interfaces (GUIs), developed by Bill Spitzak and others. Made to accommodate 3D graphics programming, it has an interface to OpenGL, but it is also suitable for general GUI programming.

GDK

GDK is a library that acts as a wrapper around the low-level functions provided by the underlying windowing and graphics systems. GDK lies between the display server and the GTK library, handling basic rendering such as drawing primitives, raster graphics (bitmaps), cursors, fonts, as well as window events and drag-and-drop functionality.

Assistive Technology Service Provider Interface

Assistive Technology Service Provider Interface (AT-SPI) is a platform-neutral framework for providing bi-directional communication between assistive technologies (AT) and applications. It is the de facto standard for providing accessibility to free and open desktops, like GNU/Linux or OpenBSD, led by the GNOME Project.

Accessibility Toolkit Software library

Accessibility Toolkit (ATK) is an open source software library, part of the GNOME project, which provides application programming interfaces (APIs) for implementing accessibility support in software.

Clutter is a GObject-based graphics library for creating hardware-accelerated user interfaces. Clutter is an OpenGL-based 'interactive canvas' library and does not contain any graphical control elements. It relies upon OpenGL (1.4+) or OpenGL ES for rendering,. It also supports media playback using GStreamer and 2D graphics rendering using Cairo.

A software widget is a relatively simple and easy-to-use software application or component made for one or more different software platforms.

Wayland (display server protocol)

Wayland is a communication protocol that specifies the communication between a display server and its clients, as well as a C library implementation of that protocol. A display server using the Wayland protocol is called a Wayland compositor, because it additionally performs the task of a compositing window manager.

GTK Cross-platform widget toolkit for creating graphical user interfaces

GTK is a free and open-source cross-platform widget toolkit for creating graphical user interfaces (GUIs). It is licensed under the terms of the GNU Lesser General Public License, allowing both free and proprietary software to use it. Along with Qt, it is one of the most popular toolkits for the Wayland and X11 windowing systems.

GNOME Desktop environment for Linux and Unix-like systems

GNOME is a free and open-source desktop environment for Unix-like operating systems. GNOME was originally an acronym for GNU Network Object Model Environment, but the acronym was dropped because it no longer reflected the vision of the GNOME project.

Mutter is a window manager initially designed and implemented for the X Window System, but then evolved to be a Wayland compositor. It became the default window manager in GNOME 3, replacing Metacity which used GTK+ for rendering.

Mir is a computer display server and, recently, a Wayland compositor for the Linux operating system that is under development by Canonical Ltd. It was planned to replace the currently used X Window System for Ubuntu,; however, the plan changed and Mutter was adopted as part of GNOME Shell.

mpv (media player)

mpv is free and open-source media player software based on MPlayer, mplayer2 and FFmpeg. It runs on several operating systems, including the Unix-like operating systems and the non-Unix Microsoft Windows, along with having an Android port called mpv-android. It is cross-platform, running on ARM, PowerPC, x86/IA-32, x86-64, and MIPS architecture.

GNOME Core Applications is a collection of approximately 30 applications that are packaged as part of the standard free and open-source GNOME desktop environment. GNOME Core Applications have the look and feel of the GNOME desktop; some applications have been written from scratch and others are ports.

Geary (e-mail client) Open-source email client

Geary is a free and open-source email client written in Vala and based on WebKitGTK. Although since adopted by the GNOME project, it originally was developed by the Yorba Foundation. The purpose of this e-mail client, according to Adam Dingle, Yorba founder, was to bring back users from online webmails to a faster and easier to use desktop application.

GNOME Fractal

Fractal is an instant messaging client and collaboration software for the GNOME desktop based on the Matrix protocol.

References

  1. "Client-side decorations, continued". blogs.gnome.org. Retrieved 2019-01-17.
  2. "A small note on window decorations | Florian Müllner" . Retrieved 2019-11-13.
  3. "The CSD Initiative Is Pushing For Apps To Abandon Title Bars In Favor Of Header Bars - Phoronix". Phoronix . Retrieved 2018-01-28.
  4. "GtkHeaderBar: GTK+ 3 Reference Manual". developer.gnome.org. Retrieved 2019-01-17.
  5. mijacobs. "Title bar customization - Windows UWP applications". docs.microsoft.com. Retrieved 2019-01-17.
  6. "NSWindow - AppKit | Apple Developer Documentation". developer.apple.com. Retrieved 2019-06-07.
  7. "Frameless Window | Electron". electronjs.org. Retrieved 2019-01-17.
  8. Wayland protocol development, Wayland, 2019-10-07, retrieved 2019-11-13
  9. Bernard, Tobias. "Introducing the CSD Initiative – Space and Meaning". GNOME . Retrieved 2018-01-28.
  10. "GTK+ 3.10 released [LWN.net]". lwn.net. Retrieved 2019-01-17.