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 void submenu_to_display (GtkWidget *menu) { GMenuTree *tree; GMenuTreeDirectory *directory; const char *menu_path; void (*append_callback) (GtkWidget *, gpointer); gpointer append_data; if (!g_object_get_data (G_OBJECT (menu), "panel-menu-needs-loading")) return; g_object_set_data (G_OBJECT (menu), "panel-menu-needs-loading", NULL); directory = g_object_get_data (G_OBJECT (menu), "panel-menu-tree-directory"); if (!directory) { menu_path = g_object_get_data (G_OBJECT (menu), "panel-menu-tree-path"); if (!menu_path) return; tree = g_object_get_data (G_OBJECT (menu), "panel-menu-tree"); if (!tree) return; directory = gmenu_tree_get_directory_from_path (tree, menu_path); g_object_set_data_full (G_OBJECT (menu), "panel-menu-tree-directory", directory, (GDestroyNotify) gmenu_tree_item_unref); } if (directory) populate_menu_from_directory (menu, directory); append_callback = g_object_get_data (G_OBJECT (menu), "panel-menu-append-callback"); append_data = g_object_get_data (G_OBJECT (menu), "panel-menu-append-callback-data"); if (append_callback) append_callback (menu, append_data); }