aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/interface-gtk/interface-gtk.cpp34
-rw-r--r--src/interface-gtk/interface-gtk.h8
2 files changed, 31 insertions, 11 deletions
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
diff --git a/src/interface-gtk/interface-gtk.h b/src/interface-gtk/interface-gtk.h
index a3a0af6..4563d5f 100644
--- a/src/interface-gtk/interface-gtk.h
+++ b/src/interface-gtk/interface-gtk.h
@@ -84,6 +84,7 @@ typedef class InterfaceGtk : public Interface<InterfaceGtk, ViewGtk> {
INFO_TYPE_QREGISTER
} info_type;
gchar *info_current;
+ gboolean use_csd;
GtkWidget *info_bar_widget;
GtkWidget *info_image;
@@ -105,6 +106,7 @@ public:
window(NULL),
vbox(NULL),
info_type(INFO_TYPE_BUFFER), info_current(NULL),
+ use_csd(TRUE),
info_bar_widget(NULL), info_image(NULL),
event_box_widget(NULL),
message_bar_widget(NULL), message_widget(NULL),
@@ -115,11 +117,7 @@ public:
~InterfaceGtk();
/* overrides Interface::get_options() */
- inline GOptionGroup *
- get_options(void)
- {
- return gtk_get_option_group(TRUE);
- }
+ GOptionGroup *get_options(void);
/* implementation of Interface::main() */
void main_impl(int &argc, char **&argv);