@@ -103,6 +103,9 @@ EditorWindow::EditorWindow(bool stagger)
103103 .AddItem (B_TRANSLATE (" New" ), MAINMENU_FILE_NEW, ' N' )
104104 .AddSeparator ()
105105 .AddItem (B_TRANSLATE (" Open" B_UTF8_ELLIPSIS), MAINMENU_FILE_OPEN, ' O' )
106+ .AddMenu (B_TRANSLATE (" Open recent" ))
107+ .AddItem (B_TRANSLATE (" <empty>" ), MAINMENU_OPEN_RECENT)
108+ .End ()
106109 .AddItem (B_TRANSLATE (" Reload" ), MAINMENU_FILE_RELOAD)
107110 .AddItem (B_TRANSLATE (" Save" ), MAINMENU_FILE_SAVE, ' S' )
108111 .AddItem (B_TRANSLATE (" Save as" B_UTF8_ELLIPSIS), MAINMENU_FILE_SAVEAS)
@@ -168,6 +171,9 @@ EditorWindow::EditorWindow(bool stagger)
168171 // When changing this shortcut remember to update one in StatusView as well
169172 AddShortcut (' T' , B_COMMAND_KEY | B_OPTION_KEY, new BMessage ((uint32) OPEN_TERMINAL));
170173
174+ fOpenRecentMenu = fMainMenu ->FindItem (MAINMENU_OPEN_RECENT)->Menu ();
175+ _PopulateOpenRecentMenu ();
176+
171177 fLanguageMenu = fMainMenu ->FindItem (MAINMENU_LANGUAGE)->Menu ();
172178 _PopulateLanguageMenu ();
173179
@@ -919,6 +925,30 @@ EditorWindow::SetOnQuitReplyToMessage(BMessage* message)
919925}
920926
921927
928+ void
929+ EditorWindow::_PopulateOpenRecentMenu ()
930+ {
931+ BMessage refList;
932+ be_roster->GetRecentDocuments (&refList, 10 , nullptr , gAppMime );
933+
934+ message_property<B_REF_TYPE> refs (&refList, " refs" );
935+ if (refs.size () == 0 ) {
936+ fOpenRecentMenu ->ItemAt (0 )->SetEnabled (false );
937+ } else {
938+ // Clear the menu first
939+ int32 count = fOpenRecentMenu ->CountItems ();
940+ fOpenRecentMenu ->RemoveItems (0 , count, true );
941+ for (auto ref : refs) {
942+ BPath p (&ref);
943+ BMessage *msg = new BMessage (B_REFS_RECEIVED);
944+ msg->AddRef (" refs" , &ref);
945+ BMenuItem *menuItem = new BMenuItem (p.Path (), msg);
946+ fOpenRecentMenu ->AddItem (menuItem);
947+ }
948+ }
949+ }
950+
951+
922952void
923953EditorWindow::_PopulateLanguageMenu ()
924954{
0 commit comments