diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2015-11-25 17:33:45 +0200 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2015-11-26 08:19:23 +0000 |
commit | ff35d252ff247c55c1004cce6676af8f881a2e68 (patch) | |
tree | 70ba1c6055b0689132e230533236d9553baf4f64 /sw | |
parent | 8d6136206f26dbee773ffaea18a0f37c17e55024 (diff) |
tdf#93837 Add UNO-based SmartTag menu controller
... and use it for the standalone context menu. The sfx2
controller (SvxSmartTagsControl) is still used for the
submenu variation, and is due to be removed after the new
context menu implementation is in place.
Change-Id: I2f889428eb777149f43d74cf3d081e19ab0ebb4a
Reviewed-on: https://gerrit.libreoffice.org/20169
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
Tested-by: Maxim Monastirsky <momonasmon@gmail.com>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/AllLangResTarget_sw.mk | 1 | ||||
-rw-r--r-- | sw/Library_sw.mk | 1 | ||||
-rw-r--r-- | sw/inc/crsrsh.hxx | 8 | ||||
-rw-r--r-- | sw/inc/rcid.hrc | 5 | ||||
-rw-r--r-- | sw/inc/view.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/crsr/crsrsh.cxx | 11 | ||||
-rw-r--r-- | sw/source/uibase/inc/stmenu.hxx | 72 | ||||
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.cxx | 167 | ||||
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.hrc | 33 | ||||
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.src | 37 | ||||
-rw-r--r-- | sw/source/uibase/uiview/view.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewling.cxx | 42 |
12 files changed, 31 insertions, 350 deletions
diff --git a/sw/AllLangResTarget_sw.mk b/sw/AllLangResTarget_sw.mk index c95c16a2241f..ef8d7ea14836 100644 --- a/sw/AllLangResTarget_sw.mk +++ b/sw/AllLangResTarget_sw.mk @@ -75,7 +75,6 @@ $(eval $(call gb_SrsTarget_add_files,sw/res,\ sw/source/uibase/misc/redlndlg.src \ sw/source/uibase/ribbar/inputwin.src \ sw/source/uibase/ribbar/workctrl.src \ - sw/source/uibase/smartmenu/stmenu.src \ sw/source/uibase/uiview/view.src \ sw/source/uibase/utlui/attrdesc.src \ sw/source/uibase/utlui/navipi.src \ diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk index b4af6e57c547..789a777746c6 100644 --- a/sw/Library_sw.mk +++ b/sw/Library_sw.mk @@ -684,7 +684,6 @@ $(eval $(call gb_Library_add_exception_objects,sw,\ sw/source/uibase/sidebar/WrapPropertyPanel \ sw/source/uibase/sidebar/ThemePanel \ sw/source/uibase/sidebar/SwPanelFactory \ - sw/source/uibase/smartmenu/stmenu \ sw/source/uibase/table/chartins \ sw/source/uibase/table/swtablerep \ sw/source/uibase/table/tablemgr \ diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx index d53a61064cc0..13d8c0c9b219 100644 --- a/sw/inc/crsrsh.hxx +++ b/sw/inc/crsrsh.hxx @@ -768,12 +768,8 @@ public: const SwPostItField* GetPostItFieldAtCursor() const; - // get smart tags at point position - void GetSmartTagTerm( const Point& rPt, - SwRect& rSelectRect, - css::uno::Sequence< OUString >& rSmartTagTypes, - css::uno::Sequence< css::uno::Reference< css::container::XStringKeyMap > >& rStringKeyMaps, - css::uno::Reference<css::text::XTextRange>& rRange ); + // get smart tags rectangle for the given point + void GetSmartTagRect( const Point& rPt, SwRect& rSelectRect ); // get smart tags at current cursor position void GetSmartTagTerm( css::uno::Sequence< OUString >& rSmartTagTypes, diff --git a/sw/inc/rcid.hrc b/sw/inc/rcid.hrc index 0af476262780..f80958807599 100644 --- a/sw/inc/rcid.hrc +++ b/sw/inc/rcid.hrc @@ -235,10 +235,7 @@ #define RC_ACCESS_END (RC_ACCESS + 99) // free: RC_UNDO to (RC_UNDO + 199) - -// Smarttags -#define RC_SMARTTAG_BEGIN RC_SMARTTAG -// RC_SMARTTAG_END (RC_SMARTTAG + 99) +// free: RC_SMARTTAG to (RC_SMARTTAG + 99) // unocore #define RC_UNOCORE_BEGIN RC_UNOCORE diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx index a757d79a0234..bfb7b3d4bcd6 100644 --- a/sw/inc/view.hxx +++ b/sw/inc/view.hxx @@ -428,7 +428,7 @@ public: void SpellError(LanguageType eLang); bool ExecSpellPopup( const Point& rPt ); void ExecFieldPopup( const Point& rPt, sw::mark::IFieldmark *fieldBM ); - bool ExecSmartTagPopup( const Point& rPt ); + void ExecSmartTagPopup( const Point& rPt ); DECL_LINK_TYPED( OnlineSpellCallback, SpellCallbackInfo&, void ); bool ExecDrwTextSpellPopup(const Point& rPt); diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx index a3375beceeb0..22afa5177178 100644 --- a/sw/source/core/crsr/crsrsh.cxx +++ b/sw/source/core/crsr/crsrsh.cxx @@ -3460,14 +3460,8 @@ void SwCursorShell::GetSmartTagTerm( uno::Sequence< OUString >& rSmartTagTypes, } // see also SwEditShell::GetCorrection( const Point* pPt, SwRect& rSelectRect ) -void SwCursorShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, - uno::Sequence< OUString >& rSmartTagTypes, - uno::Sequence< uno::Reference< container::XStringKeyMap > >& rStringKeyMaps, - uno::Reference<text::XTextRange>& rRange ) +void SwCursorShell::GetSmartTagRect( const Point& rPt, SwRect& rSelectRect ) { - if ( !SwSmartTagMgr::Get().IsSmartTagsEnabled() ) - return; - SwPaM* pCursor = GetCursor(); SwPosition aPos( *pCursor->GetPoint() ); Point aPt( rPt ); @@ -3496,9 +3490,6 @@ void SwCursorShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, nCurrent = eTmpState.m_pSpecialPos->nCharOfst; } - lcl_FillRecognizerData( rSmartTagTypes, rStringKeyMaps, *pSmartTagList, nCurrent ); - lcl_FillTextRange( rRange, *pNode, nBegin, nLen ); - // get smarttag word OUString aText( pNode->GetText().copy(nBegin, nLen) ); diff --git a/sw/source/uibase/inc/stmenu.hxx b/sw/source/uibase/inc/stmenu.hxx deleted file mode 100644 index 6c6073895ee0..000000000000 --- a/sw/source/uibase/inc/stmenu.hxx +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SW_SOURCE_UIBASE_INC_STMENU_HXX -#define INCLUDED_SW_SOURCE_UIBASE_INC_STMENU_HXX - -#include <vcl/menu.hxx> - -#include <vector> -#include <com/sun/star/smarttags/XSmartTagAction.hpp> - -#include <com/sun/star/container/XStringKeyMap.hpp> -#include <com/sun/star/text/XTextRange.hpp> - -class SwView; - -/** Class: SwSmartTagPopup - - This class contains the implementation of the smarttag popup - menu that is opened if a user clicks on an underlined word. - - The menu is built in the constructor and the actions for each - menu entry are invoked in the execute-method. -*/ - -class SwSmartTagPopup : public PopupMenu -{ - SwView* mpSwView; - css::uno::Reference< css::text::XTextRange > mxTextRange; - - struct InvokeAction - { - css::uno::Reference< css::smarttags::XSmartTagAction > mxAction; - css::uno::Reference< css::container::XStringKeyMap > mxSmartTagProperties; - sal_uInt32 mnActionID; - InvokeAction( css::uno::Reference< css::smarttags::XSmartTagAction > xAction, - css::uno::Reference< css::container::XStringKeyMap > xSmartTagProperties, - sal_uInt32 nActionID ) : mxAction( xAction ), mxSmartTagProperties( xSmartTagProperties ), mnActionID( nActionID ) {} - }; - - std::vector< InvokeAction > maInvokeActions; - - using PopupMenu::Execute; - -public: - SwSmartTagPopup( SwView* _pSwView, - css::uno::Sequence< OUString >& rSmartTagTypes, - css::uno::Sequence< css::uno::Reference< css::container::XStringKeyMap > >& rStringKeyMaps, - css::uno::Reference< css::text::XTextRange > xTextRange ); - - sal_uInt16 Execute( const Rectangle& rPopupPos, vcl::Window* pWin ); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/smartmenu/stmenu.cxx b/sw/source/uibase/smartmenu/stmenu.cxx deleted file mode 100644 index 42751cfc507d..000000000000 --- a/sw/source/uibase/smartmenu/stmenu.cxx +++ /dev/null @@ -1,167 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <stmenu.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <svl/eitem.hxx> -#include <sfx2/dispatch.hxx> - -#include <SwSmartTagMgr.hxx> - -#include <stmenu.hrc> -#include <view.hxx> -#include <breakit.hxx> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; - -SwSmartTagPopup::SwSmartTagPopup( SwView* pSwView, - Sequence< OUString >& rSmartTagTypes, - Sequence< Reference< container::XStringKeyMap > >& rStringKeyMaps, - Reference< text::XTextRange > xTextRange ) : - PopupMenu( SW_RES(MN_SMARTTAG_POPUP) ), - mpSwView ( pSwView ), - mxTextRange( xTextRange ) -{ - Reference <frame::XController> xController = mpSwView->GetController(); - const lang::Locale aLocale( SW_BREAKITER()->GetLocale( GetAppLanguageTag() ) ); - - sal_uInt16 nMenuPos = 0; - sal_uInt16 nMenuId = 1; - sal_uInt16 nSubMenuId = MN_ST_INSERT_START; - - const OUString aRangeText = mxTextRange->getString(); - - SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get(); - const OUString aApplicationName( rSmartTagMgr.GetApplicationName() ); - - Sequence < Sequence< Reference< smarttags::XSmartTagAction > > > aActionComponentsSequence; - Sequence < Sequence< sal_Int32 > > aActionIndicesSequence; - - rSmartTagMgr.GetActionSequences( rSmartTagTypes, - aActionComponentsSequence, - aActionIndicesSequence ); - - InsertSeparator(OString(), 0); - - for ( sal_Int32 j = 0; j < aActionComponentsSequence.getLength(); ++j ) - { - Reference< container::XStringKeyMap > xSmartTagProperties = rStringKeyMaps[j]; - - // Get all actions references associated with the current smart tag type: - const Sequence< Reference< smarttags::XSmartTagAction > >& rActionComponents = aActionComponentsSequence[j]; - const Sequence< sal_Int32 >& rActionIndices = aActionIndicesSequence[j]; - - if ( 0 == rActionComponents.getLength() || 0 == rActionIndices.getLength() ) - continue; - - // Ask first entry for the smart tag type caption: - Reference< smarttags::XSmartTagAction > xAction = rActionComponents[0]; - - if ( !xAction.is() ) - continue; - - const sal_Int32 nSmartTagIndex = rActionIndices[0]; - const OUString aSmartTagType = xAction->getSmartTagName( nSmartTagIndex ); - const OUString aSmartTagCaption = xAction->getSmartTagCaption( nSmartTagIndex, aLocale ); - - // no sub-menus if there's only one smart tag type listed: - PopupMenu* pSbMenu = this; - if ( 1 < aActionComponentsSequence.getLength() ) - { - InsertItem(nMenuId, aSmartTagCaption, MenuItemBits::NONE, OString(), nMenuPos++); - pSbMenu = new PopupMenu; - SetPopupMenu( nMenuId++, pSbMenu ); - } - - // sub-menu starts with smart tag caption and separator - const OUString aSmartTagCaption2 = aSmartTagCaption + ": " + aRangeText; - sal_uInt16 nSubMenuPos = 0; - pSbMenu->InsertItem(nMenuId++, aSmartTagCaption2, MenuItemBits::NOSELECT, OString(), nSubMenuPos++); - pSbMenu->InsertSeparator(OString(), nSubMenuPos++); - - // Add subitem for every action reference for the current smart tag type: - for ( sal_Int32 i = 0; i < rActionComponents.getLength(); ++i ) - { - xAction = rActionComponents[i]; - - for ( sal_Int32 k = 0; k < xAction->getActionCount( aSmartTagType, xController, xSmartTagProperties ); ++k ) - { - const sal_uInt32 nActionID = xAction->getActionID( aSmartTagType, k, xController ); - OUString aActionCaption = xAction->getActionCaptionFromID( nActionID, - aApplicationName, - aLocale, - xSmartTagProperties, - aRangeText, - OUString(), - xController, - mxTextRange ); - - pSbMenu->InsertItem(nSubMenuId++, aActionCaption, MenuItemBits::NONE, OString(), nSubMenuPos++); - InvokeAction aEntry( xAction, xSmartTagProperties, nActionID ); - maInvokeActions.push_back( aEntry ); - } - } - } -} - -/** Function: Execute - - executes actions by calling the invoke function of the appropriate - smarttag library. - -*/ -sal_uInt16 SwSmartTagPopup::Execute( const Rectangle& rWordPos, vcl::Window* pWin ) -{ - sal_uInt16 nId = PopupMenu::Execute(pWin, pWin->LogicToPixel(rWordPos)); - - if ( nId == MN_SMARTTAG_OPTIONS ) - { - SfxBoolItem aBool(SID_OPEN_SMARTTAGOPTIONS, true); - mpSwView->GetViewFrame()->GetDispatcher()->Execute( SID_AUTO_CORRECT_DLG, SfxCallMode::ASYNCHRON, &aBool, 0L ); - } - - if ( nId < MN_ST_INSERT_START) return nId; - nId -= MN_ST_INSERT_START; - - // compute smarttag lib index and action index - if ( nId < maInvokeActions.size() ) - { - Reference< smarttags::XSmartTagAction > xSmartTagAction = maInvokeActions[ nId ].mxAction; - - // execute action - if ( xSmartTagAction.is() ) - { - SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get(); - - xSmartTagAction->invokeAction( maInvokeActions[ nId ].mnActionID, - rSmartTagMgr.GetApplicationName(), - mpSwView->GetController(), - mxTextRange, - maInvokeActions[ nId ].mxSmartTagProperties, - mxTextRange->getString(), - OUString(), - SW_BREAKITER()->GetLocale( GetAppLanguageTag() ) ); - } - } - - return nId; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/smartmenu/stmenu.hrc b/sw/source/uibase/smartmenu/stmenu.hrc deleted file mode 100644 index 315fb3535af5..000000000000 --- a/sw/source/uibase/smartmenu/stmenu.hrc +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _STMENU_HRC -#define _STMENU_HRC - -#include "rcid.hrc" - -#define MN_SMARTTAG_POPUP (RC_SMARTTAG_BEGIN + 1) - -#define MN_SMARTTAG_OPTIONS 105 - -#define MN_ST_INSERT_START 500 - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/smartmenu/stmenu.src b/sw/source/uibase/smartmenu/stmenu.src deleted file mode 100644 index 326c13b8841e..000000000000 --- a/sw/source/uibase/smartmenu/stmenu.src +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -/* StarView resource file */ - -#include "stmenu.hrc" -#include "helpid.h" - -Menu MN_SMARTTAG_POPUP -{ - ItemList = - { - MenuItem - { - Identifier = MN_SMARTTAG_OPTIONS ; - HelpID = HID_SMARTTAG_MAIN ; - Text [ en-US ] = "Smart Tag Options..." ; - }; - }; -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx index 0cd0cc34ee14..27d48f5b7eb2 100644 --- a/sw/source/uibase/uiview/view.cxx +++ b/sw/source/uibase/uiview/view.cxx @@ -135,7 +135,7 @@ bool SwView::m_bJustOpened = false; SearchAttrItemList* SwView::m_pSrchList = nullptr; SearchAttrItemList* SwView::m_pReplList = nullptr; -inline SfxDispatcher &SwView::GetDispatcher() +SfxDispatcher &SwView::GetDispatcher() { return *GetViewFrame()->GetDispatcher(); } diff --git a/sw/source/uibase/uiview/viewling.cxx b/sw/source/uibase/uiview/viewling.cxx index 4b4c2a230a3d..f72e370256cc 100644 --- a/sw/source/uibase/uiview/viewling.cxx +++ b/sw/source/uibase/uiview/viewling.cxx @@ -25,10 +25,12 @@ #include <com/sun/star/i18n/TextConversionOption.hpp> #include <linguistic/lngprops.hxx> #include <comphelper/processfactory.hxx> +#include <comphelper/propertyvalue.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/msgbox.hxx> #include <svtools/ehdl.hxx> #include <svl/stritem.hxx> +#include <sfx2/dispatch.hxx> #include <sfx2/viewfrm.hxx> #include <sfx2/request.hxx> #include <svx/dlgutil.hxx> @@ -68,6 +70,8 @@ #include <com/sun/star/frame/XDispatch.hpp> #include <com/sun/star/frame/XDispatchProvider.hpp> #include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/frame/XPopupMenuController.hpp> +#include <com/sun/star/awt/PopupMenuDirection.hpp> #include <com/sun/star/util/URL.hpp> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/util/URLTransformer.hpp> @@ -77,7 +81,6 @@ #include <rtl/ustring.hxx> #include <cppuhelper/bootstrap.hxx> -#include "stmenu.hxx" #include <svx/dialogs.hrc> #include <svtools/langtab.hxx> #include <unomid.h> @@ -93,7 +96,6 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::linguistic2; -using namespace ::com::sun::star::smarttags; // Lingu-Dispatcher @@ -788,33 +790,39 @@ bool SwView::ExecSpellPopup(const Point& rPt) This function shows the popup menu for smarttag actions. */ -bool SwView::ExecSmartTagPopup( const Point& rPt ) +void SwView::ExecSmartTagPopup( const Point& rPt ) { - bool bRet = false; const bool bOldViewLock = m_pWrtShell->IsViewLocked(); m_pWrtShell->LockView( true ); m_pWrtShell->Push(); - // get word that was clicked on - // This data structure maps a smart tag type string to the property bag - SwRect aToFill; - Sequence< OUString > aSmartTagTypes; - Sequence< Reference< container::XStringKeyMap > > aStringKeyMaps; - Reference<text::XTextRange> xRange; + css::uno::Sequence< css::uno::Any > aArgs( 2 ); + aArgs[0] <<= comphelper::makePropertyValue( "Frame", GetDispatcher().GetFrame()->GetFrame().GetFrameInterface() ); + aArgs[1] <<= comphelper::makePropertyValue( "CommandURL", OUString( ".uno:OpenSmartTagMenuOnCursor" ) ); + + css::uno::Reference< css::uno::XComponentContext > xContext = comphelper::getProcessComponentContext(); + css::uno::Reference< css::frame::XPopupMenuController > xPopupController( + xContext->getServiceManager()->createInstanceWithArgumentsAndContext( + "com.sun.star.comp.svx.SmartTagMenuController", aArgs, xContext ), css::uno::UNO_QUERY ); - m_pWrtShell->GetSmartTagTerm( rPt, aToFill, aSmartTagTypes, aStringKeyMaps, xRange); - if ( xRange.is() && aSmartTagTypes.getLength() ) + css::uno::Reference< css::awt::XPopupMenu > xPopupMenu( xContext->getServiceManager()->createInstanceWithContext( + "com.sun.star.awt.PopupMenu", xContext ), css::uno::UNO_QUERY ); + + if ( xPopupController.is() && xPopupMenu.is() ) { - bRet = true; + xPopupController->setPopupMenu( xPopupMenu ); + + SwRect aToFill; + m_pWrtShell->GetSmartTagRect( rPt, aToFill ); m_pWrtShell->SttSelect(); - SwSmartTagPopup aPopup( this, aSmartTagTypes, aStringKeyMaps, xRange ); - aPopup.Execute( aToFill.SVRect(), m_pEditWin ); + + if ( aToFill.HasArea() ) + xPopupMenu->execute( m_pEditWin->GetComponentInterface(), + VCLUnoHelper::ConvertToAWTRect( m_pEditWin->LogicToPixel( aToFill.SVRect() ) ), css::awt::PopupMenuDirection::EXECUTE_DOWN ); } m_pWrtShell->Pop( false ); m_pWrtShell->LockView( bOldViewLock ); - - return bRet; } class SwFieldDialog : public FloatingWindow |