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

The term Client-Side Decoration comes from the X Window System, where a client is the application which renders a window and sends it to the X server that controls the display. 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". Those terms are also used in Wayland, where a client is the application, which renders a window and sends it to the Wayland server, which controls the display and also functions as a compositing window manager.

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.

Limitations

If the application hangs, the user cannot close it by clicking the close button in the window frame. [10]

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.

<span class="mw-page-title-main">X window manager</span> Type of window manager

An X window manager is a window manager that runs on top of the X Window System, a windowing system mainly used on Unix-like systems.

<span class="mw-page-title-main">Windowing system</span> Software that manages separately different parts of display screens

In computing, a windowing system is a software suite that manages separately different parts of display screens. It is a type of graphical user interface (GUI) which implements the WIMP paradigm for a user interface.

<span class="mw-page-title-main">Metacity</span> Window manager

Metacity was the default window manager used by the GNOME 2 desktop environment until it was replaced by Mutter in GNOME 3. It is still used by GNOME Flashback, a session for GNOME 3 that provides a similar user experience to the Gnome 2.x series sessions.

In computing, the Inter-Client Communication Conventions Manual is a standard protocol for the X Window System. It specifies conventions for clients of a common X server about selections and cut buffers, communication with the window manager and session manager, manipulation of shared resources, and color characterization.

In computing, the X Window System is a network-transparent windowing system for bitmap displays. This article details the protocols and technical structure of X11.

<span class="mw-page-title-main">KDE Software Compilation 4</span> Software

KDE Software Compilation 4 was the only series of the so-called KDE Software Compilation, first released in January 2008 and the last release being 4.14.3 released in November 2014. It was the follow-up to K Desktop Environment 3. Following KDE SC 4, the compilation was broken up into basic framework libraries, desktop environment and applications, which are termed KDE Frameworks 5, KDE Plasma 5 and KDE Applications, respectively.

<span class="mw-page-title-main">Accessibility Toolkit</span> 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.

A compositing manager, or compositor, is software that provides applications with an off-screen buffer for each window. The compositing manager composites the window buffers into an image representing the screen and writes the result into the display memory. A compositing window manager is a window manager that is also a compositing manager.

A desktop environment is a collection of software designed to give functionality and a certain look and feel to an operating system.

Clutter is a discontinued 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.

<span class="mw-page-title-main">Wayland (protocol)</span> Display system intended to replace X11

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.

<span class="mw-page-title-main">GTK</span> Free and open-source cross-platform widget toolkit for creating graphical user interfaces

GTK is a free software 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. It is one of the most popular toolkits for the Wayland and X11 windowing systems.

<span class="mw-page-title-main">GNOME</span> Desktop environment for Linux and other Unix-like systems

GNOME, originally an acronym for GNU Network Object Model Environment, is a free and open-source desktop environment for Linux and other Unix-like operating systems.

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.

GNOME Project is a community behind the GNOME desktop environment and the software platform upon which it is based. It consists of all the software developers, artists, writers, translators, other contributors, and active users of GNOME. It is no longer part of the GNU Project.

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) Free and open-source media player software

mpv is free and open-source media player software based on MPlayer, mplayer2 and FFmpeg. It runs on several operating systems, including Unix-like operating systems and 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.

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. Zahorodnii, Vlad (2020-07-23). "CSD support in KWin". Vlad Zahorodnii's Blog. Retrieved 2024-03-05.
  11. "GTK+ 3.10 released [LWN.net]". lwn.net. Retrieved 2019-01-17.