changeset 1005:751522e9f3ac

Switchted to using dw_paned_pack*() to pack the splitbar on GTK3. This allows us to use built-in proportional support so we don't have to do it ourselves.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 09 May 2011 14:05:52 +0000
parents cb81c08bd8c3
children 3e1c70896c13
files gtk3/dw.c
diffstat 1 files changed, 5 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/gtk3/dw.c	Mon May 09 05:58:09 2011 +0000
+++ b/gtk3/dw.c	Mon May 09 14:05:52 2011 +0000
@@ -9056,45 +9056,20 @@
 static gint _splitbar_size_allocate(GtkWidget *widget, GtkAllocation *event, gpointer data)
 {
    float *percent = (float *)g_object_get_data(G_OBJECT(widget), "_dw_percent");
-   int lastwidth = (int)g_object_get_data(G_OBJECT(widget), "_dw_lastwidth");
-   int lastheight = (int)g_object_get_data(G_OBJECT(widget), "_dw_lastheight");
 
    /* Prevent infinite recursion ;) */
-   if(!percent || (lastwidth == event->width && lastheight == event->height))
+   if(!percent || event->width < 20 || event->height < 20)
       return FALSE;
 
-   lastwidth = event->width; lastheight = event->height;
-
-   g_object_set_data(G_OBJECT(widget), "_dw_lastwidth", GINT_TO_POINTER(lastwidth));
-   g_object_set_data(G_OBJECT(widget), "_dw_lastheight", GINT_TO_POINTER(lastheight));
-
    if(GTK_IS_HPANED(widget))
       gtk_paned_set_position(GTK_PANED(widget), (int)(event->width * (*percent / 100.0)));
    if(GTK_IS_VPANED(widget))
       gtk_paned_set_position(GTK_PANED(widget), (int)(event->height * (*percent / 100.0)));
-   g_object_set_data(G_OBJECT(widget), "_dw_waiting", NULL);
+   g_object_set_data(G_OBJECT(widget), "_dw_percent", NULL);
+   free(percent);
    return FALSE;
 }
 
-/* Figure out the new percentage */
-static void _splitbar_accept_position(GObject *object, GParamSpec *pspec, gpointer data)
-{
-   GtkWidget *widget = (GtkWidget *)data;
-   float *percent = (float *)g_object_get_data(G_OBJECT(widget), "_dw_percent");
-   int size = 0, position = gtk_paned_get_position(GTK_PANED(widget));
-
-   if(!percent || g_object_get_data(G_OBJECT(widget), "_dw_waiting"))
-      return;
-
-   if(GTK_IS_VPANED(widget))
-      size = gtk_widget_get_allocated_height(widget);
-   else if(GTK_IS_HPANED(widget))
-      size = gtk_widget_get_allocated_width(widget);
-
-   if(size > 0)
-      *percent = ((float)(position * 100) / (float)size);
-}
-
 /*
  * Creates a splitbar window (widget) with given parameters.
  * Parameters:
@@ -9115,14 +9090,12 @@
       tmp = gtk_hpaned_new();
    else
       tmp = gtk_vpaned_new();
-   gtk_paned_add1(GTK_PANED(tmp), topleft);
-   gtk_paned_add2(GTK_PANED(tmp), bottomright);
+   gtk_paned_pack1(GTK_PANED(tmp), topleft, TRUE, TRUE);
+   gtk_paned_pack2(GTK_PANED(tmp), bottomright, TRUE, TRUE);
    g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
    *percent = 50.0;
    g_object_set_data(G_OBJECT(tmp), "_dw_percent", (gpointer)percent);
-   g_object_set_data(G_OBJECT(tmp), "_dw_waiting", GINT_TO_POINTER(1));
    g_signal_connect(G_OBJECT(tmp), "size-allocate", G_CALLBACK(_splitbar_size_allocate), NULL);
-   g_signal_connect(G_OBJECT(tmp), "notify::position", G_CALLBACK(_splitbar_accept_position), (gpointer)tmp);
    gtk_widget_show(tmp);
    DW_MUTEX_UNLOCK;
    return tmp;