Ответ 1
Традиционно приложение GUI будет отвечать за содержимое своего окна, но не за заголовком, закрывать кнопки, границы, изменять размер и т.д. Все они будут добавлены диспетчером окон и будут называться украшениями.
(Примеры оконных менеджеров - TWM, Fluxbox, Metacity, Mutter и т.д.)
Это немного упрощенное объяснение, но это то, как реализованы темы рабочего стола; поскольку окно не знает о его строке заголовка, диспетчер окон ставит на него один, соответствующий текущей теме. Если пользователь изменяет тему, то окно просто изменяет строку заголовка. Ваше приложение не заботится.
С другой стороны, это означает, что совершенно невозможно, чтобы ваше приложение каким-либо образом настраивало строку заголовка.
В последние годы стало возможным сообщать оконным менеджерам "нет, спасибо, я не хочу украшений" и вместо этого создаю собственную панель заголовков. Это то, что GtkHeaderBar
для — сохраняя все больше экранной недвижимости, помещая пользовательские элементы управления в строку заголовка, например, Chromium со своими вкладками браузера. Это называется украшением на стороне клиента.
(Технически это всегда было возможно, но было легко ошибиться, так как вы сами должны были подражать всем функциям оконных украшений, так как пользователи ожидали, что они будут работать. GtkHeaderBar
делает это для вас.)
Это обоюдоострый меч, так как с оформлением на стороне клиента ваше приложение не будет реагировать на изменение темы диспетчера окон.
Что касается имени на стороне клиента, оно исходит из X-терминологии, где клиент представляет собой приложение, которое отображает окно и отправляет его на X-сервер.