summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-12-17 15:49:23 +0000
committerSzymon Kłos <szymon.klos@collabora.com>2021-06-18 11:30:48 +0200
commit1136d2dbed08a1c5410355d75b449ef81092c9f1 (patch)
treecd1ebddeb72958aeebbe1238dfaf87a60efc2697 /editeng
parent4a2894a2b9c973b275788190220d205e41eb92db (diff)
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 <caolanm@redhat.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117252 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Diffstat (limited to 'editeng')
-rw-r--r--editeng/source/editeng/editview.cxx80
1 files changed, 59 insertions, 21 deletions
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 )