tGtkTables should now honour the GtkAttachOptions of attached child widgets - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit e506b024d05779ac80a46e8a130a2725c2d0991d
(DIR) parent c974961655adc95d4eecb33b95cd42790373ddd1
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Mon, 25 Feb 2002 19:51:38 +0000
GtkTables should now honour the GtkAttachOptions of attached child widgets
Diffstat:
M src/gtkport/gtkport.c | 59 +++++++++++++++++++++++++++----
1 file changed, 52 insertions(+), 7 deletions(-)
---
(DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
t@@ -3184,6 +3184,8 @@ void gtk_table_attach(GtkTable *table, GtkWidget *widget,
newChild->right_attach = right_attach;
newChild->top_attach = top_attach;
newChild->bottom_attach = bottom_attach;
+ newChild->xoptions = xoptions;
+ newChild->yoptions = yoptions;
table->children = g_list_append(table->children, (gpointer)newChild);
widget->parent = GTK_WIDGET(table);
t@@ -3285,29 +3287,72 @@ void gtk_table_size_request(GtkWidget *widget, GtkRequisition *requisition)
void gtk_table_set_size(GtkWidget *widget, GtkAllocation *allocation)
{
GtkTable *table;
- gint row_extra = 0, col_extra = 0, i;
+ gint row_extra = 0, col_extra = 0, i, row_expand = 0, col_expand = 0;
GtkAllocation child_alloc;
GList *children;
GtkTableChild *child;
gint border_width;
+ GtkAttachOptions *rowopt, *colopt;
table = GTK_TABLE(widget);
border_width = GTK_CONTAINER(widget)->border_width;
- if (table->ncols) {
+ rowopt = g_new0(GtkAttachOptions, table->nrows);
+ colopt = g_new0(GtkAttachOptions, table->ncols);
+ for (children = table->children; children;
+ children = g_list_next(children)) {
+ GtkTableChild *child = (GtkTableChild *)(children->data);
+ GtkWidget *child_wid;
+
+ if (!child)
+ continue;
+ child_wid = child->widget;
+ if (child_wid && child->left_attach < child->right_attach &&
+ child->top_attach < child->bottom_attach &&
+ GTK_WIDGET_VISIBLE(child_wid)) {
+ if (child->xoptions & GTK_SHRINK) {
+ for (i = child->left_attach; i < child->right_attach; i++) {
+ colopt[i] |= GTK_SHRINK;
+ }
+ }
+ if (child->yoptions & GTK_EXPAND) {
+ for (i = child->top_attach; i < child->bottom_attach; i++) {
+ rowopt[i] |= GTK_EXPAND;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < table->ncols; i++) {
+ if (!(colopt[i] & GTK_SHRINK)) {
+ col_expand++;
+ }
+ }
+ for (i = 0; i < table->nrows; i++) {
+ if (rowopt[i] & GTK_EXPAND) {
+ row_expand++;
+ }
+ }
+
+
+ if (col_expand) {
col_extra =
- (allocation->width - widget->requisition.width) / table->ncols;
+ (allocation->width - widget->requisition.width) / col_expand;
}
- if (table->nrows) {
+ if (row_expand) {
row_extra =
- (allocation->height - widget->requisition.height) / table->nrows;
+ (allocation->height - widget->requisition.height) / row_expand;
}
for (i = 0; i < table->ncols; i++) {
- table->cols[i].allocation = table->cols[i].requisition + col_extra;
+ table->cols[i].allocation = table->cols[i].requisition +
+ (colopt[i] & GTK_SHRINK ? 0 : col_extra);
}
for (i = 0; i < table->nrows; i++) {
- table->rows[i].allocation = table->rows[i].requisition + row_extra;
+ table->rows[i].allocation = table->rows[i].requisition +
+ (rowopt[i] & GTK_SHRINK ? 0 : row_extra);
}
+ g_free(rowopt);
+ g_free(colopt);
for (children = table->children; children;
children = g_list_next(children)) {
child = (GtkTableChild *)(children->data);