--- a/ui/motif/Grid.c Mon Nov 17 08:27:03 2025 +0100 +++ b/ui/motif/Grid.c Mon Nov 17 11:28:47 2025 +0100 @@ -75,12 +75,42 @@ (XtPointer) 0 }, { - gridMargin, - gridMargin, + gridPaddingLeft, + gridPaddingLeft, + XmRDimension, + sizeof (Dimension), + XtOffsetOf( GridRec, + mywidget.padding_left), + XmRImmediate, + (XtPointer) 0 + }, + { + gridPaddingRight, + gridPaddingRight, XmRDimension, sizeof (Dimension), XtOffsetOf( GridRec, - mywidget.margin), + mywidget.padding_right), + XmRImmediate, + (XtPointer) 0 + }, + { + gridPaddingTop, + gridPaddingTop, + XmRDimension, + sizeof (Dimension), + XtOffsetOf( GridRec, + mywidget.padding_top), + XmRImmediate, + (XtPointer) 0 + }, + { + gridPaddingBottom, + gridPaddingBottom, + XmRDimension, + sizeof (Dimension), + XtOffsetOf( GridRec, + mywidget.padding_bottom), XmRImmediate, (XtPointer) 0 } @@ -406,8 +436,8 @@ GridDef *rows = calloc(nrows, sizeof(GridDef)); int num_cols_expanding = 0; int num_rows_expanding = 0; - int req_width = 0; - int req_height = 0; + int req_width = w->mywidget.padding_left + w->mywidget.padding_right; + int req_height = w->mywidget.padding_top + w->mywidget.padding_bottom; //printf("container width: %d\n", (int)w->core.width); @@ -428,6 +458,8 @@ if(constraints->grid.pref_width < constraints->grid.min_width) { constraints->grid.pref_width = constraints->grid.min_width; } + int elm_width = constraints->grid.pref_width + constraints->grid.margin_left + constraints->grid.margin_right; + int elm_height = constraints->grid.pref_height + constraints->grid.margin_top + constraints->grid.margin_bottom; if(constraints->grid.colspan > span_max || constraints->grid.rowspan > span_max) { continue; @@ -489,12 +521,12 @@ span_width = last_col->size; } - int diff = constraints->grid.pref_width - span_width; + int diff = elm_width - span_width; if(diff > 0) { last_col->size += diff; } - } else if(constraints->grid.pref_width > col->size) { - col->size = constraints->grid.pref_width; + } else if(elm_width > col->size) { + col->size = elm_width; } // row size if(constraints->grid.rowspan > 1) { @@ -505,12 +537,12 @@ span_height = last_row->size; } - int diff = constraints->grid.pref_height - span_height; + int diff = elm_height - span_height; if(diff > 0) { last_row->size += diff; } - } else if(constraints->grid.pref_height > row->size) { - row->size = constraints->grid.pref_height; + } else if(elm_height > row->size) { + row->size = elm_height; } } span_max = 50000; // not sure if this is unreasonable low or high @@ -574,7 +606,7 @@ hexpand = width_diff / num_cols_expanding; hexpand2 = width_diff-hexpand*num_cols_expanding; } - int x = 0; + int x = w->mywidget.padding_left; for(int i=0;i<ncols;i++) { cols[i].pos = x; if(cols[i].expand) { @@ -592,7 +624,7 @@ vexpand = height_diff / num_rows_expanding; vexpand2 = height_diff-vexpand*num_rows_expanding; } - int y = 0; + int y = w->mywidget.padding_bottom; for(int i=0;i<nrows;i++) { rows[i].pos = y; if(rows[i].expand) { @@ -608,8 +640,8 @@ GridConstraintRec *constraints = child->core.constraints; GridDef c = cols[constraints->grid.x]; GridDef r = rows[constraints->grid.y]; - int x = c.pos; - int y = r.pos; + int x = c.pos + constraints->grid.margin_left; + int y = r.pos + constraints->grid.margin_top; int width = constraints->grid.pref_width; int height = constraints->grid.pref_height; if(constraints->grid.hfill) {