Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
acb556a2
Kaydet (Commit)
acb556a2
authored
Nis 27, 2011
tarafından
Bjoern Michaelsen
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
lp#754562: remove status listener upon exit
* use initialization lists * more const goodness
üst
d4859a3a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
109 additions
and
64 deletions
+109
-64
FrameHelper.cxx
framework/source/lomenubar/FrameHelper.cxx
+75
-41
FrameHelper.hxx
framework/source/lomenubar/FrameHelper.hxx
+31
-20
MenuItemStatusListener.cxx
framework/source/lomenubar/MenuItemStatusListener.cxx
+2
-2
MenuItemStatusListener.hxx
framework/source/lomenubar/MenuItemStatusListener.hxx
+1
-1
No files found.
framework/source/lomenubar/FrameHelper.cxx
Dosyayı görüntüle @
acb556a2
...
...
@@ -26,6 +26,8 @@
#include "MenuItemInfo.hxx"
#include "MenuItemStatusListener.hxx"
#include <boost/foreach.hpp>
#include <com/sun/star/awt/KeyEvent.hpp>
#include <com/sun/star/awt/SystemDependentXWindow.hpp>
#include <com/sun/star/awt/XSystemDependentWindowPeer.hpp>
...
...
@@ -113,6 +115,62 @@ using com::sun::star::ui::XModuleUIConfigurationManagerSupplier;
using
com
::
sun
::
star
::
util
::
URL
;
using
com
::
sun
::
star
::
util
::
XURLTransformer
;
namespace
{
static
Sequence
<
Any
>
lcl_initArgs
(
const
OUString
&
sModuleName
,
const
Reference
<
XFrame
>
xFrame
)
{
// These are the arguments needed for the XPopupMenuController
Sequence
<
Any
>
aResult
(
2
);
PropertyValue
item
;
item
.
Name
=
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"ModuleName"
));
item
.
Value
<<=
sModuleName
;
aResult
[
0
]
<<=
item
;
item
.
Name
=
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"Frame"
));
item
.
Value
<<=
xFrame
;
aResult
[
1
]
<<=
item
;
return
aResult
;
};
struct
DispatchConnection
{
Reference
<
XDispatch
>
m_xDispatch
;
URL
m_aUrl
;
DispatchConnection
(
Reference
<
XDispatch
>
xDispatch
,
URL
aUrl
)
:
m_xDispatch
(
xDispatch
),
m_aUrl
(
aUrl
)
{}
};
}
namespace
framework
{
namespace
lomenubar
{
class
DispatchRegistry
{
private
:
::
std
::
vector
<
DispatchConnection
>
m_vDispatchConnections
;
const
Reference
<
XStatusListener
>
m_xStatusListener
;
public
:
DispatchRegistry
(
const
Reference
<
XStatusListener
>
xStatusListener
)
:
m_xStatusListener
(
xStatusListener
)
{}
~
DispatchRegistry
()
{
BOOST_FOREACH
(
const
DispatchConnection
&
rConnection
,
m_vDispatchConnections
)
{
rConnection
.
m_xDispatch
->
removeStatusListener
(
m_xStatusListener
,
rConnection
.
m_aUrl
);
}
}
void
Connect
(
Reference
<
XDispatch
>
xDispatch
,
URL
aURL
)
{
const
DispatchConnection
connection
(
xDispatch
,
aURL
);
m_vDispatchConnections
.
push_back
(
connection
);
xDispatch
->
addStatusListener
(
m_xStatusListener
,
aURL
);
}
};
}}
// ------------------------ Item callbacks ---------------------------
// Item activated. It distpatches the command associated to a given menu item.
void
...
...
@@ -198,31 +256,30 @@ destroy_menu_item_info (gpointer data)
FrameHelper
::
FrameHelper
(
const
Reference
<
XMultiServiceFactory
>&
rServiceManager
,
const
Reference
<
XFrame
>&
xFrame
,
DbusmenuServer
*
server
)
:
m_xStatusListener
(
new
MenuItemStatusListener
(
this
))
,
m_pDispatchRegistry
(
new
framework
::
lomenubar
::
DispatchRegistry
(
m_xStatusListener
))
,
m_xMSF
(
rServiceManager
)
,
m_xTrans
(
m_xMSF
->
createInstance
(
rtl
::
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.util.URLTransformer"
))),
UNO_QUERY
)
,
m_xMM
(
m_xMSF
->
createInstance
(
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.frame.ModuleManager"
))),
UNO_QUERY
)
,
m_xPCF
(
m_xMSF
->
createInstance
(
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.frame.PopupMenuControllerFactory"
))),
UNO_QUERY
)
,
m_xFrame
(
xFrame
)
,
m_xdp
(
xFrame
,
UNO_QUERY
)
,
m_args
(
lcl_initArgs
(
m_xMM
->
identify
(
xFrame
),
xFrame
))
,
m_server
(
server
)
,
m_root
(
NULL
)
,
m_watcher_set
(
FALSE
)
,
m_blockDetach
(
FALSE
)
{
m_xMSF
=
rServiceManager
;
this
->
m_xFrame
=
xFrame
;
this
->
m_server
=
server
;
//Get xUICommands database (to retrieve labels, see FrameJob::getLabelFromCommandURL ())
Reference
<
XNameAccess
>
xNameAccess
(
m_xMSF
->
createInstance
(
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.frame.UICommandDescription"
))),
UNO_QUERY
);
m_xMM
=
Reference
<
XModuleManager
>
(
m_xMSF
->
createInstance
(
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.frame.ModuleManager"
))),
UNO_QUERY
);
xNameAccess
->
getByName
(
m_xMM
->
identify
(
xFrame
))
>>=
m_xUICommands
;
m_xdp
=
Reference
<
XDispatchProvider
>
(
xFrame
,
UNO_QUERY
);
m_xTrans
=
Reference
<
XURLTransformer
>
(
m_xMSF
->
createInstance
(
rtl
::
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.util.URLTransformer"
))),
UNO_QUERY
);
m_xSL
=
(
XStatusListener
*
)
new
MenuItemStatusListener
(
this
);
// This initializes the shortcut database
getAcceleratorConfigurations
(
xFrame
->
getController
()
->
getModel
(),
m_xMM
);
// This information is needed for the dynamic submenus
m_xPCF
=
Reference
<
XMultiComponentFactory
>
(
m_xMSF
->
createInstance
(
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"com.sun.star.frame.PopupMenuControllerFactory"
))),
UNO_QUERY
);
// This is a hash table that maps Command URLs to MenuItemInfo classes
// to cache command information
m_commandsInfo
=
g_hash_table_new_full
(
g_str_hash
,
...
...
@@ -230,24 +287,6 @@ FrameHelper::FrameHelper(const Reference< XMultiServiceFactory >& rServiceManag
g_free
,
destroy_menu_item_info
);
// These are the arguments needed for the XPopupMenuController
m_args
=
Sequence
<
Any
>
(
2
);
PropertyValue
item
;
item
.
Name
=
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"ModuleName"
));
item
.
Value
<<=
m_xMM
->
identify
(
xFrame
);
m_args
[
0
]
<<=
item
;
item
.
Name
=
OUString
(
RTL_CONSTASCII_USTRINGPARAM
(
"Frame"
));
item
.
Value
<<=
xFrame
;
m_args
[
1
]
<<=
item
;
m_root
=
NULL
;
m_watcher_set
=
FALSE
;
//This variable prevents the helper from being disconnected from the frame
//for special cases of component dettaching like print preview
m_blockDetach
=
FALSE
;
}
void
SAL_CALL
...
...
@@ -256,6 +295,7 @@ FrameHelper::disposing (const EventObject& /*aEvent*/ ) throw (RuntimeException)
FrameHelper
::~
FrameHelper
()
{
::
boost
::
scoped_ptr
<
::
framework
::
lomenubar
::
DispatchRegistry
>
().
swap
(
m_pDispatchRegistry
);
if
(
m_server
)
g_object_unref
(
m_server
);
...
...
@@ -291,12 +331,6 @@ FrameHelper::getFrame ()
return
m_xFrame
;
}
XStatusListener
*
FrameHelper
::
getStatusListener
()
{
return
m_xSL
;
}
GHashTable
*
FrameHelper
::
getCommandsInfo
()
{
...
...
@@ -540,9 +574,9 @@ FrameHelper::rebuildMenu (Reference < XMenu > xMenu,
commandURL
.
Complete
=
oUCommand
;
m_xTrans
->
parseStrict
(
commandURL
);
Reference
<
XDispatch
>
xDispatch
=
m_xdp
->
queryDispatch
(
commandURL
,
OUString
(),
0
);
if
(
xDispatch
.
is
())
xDispatch
->
addStatusListener
(
m_xSL
,
commandURL
);
Reference
<
XDispatch
>
xDispatch
=
m_xdp
->
queryDispatch
(
commandURL
,
OUString
(),
0
);
if
(
xDispatch
.
is
())
m_pDispatchRegistry
->
Connect
(
xDispatch
,
commandURL
);
Reference
<
XPopupMenu
>
subPopMenu
(
xMenu
->
getPopupMenu
(
id
),
UNO_QUERY
);
...
...
framework/source/lomenubar/FrameHelper.hxx
Dosyayı görüntüle @
acb556a2
...
...
@@ -24,24 +24,28 @@
#ifndef __FRAME_HELPER_HXX__
#define __FRAME_HELPER_HXX__
#include <vector>
#include <boost/scoped_ptr.hpp>
#include <com/sun/star/awt/KeyEvent.hpp>
#include <com/sun/star/awt/XMenu.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/XFramesSupplier.hpp>
#include <com/sun/star/frame/FrameSearchFlag.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/frame/XFrameActionListener.hpp>
#include <com/sun/star/frame/XStatusListener.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/frame/FrameAction.hpp>
#include <com/sun/star/frame/FrameSearchFlag.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/XFrameActionListener.hpp>
#include <com/sun/star/frame/XFramesSupplier.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <com/sun/star/frame/XStatusListener.hpp>
#include <com/sun/star/lang/EventObject.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/ui/XAcceleratorConfiguration.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
#include <cppuhelper/implbase1.hxx>
//#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wignored-qualifiers"
...
...
@@ -73,6 +77,12 @@ using com::sun::star::util::XURLTransformer;
using
com
::
sun
::
star
::
ui
::
XAcceleratorConfiguration
;
using
rtl
::
OUString
;
namespace
framework
{
namespace
lomenubar
{
class
DispatchRegistry
;
}}
/* This class is a helper in charge of closing the dbusmenu server when a frame is closed,
* and also allows the menuitem callbacks to dispatch commands.
*/
...
...
@@ -80,23 +90,25 @@ using rtl::OUString;
class
FrameHelper
:
public
cppu
::
WeakImplHelper1
<
XFrameActionListener
>
{
private
:
Reference
<
XFrame
>
m_xFrame
;
Reference
<
XMultiServiceFactory
>
m_xMSF
;
const
Reference
<
XStatusListener
>
m_xStatusListener
;
::
boost
::
scoped_ptr
<
::
framework
::
lomenubar
::
DispatchRegistry
>
m_pDispatchRegistry
;
const
Reference
<
XMultiServiceFactory
>
m_xMSF
;
const
Reference
<
XURLTransformer
>
m_xTrans
;
const
Reference
<
XModuleManager
>
m_xMM
;
const
Reference
<
XMultiComponentFactory
>
m_xPCF
;
const
Reference
<
XFrame
>
m_xFrame
;
const
Reference
<
XDispatchProvider
>
m_xdp
;
const
Sequence
<
Any
>
m_args
;
Reference
<
XNameAccess
>
m_xUICommands
;
DbusmenuServer
*
m_server
;
DbusmenuMenuitem
*
m_root
;
gboolean
m_watcher_set
;
guint
m_watcher
;
XStatusListener
*
m_xSL
;
Reference
<
XURLTransformer
>
m_xTrans
;
Reference
<
XDispatchProvider
>
m_xdp
;
GHashTable
*
m_commandsInfo
;
//This variable prevents the helper from being disconnected from the frame
//for special cases of component dettaching like print preview
gboolean
m_blockDetach
;
//These object/methods are used to recreate dynamic popupmenus
Reference
<
XMultiComponentFactory
>
m_xPCF
;
Reference
<
XModuleManager
>
m_xMM
;
Sequence
<
Any
>
m_args
;
gboolean
isSpecialSubmenu
(
OUString
command
);
...
...
@@ -131,7 +143,6 @@ class FrameHelper : public cppu::WeakImplHelper1 < XFrameActionListener >
Reference
<
XFrame
>
getFrame
();
unsigned
long
getXID
();
GHashTable
*
getCommandsInfo
();
XStatusListener
*
getStatusListener
();
::
rtl
::
OUString
getLabelFromCommandURL
(
::
rtl
::
OUString
);
//Menu Related actions
...
...
framework/source/lomenubar/MenuItemStatusListener.cxx
Dosyayı görüntüle @
acb556a2
...
...
@@ -6,9 +6,9 @@
using
com
::
sun
::
star
::
frame
::
status
::
Visibility
;
MenuItemStatusListener
::
MenuItemStatusListener
(
FrameHelper
*
helper
)
:
m_helper
(
helper
)
{
if
(
!
helper
)
throw
(
"FrameHelper cannot be NULL"
);
this
->
m_helper
=
helper
;
OSL_ENSURE
(
m_helper
,
"FrameHelper cannot be NULL"
);
}
void
SAL_CALL
...
...
framework/source/lomenubar/MenuItemStatusListener.hxx
Dosyayı görüntüle @
acb556a2
...
...
@@ -19,7 +19,7 @@ class MenuItemStatusListener : public cppu::WeakImplHelper1 < XStatusListener >
{
private
:
guint16
m_id
;
FrameHelper
*
m_helper
;
FrameHelper
*
const
m_helper
;
public
:
MenuItemStatusListener
(
FrameHelper
*
helper
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment