for (int i = 0; i < model->columns; i++) {
         newmodel->titles[i] = model->titles[i] ? cx_strdup_a(a, cx_str(model->titles[i])).ptr : NULL;
     }
+    newmodel->columnsize = cxCalloc(a, model->columns, sizeof(int));
+    memcpy(newmodel->columnsize, model->columnsize, model->columns*sizeof(int));
 
     return newmodel;
 }
     const CxAllocator* a = ctx ? ctx->allocator : cxDefaultAllocator;
     cxFree(a, mi->types);
     cxFree(a, mi->titles);
+    cxFree(a, mi->columnsize);
     cxFree(a, mi);
 }
 
 
         GtkColumnViewColumn *column = gtk_column_view_column_new(model->titles[i], factory);
         gtk_column_view_column_set_resizable(column, true);
         gtk_column_view_append_column(GTK_COLUMN_VIEW(view), column);
+        
+        int size = model->columnsize[i];
+        if(size > 0) {
+            gtk_column_view_column_set_fixed_width(column, size);
+        } else if(size < 0) {
+            gtk_column_view_column_set_expand(column, TRUE);
+        }
     }
     
     // bind listview to list
                     }
                     case UI_INTEGER: {
                         g_value_init(&value, G_TYPE_INT);
-                        int *intptr = data;
-                        g_value_set_int(&value, *intptr);
+                        intptr_t intptr = (intptr_t)data;
+                        g_value_set_int(&value, (int)intptr);
                         break;
                     }
                     case UI_ICON: {
 
     GtkWidget *content_box = ui_gtk_vbox_new(0);
     BOX_ADD_EXPAND(GTK_BOX(vbox), content_box);
     
+    GtkWidget *sidebar_headerbar = NULL; 
     if(sidebar) {
         GtkWidget *splitview = adw_overlay_split_view_new();
         adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), splitview);
         
         GtkWidget *sidebar_toolbar_view = adw_toolbar_view_new();
         adw_overlay_split_view_set_sidebar(ADW_OVERLAY_SPLIT_VIEW(splitview), sidebar_toolbar_view);
-        GtkWidget *sidebar_headerbar = adw_header_bar_new();
+        sidebar_headerbar = adw_header_bar_new();
         adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), sidebar_headerbar);
         
         adw_overlay_split_view_set_content(ADW_OVERLAY_SPLIT_VIEW(splitview), toolbar_view);
         adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), toolbar_view);
     }
     
-
     GtkWidget *headerbar = adw_header_bar_new();
+    
+    const char *show_title = ui_get_property("ui.gtk.window.showtitle");
+    if(show_title) {
+        if(!strcmp(show_title, "main") && sidebar) {
+            adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE);
+        } else if(!strcmp(show_title, "sidebar")) {
+            adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE);
+        } else if(!strcmp(show_title, "false")) {
+            adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE);
+            adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE);
+        } else {
+            fprintf(stderr, "Unknown value '%s' for property ui.gtk.window.showtitle\n", show_title);
+            adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE);
+        }
+    } else {
+        adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE);
+    }
+    
     adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(toolbar_view), headerbar);
     g_object_set_data(G_OBJECT(obj->widget), "ui_headerbar", headerbar);
     
 
 UIEXPORT UiObject* ui_document_tab(UiTabbedPane *view);
 
 
+#ifdef UI_GTK
 typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+#elif defined(UI_MOTIF)
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata, Widget parent, Arg *a, int n);
+#elif defined(UI_COCOA)
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+#endif
 UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args);
 
 #define ui_customwidget(obj, create_widget, userdata, ...) ui_customwidget_create(obj, create_widget, userdata, (UiWidgetArgs) { __VA_ARGS__ })
 
 typedef void* UIMENU;   // NSMenu*
 
 #elif UI_GTK2 || UI_GTK3 || UI_GTK4
+#define UI_GTK
 
 #include <gtk/gtk.h>
 #define UIWIDGET GtkWidget*