Client-Side Decoration

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Typical elements of a window. When using client-side decoration, the title bar and associated controls are controlled and rendered by the application.

Client-Side Decorations (CSD) is the concept of allowing an application process (the client) to be responsible for drawing its own window decorations which then get sent to the display server, compared to server-side decorations (SSD) where window decorations are created by the window manager (the server) before being sent to the display. [1]

Sometimes client-side decoration is used to refer to applications don't have basic title bars, however this is a misuse of the term, as even applications that have basic title bars can be client side decorated, as is the case on macOS. However, in most cases the compositor must support client-side decoration for client-controlled decorations to behave correctly.

Terminology[edit]

The term client-side comes from X Window System, where a client is the application which renders a window and sends it to the X server.

Implementations[edit]

Widget toolkits[edit]

Some widget toolkits have native title bar widgets, making it easier for applications to modify the title bar.

GTK[edit]

Evince draws its own window controls using the GtkHeaderBar widget when running on display servers that support client-side decoration.

GTK includes the GtkHeaderBar widget [2] which can merge the title bar, menu bar and tool bar into one unified menu, this gives an application more space to show application content by reducing the amount of unused space usually taken up by the title bar. [3]

This approach has caused some controversy within the Linux community, as an application using GtkHeaderBar can look out of place on other desktop environments that use other toolkits, such as KDE Plasma.[4]

UWP[edit]

Universal windows platform applications can customize the layout of their title bars [5]

macOS[edit]

in macOS, window controls are created by the NSWindow widget as part of AppKit. [6]

Electron[edit]

Electron has the option to use a frame-less window. [7]

Deepin Tool Kit[edit]

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

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

Applications[edit]

Notable applications with client-side decoration:

Disadvantages[edit]

Because the window controls are being rendered by the application process, if the application freezes the controls will often become unresponsive too. This can make it more confusing when trying to close unresponsive applications as the display server has to detect this. [8]

History[edit]

  • In 2008 Adobe released Photoshop CS4 that uses client-side decorations.
  • In 2012 Microsoft uses client-side decorations in their new Metro design language by adding toolbar objects like back buttons to the windows title bar.
  • In 2013 GTK added a native GtkHeaderbar widget in 2013 with the release of GTK+ 3.10.[9]

See also[edit]

References[edit]

  1. ^ "Client-side decorations, continued | Goings on". blogs.gnome.org. Retrieved 2019-01-17.
  2. ^ "GtkHeaderBar: GTK 3 Reference Manual". developer.gnome.org. Retrieved 2019-01-17.
  3. ^ "The CSD Initiative Is Pushing For Apps To Abandon Title Bars In Favor Of Header Bars - Phoronix". Phoronix. Retrieved 2018-01-28.
  4. ^ "Should Apps Replace Title Bars with Header Bars?". Retrieved 2018-02-03.
  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. ^ Flöser, Martin (2010-05-13). "Open Letter: The issues with client-side-window-decorations". Martin's Blog. Retrieved 2019-06-08.
  9. ^ [ttps://lwn.net/Articles/568191/ "hGTK+ 3.10 released [LWN.net]"]. lwn.net. Retrieved 2019-01-17.

External links[edit]