# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1309244145 0 # Node ID 7821a35e1e114f0623a894ba025b7233f0da8bdb # Parent f9232a52367a77f536b0bebb01a1cf36f582e7af Implemented table rearranging on GTK2 getting dw_box_pack_at_index() working there too. diff -r f9232a52367a -r 7821a35e1e11 gtk/dw.c --- a/gtk/dw.c Tue Jun 28 06:49:19 2011 +0000 +++ b/gtk/dw.c Tue Jun 28 06:55:45 2011 +0000 @@ -9126,6 +9126,39 @@ #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL) +/* Internal function that changes the attachment properties in a table. */ +void _rearrange_table(GtkWidget *widget, gpointer data) +{ + gint pos = GPOINTER_TO_INT(data); + GtkContainer *cont = gtk_object_get_data(GTK_OBJECT(widget), "_dw_table"); + guint oldpos; + + /* Drop out if missing table */ + if(!cont) + return; + + /* Check orientation */ + if(pos < 0) + { + /* Horz */ + pos = -(pos + 1); + gtk_container_child_get(cont, widget, "left-attach", &oldpos, NULL); + if(oldpos >= pos) + { + gtk_container_child_set(cont, widget, "left-attach", (oldpos + 1), "right-attach", (oldpos+2), NULL); + } + } + else + { + /* Vert */ + gtk_container_child_get(cont, widget, "top-attach", &oldpos, NULL); + if(oldpos >= pos) + { + gtk_container_child_set(cont, widget, "top-attach", (oldpos + 1), "bottom-attach", (oldpos+2), NULL); + } + } +} + /* * Pack windows (widgets) into a box at an arbitrary location. * Parameters: @@ -9239,8 +9272,10 @@ gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); } + gtk_object_set_data(GTK_OBJECT(item), "_dw_table", box); + gtk_container_forall(GTK_CONTAINER(box),_rearrange_table, GINT_TO_POINTER(boxtype == DW_VERT ? index : -(index+1))); gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); - g_object_set_data(G_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); + gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); gtk_widget_set_usize(item, width, height); if(GTK_IS_RADIO_BUTTON(item)) { @@ -9390,6 +9425,7 @@ else gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); + gtk_object_set_data(GTK_OBJECT(item), "_dw_table", box); gtk_table_attach(GTK_TABLE(box), item, 0, 1, 0, 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); gtk_widget_set_usize(item, width, height); @@ -10869,6 +10905,7 @@ gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); } + gtk_object_set_data(GTK_OBJECT(item), "_dw_table", box); gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); gtk_widget_set_usize(item, width, height);