gtk_menu_shell_cancel
gtk_menu_shell_set_take_focus
gtk_menu_shell_get_take_focus
+gtk_menu_shell_get_selected_item
+gtk_menu_shell_get_parent_shell
GtkMenuDirectionType
<SUBSECTION Standard>
GTK_MENU_SHELL
gtk_menu_shell_cancel
gtk_menu_shell_deactivate
gtk_menu_shell_deselect
+gtk_menu_shell_get_selected_item
+gtk_menu_shell_get_parent_shell
gtk_menu_shell_get_take_focus
gtk_menu_shell_get_type G_GNUC_CONST
gtk_menu_shell_insert
g_object_notify (G_OBJECT (menu_shell), "take-focus");
}
}
+
+/**
+ * gtk_menu_shell_get_selected_item:
+ * @menu_shell: a #GtkMenuShell
+ *
+ * Gets the currently selected item.
+ *
+ * Returns: the currently selected item
+ *
+ * Since: 3.0
+ */
+GtkWidget *
+gtk_menu_shell_get_selected_item (GtkMenuShell *menu_shell)
+{
+ g_return_if_fail (GTK_IS_MENU_SHELL (menu_shell));
+
+ return menu_shell->priv->active_menu_item;
+}
+
+/**
+ * gtk_menu_shell_get_parent_shell:
+ * @menu_shell: a #GtkMenuShell
+ *
+ * Gets the parent menu shell.
+ *
+ * The parent menu shell of a submenu is the #GtkMenu or #GtkMenuBar
+ * from which it was opened up.
+ *
+ * Returns: the parent #GtkMenuShell
+ *
+ * Since: 3.0
+ */
+GtkWidget *
+gtk_menu_shell_get_parent_shell (GtkMenuShell *menu_shell)
+{
+ g_return_if_fail (GTK_IS_MENU_SHELL (menu_shell));
+
+ return menu_shell->priv->parent_menu_shell;
+}
void gtk_menu_shell_set_take_focus (GtkMenuShell *menu_shell,
gboolean take_focus);
+GtkWidget *gtk_menu_shell_get_selected_item (GtkMenuShell *menu_shell);
+GtkWidget *gtk_menu_shell_get_parent_shell (GtkMenuShell *menu_shell);
+
G_END_DECLS
#endif /* __GTK_MENU_SHELL_H__ */
{
if (GTK_IS_MENU_SHELL (child))
{
- if (GTK_MENU_SHELL (child)->active_menu_item)
+ if (gtk_menu_shell_get_selected_item (GTK_MENU_SHELL (child)))
{
/*
* We have a menu which has a menu item selected
if (GTK_IS_MENU_ITEM (widget))
{
GtkMenuItem* menu_item;
+ GtkWidget *submenu;
menu_item = GTK_MENU_ITEM (widget);
- if (menu_item->submenu &&
- !gtk_widget_get_mapped (menu_item->submenu))
+ submenu = gtk_menu_item_get_submenu (menu_item);
+ if (submenu &&
+ !gtk_widget_get_mapped (submenu))
{
/*
* If the submenu is not visble, wait until it is before
*/
gulong handler_id;
- handler_id = g_signal_handler_find (menu_item->submenu,
+ handler_id = g_signal_handler_find (submenu,
G_SIGNAL_MATCH_FUNC,
g_signal_lookup ("map",
GTK_TYPE_WINDOW),
(gpointer) gail_map_submenu_cb,
NULL);
if (!handler_id)
- g_signal_connect (menu_item->submenu, "map",
+ g_signal_connect (submenu, "map",
G_CALLBACK (gail_map_submenu_cb),
NULL);
return;
-
}
/*
* If we are waiting to report focus on a menubar or a menu item
{
if (GTK_IS_MENU (widget))
{
- if (GTK_MENU (widget)->parent_menu_item)
- gail_finish_select (GTK_MENU (widget)->parent_menu_item);
+ GtkWidget *parent_menu_item;
+
+ parent_menu_item = gtk_menu_get_attach_widget (GTK_MENU (widget));
+ if (parent_menu_item)
+ gail_finish_select (parent_menu_item);
}
}
{
GtkWidget *parent_menu_shell;
- parent_menu_shell = GTK_MENU_SHELL (menu_shell)->parent_menu_shell;
+ parent_menu_shell = gtk_menu_shell_get_parent_shell (GTK_MENU_SHELL (menu_shell));
if (parent_menu_shell)
{
GtkWidget *active_menu_item;
- active_menu_item = GTK_MENU_SHELL (parent_menu_shell)->active_menu_item;
+ active_menu_item = gtk_menu_shell_get_selected_item (GTK_MENU_SHELL (parent_menu_shell));
if (active_menu_item)
{
gail_focus_notify_when_idle (active_menu_item);
g_return_val_if_fail (GTK_IS_MENU_SHELL(widget), TRUE);
shell = GTK_MENU_SHELL(widget);
- if (!shell->parent_menu_shell)
+ if (! gtk_menu_shell_get_parent_shell (shell))
focus = focus_before_menu;
/*
gail_menu_shell_add_selection (AtkSelection *selection,
gint i)
{
- GtkMenuShell *shell;
- GList *item;
+ GList *kids;
+ GtkWidget *item;
guint length;
GtkWidget *widget;
return FALSE;
}
- shell = GTK_MENU_SHELL (widget);
- length = g_list_length (shell->children);
+ kids = gtk_container_get_children (GTK_CONTAINER (widget));
+ length = g_list_length (kids);
if (i < 0 || i > length)
- return FALSE;
-
- item = g_list_nth (shell->children, i);
- g_return_val_if_fail (item != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_MENU_ITEM(item->data), FALSE);
-
- gtk_menu_shell_select_item (shell, GTK_WIDGET (item->data));
+ {
+ g_list_free (kids);
+ return FALSE;
+ }
+
+ item = g_list_nth_data (kids, i);
+ g_list_free (kids);
+ g_return_val_if_fail (GTK_IS_MENU_ITEM(item), FALSE);
+ gtk_menu_shell_select_item (GTK_MENU_SHELL (widget), item);
return TRUE;
}
GtkMenuShell *shell;
AtkObject *obj;
GtkWidget *widget;
+ GtkWidget *item;
if (i != 0)
return NULL;
}
shell = GTK_MENU_SHELL (widget);
-
- if (shell->active_menu_item != NULL)
+
+ item = gtk_menu_shell_get_selectec_item (shell);
+ if (item != NULL)
{
- obj = gtk_widget_get_accessible (shell->active_menu_item);
+ obj = gtk_widget_get_accessible (item);
g_object_ref (obj);
return obj;
}
/*
* Identifies the currently selected menu item
*/
- if (shell->active_menu_item == NULL)
+ if (gtk_menu_shell_get_selected_item (shell) == NULL)
{
return 0;
}
gint i)
{
GtkMenuShell *shell;
+ GList *kids;
gint j;
GtkWidget *widget;
+ GtkWidget *item;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection));
if (widget == NULL)
}
shell = GTK_MENU_SHELL (widget);
- if (shell->active_menu_item == NULL)
+ item = gtk_menu_shell_get_selected_item (shell);
+ if (item == NULL)
return FALSE;
-
- j = g_list_index (shell->children, shell->active_menu_item);
- return (j==i);
+ kids = gtk_container_get_children (GTK_CONTAINER (shell));
+ j = g_list_index (kids, item);
+ g_list_free (kids);
+
+ return (j==i);
}
static gboolean
{
GtkMenuShell *shell;
GtkWidget *widget;
+ GtkWidget *item;
if (i != 0)
return FALSE;
shell = GTK_MENU_SHELL (widget);
- if (shell->active_menu_item &&
- GTK_MENU_ITEM (shell->active_menu_item)->submenu)
+ item = gtk_menu_shell_get_selected_item (shell);
+ if (item && gtk_menu_item_get_submenu (GTK_MENU_ITEM (item)))
{
/*
* Menu item contains a menu and it is the selected menu item
gint i)
{
GtkMenuShell *shell;
- GList *item;
+ GList *kids;
guint length;
GtkWidget *widget;
GtkWidget *submenu;
+ GtkWidget *child;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection));
if (widget == NULL)
submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
shell = GTK_MENU_SHELL (submenu);
- length = g_list_length (shell->children);
+ kids = gtk_container_get_children (GTK_CONTAINER (shell));
+ length = g_list_length (kids);
if (i < 0 || i > length)
- return FALSE;
+ {
+ g_list_free (kids);
+ return FALSE;
+ }
- item = g_list_nth (shell->children, i);
- g_return_val_if_fail (item != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_MENU_ITEM(item->data), FALSE);
-
- gtk_menu_shell_select_item (shell, GTK_WIDGET (item->data));
+ child = g_list_nth_data (kids, i);
+ g_list_free (kids);
+ g_return_val_if_fail (GTK_IS_MENU_ITEM(child), FALSE);
+ gtk_menu_shell_select_item (shell, GTK_WIDGET (child));
return TRUE;
}
AtkObject *obj;
GtkWidget *widget;
GtkWidget *submenu;
+ GtkWidget *item;
if (i != 0)
return NULL;
submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), NULL);
shell = GTK_MENU_SHELL (submenu);
-
- if (shell->active_menu_item != NULL)
+
+ item = gtk_menu_shell_get_selected_item (shell);
+ if (item != NULL)
{
- obj = gtk_widget_get_accessible (shell->active_menu_item);
+ obj = gtk_widget_get_accessible (item);
g_object_ref (obj);
return obj;
}
/*
* Identifies the currently selected menu item
*/
- if (shell->active_menu_item == NULL)
+ if (gtk_menu_shell_get_selected_item (shell) == NULL)
return 0;
else
return 1;
gint j;
GtkWidget *widget;
GtkWidget *submenu;
+ GtkWidget *item;
+ GList *kids;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection));
if (widget == NULL)
g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
shell = GTK_MENU_SHELL (submenu);
- if (shell->active_menu_item == NULL)
+ item = gtk_menu_shell_get_selected_item (shell);
+ if (item == NULL)
return FALSE;
-
- j = g_list_index (shell->children, shell->active_menu_item);
- return (j==i);
+ kids = gtk_container_get_children (GTK_CONTAINER (shell));
+ j = g_list_index (kids, item);
+ g_list_free (kids);
+
+ return (j==i);
}
static gboolean
GtkMenuShell *shell;
GtkWidget *widget;
GtkWidget *submenu;
+ GtkWidget *item;
if (i != 0)
return FALSE;
g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
shell = GTK_MENU_SHELL (submenu);
- if (shell->active_menu_item &&
- GTK_MENU_ITEM (shell->active_menu_item)->submenu)
+ item = gtk_menu_shell_get_selected_item (shell);
+ if (item && gtk_menu_item_get_submenu (GTK_MENU_ITEM (item)))
{
/*
* Menu item contains a menu and it is the selected menu item