editeng/source/editeng/editview.cxx | 80 ++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 21 deletions(-)
New commits: commit 1136d2dbed08a1c5410355d75b449ef81092c9f1 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Dec 17 15:49:23 2020 +0000 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Fri Jun 18 11:30:48 2021 +0200 drop dumping intermediate popup menu and go straight to boost::property_tree Change-Id: I1209cf14cd23adee9ecf01b73bfcc95b80dea07a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107887 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117252 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx index 094c2f45a558..18ed2f506405 100644 --- a/editeng/source/editeng/editview.cxx +++ b/editeng/source/editeng/editview.cxx @@ -893,33 +893,71 @@ static void LOKSendSpellPopupMenu(Menu* pMenu, LanguageType nGuessLangWord, if (!comphelper::LibreOfficeKit::isActive()) return; - // First we need to set item commands for the context menu. - OUString aTmpWord( SvtLanguageTable::GetLanguageString( nGuessLangWord ) ); - OUString aTmpPara( SvtLanguageTable::GetLanguageString( nGuessLangPara ) ); + // Generate the menu structure and send it to the client code. + SfxViewShell* pViewShell = SfxViewShell::Current(); + if (!pViewShell) + return; - pMenu->SetItemCommand(pMenu->GetItemId("ignore"), ".uno:SpellCheckIgnoreAll?Type:string=Spelling"); - pMenu->SetItemCommand(MN_WORDLANGUAGE, ".uno:LanguageStatus?Language:string=Current_" + aTmpWord); - pMenu->SetItemCommand(MN_PARALANGUAGE, ".uno:LanguageStatus?Language:string=Paragraph_" + aTmpPara); + boost::property_tree::ptree aMenu; - for(int i = 0; i < nSuggestions; ++i) + boost::property_tree::ptree aItemTree; + if (nSuggestions) { - sal_uInt16 nItemId = MN_ALTSTART + i; - OUString sCommandString = ".uno:SpellCheckApplySuggestion?ApplyRule:string=Spelling_" + pMenu->GetItemText(nItemId); - pMenu->SetItemCommand(nItemId, sCommandString); + for(int i = 0; i < nSuggestions; ++i) + { + sal_uInt16 nItemId = MN_ALTSTART + i; + OUString sText = pMenu->GetItemText(nItemId); + aItemTree.put("text", sText.toUtf8().getStr()); + aItemTree.put("type", "command"); + OUString sCommandString = ".uno:SpellCheckApplySuggestion?ApplyRule:string=Spelling_" + sText; + aItemTree.put("command", sCommandString.toUtf8().getStr()); + aItemTree.put("enabled", pMenu->IsItemEnabled(nItemId)); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); + } + + aItemTree.put("type", "separator"); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); } - // Then we generate the menu structure and send it to the client code. - if (SfxViewShell* pViewShell = SfxViewShell::Current()) - { - boost::property_tree::ptree aMenu = SfxDispatcher::fillPopupMenu(pMenu); - boost::property_tree::ptree aRoot; - aRoot.add_child("menu", aMenu); + // First we need to set item commands for the context menu. + OUString aTmpWord( SvtLanguageTable::GetLanguageString( nGuessLangWord ) ); + OUString aTmpPara( SvtLanguageTable::GetLanguageString( nGuessLangPara ) ); - std::stringstream aStream; - boost::property_tree::write_json(aStream, aRoot, true); - pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CONTEXT_MENU, aStream.str().c_str()); - return; - } + aItemTree.put("text", pMenu->GetItemText(pMenu->GetItemId("ignore")).toUtf8().getStr()); + aItemTree.put("type", "command"); + aItemTree.put("command", ".uno:SpellCheckIgnoreAll?Type:string=Spelling"); + aItemTree.put("enabled", pMenu->IsItemEnabled(pMenu->GetItemId("ignore"))); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); + + aItemTree.put("type", "separator"); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); + + aItemTree.put("text", pMenu->GetItemText(MN_WORDLANGUAGE).toUtf8().getStr()); + aItemTree.put("type", "command"); + OUString sCommandString = ".uno:LanguageStatus?Language:string=Current_" + aTmpWord; + aItemTree.put("command", sCommandString.toUtf8().getStr()); + aItemTree.put("enabled", pMenu->IsItemEnabled(MN_WORDLANGUAGE)); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); + + aItemTree.put("text", pMenu->GetItemText(MN_PARALANGUAGE).toUtf8().getStr()); + aItemTree.put("type", "command"); + sCommandString = ".uno:LanguageStatus?Language:string=Paragraph_" + aTmpPara; + aItemTree.put("command", sCommandString.toUtf8().getStr()); + aItemTree.put("enabled", pMenu->IsItemEnabled(MN_PARALANGUAGE)); + aMenu.push_back(std::make_pair("", aItemTree)); + aItemTree.clear(); + + boost::property_tree::ptree aRoot; + aRoot.add_child("menu", aMenu); + + std::stringstream aStream; + boost::property_tree::write_json(aStream, aRoot, true); + pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CONTEXT_MENU, aStream.str().c_str()); } void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo&,void> const * pCallBack ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits