--- a/ui/gtk/window.c Sun Dec 07 20:00:33 2025 +0100 +++ b/ui/gtk/window.c Sat Dec 13 15:58:58 2025 +0100 @@ -35,6 +35,7 @@ #include "../common/context.h" #include "../common/menu.h" #include "../common/toolbar.h" +#include "../common/utils.h" #include <cx/mempool.h> @@ -141,7 +142,7 @@ ui_set_property("ui.window.splitview.pos", buf); } -static UiObject* create_window(const char *title, void *window_data, UiBool sidebar, UiBool splitview, UiBool simple) { +static UiObject* create_window(const char *title, UiBool sidebar, UiBool splitview, UiBool simple) { UiObject *obj = uic_object_new_toplevel(); #ifdef UI_LIBADWAITA @@ -152,8 +153,6 @@ obj->widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); #endif - obj->window = window_data; - #if GTK_CHECK_VERSION(4, 0, 0) obj->ctx->action_map = G_ACTION_MAP(obj->widget); #endif @@ -169,16 +168,7 @@ int window_width = window_default_width; int window_height = window_default_height; if(!simple) { - const char *width = ui_get_property("ui.window.width"); - const char *height = ui_get_property("ui.window.height"); - if(width && height) { - int w = atoi(width); - int h = atoi(height); - if(w > 0 && h > 0) { - window_width = w; - window_height = h; - } - } + ui_get_window_default_width(&window_width, &window_height); } gtk_window_set_default_size( GTK_WINDOW(obj->widget), @@ -205,6 +195,21 @@ obj); #endif + int splitview_pos = 0; + if(splitview) { + const char *splitview_pos_str = ui_get_property("ui.window.splitview.pos"); + splitview_pos= splitview_window_default_pos; + if(splitview_pos < 0) { + splitview_pos = window_width / 2; + } + if(splitview_pos_str && splitview_window_use_prop) { + int sv_pos = atoi(splitview_pos_str); + if(sv_pos > 0) { + splitview_pos = sv_pos; + } + } + } + GtkWidget *vbox = ui_gtk_vbox_new(0); #ifdef UI_LIBADWAITA GtkWidget *toolbar_view = adw_toolbar_view_new(); @@ -223,18 +228,7 @@ G_CALLBACK(save_window_splitview_pos), NULL); - const char *splitview_pos_str = ui_get_property("ui.window.splitview.pos"); - int pos = splitview_window_default_pos; - if(pos < 0) { - pos = window_width / 2; - } - if(splitview_pos_str && splitview_window_use_prop) { - int splitview_pos = atoi(splitview_pos_str); - if(splitview_pos > 0) { - pos = splitview_pos; - } - } - gtk_paned_set_position(GTK_PANED(content), pos); + gtk_paned_set_position(GTK_PANED(content), splitview_pos); GtkWidget *right_panel = adw_toolbar_view_new(); GtkWidget *right_vbox = ui_gtk_vbox_new(0); @@ -345,14 +339,32 @@ GtkWidget *content_box = ui_gtk_vbox_new(0); WINDOW_SET_CONTENT(obj->widget, vbox); - if(sidebar) { + if(sidebar || splitview) { GtkWidget *paned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); - GtkWidget *sidebar_vbox = ui_gtk_vbox_new(0); - gtk_paned_add1(GTK_PANED(paned), sidebar_vbox); - gtk_paned_add2(GTK_PANED(paned), content_box); + if(sidebar) { + GtkWidget *sidebar_vbox = ui_gtk_vbox_new(0); + gtk_paned_add1(GTK_PANED(paned), sidebar_vbox); + g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_vbox); + gtk_paned_set_position(GTK_PANED(paned), 200); + } + + if(splitview) { + GtkWidget *content_paned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); + gtk_paned_set_position(GTK_PANED(content_paned), splitview_pos); + gtk_paned_add2(GTK_PANED(paned), content_paned); + + GtkWidget *right_content_box = ui_gtk_vbox_new(0); + gtk_paned_add1(GTK_PANED(content_paned), content_box); + gtk_paned_add2(GTK_PANED(content_paned), right_content_box); + + g_object_set_data(G_OBJECT(obj->widget), "ui_window_splitview", content_paned); + g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel", content_box); + g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel", right_content_box); + } else { + gtk_paned_add2(GTK_PANED(paned), content_box); + } + BOX_ADD_EXPAND(GTK_BOX(vbox), paned); - g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_vbox); - gtk_paned_set_position (GTK_PANED(paned), 200); } else { BOX_ADD_EXPAND(GTK_BOX(vbox), content_box); } @@ -380,20 +392,20 @@ } -UiObject* ui_window(const char *title, void *window_data) { - return create_window(title, window_data, FALSE, FALSE, FALSE); +UiObject* ui_window(const char *title) { + return create_window(title, FALSE, FALSE, FALSE); } -UiObject *ui_sidebar_window(const char *title, void *window_data) { - return create_window(title, window_data, TRUE, FALSE, FALSE); +UiObject *ui_sidebar_window(const char *title) { + return create_window(title, TRUE, FALSE, FALSE); } -UIEXPORT UiObject *ui_splitview_window(const char *title, UiBool sidebar) { - return create_window(title, NULL, sidebar, TRUE, FALSE); +UiObject *ui_splitview_window(const char *title, UiBool sidebar) { + return create_window(title, sidebar, TRUE, FALSE); } -UiObject* ui_simple_window(const char *title, void *window_data) { - return create_window(title, window_data, FALSE, FALSE, TRUE); +UiObject* ui_simple_window(const char *title) { + return create_window(title, FALSE, FALSE, TRUE); } void ui_window_size(UiObject *obj, int width, int height) {