871871generate_categories (AppShellData * app_data )
872872{
873873 MateMenuTreeDirectory * root_dir ;
874- GSList * contents , * l ;
875874 gboolean need_misc = FALSE;
875+ MateMenuTreeIter * iter ;
876+ MateMenuTreeItemType type ;
876877
877878 if (!app_data -> tree )
878879 {
@@ -888,42 +889,35 @@ generate_categories (AppShellData * app_data)
888889 }
889890
890891 }
891- root_dir = matemenu_tree_get_root_directory (app_data -> tree );
892- if (root_dir )
893- contents = matemenu_tree_directory_get_contents (root_dir );
894- else
895- contents = NULL ;
896- if (!root_dir || !contents )
897- {
892+
893+ if ((root_dir = matemenu_tree_get_root_directory (app_data -> tree )) == NULL ) {
898894 GtkWidget * dialog = gtk_message_dialog_new (NULL , GTK_DIALOG_DESTROY_WITH_PARENT ,
899- GTK_MESSAGE_ERROR , GTK_BUTTONS_CLOSE , "Failure loading - %s" ,
900- app_data -> menu_name );
895+ GTK_MESSAGE_ERROR , GTK_BUTTONS_CLOSE , "Failure loading - %s" ,
896+ app_data -> menu_name );
901897 gtk_dialog_run (GTK_DIALOG (dialog ));
902898 gtk_widget_destroy (dialog );
903899 exit (1 ); /* Fixme - is there a MATE/GTK way to do this. */
904900 }
905901
906- for (l = contents ; l ; l = l -> next )
907- {
902+ iter = matemenu_tree_directory_iter (root_dir );
903+ while ((type = matemenu_tree_iter_next (iter )) != MATEMENU_TREE_ITEM_INVALID ) {
904+ gpointer item ;
908905 const char * category ;
909- MateMenuTreeItem * item = l -> data ;
910-
911- switch (matemenu_tree_item_get_type (item ))
912- {
913- case MATEMENU_TREE_ITEM_DIRECTORY :
914- category = matemenu_tree_directory_get_name ((MateMenuTreeDirectory * )item );
915- generate_category (category , (MateMenuTreeDirectory * )item , app_data , TRUE);
916- break ;
917- case MATEMENU_TREE_ITEM_ENTRY :
918- need_misc = TRUE;
919- break ;
920- default :
921- break ;
906+ switch (type ) {
907+ case MATEMENU_TREE_ITEM_DIRECTORY :
908+ item = matemenu_tree_iter_get_directory (iter );
909+ category = matemenu_tree_directory_get_name (item );
910+ generate_category (category , item , app_data , TRUE);
911+ matemenu_tree_item_unref (item );
912+ break ;
913+ case MATEMENU_TREE_ITEM_ENTRY :
914+ need_misc = TRUE;
915+ break ;
916+ default :
917+ break ;
922918 }
923-
924- matemenu_tree_item_unref (item );
925919 }
926- g_slist_free ( contents );
920+ matemenu_tree_iter_unref ( iter );
927921
928922 if (need_misc )
929923 generate_category (_ ("Other" ), root_dir , app_data , FALSE);
@@ -1034,7 +1028,7 @@ generate_launchers (MateMenuTreeDirectory * root_dir, AppShellData * app_data, C
10341028 MateMenuTreeIter * iter ;
10351029 MateMenuTreeItemType type ;
10361030
1037- iter = matemenu_tree_directory_iter (directory );
1031+ iter = matemenu_tree_directory_iter (root_dir );
10381032 while ((type = matemenu_tree_iter_next (iter )) != MATEMENU_TREE_ITEM_INVALID ) {
10391033 gpointer item ;
10401034 switch (type ) {
@@ -1075,10 +1069,10 @@ generate_launchers (MateMenuTreeDirectory * root_dir, AppShellData * app_data, C
10751069 matemenu_tree_item_unref (item );
10761070 break ;
10771071 default :
1078- g_assert_not_reached ();
10791072 break ;
10801073 }
10811074 }
1075+ matemenu_tree_iter_unref (iter );
10821076}
10831077
10841078static void
0 commit comments