summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2012-12-17 22:31:21 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2013-01-18 20:11:03 -0300
commit576092bb8d7d853c2789ce196e3e082433049728 (patch)
treeedc83acc92989ab86a27279c8a5a8a104608cfe2
parentb01110c2fb6e6155c903e1c3f4d95ecc02a61123 (diff)
downloadglade-576092bb8d7d853c2789ce196e3e082433049728.tar.gz
Removed GladeFixed (DnD) support for GtkBox, GtkTable and GtkGrid.
Optimized glade_gtk_grid_refresh_placeholders() by passing the children list to glade_gtk_grid_has_child() instead of getting it each time from the container.
-rw-r--r--plugins/gtk+/glade-gtk-grid.c417
-rw-r--r--plugins/gtk+/glade-gtk-table.c453
-rw-r--r--plugins/gtk+/glade-gtk.c224
-rw-r--r--plugins/gtk+/gtk+.xml.in5
4 files changed, 30 insertions, 1069 deletions
diff --git a/plugins/gtk+/glade-gtk-grid.c b/plugins/gtk+/glade-gtk-grid.c
index 87e38cce..05259bf5 100644
--- a/plugins/gtk+/glade-gtk-grid.c
+++ b/plugins/gtk+/glade-gtk-grid.c
@@ -55,9 +55,6 @@ typedef enum
DIR_RIGHT
} GladeGridDir;
-static GladeGridChild grid_edit = { 0, };
-static GladeGridChild grid_cur_attach = { 0, };
-
static void
glade_gtk_grid_get_child_attachments (GtkWidget *grid,
GtkWidget *child,
@@ -71,354 +68,6 @@ glade_gtk_grid_get_child_attachments (GtkWidget *grid,
NULL);
}
-/* Takes a point (x or y depending on 'row') relative to
- * grid, and returns the row or column in which the point
- * was found.
- */
-static gint
-glade_gtk_grid_get_row_col_from_point (GtkGrid * grid,
- gboolean row, gint point)
-{
- GladeGridAttachments attach;
- GtkAllocation allocation;
- GList *list, *children;
- gint span, trans_point, size, base, end;
-
- children = gtk_container_get_children (GTK_CONTAINER (grid));
-
- for (list = children; list; list = list->next)
- {
- GtkWidget *widget = list->data;
-
- glade_gtk_grid_get_child_attachments (GTK_WIDGET (grid), widget, &attach);
-
- if (row)
- gtk_widget_translate_coordinates (GTK_WIDGET (grid), widget, 0, point, NULL, &trans_point);
- else
- gtk_widget_translate_coordinates (GTK_WIDGET (grid), widget, point, 0, &trans_point, NULL);
-
- gtk_widget_get_allocation (widget, &allocation);
-
- /* Find any widget in our row/column
- */
- end = row ? allocation.height : allocation.width;
-
- if (trans_point >= 0 &&
- /* should be trans_point < end ... test FIXME ! */
- trans_point < end)
- {
- base = row ? attach.top_attach : attach.left_attach;
- size = row ? allocation.height : allocation.width;
- span = row ? attach.height : attach.width;
-
- return base + (trans_point * span / size);
- }
- }
-
- g_list_free (children);
-
- return -1;
-}
-
-
-static gboolean
-glade_gtk_grid_point_crosses_threshold (GtkGrid *grid,
- gboolean row,
- gint num,
- GladeGridDir dir,
- gint point)
-{
- GladeGridAttachments attach;
- GtkAllocation allocation;
- GList *list, *children;
- gint span, trans_point, size, rowcol_size, base;
-
- children = gtk_container_get_children (GTK_CONTAINER (grid));
-
- for (list = children; list; list = list->next)
- {
- GtkWidget *widget = list->data;
-
- glade_gtk_grid_get_child_attachments (GTK_WIDGET (grid), widget, &attach);
-
- /* Find any widget in our row/column
- */
- if ((row && num >= attach.top_attach && num < attach.top_attach + attach.height) ||
- (!row && num >= attach.left_attach && num < attach.left_attach + attach.width))
- {
-
- if (row)
- gtk_widget_translate_coordinates (GTK_WIDGET (grid), widget, 0, point, NULL, &trans_point);
- else
- gtk_widget_translate_coordinates (GTK_WIDGET (grid), widget, point, 0, &trans_point, NULL);
-
- span = row ? attach.height : attach.width;
- gtk_widget_get_allocation (widget, &allocation);
- size = row ? allocation.height : allocation.width;
-
- base = row ? attach.top_attach : attach.left_attach;
- rowcol_size = size / span;
- trans_point -= (num - base) * rowcol_size;
-
-#if 0
- g_print ("dir: %s, widget size: %d, rowcol size: %d, "
- "requested rowcol: %d, widget base rowcol: %d, trim: %d, "
- "widget point: %d, thresh: %d\n",
- dir == DIR_UP ? "up" : dir == DIR_DOWN ? "down" :
- dir == DIR_LEFT ? "left" : "right",
- size, rowcol_size, num, base, (num - base) * rowcol_size,
- trans_point,
- dir == DIR_UP || dir == DIR_LEFT ?
- (rowcol_size / 2) : (rowcol_size / 2));
-#endif
- switch (dir)
- {
- case DIR_UP:
- case DIR_LEFT:
- return trans_point <= (rowcol_size / 2);
- case DIR_DOWN:
- case DIR_RIGHT:
- return trans_point >= (rowcol_size / 2);
- default:
- break;
- }
- }
-
- }
-
- g_list_free (children);
-
- return FALSE;
-}
-
-static gboolean
-glade_gtk_grid_get_attachments (GladeFixed *fixed,
- GtkGrid *grid,
- GdkRectangle *rect,
- GladeGridChild *configure)
-{
- GladeWidget *widget = GLADE_WIDGET (fixed);
- gint center_x, center_y, row, column;
- guint n_columns, n_rows;
-
- center_x = rect->x + (rect->width / 2);
- center_y = rect->y + (rect->height / 2);
-
- column = glade_gtk_grid_get_row_col_from_point (grid, FALSE, center_x);
- row = glade_gtk_grid_get_row_col_from_point (grid, TRUE, center_y);
-
- /* its a start, now try to grow when the rect extents
- * reach at least half way into the next row/column
- */
- configure->left_attach = column;
- configure->width = 1;
- configure->top_attach = row;
- configure->height = 1;
-
- glade_widget_property_get (widget, "n-columns", &n_columns);
- glade_widget_property_get (widget, "n-rows", &n_rows);
-
- if (column >= 0 && row >= 0)
- {
- /* Check and expand left
- */
- while (configure->left_attach > 0)
- {
- if (rect->x < fixed->child_x_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_LEFT (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_grid_point_crosses_threshold
- (grid, FALSE, configure->left_attach - 1,
- DIR_LEFT, rect->x) == FALSE)
- break;
-
- configure->left_attach--;
- }
-
- /* Check and expand right
- */
- while (configure->left_attach + configure->width < n_columns)
- {
- if (rect->x + rect->width >
- fixed->child_x_origin + fixed->child_width_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_RIGHT (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_grid_point_crosses_threshold
- (grid, FALSE, configure->left_attach + configure->width,
- DIR_RIGHT, rect->x + rect->width) == FALSE)
- break;
-
- configure->width++;
- }
-
- /* Check and expand top
- */
- while (configure->top_attach > 0)
- {
- if (rect->y < fixed->child_y_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_TOP (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_grid_point_crosses_threshold
- (grid, TRUE, configure->top_attach - 1,
- DIR_UP, rect->y) == FALSE)
- break;
-
- configure->top_attach--;
- }
-
- /* Check and expand bottom
- */
- while (configure->top_attach + configure->height < n_rows)
- {
- if (rect->y + rect->height >
- fixed->child_y_origin + fixed->child_height_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_BOTTOM (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_grid_point_crosses_threshold
- (grid, TRUE, configure->top_attach + configure->height,
- DIR_DOWN, rect->y + rect->height) == FALSE)
- break;
-
- configure->height++;
- }
- }
-
- return column >= 0 && row >= 0;
-}
-
-static gboolean
-glade_gtk_grid_configure_child (GladeFixed * fixed,
- GladeWidget * child,
- GdkRectangle * rect, GtkWidget * grid)
-{
- GladeGridChild configure = { child, };
-
- /* Sometimes we are unable to find a widget in the appropriate column,
- * usually because a placeholder hasnt had its size allocation yet.
- */
- if (glade_gtk_grid_get_attachments (fixed, GTK_GRID (grid), rect, &configure))
- {
- if (memcmp (&configure, &grid_cur_attach, sizeof (GladeGridChild)) != 0)
- {
-
- glade_property_push_superuser ();
- glade_widget_pack_property_set (child, "left-attach",
- configure.left_attach);
- glade_widget_pack_property_set (child, "width",
- configure.width);
- glade_widget_pack_property_set (child, "top-attach",
- configure.top_attach);
- glade_widget_pack_property_set (child, "height",
- configure.height);
- glade_property_pop_superuser ();
-
- memcpy (&grid_cur_attach, &configure, sizeof (GladeGridChild));
- }
- }
- return TRUE;
-}
-
-
-static gboolean
-glade_gtk_grid_configure_begin (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * grid)
-{
- grid_edit.widget = child;
-
- glade_widget_pack_property_get (child, "left-attach", &grid_edit.left_attach);
- glade_widget_pack_property_get (child, "width", &grid_edit.width);
- glade_widget_pack_property_get (child, "top-attach", &grid_edit.top_attach);
- glade_widget_pack_property_get (child, "height", &grid_edit.height);
-
- memcpy (&grid_cur_attach, &grid_edit, sizeof (GladeGridChild));
-
- return TRUE;
-}
-
-static gboolean
-glade_gtk_grid_configure_end (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * grid)
-{
- GladeGridChild new_child = { child, };
-
- glade_widget_pack_property_get (child, "left-attach", &new_child.left_attach);
- glade_widget_pack_property_get (child, "width", &new_child.width);
- glade_widget_pack_property_get (child, "top-attach", &new_child.top_attach);
- glade_widget_pack_property_get (child, "height", &new_child.height);
-
- /* Compare the meaningfull part of the current edit. */
- if (memcmp (&new_child, &grid_edit, sizeof (GladeGridChild)) != 0)
- {
- GValue left_attach_value = { 0, };
- GValue width_attach_value = { 0, };
- GValue top_attach_value = { 0, };
- GValue height_attach_value = { 0, };
-
- GValue new_left_attach_value = { 0, };
- GValue new_width_attach_value = { 0, };
- GValue new_top_attach_value = { 0, };
- GValue new_height_attach_value = { 0, };
-
- GladeProperty *left_attach_prop, *width_attach_prop,
- *top_attach_prop, *height_attach_prop;
-
- left_attach_prop = glade_widget_get_pack_property (child, "left-attach");
- width_attach_prop = glade_widget_get_pack_property (child, "width");
- top_attach_prop = glade_widget_get_pack_property (child, "top-attach");
- height_attach_prop = glade_widget_get_pack_property (child, "height");
-
- g_return_val_if_fail (GLADE_IS_PROPERTY (left_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (width_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (top_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (height_attach_prop), FALSE);
-
- glade_property_get_value (left_attach_prop, &new_left_attach_value);
- glade_property_get_value (width_attach_prop, &new_width_attach_value);
- glade_property_get_value (top_attach_prop, &new_top_attach_value);
- glade_property_get_value (height_attach_prop, &new_height_attach_value);
-
- g_value_init (&left_attach_value, G_TYPE_INT);
- g_value_init (&width_attach_value, G_TYPE_INT);
- g_value_init (&top_attach_value, G_TYPE_INT);
- g_value_init (&height_attach_value, G_TYPE_INT);
-
- g_value_set_int (&left_attach_value, grid_edit.left_attach);
- g_value_set_int (&width_attach_value, grid_edit.width);
- g_value_set_int (&top_attach_value, grid_edit.top_attach);
- g_value_set_int (&height_attach_value, grid_edit.height);
-
- glade_command_push_group (_("Placing %s inside %s"),
- glade_widget_get_name (child),
- glade_widget_get_name (GLADE_WIDGET (fixed)));
- glade_command_set_properties
- (left_attach_prop, &left_attach_value, &new_left_attach_value,
- width_attach_prop, &width_attach_value, &new_width_attach_value,
- top_attach_prop, &top_attach_value, &new_top_attach_value,
- height_attach_prop, &height_attach_value, &new_height_attach_value,
- NULL);
- glade_command_pop_group ();
-
- g_value_unset (&left_attach_value);
- g_value_unset (&width_attach_value);
- g_value_unset (&top_attach_value);
- g_value_unset (&height_attach_value);
- g_value_unset (&new_left_attach_value);
- g_value_unset (&new_width_attach_value);
- g_value_unset (&new_top_attach_value);
- g_value_unset (&new_height_attach_value);
- }
-
- return TRUE;
-}
-
static void
glade_gtk_grid_parse_finished (GladeProject *project, GObject *container)
{
@@ -456,15 +105,6 @@ glade_gtk_grid_post_create (GladeWidgetAdaptor * adaptor,
{
GladeWidget *gwidget = glade_widget_get_from_gobject (container);
- g_signal_connect (G_OBJECT (gwidget), "configure-child",
- G_CALLBACK (glade_gtk_grid_configure_child), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-begin",
- G_CALLBACK (glade_gtk_grid_configure_begin), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-end",
- G_CALLBACK (glade_gtk_grid_configure_end), container);
-
if (reason == GLADE_CREATE_LOAD)
g_signal_connect (glade_widget_get_project (gwidget), "parse-finished",
G_CALLBACK (glade_gtk_grid_parse_finished),
@@ -472,13 +112,13 @@ glade_gtk_grid_post_create (GladeWidgetAdaptor * adaptor,
}
static gboolean
-glade_gtk_grid_has_child (GtkGrid * grid, guint left_attach,
- guint top_attach)
+glade_gtk_grid_has_child (GtkGrid *grid,
+ GList *children,
+ guint left_attach,
+ guint top_attach)
{
- GList *list, *children;
gboolean ret = FALSE;
-
- children = gtk_container_get_children (GTK_CONTAINER (grid));
+ GList *list;
for (list = children; list && list->data; list = list->next)
{
@@ -495,8 +135,6 @@ glade_gtk_grid_has_child (GtkGrid * grid, guint left_attach,
}
}
- g_list_free (children);
-
return ret;
}
@@ -531,34 +169,38 @@ glade_gtk_grid_widget_exceeds_bounds (GtkGrid *grid, gint n_rows, gint n_cols)
}
static void
-glade_gtk_grid_refresh_placeholders (GtkGrid * grid)
+glade_gtk_grid_refresh_placeholders (GtkGrid *grid)
{
GladeWidget *widget;
+ GtkContainer *container;
GList *list, *children;
guint n_columns, n_rows;
gint i, j;
- widget = glade_widget_get_from_gobject (GTK_WIDGET (grid));
+ widget = glade_widget_get_from_gobject (grid);
glade_widget_property_get (widget, "n-columns", &n_columns);
glade_widget_property_get (widget, "n-rows", &n_rows);
- children = gtk_container_get_children (GTK_CONTAINER (grid));
+ container = GTK_CONTAINER (grid);
+ children = gtk_container_get_children (container);
for (list = children; list && list->data; list = list->next)
{
- if (GLADE_IS_PLACEHOLDER (list->data))
- gtk_container_remove (GTK_CONTAINER (grid), GTK_WIDGET (list->data));
+ GtkWidget *child = list->data;
+ if (GLADE_IS_PLACEHOLDER (child))
+ gtk_container_remove (container, child);
}
g_list_free (children);
+ children = gtk_container_get_children (container);
+
for (i = 0; i < n_columns; i++)
for (j = 0; j < n_rows; j++)
- if (glade_gtk_grid_has_child (grid, i, j) == FALSE)
- {
- gtk_grid_attach (grid, glade_placeholder_new (),
- i, j, 1, 1);
- }
- gtk_container_check_resize (GTK_CONTAINER (grid));
+ if (glade_gtk_grid_has_child (grid, children, i, j) == FALSE)
+ gtk_grid_attach (grid, glade_placeholder_new (), i, j, 1, 1);
+
+ gtk_container_check_resize (container);
+ g_list_free (children);
}
static void
@@ -609,20 +251,20 @@ glade_gtk_grid_remove_child (GladeWidgetAdaptor * adaptor,
}
void
-glade_gtk_grid_replace_child (GladeWidgetAdaptor * adaptor,
- GtkWidget * container,
- GtkWidget * current, GtkWidget * new_widget)
+glade_gtk_grid_replace_child (GladeWidgetAdaptor *adaptor,
+ GObject *container,
+ GObject *current,
+ GObject *new_widget)
{
g_return_if_fail (GTK_IS_GRID (container));
g_return_if_fail (GTK_IS_WIDGET (current));
g_return_if_fail (GTK_IS_WIDGET (new_widget));
/* Chain Up */
- GWA_GET_CLASS
- (GTK_TYPE_CONTAINER)->replace_child (adaptor,
- G_OBJECT (container),
- G_OBJECT (current),
- G_OBJECT (new_widget));
+ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->replace_child (adaptor,
+ container,
+ current,
+ new_widget);
/* If we are replacing a GladeWidget, we must refresh placeholders
* because the widget may have spanned multiple rows/columns, we must
@@ -631,9 +273,8 @@ glade_gtk_grid_replace_child (GladeWidgetAdaptor * adaptor,
* (since the remaining placeholder templates no longer exist, only the
* first pasted widget would have proper packing properties).
*/
- if (glade_widget_get_from_gobject (new_widget) == NULL)
+ if (!GLADE_IS_PLACEHOLDER (new_widget))
glade_gtk_grid_refresh_placeholders (GTK_GRID (container));
-
}
static void
diff --git a/plugins/gtk+/glade-gtk-table.c b/plugins/gtk+/glade-gtk-table.c
index e61193b8..f93893c3 100644
--- a/plugins/gtk+/glade-gtk-table.c
+++ b/plugins/gtk+/glade-gtk-table.c
@@ -47,9 +47,6 @@ typedef enum
DIR_RIGHT
} GladeTableDir;
-static GladeGtkTableChild table_edit = { 0, };
-static GladeGtkTableChild table_cur_attach = { 0, };
-
static void
glade_gtk_table_get_child_attachments (GtkWidget * table,
GtkWidget * child,
@@ -70,454 +67,6 @@ glade_gtk_table_get_child_attachments (GtkWidget * table,
tchild->bottom_attach = bottom;
}
-
-/* Takes a point (x or y depending on 'row') relative to
- * table, and returns the row or column in which the point
- * was found.
- */
-static gint
-glade_gtk_table_get_row_col_from_point (GtkTable * table,
- gboolean row, gint point)
-{
- GtkTableChild tchild;
- GtkAllocation allocation;
- GList *list, *children;
- gint span, trans_point, size, base, end;
-
- children = gtk_container_get_children (GTK_CONTAINER (table));
-
- for (list = children; list; list = list->next)
- {
- glade_gtk_table_get_child_attachments (GTK_WIDGET (table),
- GTK_WIDGET (list->data), &tchild);
-
- if (row)
- gtk_widget_translate_coordinates
- (GTK_WIDGET (table), tchild.widget, 0, point, NULL, &trans_point);
- else
- gtk_widget_translate_coordinates
- (GTK_WIDGET (table), tchild.widget, point, 0, &trans_point, NULL);
-
- gtk_widget_get_allocation (tchild.widget, &allocation);
- /* Find any widget in our row/column
- */
- end = row ? allocation.height : allocation.width;
-
- if (trans_point >= 0 &&
- /* should be trans_point < end ... test FIXME ! */
- trans_point < end)
- {
- base = row ? tchild.top_attach : tchild.left_attach;
- size = row ? allocation.height : allocation.width;
- span = row ? (tchild.bottom_attach - tchild.top_attach) :
- (tchild.right_attach - tchild.left_attach);
-
- return base + (trans_point * span / size);
- }
- }
- g_list_free (children);
-
- return -1;
-}
-
-
-static gboolean
-glade_gtk_table_point_crosses_threshold (GtkTable * table,
- gboolean row,
- gint num,
- GladeTableDir dir, gint point)
-{
-
- GtkTableChild tchild;
- GtkAllocation allocation;
- GList *list, *children;
- gint span, trans_point, size, rowcol_size, base;
-
- children = gtk_container_get_children (GTK_CONTAINER (table));
-
- for (list = children; list; list = list->next)
- {
- glade_gtk_table_get_child_attachments (GTK_WIDGET (table),
- GTK_WIDGET (list->data), &tchild);
-
- /* Find any widget in our row/column
- */
- if ((row && num >= tchild.top_attach && num < tchild.bottom_attach) ||
- (!row && num >= tchild.left_attach && num < tchild.right_attach))
- {
-
- if (row)
- gtk_widget_translate_coordinates
- (GTK_WIDGET (table), tchild.widget,
- 0, point, NULL, &trans_point);
- else
- gtk_widget_translate_coordinates
- (GTK_WIDGET (table), tchild.widget,
- point, 0, &trans_point, NULL);
-
- span = row ? (tchild.bottom_attach - tchild.top_attach) :
- (tchild.right_attach - tchild.left_attach);
- gtk_widget_get_allocation (tchild.widget, &allocation);
- size = row ? allocation.height : allocation.width;
-
- base = row ? tchild.top_attach : tchild.left_attach;
- rowcol_size = size / span;
- trans_point -= (num - base) * rowcol_size;
-
-#if 0
- g_print ("dir: %s, widget size: %d, rowcol size: %d, "
- "requested rowcol: %d, widget base rowcol: %d, trim: %d, "
- "widget point: %d, thresh: %d\n",
- dir == DIR_UP ? "up" : dir == DIR_DOWN ? "down" :
- dir == DIR_LEFT ? "left" : "right",
- size, rowcol_size, num, base, (num - base) * rowcol_size,
- trans_point,
- dir == DIR_UP || dir == DIR_LEFT ?
- (rowcol_size / 2) : (rowcol_size / 2));
-#endif
- switch (dir)
- {
- case DIR_UP:
- case DIR_LEFT:
- return trans_point <= (rowcol_size / 2);
- case DIR_DOWN:
- case DIR_RIGHT:
- return trans_point >= (rowcol_size / 2);
- default:
- break;
- }
- }
-
- }
-
- g_list_free (children);
-
- return FALSE;
-}
-
-static gboolean
-glade_gtk_table_get_attachments (GladeFixed * fixed,
- GtkTable * table,
- GdkRectangle * rect,
- GladeGtkTableChild * configure)
-{
- gint center_x, center_y, row, column;
- guint n_columns, n_rows;
- center_x = rect->x + (rect->width / 2);
- center_y = rect->y + (rect->height / 2);
-
- column = glade_gtk_table_get_row_col_from_point (table, FALSE, center_x);
-
- row = glade_gtk_table_get_row_col_from_point (table, TRUE, center_y);
-
- /* its a start, now try to grow when the rect extents
- * reach at least half way into the next row/column
- */
- configure->left_attach = column;
- configure->right_attach = column + 1;
- configure->top_attach = row;
- configure->bottom_attach = row + 1;
-
- if (column >= 0 && row >= 0)
- {
-
- g_object_get (table, "n-columns", &n_columns, "n-rows", &n_rows, NULL);
-
- /* Check and expand left
- */
- while (configure->left_attach > 0)
- {
- if (rect->x < fixed->child_x_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_LEFT (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_table_point_crosses_threshold
- (table, FALSE, configure->left_attach - 1,
- DIR_LEFT, rect->x) == FALSE)
- break;
-
- configure->left_attach--;
- }
-
- /* Check and expand right
- */
- while (configure->right_attach < n_columns)
- {
- if (rect->x + rect->width >
- fixed->child_x_origin + fixed->child_width_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_RIGHT (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_table_point_crosses_threshold
- (table, FALSE, configure->right_attach,
- DIR_RIGHT, rect->x + rect->width) == FALSE)
- break;
-
- configure->right_attach++;
- }
-
- /* Check and expand top
- */
- while (configure->top_attach > 0)
- {
- if (rect->y < fixed->child_y_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_TOP (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_table_point_crosses_threshold
- (table, TRUE, configure->top_attach - 1,
- DIR_UP, rect->y) == FALSE)
- break;
-
- configure->top_attach--;
- }
-
- /* Check and expand bottom
- */
- while (configure->bottom_attach < n_rows)
- {
- if (rect->y + rect->height >
- fixed->child_y_origin + fixed->child_height_origin &&
- fixed->operation != GLADE_CURSOR_DRAG &&
- GLADE_FIXED_CURSOR_BOTTOM (fixed->operation) == FALSE)
- break;
-
- if (glade_gtk_table_point_crosses_threshold
- (table, TRUE, configure->bottom_attach,
- DIR_DOWN, rect->y + rect->height) == FALSE)
- break;
-
- configure->bottom_attach++;
- }
- }
-
- /* Keep the same row/col span when performing a drag
- */
- if (fixed->operation == GLADE_CURSOR_DRAG)
- {
- gint col_span = table_edit.right_attach - table_edit.left_attach;
- gint row_span = table_edit.bottom_attach - table_edit.top_attach;
-
- if (rect->x < fixed->child_x_origin)
- configure->right_attach = configure->left_attach + col_span;
- else
- configure->left_attach = configure->right_attach - col_span;
-
- if (rect->y < fixed->child_y_origin)
- configure->bottom_attach = configure->top_attach + row_span;
- else
- configure->top_attach = configure->bottom_attach - row_span;
- }
- else if (fixed->operation == GLADE_CURSOR_RESIZE_RIGHT)
- {
- configure->left_attach = table_edit.left_attach;
- configure->top_attach = table_edit.top_attach;
- configure->bottom_attach = table_edit.bottom_attach;
- }
- else if (fixed->operation == GLADE_CURSOR_RESIZE_LEFT)
- {
- configure->right_attach = table_edit.right_attach;
- configure->top_attach = table_edit.top_attach;
- configure->bottom_attach = table_edit.bottom_attach;
- }
- else if (fixed->operation == GLADE_CURSOR_RESIZE_TOP)
- {
- configure->left_attach = table_edit.left_attach;
- configure->right_attach = table_edit.right_attach;
- configure->bottom_attach = table_edit.bottom_attach;
- }
- else if (fixed->operation == GLADE_CURSOR_RESIZE_BOTTOM)
- {
- configure->left_attach = table_edit.left_attach;
- configure->right_attach = table_edit.right_attach;
- configure->top_attach = table_edit.top_attach;
- }
-
- return column >= 0 && row >= 0;
-}
-
-static gboolean
-glade_gtk_table_configure_child (GladeFixed * fixed,
- GladeWidget * child,
- GdkRectangle * rect, GtkWidget * table)
-{
- GladeGtkTableChild configure = { child, };
-
- /* Sometimes we are unable to find a widget in the appropriate column,
- * usually because a placeholder hasnt had its size allocation yet.
- */
- if (glade_gtk_table_get_attachments
- (fixed, GTK_TABLE (table), rect, &configure))
- {
- if (memcmp (&configure, &table_cur_attach, sizeof (GladeGtkTableChild)) != 0)
- {
-
- glade_property_push_superuser ();
- glade_widget_pack_property_set (child, "left-attach",
- configure.left_attach);
- glade_widget_pack_property_set (child, "right-attach",
- configure.right_attach);
- glade_widget_pack_property_set (child, "top-attach",
- configure.top_attach);
- glade_widget_pack_property_set (child, "bottom-attach",
- configure.bottom_attach);
- glade_property_pop_superuser ();
-
- memcpy (&table_cur_attach, &configure, sizeof (GladeGtkTableChild));
- }
- }
- return TRUE;
-}
-
-
-static gboolean
-glade_gtk_table_configure_begin (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * table)
-{
-
- table_edit.widget = child;
-
- glade_widget_pack_property_get (child, "left-attach",
- &table_edit.left_attach);
- glade_widget_pack_property_get (child, "right-attach",
- &table_edit.right_attach);
- glade_widget_pack_property_get (child, "top-attach", &table_edit.top_attach);
- glade_widget_pack_property_get (child, "bottom-attach",
- &table_edit.bottom_attach);
-
- memcpy (&table_cur_attach, &table_edit, sizeof (GladeGtkTableChild));
-
- return TRUE;
-}
-
-static gboolean
-glade_gtk_table_configure_end (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * table)
-{
- GladeGtkTableChild new_child = { child, };
-
- glade_widget_pack_property_get (child, "left-attach", &new_child.left_attach);
- glade_widget_pack_property_get (child, "right-attach",
- &new_child.right_attach);
- glade_widget_pack_property_get (child, "top-attach", &new_child.top_attach);
- glade_widget_pack_property_get (child, "bottom-attach",
- &new_child.bottom_attach);
-
- /* Compare the meaningfull part of the current edit. */
- if (memcmp (&new_child, &table_edit, sizeof (GladeGtkTableChild)) != 0)
- {
- GValue left_attach_value = { 0, };
- GValue right_attach_value = { 0, };
- GValue top_attach_value = { 0, };
- GValue bottom_attach_value = { 0, };
-
- GValue new_left_attach_value = { 0, };
- GValue new_right_attach_value = { 0, };
- GValue new_top_attach_value = { 0, };
- GValue new_bottom_attach_value = { 0, };
-
- GladeProperty *left_attach_prop, *right_attach_prop,
- *top_attach_prop, *bottom_attach_prop;
-
- left_attach_prop = glade_widget_get_pack_property (child, "left-attach");
- right_attach_prop =
- glade_widget_get_pack_property (child, "right-attach");
- top_attach_prop = glade_widget_get_pack_property (child, "top-attach");
- bottom_attach_prop =
- glade_widget_get_pack_property (child, "bottom-attach");
-
- g_return_val_if_fail (GLADE_IS_PROPERTY (left_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (right_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (top_attach_prop), FALSE);
- g_return_val_if_fail (GLADE_IS_PROPERTY (bottom_attach_prop), FALSE);
-
- glade_property_get_value (left_attach_prop, &new_left_attach_value);
- glade_property_get_value (right_attach_prop, &new_right_attach_value);
- glade_property_get_value (top_attach_prop, &new_top_attach_value);
- glade_property_get_value (bottom_attach_prop, &new_bottom_attach_value);
-
- g_value_init (&left_attach_value, G_TYPE_UINT);
- g_value_init (&right_attach_value, G_TYPE_UINT);
- g_value_init (&top_attach_value, G_TYPE_UINT);
- g_value_init (&bottom_attach_value, G_TYPE_UINT);
-
- g_value_set_uint (&left_attach_value, table_edit.left_attach);
- g_value_set_uint (&right_attach_value, table_edit.right_attach);
- g_value_set_uint (&top_attach_value, table_edit.top_attach);
- g_value_set_uint (&bottom_attach_value, table_edit.bottom_attach);
-
- glade_command_push_group (_("Placing %s inside %s"),
- glade_widget_get_name (child),
- glade_widget_get_name (GLADE_WIDGET (fixed)));
- glade_command_set_properties
- (left_attach_prop, &left_attach_value, &new_left_attach_value,
- right_attach_prop, &right_attach_value, &new_right_attach_value,
- top_attach_prop, &top_attach_value, &new_top_attach_value,
- bottom_attach_prop, &bottom_attach_value, &new_bottom_attach_value,
- NULL);
- glade_command_pop_group ();
-
- g_value_unset (&left_attach_value);
- g_value_unset (&right_attach_value);
- g_value_unset (&top_attach_value);
- g_value_unset (&bottom_attach_value);
- g_value_unset (&new_left_attach_value);
- g_value_unset (&new_right_attach_value);
- g_value_unset (&new_top_attach_value);
- g_value_unset (&new_bottom_attach_value);
- }
-
- return TRUE;
-}
-
-void
-glade_gtk_table_post_create (GladeWidgetAdaptor * adaptor,
- GObject * container, GladeCreateReason reason)
-{
- GladeWidget *gwidget = glade_widget_get_from_gobject (container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-child",
- G_CALLBACK (glade_gtk_table_configure_child), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-begin",
- G_CALLBACK (glade_gtk_table_configure_begin), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-end",
- G_CALLBACK (glade_gtk_table_configure_end), container);
-}
-
-static gboolean
-glade_gtk_table_has_child (GtkTable * table, guint left_attach,
- guint top_attach)
-{
- GList *list, *children;
- gboolean ret = FALSE;
-
- children = gtk_container_get_children (GTK_CONTAINER (table));
-
- for (list = children; list && list->data; list = list->next)
- {
- GtkTableChild child;
-
- glade_gtk_table_get_child_attachments (GTK_WIDGET (table),
- GTK_WIDGET (list->data), &child);
-
- if (left_attach >= child.left_attach && left_attach < child.right_attach
- && top_attach >= child.top_attach && top_attach < child.bottom_attach)
- {
- ret = TRUE;
- break;
- }
- }
-
- g_list_free (children);
-
- return ret;
-}
-
static gboolean
glade_gtk_table_widget_exceeds_bounds (GtkTable * table, gint n_rows,
gint n_cols)
@@ -697,7 +246,7 @@ glade_gtk_table_replace_child (GladeWidgetAdaptor * adaptor,
* (since the remaining placeholder templates no longer exist, only the
* first pasted widget would have proper packing properties).
*/
- if (glade_widget_get_from_gobject (new_widget) == NULL)
+ if (!GLADE_IS_PLACEHOLDER (new_widget))
glade_gtk_table_refresh_placeholders (GTK_TABLE (container));
}
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index 510c592a..f095994a 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -1447,230 +1447,6 @@ glade_gtk_create_fixed_widget (GladeWidgetAdaptor * adaptor,
first_property_name, var_args);
}
-typedef struct
-{
- GtkWidget *widget;
- gint position;
-} GladeGtkBoxChild;
-
-static GList *glade_gtk_box_original_positions = NULL;
-
-static gboolean
-glade_gtk_box_configure_child (GladeFixed * fixed,
- GladeWidget * child,
- GdkRectangle * rect, GtkWidget * box)
-{
- GList *list, *children;
- GtkWidget *bchild;
- GtkAllocation allocation, bchild_allocation;
- gint point, trans_point, span,
- iter_span, position, old_position, offset, orig_offset;
- gboolean found = FALSE;
-
- gtk_widget_get_allocation (GTK_WIDGET (glade_widget_get_object (child)), &allocation);
- if (GTK_IS_HBOX (box) || GTK_IS_HBUTTON_BOX (box))
- {
- point = fixed->mouse_x;
- span = allocation.width;
- offset = rect->x;
- orig_offset = fixed->child_x_origin;
- }
- else
- {
- point = fixed->mouse_y;
- span = allocation.height;
- offset = rect->y;
- orig_offset = fixed->child_y_origin;
- }
-
- glade_widget_pack_property_get (child, "position", &old_position);
-
- children = gtk_container_get_children (GTK_CONTAINER (box));
-
- for (list = children; list; list = list->next)
- {
- bchild = list->data;
-
- if (bchild == GTK_WIDGET (glade_widget_get_object (child)))
- continue;
-
- /* Find the widget in the box where the center of
- * this rectangle fits... and set the position to that
- * position.
- */
-
- gtk_widget_get_allocation (GTK_WIDGET (bchild), &bchild_allocation);
- if (GTK_IS_HBOX (box) || GTK_IS_HBUTTON_BOX (box))
- {
- gtk_widget_translate_coordinates
- (GTK_WIDGET (box), bchild, point, 0, &trans_point, NULL);
-
- iter_span = bchild_allocation.width;
- }
- else
- {
- gtk_widget_translate_coordinates
- (GTK_WIDGET (box), bchild, 0, point, NULL, &trans_point);
- iter_span = bchild_allocation.height;
- }
-
-#if 0
- gtk_container_child_get (GTK_CONTAINER (box),
- bchild, "position", &position, NULL);
- g_print ("widget: %p pos %d, point %d, trans_point %d, iter_span %d\n",
- bchild, position, point, trans_point, iter_span);
-#endif
-
- if (iter_span <= span)
- {
- found = trans_point >= 0 && trans_point < iter_span;
- }
- else
- {
- if (offset > orig_offset)
- found = trans_point >= iter_span - span && trans_point < iter_span;
- else if (offset < orig_offset)
- found = trans_point >= 0 && trans_point < span;
- }
-
- if (found)
- {
- gtk_container_child_get (GTK_CONTAINER (box),
- bchild, "position", &position, NULL);
-
-#if 0
- g_print ("setting position of %s from %d to %d, "
- "(point %d iter_span %d)\n",
- child->name, old_position, position, trans_point, iter_span);
-#endif
-
- glade_widget_pack_property_set (child, "position", position);
-
- break;
- }
-
- }
-
- g_list_free (children);
-
- return TRUE;
-}
-
-static gboolean
-glade_gtk_box_configure_begin (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * box)
-{
- GList *list, *children;
- GtkWidget *bchild;
-
- g_assert (glade_gtk_box_original_positions == NULL);
-
- children = gtk_container_get_children (GTK_CONTAINER (box));
-
- for (list = children; list; list = list->next)
- {
- GladeGtkBoxChild *gbchild;
- GladeWidget *gchild;
-
- bchild = list->data;
- if ((gchild = glade_widget_get_from_gobject (bchild)) == NULL)
- continue;
-
- gbchild = g_new0 (GladeGtkBoxChild, 1);
- gbchild->widget = bchild;
- glade_widget_pack_property_get (gchild, "position", &gbchild->position);
-
- glade_gtk_box_original_positions =
- g_list_prepend (glade_gtk_box_original_positions, gbchild);
- }
-
- g_list_free (children);
-
- return TRUE;
-}
-
-static gboolean
-glade_gtk_box_configure_end (GladeFixed * fixed,
- GladeWidget * child, GtkWidget * box)
-{
- GList *list, *l, *children;
- GList *prop_list = NULL;
-
- children = gtk_container_get_children (GTK_CONTAINER (box));
-
- for (list = children; list; list = list->next)
- {
- GtkWidget *bchild = list->data;
-
- for (l = glade_gtk_box_original_positions; l; l = l->next)
- {
- GladeGtkBoxChild *gbchild = l->data;
- GladeWidget *gchild = glade_widget_get_from_gobject (gbchild->widget);
-
-
- if (bchild == gbchild->widget)
- {
- GCSetPropData *prop_data = g_new0 (GCSetPropData, 1);
- prop_data->property =
- glade_widget_get_pack_property (gchild, "position");
-
- prop_data->old_value = g_new0 (GValue, 1);
- prop_data->new_value = g_new0 (GValue, 1);
-
- glade_property_get_value (prop_data->property,
- prop_data->new_value);
-
- g_value_init (prop_data->old_value, G_TYPE_INT);
- g_value_set_int (prop_data->old_value, gbchild->position);
-
- prop_list = g_list_prepend (prop_list, prop_data);
- break;
- }
- }
- }
-
- g_list_free (children);
-
- glade_command_push_group (_("Ordering children of %s"),
- glade_widget_get_name (GLADE_WIDGET (fixed)));
- glade_property_push_superuser ();
- if (prop_list)
- glade_command_set_properties_list (glade_widget_get_project (GLADE_WIDGET (fixed)),
- prop_list);
- glade_property_pop_superuser ();
- glade_command_pop_group ();
-
- for (l = glade_gtk_box_original_positions; l; l = l->next)
- g_free (l->data);
-
- glade_gtk_box_original_positions =
- (g_list_free (glade_gtk_box_original_positions), NULL);
-
-
- return TRUE;
-}
-
-void
-glade_gtk_box_post_create (GladeWidgetAdaptor * adaptor,
- GObject * container, GladeCreateReason reason)
-{
- GladeWidget *gwidget = glade_widget_get_from_gobject (container);
-
- /* Implement drag in GtkBox but not resize.
- */
- g_object_set (gwidget, "can-resize", FALSE, NULL);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-child",
- G_CALLBACK (glade_gtk_box_configure_child), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-begin",
- G_CALLBACK (glade_gtk_box_configure_begin), container);
-
- g_signal_connect (G_OBJECT (gwidget), "configure-end",
- G_CALLBACK (glade_gtk_box_configure_end), container);
-
-}
-
static gint
sort_box_children (GtkWidget * widget_a, GtkWidget * widget_b)
{
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index ae21c5bc..f6d20cf1 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -321,8 +321,6 @@ embedded in another object</_tooltip>
</glade-widget-class>
<glade-widget-class name="GtkBox" generic-name="box" _title="Box">
- <create-widget-function>glade_gtk_create_fixed_widget</create-widget-function>
- <post-create-function>glade_gtk_box_post_create</post-create-function>
<get-children-function>glade_gtk_box_get_children</get-children-function>
<set-property-function>glade_gtk_box_set_property</set-property-function>
<get-property-function>glade_gtk_box_get_property</get-property-function>
@@ -1431,8 +1429,6 @@ embedded in another object</_tooltip>
</glade-widget-class>
<glade-widget-class name="GtkTable" generic-name="table" _title="Table">
- <create-widget-function>glade_gtk_create_fixed_widget</create-widget-function>
- <post-create-function>glade_gtk_table_post_create</post-create-function>
<child-set-property-function>glade_gtk_table_set_child_property</child-set-property-function>
<child-verify-function>glade_gtk_table_child_verify_property</child-verify-function>
<get-children-function>glade_gtk_table_get_children</get-children-function>
@@ -1476,7 +1472,6 @@ embedded in another object</_tooltip>
</glade-widget-class>
<glade-widget-class name="GtkGrid" generic-name="grid" _title="Grid">
- <create-widget-function>glade_gtk_create_fixed_widget</create-widget-function>
<post-create-function>glade_gtk_grid_post_create</post-create-function>
<child-set-property-function>glade_gtk_grid_set_child_property</child-set-property-function>
<child-verify-function>glade_gtk_grid_child_verify_property</child-verify-function>