forked from AuroraMiddleware/gtk
Fixes for #130370, based on a patch by Michael Meeks:
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de> Fixes for #130370, based on a patch by Michael Meeks: * gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to adjust cell positions and recalculate row and column counts after removing an item. * gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove. * gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when appending items. * gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append, to avoid an unintended recursion.
This commit is contained in:
parent
1c28c446fc
commit
d7bfabebdb
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
|||||||
|
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fixes for #130370, based on a patch by Michael Meeks:
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to
|
||||||
|
adjust cell positions and recalculate row and column counts after
|
||||||
|
removing an item.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when
|
||||||
|
appending items.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append,
|
||||||
|
to avoid an unintended recursion.
|
||||||
|
|
||||||
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Fix #131418.
|
Fix #131418.
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fixes for #130370, based on a patch by Michael Meeks:
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to
|
||||||
|
adjust cell positions and recalculate row and column counts after
|
||||||
|
removing an item.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when
|
||||||
|
appending items.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append,
|
||||||
|
to avoid an unintended recursion.
|
||||||
|
|
||||||
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Fix #131418.
|
Fix #131418.
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fixes for #130370, based on a patch by Michael Meeks:
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to
|
||||||
|
adjust cell positions and recalculate row and column counts after
|
||||||
|
removing an item.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when
|
||||||
|
appending items.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append,
|
||||||
|
to avoid an unintended recursion.
|
||||||
|
|
||||||
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Fix #131418.
|
Fix #131418.
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fixes for #130370, based on a patch by Michael Meeks:
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to
|
||||||
|
adjust cell positions and recalculate row and column counts after
|
||||||
|
removing an item.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when
|
||||||
|
appending items.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append,
|
||||||
|
to avoid an unintended recursion.
|
||||||
|
|
||||||
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Fix #131418.
|
Fix #131418.
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
Tue Jan 20 22:11:31 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fixes for #130370, based on a patch by Michael Meeks:
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_remove): New auxiliary function to
|
||||||
|
adjust cell positions and recalculate row and column counts after
|
||||||
|
removing an item.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_remove): Call gtk_menu_do_remove.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_do_insert): Don't leave empty rows when
|
||||||
|
appending items.
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c (gtk_menu_attach): Don't call gtk_menu_shell_append,
|
||||||
|
to avoid an unintended recursion.
|
||||||
|
|
||||||
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
2004-01-19 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Fix #131418.
|
Fix #131418.
|
||||||
|
@ -597,22 +597,20 @@ gtk_menu_set_child_property (GtkContainer *container,
|
|||||||
break;
|
break;
|
||||||
case CHILD_PROP_RIGHT_ATTACH:
|
case CHILD_PROP_RIGHT_ATTACH:
|
||||||
ai->right_attach = g_value_get_uint (value);
|
ai->right_attach = g_value_get_uint (value);
|
||||||
|
priv->columns = MAX (priv->columns, ai->right_attach);
|
||||||
break;
|
break;
|
||||||
case CHILD_PROP_TOP_ATTACH:
|
case CHILD_PROP_TOP_ATTACH:
|
||||||
ai->top_attach = g_value_get_uint (value);
|
ai->top_attach = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
case CHILD_PROP_BOTTOM_ATTACH:
|
case CHILD_PROP_BOTTOM_ATTACH:
|
||||||
ai->bottom_attach = g_value_get_uint (value);
|
ai->bottom_attach = g_value_get_uint (value);
|
||||||
|
priv->rows = MAX (priv->rows, ai->bottom_attach);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
|
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->columns = MAX (priv->columns, ai->right_attach);
|
|
||||||
priv->rows = MAX (priv->rows, ai->bottom_attach);
|
|
||||||
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (menu));
|
gtk_widget_queue_resize (GTK_WIDGET (menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -935,6 +933,41 @@ gtk_menu_detach (GtkMenu *menu)
|
|||||||
g_object_unref (menu);
|
g_object_unref (menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_menu_do_remove (GtkMenuShell *menu_shell,
|
||||||
|
GtkWidget *child)
|
||||||
|
{
|
||||||
|
AttachInfo *ai;
|
||||||
|
GList *children;
|
||||||
|
GtkMenuPrivate *priv;
|
||||||
|
gint delta;
|
||||||
|
|
||||||
|
ai = get_attach_info (G_OBJECT (child));
|
||||||
|
priv = gtk_menu_get_private (GTK_MENU (menu_shell));
|
||||||
|
delta = ai->bottom_attach - ai->top_attach;
|
||||||
|
|
||||||
|
/* recalculate these, assuming the child has already been removed */
|
||||||
|
priv->rows = 0;
|
||||||
|
priv->columns = 0;
|
||||||
|
|
||||||
|
for (children = menu_shell->children; children; children = children->next)
|
||||||
|
{
|
||||||
|
AttachInfo *child_ai = get_attach_info (children->data);
|
||||||
|
|
||||||
|
/* Do not move items in table menus */
|
||||||
|
if (priv->columns == 1 && child_ai->bottom_attach > ai->bottom_attach)
|
||||||
|
gtk_container_child_set (GTK_CONTAINER (menu_shell), children->data,
|
||||||
|
"top_attach", child_ai->top_attach - delta,
|
||||||
|
"bottom_attach", child_ai->bottom_attach - delta,
|
||||||
|
NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
priv->columns = MAX (priv->columns, child_ai->right_attach);
|
||||||
|
priv->rows = MAX (priv->rows, child_ai->bottom_attach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_menu_remove (GtkContainer *container,
|
gtk_menu_remove (GtkContainer *container,
|
||||||
GtkWidget *widget)
|
GtkWidget *widget)
|
||||||
@ -957,6 +990,7 @@ gtk_menu_remove (GtkContainer *container,
|
|||||||
g_object_set_data (G_OBJECT (widget), ATTACH_INFO_KEY, NULL);
|
g_object_set_data (G_OBJECT (widget), ATTACH_INFO_KEY, NULL);
|
||||||
|
|
||||||
GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
|
GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
|
||||||
|
gtk_menu_do_remove (GTK_MENU_SHELL (container), widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -971,39 +1005,34 @@ gtk_menu_do_insert (GtkMenuShell *menu_shell,
|
|||||||
GtkWidget *child,
|
GtkWidget *child,
|
||||||
gint position)
|
gint position)
|
||||||
{
|
{
|
||||||
gint i;
|
|
||||||
GList *children;
|
GList *children;
|
||||||
GtkMenuPrivate *priv;
|
GtkMenuPrivate *priv;
|
||||||
|
|
||||||
priv = gtk_menu_get_private (GTK_MENU (menu_shell));
|
priv = gtk_menu_get_private (GTK_MENU (menu_shell));
|
||||||
|
|
||||||
if (position < 0)
|
if (position < 0 || position >= priv->rows)
|
||||||
{
|
{
|
||||||
/* attach after the last row */
|
/* attach after the last row */
|
||||||
i = g_list_length (menu_shell->children) - 1;
|
|
||||||
gtk_menu_attach (GTK_MENU (menu_shell), child,
|
gtk_menu_attach (GTK_MENU (menu_shell), child,
|
||||||
0, priv->columns ? priv->columns : 1,
|
0, priv->columns ? priv->columns : 1,
|
||||||
i, i + 1);
|
priv->rows, priv->rows + 1);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we need to make space for this new item; move all items with
|
/* We need to make space for this new item; move all items with
|
||||||
* top >= position one down
|
* top >= position one down.
|
||||||
|
* Note that this does not prevent overlaps when the menu contains
|
||||||
|
* vertically spanning items.
|
||||||
*/
|
*/
|
||||||
for (children = menu_shell->children; children; children = children->next)
|
for (children = menu_shell->children; children; children = children->next)
|
||||||
{
|
{
|
||||||
guint top, bottom;
|
AttachInfo *child_ai = get_attach_info (children->data);
|
||||||
|
|
||||||
gtk_container_child_get (GTK_CONTAINER (menu_shell), children->data,
|
if (child_ai->top_attach >= position)
|
||||||
"top_attach", &top,
|
|
||||||
"bottom_attach", &bottom,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (top >= position)
|
|
||||||
gtk_container_child_set (GTK_CONTAINER (menu_shell), children->data,
|
gtk_container_child_set (GTK_CONTAINER (menu_shell), children->data,
|
||||||
"top_attach", top + 1,
|
"top_attach", child_ai->top_attach + 1,
|
||||||
"bottom_attach", bottom + 1,
|
"bottom_attach", child_ai->bottom_attach + 1,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3671,6 +3700,8 @@ gtk_menu_set_screen (GtkMenu *menu,
|
|||||||
* rightmost, uppermost and lower column and row numbers of the table.
|
* rightmost, uppermost and lower column and row numbers of the table.
|
||||||
* (Columns and rows are indexed from zero).
|
* (Columns and rows are indexed from zero).
|
||||||
*
|
*
|
||||||
|
* Note that this function is not related to gtk_menu_detach().
|
||||||
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
**/
|
**/
|
||||||
void
|
void
|
||||||
@ -3683,12 +3714,18 @@ gtk_menu_attach (GtkMenu *menu,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GTK_IS_MENU (menu));
|
g_return_if_fail (GTK_IS_MENU (menu));
|
||||||
g_return_if_fail (GTK_IS_MENU_ITEM (child));
|
g_return_if_fail (GTK_IS_MENU_ITEM (child));
|
||||||
|
g_return_if_fail (child->parent == NULL ||
|
||||||
|
child->parent == GTK_WIDGET (menu));
|
||||||
g_return_if_fail (left_attach < right_attach);
|
g_return_if_fail (left_attach < right_attach);
|
||||||
g_return_if_fail (top_attach < bottom_attach);
|
g_return_if_fail (top_attach < bottom_attach);
|
||||||
|
|
||||||
if (!child->parent)
|
if (!child->parent)
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), child);
|
{
|
||||||
|
GTK_MENU_SHELL (menu)->children =
|
||||||
|
g_list_append (GTK_MENU_SHELL (menu)->children, child);
|
||||||
|
|
||||||
|
gtk_widget_set_parent (child, GTK_WIDGET (menu));
|
||||||
|
}
|
||||||
|
|
||||||
gtk_container_child_set (GTK_CONTAINER (menu), child,
|
gtk_container_child_set (GTK_CONTAINER (menu), child,
|
||||||
"left_attach", left_attach,
|
"left_attach", left_attach,
|
||||||
|
Loading…
Reference in New Issue
Block a user