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);