# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1304949952 0 # Node ID 751522e9f3ac1ae134da2176182b3d83b6457650 # Parent cb81c08bd8c3d25ad13089e846c49b815cd7b5b4 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. diff -r cb81c08bd8c3 -r 751522e9f3ac gtk3/dw.c --- 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;