Only use the results of find_menu/toolbar_position() if they succeed. May
2006-12-28 Matthias Clasen <mclasen@redhat.com> * gtk/gtkuimanager.c (update_node): Only use the results of find_menu/toolbar_position() if they succeed. May fix bug #388041.
This commit is contained in:
committed by
Matthias Clasen
parent
61f5f016db
commit
785bffff68
@ -1,3 +1,9 @@
|
|||||||
|
2006-12-28 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkuimanager.c (update_node): Only use the results
|
||||||
|
of find_menu/toolbar_position() if they succeed. May fix
|
||||||
|
bug #388041.
|
||||||
|
|
||||||
2006-12-28 Matthias Clasen <mclasen@redhat.com>
|
2006-12-28 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* gdk/gdk.c: Fix some formatting errors in docs.
|
* gdk/gdk.c: Fix some formatting errors in docs.
|
||||||
|
|||||||
@ -1786,20 +1786,21 @@ get_action_by_name (GtkUIManager *merge,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
find_menu_position (GNode *node,
|
find_menu_position (GNode *node,
|
||||||
GtkWidget **menushell_p,
|
GtkWidget **menushell_p,
|
||||||
gint *pos_p)
|
gint *pos_p)
|
||||||
{
|
{
|
||||||
GtkWidget *menushell;
|
GtkWidget *menushell;
|
||||||
gint pos;
|
gint pos = 0;
|
||||||
|
|
||||||
g_return_if_fail (node != NULL);
|
g_return_val_if_fail (node != NULL, FALSE);
|
||||||
g_return_if_fail (NODE_INFO (node)->type == NODE_TYPE_MENU ||
|
g_return_val_if_fail (NODE_INFO (node)->type == NODE_TYPE_MENU ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_POPUP ||
|
NODE_INFO (node)->type == NODE_TYPE_POPUP ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_MENU_PLACEHOLDER ||
|
NODE_INFO (node)->type == NODE_TYPE_MENU_PLACEHOLDER ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_MENUITEM ||
|
NODE_INFO (node)->type == NODE_TYPE_MENUITEM ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_SEPARATOR);
|
NODE_INFO (node)->type == NODE_TYPE_SEPARATOR,
|
||||||
|
FALSE);
|
||||||
|
|
||||||
/* first sibling -- look at parent */
|
/* first sibling -- look at parent */
|
||||||
if (node->prev == NULL)
|
if (node->prev == NULL)
|
||||||
@ -1828,14 +1829,14 @@ find_menu_position (GNode *node,
|
|||||||
break;
|
break;
|
||||||
case NODE_TYPE_MENU_PLACEHOLDER:
|
case NODE_TYPE_MENU_PLACEHOLDER:
|
||||||
menushell = gtk_widget_get_parent (NODE_INFO (parent)->proxy);
|
menushell = gtk_widget_get_parent (NODE_INFO (parent)->proxy);
|
||||||
g_return_if_fail (GTK_IS_MENU_SHELL (menushell));
|
g_return_val_if_fail (GTK_IS_MENU_SHELL (menushell), FALSE);
|
||||||
pos = g_list_index (GTK_MENU_SHELL (menushell)->children,
|
pos = g_list_index (GTK_MENU_SHELL (menushell)->children,
|
||||||
NODE_INFO (parent)->proxy) + 1;
|
NODE_INFO (parent)->proxy) + 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_warning ("%s: bad parent node type %d", G_STRLOC,
|
g_warning ("%s: bad parent node type %d", G_STRLOC,
|
||||||
NODE_INFO (parent)->type);
|
NODE_INFO (parent)->type);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1849,9 +1850,9 @@ find_menu_position (GNode *node,
|
|||||||
else
|
else
|
||||||
prev_child = NODE_INFO (sibling)->proxy;
|
prev_child = NODE_INFO (sibling)->proxy;
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_WIDGET (prev_child));
|
g_return_val_if_fail (GTK_IS_WIDGET (prev_child), FALSE);
|
||||||
menushell = gtk_widget_get_parent (prev_child);
|
menushell = gtk_widget_get_parent (prev_child);
|
||||||
g_return_if_fail (GTK_IS_MENU_SHELL (menushell));
|
g_return_val_if_fail (GTK_IS_MENU_SHELL (menushell), FALSE);
|
||||||
|
|
||||||
pos = g_list_index (GTK_MENU_SHELL (menushell)->children, prev_child) + 1;
|
pos = g_list_index (GTK_MENU_SHELL (menushell)->children, prev_child) + 1;
|
||||||
}
|
}
|
||||||
@ -1860,9 +1861,11 @@ find_menu_position (GNode *node,
|
|||||||
*menushell_p = menushell;
|
*menushell_p = menushell;
|
||||||
if (pos_p)
|
if (pos_p)
|
||||||
*pos_p = pos;
|
*pos_p = pos;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
find_toolbar_position (GNode *node,
|
find_toolbar_position (GNode *node,
|
||||||
GtkWidget **toolbar_p,
|
GtkWidget **toolbar_p,
|
||||||
gint *pos_p)
|
gint *pos_p)
|
||||||
@ -1870,11 +1873,12 @@ find_toolbar_position (GNode *node,
|
|||||||
GtkWidget *toolbar;
|
GtkWidget *toolbar;
|
||||||
gint pos;
|
gint pos;
|
||||||
|
|
||||||
g_return_if_fail (node != NULL);
|
g_return_val_if_fail (node != NULL, FALSE);
|
||||||
g_return_if_fail (NODE_INFO (node)->type == NODE_TYPE_TOOLBAR ||
|
g_return_val_if_fail (NODE_INFO (node)->type == NODE_TYPE_TOOLBAR ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_TOOLBAR_PLACEHOLDER ||
|
NODE_INFO (node)->type == NODE_TYPE_TOOLBAR_PLACEHOLDER ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_TOOLITEM ||
|
NODE_INFO (node)->type == NODE_TYPE_TOOLITEM ||
|
||||||
NODE_INFO (node)->type == NODE_TYPE_SEPARATOR);
|
NODE_INFO (node)->type == NODE_TYPE_SEPARATOR,
|
||||||
|
FALSE);
|
||||||
|
|
||||||
/* first sibling -- look at parent */
|
/* first sibling -- look at parent */
|
||||||
if (node->prev == NULL)
|
if (node->prev == NULL)
|
||||||
@ -1890,14 +1894,14 @@ find_toolbar_position (GNode *node,
|
|||||||
break;
|
break;
|
||||||
case NODE_TYPE_TOOLBAR_PLACEHOLDER:
|
case NODE_TYPE_TOOLBAR_PLACEHOLDER:
|
||||||
toolbar = gtk_widget_get_parent (NODE_INFO (parent)->proxy);
|
toolbar = gtk_widget_get_parent (NODE_INFO (parent)->proxy);
|
||||||
g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
|
g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), FALSE);
|
||||||
pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (toolbar),
|
pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (toolbar),
|
||||||
GTK_TOOL_ITEM (NODE_INFO (parent)->proxy)) + 1;
|
GTK_TOOL_ITEM (NODE_INFO (parent)->proxy)) + 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_warning ("%s: bad parent node type %d", G_STRLOC,
|
g_warning ("%s: bad parent node type %d", G_STRLOC,
|
||||||
NODE_INFO (parent)->type);
|
NODE_INFO (parent)->type);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1911,9 +1915,9 @@ find_toolbar_position (GNode *node,
|
|||||||
else
|
else
|
||||||
prev_child = NODE_INFO (sibling)->proxy;
|
prev_child = NODE_INFO (sibling)->proxy;
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_WIDGET (prev_child));
|
g_return_val_if_fail (GTK_IS_WIDGET (prev_child), FALSE);
|
||||||
toolbar = gtk_widget_get_parent (prev_child);
|
toolbar = gtk_widget_get_parent (prev_child);
|
||||||
g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
|
g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), FALSE);
|
||||||
|
|
||||||
pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (toolbar),
|
pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (toolbar),
|
||||||
GTK_TOOL_ITEM (prev_child)) + 1;
|
GTK_TOOL_ITEM (prev_child)) + 1;
|
||||||
@ -1923,6 +1927,8 @@ find_toolbar_position (GNode *node,
|
|||||||
*toolbar_p = toolbar;
|
*toolbar_p = toolbar;
|
||||||
if (pos_p)
|
if (pos_p)
|
||||||
*pos_p = pos;
|
*pos_p = pos;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2245,7 +2251,8 @@ update_node (GtkUIManager *self,
|
|||||||
GtkWidget *menushell;
|
GtkWidget *menushell;
|
||||||
gint pos;
|
gint pos;
|
||||||
|
|
||||||
find_menu_position (node, &menushell, &pos);
|
if (find_menu_position (node, &menushell, &pos))
|
||||||
|
{
|
||||||
info->proxy = gtk_action_create_menu_item (action);
|
info->proxy = gtk_action_create_menu_item (action);
|
||||||
g_object_ref_sink (info->proxy);
|
g_object_ref_sink (info->proxy);
|
||||||
g_signal_connect (info->proxy, "notify::visible",
|
g_signal_connect (info->proxy, "notify::visible",
|
||||||
@ -2256,6 +2263,7 @@ update_node (GtkUIManager *self,
|
|||||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell), info->proxy, pos);
|
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell), info->proxy, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
gtk_action_connect_proxy (action, info->proxy);
|
gtk_action_connect_proxy (action, info->proxy);
|
||||||
|
|
||||||
@ -2321,7 +2329,8 @@ update_node (GtkUIManager *self,
|
|||||||
GtkWidget *menushell;
|
GtkWidget *menushell;
|
||||||
gint pos;
|
gint pos;
|
||||||
|
|
||||||
find_menu_position (node, &menushell, &pos);
|
if (find_menu_position (node, &menushell, &pos))
|
||||||
|
{
|
||||||
info->proxy = gtk_separator_menu_item_new ();
|
info->proxy = gtk_separator_menu_item_new ();
|
||||||
g_object_ref_sink (info->proxy);
|
g_object_ref_sink (info->proxy);
|
||||||
g_object_set_data (G_OBJECT (info->proxy),
|
g_object_set_data (G_OBJECT (info->proxy),
|
||||||
@ -2340,6 +2349,7 @@ update_node (GtkUIManager *self,
|
|||||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
|
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
|
||||||
NODE_INFO (node)->extra, pos + 1);
|
NODE_INFO (node)->extra, pos + 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NODE_TYPE_TOOLBAR_PLACEHOLDER:
|
case NODE_TYPE_TOOLBAR_PLACEHOLDER:
|
||||||
/* create toolbar items for placeholders if necessary ... */
|
/* create toolbar items for placeholders if necessary ... */
|
||||||
@ -2367,7 +2377,8 @@ update_node (GtkUIManager *self,
|
|||||||
gint pos;
|
gint pos;
|
||||||
GtkToolItem *item;
|
GtkToolItem *item;
|
||||||
|
|
||||||
find_toolbar_position (node, &toolbar, &pos);
|
if (find_toolbar_position (node, &toolbar, &pos))
|
||||||
|
{
|
||||||
item = gtk_separator_tool_item_new ();
|
item = gtk_separator_tool_item_new ();
|
||||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, pos);
|
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, pos);
|
||||||
info->proxy = GTK_WIDGET (item);
|
info->proxy = GTK_WIDGET (item);
|
||||||
@ -2386,6 +2397,7 @@ update_node (GtkUIManager *self,
|
|||||||
GINT_TO_POINTER (SEPARATOR_MODE_HIDDEN));
|
GINT_TO_POINTER (SEPARATOR_MODE_HIDDEN));
|
||||||
gtk_widget_set_no_show_all (info->extra, TRUE);
|
gtk_widget_set_no_show_all (info->extra, TRUE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NODE_TYPE_MENUITEM:
|
case NODE_TYPE_MENUITEM:
|
||||||
/* remove the proxy if it is of the wrong type ... */
|
/* remove the proxy if it is of the wrong type ... */
|
||||||
@ -2407,7 +2419,8 @@ update_node (GtkUIManager *self,
|
|||||||
GtkWidget *menushell;
|
GtkWidget *menushell;
|
||||||
gint pos;
|
gint pos;
|
||||||
|
|
||||||
find_menu_position (node, &menushell, &pos);
|
if (find_menu_position (node, &menushell, &pos))
|
||||||
|
{
|
||||||
info->proxy = gtk_action_create_menu_item (action);
|
info->proxy = gtk_action_create_menu_item (action);
|
||||||
g_object_ref_sink (info->proxy);
|
g_object_ref_sink (info->proxy);
|
||||||
gtk_widget_set_name (info->proxy, info->name);
|
gtk_widget_set_name (info->proxy, info->name);
|
||||||
@ -2415,6 +2428,7 @@ update_node (GtkUIManager *self,
|
|||||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
|
gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
|
||||||
info->proxy, pos);
|
info->proxy, pos);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (info->proxy,
|
g_signal_handlers_disconnect_by_func (info->proxy,
|
||||||
@ -2455,7 +2469,8 @@ update_node (GtkUIManager *self,
|
|||||||
GtkWidget *toolbar;
|
GtkWidget *toolbar;
|
||||||
gint pos;
|
gint pos;
|
||||||
|
|
||||||
find_toolbar_position (node, &toolbar, &pos);
|
if (find_toolbar_position (node, &toolbar, &pos))
|
||||||
|
{
|
||||||
info->proxy = gtk_action_create_tool_item (action);
|
info->proxy = gtk_action_create_tool_item (action);
|
||||||
g_object_ref_sink (info->proxy);
|
g_object_ref_sink (info->proxy);
|
||||||
gtk_widget_set_name (info->proxy, info->name);
|
gtk_widget_set_name (info->proxy, info->name);
|
||||||
@ -2463,6 +2478,7 @@ update_node (GtkUIManager *self,
|
|||||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar),
|
gtk_toolbar_insert (GTK_TOOLBAR (toolbar),
|
||||||
GTK_TOOL_ITEM (info->proxy), pos);
|
GTK_TOOL_ITEM (info->proxy), pos);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (info->proxy,
|
g_signal_handlers_disconnect_by_func (info->proxy,
|
||||||
@ -2502,7 +2518,8 @@ update_node (GtkUIManager *self,
|
|||||||
info->proxy = NULL;
|
info->proxy = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
find_toolbar_position (node, &toolbar, &pos);
|
if (find_toolbar_position (node, &toolbar, &pos))
|
||||||
|
{
|
||||||
item = gtk_separator_tool_item_new ();
|
item = gtk_separator_tool_item_new ();
|
||||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, pos);
|
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, pos);
|
||||||
info->proxy = GTK_WIDGET (item);
|
info->proxy = GTK_WIDGET (item);
|
||||||
@ -2511,8 +2528,7 @@ update_node (GtkUIManager *self,
|
|||||||
if (info->expand)
|
if (info->expand)
|
||||||
{
|
{
|
||||||
gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), TRUE);
|
gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), TRUE);
|
||||||
gtk_separator_tool_item_set_draw
|
gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE);
|
||||||
(GTK_SEPARATOR_TOOL_ITEM (item), FALSE);
|
|
||||||
separator_mode = SEPARATOR_MODE_VISIBLE;
|
separator_mode = SEPARATOR_MODE_VISIBLE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2523,6 +2539,7 @@ update_node (GtkUIManager *self,
|
|||||||
GINT_TO_POINTER (separator_mode));
|
GINT_TO_POINTER (separator_mode));
|
||||||
gtk_widget_show (info->proxy);
|
gtk_widget_show (info->proxy);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GtkWidget *menushell;
|
GtkWidget *menushell;
|
||||||
@ -2536,7 +2553,8 @@ update_node (GtkUIManager *self,
|
|||||||
info->proxy = NULL;
|
info->proxy = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
find_menu_position (node, &menushell, &pos);
|
if (find_menu_position (node, &menushell, &pos))
|
||||||
|
{
|
||||||
info->proxy = gtk_separator_menu_item_new ();
|
info->proxy = gtk_separator_menu_item_new ();
|
||||||
g_object_ref_sink (info->proxy);
|
g_object_ref_sink (info->proxy);
|
||||||
gtk_widget_set_no_show_all (info->proxy, TRUE);
|
gtk_widget_set_no_show_all (info->proxy, TRUE);
|
||||||
@ -2547,6 +2565,7 @@ update_node (GtkUIManager *self,
|
|||||||
info->proxy, pos);
|
info->proxy, pos);
|
||||||
gtk_widget_show (info->proxy);
|
gtk_widget_show (info->proxy);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NODE_TYPE_ACCELERATOR:
|
case NODE_TYPE_ACCELERATOR:
|
||||||
gtk_action_connect_accelerator (action);
|
gtk_action_connect_accelerator (action);
|
||||||
|
|||||||
Reference in New Issue
Block a user