void panel_menu_button_popup_menu (PanelMenuButton *button, guint n_button, guint32 activate_time) { GdkScreen *screen; g_return_if_fail (PANEL_IS_MENU_BUTTON (button)); panel_menu_button_create_menu (button); panel_toplevel_push_autohide_disabler (button->priv->toplevel); button_widget_set_ignore_leave (BUTTON_WIDGET (button), TRUE); screen = gtk_window_get_screen (GTK_WINDOW (button->priv->toplevel)); gtk_menu_set_screen (GTK_MENU (button->priv->menu), screen); gtk_menu_popup (GTK_MENU (button->priv->menu), NULL, NULL, (GtkMenuPositionFunc) mate_panel_applet_position_menu, GTK_WIDGET (button), n_button, activate_time); }
static AtkObject * panel_menu_button_accessible_ref_child (AtkObject *obj, int index) { PanelMenuButton *button; GtkWidget *menu; g_return_val_if_fail (PANEL_IS_MENU_BUTTON_ACCESSIBLE (obj), NULL); if (index != 0) return NULL; #if GTK_CHECK_VERSION (2, 21, 0) if (!(button = PANEL_MENU_BUTTON (gtk_accessible_get_widget (GTK_ACCESSIBLE (obj))))) #else if (!(button = PANEL_MENU_BUTTON (GTK_ACCESSIBLE (obj)->widget))) #endif return NULL; if (!(menu = panel_menu_button_create_menu (button))) return NULL; /* * This ensures that the menu is populated with all menu items */ g_signal_emit_by_name (menu, "show", NULL); return g_object_ref (gtk_widget_get_accessible (menu)); }
static char * panel_menu_button_get_icon (PanelMenuButton *button) { GMenuTreeDirectory *directory; char *retval; retval = NULL; if (button->priv->use_custom_icon && button->priv->custom_icon) retval = g_strdup (button->priv->custom_icon); if (!retval && button->priv->use_menu_path && button->priv->menu_path && panel_menu_button_create_menu (button)) { directory = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree-directory"); if (!directory) { GMenuTree *tree; if ((tree = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree"))) { directory = gmenu_tree_get_directory_from_path (tree, button->priv->menu_path); g_object_set_data_full (G_OBJECT (button->priv->menu), "panel-menu-tree-directory", directory, (GDestroyNotify) gmenu_tree_item_unref); } } if (directory) retval = g_strdup (gmenu_tree_directory_get_icon (directory)); } if (!retval) { const char *logo; logo = panel_get_distributor_logo (); if (logo != NULL) retval = g_strdup (logo); else retval = g_strdup (PANEL_MAIN_MENU_ICON); } return retval; }
static char * panel_menu_button_get_icon (PanelMenuButton *button) { MateMenuTreeDirectory *directory; char *retval; retval = NULL; if (button->priv->use_custom_icon && button->priv->custom_icon) retval = g_strdup (button->priv->custom_icon); if (!retval && button->priv->use_menu_path && button->priv->menu_path && panel_menu_button_create_menu (button)) { directory = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree-directory"); if (!directory) { MateMenuTree *tree; if ((tree = g_object_get_data (G_OBJECT (button->priv->menu), "panel-menu-tree"))) { directory = matemenu_tree_get_directory_from_path (tree, button->priv->menu_path); g_object_set_data_full (G_OBJECT (button->priv->menu), "panel-menu-tree-directory", directory, (GDestroyNotify) matemenu_tree_item_unref); } } if (directory) retval = g_strdup (matemenu_tree_directory_get_icon (directory)); } if (!retval) retval = g_strdup (PANEL_ICON_MAIN_MENU); return retval; }
static AtkObject * panel_menu_button_accessible_ref_child (AtkObject *obj, int index) { PanelMenuButton *button; GtkWidget *menu; g_return_val_if_fail (PANEL_IS_MENU_BUTTON_ACCESSIBLE (obj), NULL); if (index != 0) return NULL; if (!(button = PANEL_MENU_BUTTON (GTK_ACCESSIBLE (obj)->widget))) return NULL; if (!(menu = panel_menu_button_create_menu (button))) return NULL; return g_object_ref (gtk_widget_get_accessible (menu)); }