--- a/ui/gtk/container.c Sun Sep 15 20:19:52 2024 +0200 +++ b/ui/gtk/container.c Sun Sep 15 20:59:48 2024 +0200 @@ -52,7 +52,7 @@ } GtkWidget* ui_gtk_vbox_new(int spacing) { -#ifdef UI_GTK3 +#if GTK_MAJOR_VERSION >= 3 return gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing); #else return gtk_vbox_new(FALSE, spacing); @@ -60,7 +60,7 @@ } GtkWidget* ui_gtk_hbox_new(int spacing) { -#ifdef UI_GTK3 +#if GTK_MAJOR_VERSION >= 3 return gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing); #else return gtk_hbox_new(FALSE, spacing); @@ -70,13 +70,14 @@ /* -------------------- Box Container -------------------- */ -UiContainer* ui_box_container(UiObject *obj, GtkWidget *box) { +UiContainer* ui_box_container(UiObject *obj, GtkWidget *box, UiSubContainerType type) { UiBoxContainer *ct = cxCalloc( obj->ctx->allocator, 1, sizeof(UiBoxContainer)); ct->container.widget = box; ct->container.add = ui_box_container_add; + ct->type = type; return (UiContainer*)ct; } @@ -95,7 +96,22 @@ } UiBool expand = fill; +#if GTK_MAJOR_VERSION >= 4 + gtk_box_append(GTK_BOX(ct->widget), widget); + GtkAlign align = expand ? GTK_ALIGN_FILL : GTK_ALIGN_START; + if(bc->type == UI_CONTAINER_VBOX) { + gtk_widget_set_valign(widget, align); + gtk_widget_set_vexpand(widget, expand); + gtk_widget_set_hexpand(widget, TRUE); + } else if(bc->type == UI_CONTAINER_HBOX) { + gtk_widget_set_halign(widget, align); + gtk_widget_set_hexpand(widget, expand); + gtk_widget_set_vexpand(widget, TRUE); + } + +#else gtk_box_pack_start(GTK_BOX(ct->widget), widget, expand, fill, 0); +#endif ui_reset_layout(ct->layout); ct->current = widget; @@ -115,7 +131,7 @@ return (UiContainer*)ct; } -#ifdef UI_GTK3 +#if GTK_MAJOR_VERSION >= 3 void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { UiGridContainer *grid = (UiGridContainer*)ct; @@ -202,7 +218,9 @@ void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { // TODO: check if the widget implements GtkScrollable -#ifdef UI_GTK3 +#ifdef UI_GTK4 + gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(ct->widget), widget); +#elif defined(UI_GTK3) gtk_container_add(GTK_CONTAINER(ct->widget), widget); #else gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(ct->widget), widget); @@ -264,7 +282,7 @@ ct->add(ct, widget, TRUE); UiObject *newobj = uic_object_new(obj, box); - newobj->container = ui_box_container(obj, box); + newobj->container = ui_box_container(obj, box, type); uic_obj_add(obj, newobj); return widget; @@ -285,11 +303,11 @@ UI_APPLY_LAYOUT1(current, args); GtkWidget *widget; -#ifdef UI_GTK3 +#if GTK_MAJOR_VERSION >= 3 GtkWidget *grid = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(grid), args.columnspacing); gtk_grid_set_row_spacing(GTK_GRID(grid), args.rowspacing); -#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 12 +#if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 12 gtk_widget_set_margin_start(grid, args.margin); gtk_widget_set_margin_end(grid, args.margin); #else @@ -325,11 +343,16 @@ } +#if GTK_MAJOR_VERSION >= 4 +#define SCROLLEDWINDOW_NEW() gtk_scrolled_window_new() +#else +#define SCROLLEDWINDOW_NEW() gtk_scrolled_window_new(NULL, NULL) +#endif UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { UiObject* current = uic_current_obj(obj); UI_APPLY_LAYOUT1(current, args); - GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL); + GtkWidget *sw = SCROLLEDWINDOW_NEW(); UiObject *newobj = uic_object_new(obj, sw); newobj->container = ui_scrolledwindow_container(obj, sw); uic_obj_add(obj, newobj); @@ -345,7 +368,7 @@ /* -------------------- Splitpane -------------------- */ static GtkWidget* create_paned(UiOrientation orientation) { -#ifdef UI_GTK3 +#if GTK_MAJOR_VERSION >= 3 switch(orientation) { case UI_HORIZONTAL: return gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); case UI_VERTICAL: return gtk_paned_new(GTK_ORIENTATION_VERTICAL);