From: Owen Taylor Date: Sun, 3 Mar 2002 20:36:54 +0000 (+0000) Subject: When increasing the row or column requisitions to make them sufficient for X-Git-Url: http://pileus.org/git/?p=~andy%2Fgtk;a=commitdiff_plain;h=fb90bb019b9cfe638b3db3b9063eeaa465c7daba When increasing the row or column requisitions to make them sufficient for Sun Mar 3 15:16:07 2002 Owen Taylor * gtk/gtktable.c: When increasing the row or column requisitions to make them sufficient for spanning widgets, favor rows or columns with expandable children in them. (#1261, Jonathan Blandford.) --- diff --git a/ChangeLog b/ChangeLog index e4d4bd859..9cbb65304 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index e4d4bd859..9cbb65304 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Sun Mar 3 15:16:07 2002 Owen Taylor + + * gtk/gtktable.c: When increasing the row or column + requisitions to make them sufficient for spanning widgets, + favor rows or columns with expandable children in them. + (#1261, Jonathan Blandford.) + Sun Mar 3 14:26:33 2002 Owen Taylor * gtk/gtkstyle.[ch] (_gtk_get_insertion_cursor_gc): diff --git a/gtk/gtktable.c b/gtk/gtktable.c index da962fb68..d94626357 100644 --- a/gtk/gtktable.c +++ b/gtk/gtktable.c @@ -951,9 +951,15 @@ gtk_table_size_request_init (GtkTable *table) gint row, col; for (row = 0; row < table->nrows; row++) - table->rows[row].requisition = 0; + { + table->rows[row].requisition = 0; + table->cols[row].expand = FALSE; + } for (col = 0; col < table->ncols; col++) - table->cols[col].requisition = 0; + { + table->cols[col].requisition = 0; + table->cols[col].expand = FALSE; + } children = table->children; while (children) @@ -963,6 +969,12 @@ gtk_table_size_request_init (GtkTable *table) if (GTK_WIDGET_VISIBLE (child->widget)) gtk_widget_size_request (child->widget, NULL); + + if (child->left_attach == (child->right_attach - 1) && child->xexpand) + table->cols[child->left_attach].expand = TRUE; + + if (child->top_attach == (child->bottom_attach - 1) && child->yexpand) + table->rows[child->top_attach].expand = TRUE; } } @@ -1065,19 +1077,34 @@ gtk_table_size_request_pass3 (GtkTable *table) } /* If we need to request more space for this child to fill - * its requisition, then divide up the needed space evenly - * amongst the columns it spans. + * its requisition, then divide up the needed space amongst the + * columns it spans, favoring expandable columns if any. */ if (width < child_requisition.width + child->xpadding * 2) { - width = child_requisition.width + child->xpadding * 2 - width; + gint n_expand = 0; + gboolean force_expand = FALSE; + width = child_requisition.width + child->xpadding * 2 - width; + for (col = child->left_attach; col < child->right_attach; col++) + if (table->cols[col].expand) + n_expand++; + + if (n_expand == 0) { - extra = width / (child->right_attach - col); - table->cols[col].requisition += extra; - width -= extra; + n_expand = (child->right_attach - child->left_attach); + force_expand = TRUE; } + + for (col = child->left_attach; col < child->right_attach; col++) + if (force_expand || table->cols[col].expand) + { + extra = width / n_expand; + table->cols[col].requisition += extra; + width -= extra; + n_expand--; + } } } @@ -1101,19 +1128,36 @@ gtk_table_size_request_pass3 (GtkTable *table) } /* If we need to request more space for this child to fill - * its requisition, then divide up the needed space evenly - * amongst the columns it spans. + * its requisition, then divide up the needed space amongst the + * rows it spans, favoring expandable rows if any. */ if (height < child_requisition.height + child->ypadding * 2) { + gint n_expand = 0; + gboolean force_expand = FALSE; + height = child_requisition.height + child->ypadding * 2 - height; for (row = child->top_attach; row < child->bottom_attach; row++) { - extra = height / (child->bottom_attach - row); - table->rows[row].requisition += extra; - height -= extra; + if (table->rows[row].expand) + n_expand++; + } + + if (n_expand == 0) + { + n_expand = (child->bottom_attach - child->top_attach); + force_expand = TRUE; } + + for (row = child->top_attach; row < child->bottom_attach; row++) + if (force_expand || table->rows[row].expand) + { + extra = height / n_expand; + table->rows[row].requisition += extra; + height -= extra; + n_expand--; + } } } }