From 8627a00e3b25cdd80d88ddcef9d2d73cc784d571 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 2 Feb 2016 09:10:38 +0100 Subject: Gtk UI: added option --no-csd to disable client-side decorations * many WMs like Unity or even Awesome WM have problems with client-side decorations. Awesome WM for instance does not allow us to move or resize floating windows with CSDs. Also, the added close button does not make sense for tiling window managers and since they usually never show window title bars, CSD brings no advantages at all on tiling window managers. * Other window managers might not support CSD at all. * There is AFAIK no way to detect whether CSDs will be possible or whether there will be glitches (see Awesome). * Added command line option --no-csd in the --help-gtk group. This can be added to desktop shortcuts etc. Later there might be better ways to configure stuff like that, e.g. when we add support for scripted UI customizations. --- src/interface-gtk/interface-gtk.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'src/interface-gtk/interface-gtk.cpp') diff --git a/src/interface-gtk/interface-gtk.cpp b/src/interface-gtk/interface-gtk.cpp index 1babdff..ebd3c91 100644 --- a/src/interface-gtk/interface-gtk.cpp +++ b/src/interface-gtk/interface-gtk.cpp @@ -131,6 +131,22 @@ ViewGtk::initialize_impl(void) setup(); } +GOptionGroup * +InterfaceGtk::get_options(void) +{ + const GOptionEntry entries[] = { + {"no-csd", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &use_csd, + "Disable client-side decorations.", NULL}, + {NULL} + }; + + GOptionGroup *group = gtk_get_option_group(TRUE); + + g_option_group_add_entries(group, entries); + + return group; +} + void InterfaceGtk::main_impl(int &argc, char **&argv) { @@ -166,17 +182,23 @@ InterfaceGtk::main_impl(int &argc, char **&argv) /* * The info bar is tried to be made the title bar of the * window which also disables the default window decorations - * (client-side decorations). - * FIXME: This could fail, leaving us with a standard title - * bar and the info bar with close buttons. In this case, - * we should at least disable the info bar close button. + * (client-side decorations) unless --no-csd was specified. + * NOTE: Client-side decoations could fail, leaving us with a + * standard title bar and the info bar with close buttons. + * Other window managers have undesirable side-effects. * FIXME: At lease on Gtk 3.12 we could disable the subtitle. */ info_bar_widget = gtk_header_bar_new(); - gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(info_bar_widget), TRUE); info_image = gtk_image_new(); gtk_header_bar_pack_start(GTK_HEADER_BAR(info_bar_widget), info_image); - gtk_window_set_titlebar(GTK_WINDOW(window), info_bar_widget); + if (use_csd) { + /* use client-side decorations */ + gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(info_bar_widget), TRUE); + gtk_window_set_titlebar(GTK_WINDOW(window), info_bar_widget); + } else { + /* fall back to adding the info bar as an ordinary widget */ + gtk_box_pack_start(GTK_BOX(vbox), info_bar_widget, FALSE, FALSE, 0); + } /* * The event box is the parent of all Scintilla views -- cgit v1.2.3