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;
 | |
| }
 | 
