tMake gtk_clist_optimal_column_width work properly under Win32. - 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 4323ff1587a674f386772595ab5a536a0f5cedbc
 (DIR) parent 6780b52840675ea0a7894175e01f4b4b3524bed0
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun, 29 Sep 2002 18:36:45 +0000
       
       Make gtk_clist_optimal_column_width work properly under Win32.
       
       
       Diffstat:
         M src/gtkport/clist.c                 |      27 ++++++++++++++++-----------
         M src/gtkport/clist.h                 |       1 +
       
       2 files changed, 17 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/src/gtkport/clist.c b/src/gtkport/clist.c
       t@@ -212,6 +212,7 @@ GtkWidget *gtk_clist_new(gint columns)
          clist->rowdata = NULL;
          for (i = 0; i < columns; i++) {
            clist->coldata[i].width = 0;
       +    clist->coldata[i].optimal_width = 0;
            clist->coldata[i].visible = TRUE;
            clist->coldata[i].resizeable = TRUE;
            clist->coldata[i].justification = GTK_JUSTIFY_LEFT;
       t@@ -383,13 +384,13 @@ void gtk_clist_do_auto_resize(GtkCList *clist)
        
          for (i = 0; i < clist->cols; i++)
            if (clist->coldata[i].auto_resize) {
       -      gtk_clist_set_column_width(clist, i, clist->coldata[i].width);
       +      gtk_clist_set_column_width(clist, i, clist->coldata[i].optimal_width);
            }
        }
        
        gint gtk_clist_optimal_column_width(GtkCList *clist, gint column)
        {
       -  return clist->coldata[column].width;
       +  return clist->coldata[column].optimal_width;
        }
        
        void gtk_clist_update_all_widths(GtkCList *clist)
       t@@ -401,18 +402,22 @@ void gtk_clist_update_all_widths(GtkCList *clist)
          gint i;
        
          header = clist->header;
       -  if (header)
       +  if (header) {
            for (i = 0; i < clist->cols; i++) {
       -      if (GetTextSize(header, clist->coldata[i].title, &size, defFont) &&
       -          clist->coldata[i].width < size.cx + 4 + 2 * LISTHEADERPACK) {
       -        clist->coldata[i].width = size.cx + 4 + 2 * LISTHEADERPACK;
       +      if (GetTextSize(header, clist->coldata[i].title, &size, defFont)) {
       +        int new_width = size.cx + 4 + 2 * LISTHEADERPACK;
       +        clist->coldata[i].width = MAX(clist->coldata[i].width, new_width);
       +        clist->coldata[i].optimal_width = MAX(clist->coldata[i].optimal_width,
       +                                              new_width);
              }
            }
       +  }
        
          for (list = clist->rowdata; list; list = g_slist_next(list)) {
            row = (GtkCListRow *)list->data;
       -    if (row && row->text)
       +    if (row && row->text) {
              gtk_clist_update_widths(clist, row->text);
       +    }
          }
        
          gtk_clist_set_extent(clist);
       t@@ -428,10 +433,10 @@ void gtk_clist_update_widths(GtkCList *clist, gchar *text[])
          if (!hWnd)
            return;
          for (i = 0; i < clist->cols; i++) {
       -    if (clist->coldata[i].auto_resize
       -        && GetTextSize(hWnd, text[i], &size, defFont)
       -        && size.cx + 4 + 2 * LISTITEMHPACK > clist->coldata[i].width) {
       -      clist->coldata[i].width = size.cx + 4 + 2 * LISTITEMHPACK;
       +    if (GetTextSize(hWnd, text[i], &size, defFont)) {
       +      int new_width = size.cx + 4 + 2 * LISTITEMHPACK;
       +      clist->coldata[i].optimal_width = MAX(clist->coldata[i].optimal_width,
       +                                            new_width);
            }
          }
        }
 (DIR) diff --git a/src/gtkport/clist.h b/src/gtkport/clist.h
       t@@ -42,6 +42,7 @@ typedef gint (*GtkCListCompareFunc) (GtkCList *clist, gconstpointer ptr1,
        struct _GtkCListColumn {
          gchar *title;
          gint width;
       +  gint optimal_width;
          GtkJustification justification;
          guint visible:1;
          guint resizeable:1;