changeset 1545:6edf3fce77f2

Initial support for container and MLE auto-sizing on GTK3... Also default MLE controls to word wrap... since it was like that on Windows and Mac already.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 13 Jan 2012 06:37:28 +0000
parents 1fd3a9635c4d
children 189b27f24d64
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 41 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Fri Jan 13 06:02:44 2012 +0000
+++ b/gtk/dw.c	Fri Jan 13 06:37:28 2012 +0000
@@ -4342,7 +4342,7 @@
    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN);
    tmp = gtk_text_view_new();
    gtk_container_add (GTK_CONTAINER(tmpbox), tmp);
-   gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE);
+   gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD);
 #else
    tmpbox = gtk_hbox_new(FALSE, 0);
    tmp = gtk_text_new(NULL, NULL);
--- a/gtk3/dw.c	Fri Jan 13 06:02:44 2012 +0000
+++ b/gtk3/dw.c	Fri Jan 13 06:37:28 2012 +0000
@@ -3769,7 +3769,7 @@
    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN);
    tmp = gtk_text_view_new();
    gtk_container_add (GTK_CONTAINER(tmpbox), tmp);
-   gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE);
+   gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD);
 
    g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
    g_object_set_data(G_OBJECT(tmpbox), "_dw_user", (gpointer)tmp);
@@ -4741,7 +4741,7 @@
       GtkWidget *tmp = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user");
 
       if(tmp && GTK_IS_TEXT_VIEW(tmp))
-         gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD);
+         gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), state ? GTK_WRAP_WORD : GTK_WRAP_NONE);
    }
    DW_MUTEX_UNLOCK;
 }
@@ -8466,20 +8466,55 @@
          gtk_grid_attach(GTK_GRID(box), item, index, 0, 1, 1);
       }
       g_object_set_data(G_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
-      /* Set the requested size of the widget */
+      /* Special case for scrolled windows */
       if(GTK_IS_SCROLLED_WINDOW(item))
       {
          if(width > 0)
             gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(item), width);
          else if(!hsize)
-            gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(item), 500);
+         {
+            /* If we aren't expandable set the minimum width */
+            gint thiswidth = 0;
+            GtkWidget *widget = g_object_get_data(G_OBJECT(item), "_dw_user");
+            
+            if(widget)
+            {
+               if(g_object_get_data(G_OBJECT(widget), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_TREE))
+                  thiswidth = _DW_SCROLLED_MAX_WIDTH;
+               else
+                  gtk_widget_get_preferred_width(GTK_WIDGET(widget), NULL, &thiswidth);
+            }
+            if(thiswidth < _DW_SCROLLED_MIN_WIDTH)
+               thiswidth = _DW_SCROLLED_MIN_WIDTH;
+            if(thiswidth > _DW_SCROLLED_MAX_WIDTH)
+               thiswidth = _DW_SCROLLED_MAX_WIDTH;
+            gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(item), thiswidth);
+         }
          if(height > 0)
             gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(item), height);
          else if(!vsize)
-            gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(item), 200);
+         {
+            /* If we aren't expandable set the minimum height */
+            gint thisheight = 0;
+            GtkWidget *widget = g_object_get_data(G_OBJECT(item), "_dw_user");
+            
+            if(widget)
+            {
+               if(g_object_get_data(G_OBJECT(widget), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_TREE))
+                  thisheight = _DW_SCROLLED_MAX_HEIGHT;
+               else
+                 gtk_widget_get_preferred_height(GTK_WIDGET(widget), NULL, &thisheight);
+            }
+            if(thisheight < _DW_SCROLLED_MIN_HEIGHT)
+               thisheight = _DW_SCROLLED_MIN_HEIGHT;
+            if(thisheight > _DW_SCROLLED_MAX_HEIGHT)
+               thisheight = _DW_SCROLLED_MAX_HEIGHT;
+            gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(item), thisheight);
+         }
       }
       else
       {
+         /* Set the requested size of the widget */
          if(width == -1 && (GTK_IS_COMBO_BOX(item) || GTK_IS_ENTRY(item)))
             gtk_widget_set_size_request(item, 150, height);
          else if(width == -1 && GTK_IS_SPIN_BUTTON(item))