mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
0f9f3e8fa2
Same empty string issue that I fixed in GtkHeaderBar a few days ago.
75 lines
2.2 KiB
C
75 lines
2.2 KiB
C
#include <gtk/gtk.h>
|
|
|
|
static void
|
|
split_decorations (GtkSettings *settings,
|
|
GParamSpec *pspec,
|
|
GtkBuilder *builder)
|
|
{
|
|
GtkWidget *sheader, *mheader;
|
|
gchar *layout, *p1, *p2;
|
|
gchar **p;
|
|
|
|
sheader = (GtkWidget *)gtk_builder_get_object (builder, "sidebar-header");
|
|
mheader = (GtkWidget *)gtk_builder_get_object (builder, "main-header");
|
|
|
|
g_object_get (settings, "gtk-decoration-layout", &layout, NULL);
|
|
|
|
p = g_strsplit (layout, ":", -1);
|
|
|
|
p1 = g_strconcat ("", p[0], ":", NULL);
|
|
|
|
if (g_strv_length (p) >= 2)
|
|
p2 = g_strconcat (":", p[1], NULL);
|
|
else
|
|
p2 = g_strdup ("");
|
|
|
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (sheader), p1);
|
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (mheader), p2);
|
|
|
|
g_free (p1);
|
|
g_free (p2);
|
|
g_strfreev (p);
|
|
g_free (layout);
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
GtkBuilder *builder;
|
|
GtkSettings *settings;
|
|
GtkWidget *win;
|
|
GtkWidget *entry;
|
|
GtkWidget *check;
|
|
GtkWidget *header;
|
|
|
|
gtk_init (NULL, NULL);
|
|
|
|
builder = gtk_builder_new_from_file ("testsplitheaders.ui");
|
|
|
|
win = (GtkWidget *)gtk_builder_get_object (builder, "window");
|
|
settings = gtk_widget_get_settings (win);
|
|
|
|
g_signal_connect (settings, "notify::gtk-decoration-layout",
|
|
G_CALLBACK (split_decorations), builder);
|
|
split_decorations (settings, NULL, builder);
|
|
|
|
entry = (GtkWidget *)gtk_builder_get_object (builder, "layout-entry");
|
|
g_object_bind_property (settings, "gtk-decoration-layout",
|
|
entry, "text",
|
|
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
|
|
check = (GtkWidget *)gtk_builder_get_object (builder, "decorations");
|
|
header = (GtkWidget *)gtk_builder_get_object (builder, "sidebar-header");
|
|
g_object_bind_property (check, "active",
|
|
header, "show-close-button",
|
|
G_BINDING_DEFAULT);
|
|
header = (GtkWidget *)gtk_builder_get_object (builder, "main-header");
|
|
g_object_bind_property (check, "active",
|
|
header, "show-close-button",
|
|
G_BINDING_DEFAULT);
|
|
gtk_window_present (GTK_WINDOW (win));
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|