[Libreoffice-commits] core.git: 3 commits - compilerplugins/clang vcl/inc vcl/source
Stephan Bergmann
sbergman at redhat.com
Sun Oct 9 07:44:50 UTC 2016
compilerplugins/clang/badstatics.cxx | 63 ++++++++-
compilerplugins/clang/check.hxx | 16 ++
vcl/inc/svdata.hxx | 229 +++++++++++++++++------------------
vcl/source/app/svapp.cxx | 22 +--
vcl/source/app/svdata.cxx | 10 -
5 files changed, 198 insertions(+), 142 deletions(-)
New commits:
commit 995318e2996abac01dbbbc73f61e93cbb7acd453
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Oct 8 23:55:08 2016 +0200
loplugin:badstatics: reliably look into std container types
Change-Id: Ifca7325533e3f7d5ce5c59cc6b14d4232d4fc792
Reviewed-on: https://gerrit.libreoffice.org/29614
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
Tested-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx
index db5b0dd..7ac7820 100644
--- a/compilerplugins/clang/badstatics.cxx
+++ b/compilerplugins/clang/badstatics.cxx
@@ -7,6 +7,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <cassert>
+
#include "check.hxx"
#include "plugin.hxx"
@@ -30,20 +32,27 @@ public:
QualType const& rpType, std::vector<FieldDecl const*> & chain,
std::vector<QualType> const& rParents)
{
- QualType const pCanonical(rpType.getUnqualifiedType().getCanonicalType());
- if (pCanonical->isPointerType() || pCanonical->isReferenceType()) {
- QualType const pPointee(pCanonical->getPointeeType().getUnqualifiedType().getCanonicalType());
+ QualType pt;
+ if (rpType->isAnyPointerType()) {
+ pt = rpType->getPointeeType();
+ } else if (auto at = rpType->getAsArrayTypeUnsafe()) {
+ pt = at->getElementType();
+ } else if (auto rt = rpType->getAs<ReferenceType>()) {
+ pt = rt->getPointeeType();
+ }
+ if (!pt.isNull()) {
+ QualType const pPointee(pt.getUnqualifiedType().getCanonicalType());
auto const iter(std::find(rParents.begin(), rParents.end(), pPointee));
if (iter == rParents.end())
{
std::vector<QualType> copy(rParents);
- copy.push_back(pCanonical);
- return isBadStaticType(pPointee, chain, copy);
+ copy.push_back(rpType.getUnqualifiedType().getCanonicalType());
+ return isBadStaticType(pt, chain, copy);
} else {
return std::make_pair(false, std::vector<FieldDecl const*>());
}
}
- RecordType const*const pRecordType(pCanonical->getAs<RecordType>());
+ RecordType const*const pRecordType(rpType->getAs<RecordType>());
if (!pRecordType) {
return std::make_pair(false, std::vector<FieldDecl const*>());
}
@@ -56,6 +65,44 @@ public:
{
return std::make_pair(true, chain);
}
+ if (type.Class("array").StdNamespace()
+ || type.Class("deque").StdNamespace()
+ || type.Class("forward_list").StdNamespace()
+ || type.Class("initializer_list").StdNamespace()
+ || type.Class("list").StdNamespace()
+ || type.Class("multiset").StdNamespace()
+ || type.Class("set").StdNamespace()
+ || type.Class("unordered_multiset").StdNamespace()
+ || type.Class("unordered_set").StdNamespace()
+ || type.Class("vector").StdNamespace())
+ {
+ std::vector<QualType> copy(rParents);
+ copy.push_back(rpType.getUnqualifiedType().getCanonicalType());
+ auto ctsd = dyn_cast<ClassTemplateSpecializationDecl>(
+ pRecordType->getDecl());
+ assert(ctsd != nullptr);
+ auto const & args = ctsd->getTemplateArgs();
+ assert(args.size() >= 1);
+ return isBadStaticType(args.get(0).getAsType(), chain, copy);
+ }
+ if (type.Class("map").StdNamespace()
+ || type.Class("multimap").StdNamespace()
+ || type.Class("unordered_map").StdNamespace()
+ || type.Class("unordered_multimap").StdNamespace())
+ {
+ std::vector<QualType> copy(rParents);
+ copy.push_back(rpType.getUnqualifiedType().getCanonicalType());
+ auto ctsd = dyn_cast<ClassTemplateSpecializationDecl>(
+ pRecordType->getDecl());
+ assert(ctsd != nullptr);
+ auto const & args = ctsd->getTemplateArgs();
+ assert(args.size() >= 2);
+ auto ret = isBadStaticType(args.get(0).getAsType(), chain, copy);
+ if (ret.first) {
+ return ret;
+ }
+ return isBadStaticType(args.get(1).getAsType(), chain, copy);
+ }
RecordDecl const*const pDefinition(pRecordType->getDecl()->getDefinition());
if (!pDefinition) { // maybe no definition if it's a pointer/reference
return std::make_pair(false, std::vector<FieldDecl const*>());
@@ -70,7 +117,7 @@ public:
return std::make_pair(false, std::vector<FieldDecl const*>());
}
std::vector<QualType> copy(rParents);
- copy.push_back(pCanonical);
+ copy.push_back(rpType.getUnqualifiedType().getCanonicalType());
CXXRecordDecl const*const pDecl(dyn_cast<CXXRecordDecl>(pDefinition));
assert(pDecl);
for (auto it = pDecl->field_begin(); it != pDecl->field_end(); ++it) {
commit 160478912af18a268c72907e6fd49bf6d95f0af2
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Oct 8 23:49:29 2016 +0200
loplugin:badstatics
ScAddInListener has a member
ScAddInDocs* pDocs; // documents where this is used
where ScAddInDocs is set<ScDocument*>, and ScDocument has a memmber
VclPtr<SfxPrinter> pPrinter;
so that's only a chain of (apparently non-owning) pointers.
Change-Id: I050218320eb2c588dcfaee80225f4e45a515ed32
Reviewed-on: https://gerrit.libreoffice.org/29613
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
Tested-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx
index 12e6b93..db5b0dd 100644
--- a/compilerplugins/clang/badstatics.cxx
+++ b/compilerplugins/clang/badstatics.cxx
@@ -150,6 +150,8 @@ public:
// ScAddInAsync* keys if that set is not empty at exit
|| name == "g_aWindowList"
//vcl/unx/gtk/a11y/atkutil.cxx, asserted empty at exit
+ || (loplugin::DeclCheck(pVarDecl).Var("aAllListeners")
+ .Class("ScAddInListener").GlobalNamespace()) // not owning
) // these variables appear unproblematic
{
return true;
diff --git a/compilerplugins/clang/check.hxx b/compilerplugins/clang/check.hxx
index 0c2c1bb..9bfc458 100644
--- a/compilerplugins/clang/check.hxx
+++ b/compilerplugins/clang/check.hxx
@@ -78,6 +78,9 @@ public:
ContextCheck Operator(clang::OverloadedOperatorKind op) const;
+ template<std::size_t N> inline ContextCheck Var(char const (& id)[N])
+ const;
+
ContextCheck MemberFunction() const;
private:
@@ -198,6 +201,19 @@ template<std::size_t N> ContextCheck DeclCheck::Function(char const (& id)[N])
return ContextCheck();
}
+template<std::size_t N> ContextCheck DeclCheck::Var(char const (& id)[N])
+ const
+{
+ auto f = llvm::dyn_cast_or_null<clang::VarDecl>(decl_);
+ if (f != nullptr) {
+ auto const i = f->getIdentifier();
+ if (i != nullptr && i->isStr(id)) {
+ return ContextCheck(f->getDeclContext());
+ }
+ }
+ return ContextCheck();
+}
+
template<std::size_t N> ContextCheck ContextCheck::Namespace(
char const (& id)[N]) const
{
commit 2994586faac6a804b2d2b910133763ceb16134a0
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Oct 8 23:45:40 2016 +0200
loplugin:badstatics
...so make aPostedEventList a member of the global ImpSVAppData singleton
Change-Id: Ie7ac49b56107eb393514d9ba1d91ee66296f60a0
Reviewed-on: https://gerrit.libreoffice.org/29612
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index c82bace..ded416e 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -34,9 +34,11 @@
#include "salwtype.hxx"
#include "displayconnectiondispatch.hxx"
+#include <list>
#include <unordered_map>
#include <boost/functional/hash.hpp>
+struct ImplPostEventData;
struct ImplTimerData;
struct ImplIdleData;
struct ImplConfigData;
@@ -97,6 +99,8 @@ public:
typedef std::vector<Link<VclWindowEvent&,bool> > SVAppKeyListeners;
+typedef std::pair<VclPtr<vcl::Window>, ImplPostEventData *> ImplPostEventPair;
+
struct ImplSVAppData
{
enum ImeStatusWindowMode
@@ -106,40 +110,41 @@ struct ImplSVAppData
ImeStatusWindowMode_SHOW
};
- AllSettings* mpSettings; // Application settings
- LocaleConfigurationListener* mpCfgListener;
- VclEventListeners* mpEventListeners; // listeners for vcl events (eg, extended toolkit)
- SVAppKeyListeners* mpKeyListeners; // listeners for key events only (eg, extended toolkit)
- ImplAccelManager* mpAccelMgr; // Accelerator Manager
- OUString* mpAppName; // Application name
- OUString* mpAppFileName; // Abs. Application FileName
- OUString* mpDisplayName; // Application Display Name
- OUString* mpToolkitName; // Toolkit Name
- Help* mpHelp; // Application help
+ AllSettings* mpSettings = nullptr; // Application settings
+ LocaleConfigurationListener* mpCfgListener = nullptr;
+ VclEventListeners* mpEventListeners = nullptr; // listeners for vcl events (eg, extended toolkit)
+ SVAppKeyListeners* mpKeyListeners = nullptr; // listeners for key events only (eg, extended toolkit)
+ std::list<ImplPostEventPair> maPostedEventList;
+ ImplAccelManager* mpAccelMgr = nullptr; // Accelerator Manager
+ OUString* mpAppName = nullptr; // Application name
+ OUString* mpAppFileName = nullptr; // Abs. Application FileName
+ OUString* mpDisplayName = nullptr; // Application Display Name
+ OUString* mpToolkitName = nullptr; // Toolkit Name
+ Help* mpHelp = nullptr; // Application help
VclPtr<PopupMenu> mpActivePopupMenu; // Actives Popup-Menu (in Execute)
VclPtr<ImplWheelWindow> mpWheelWindow; // WheelWindow
- ImplHotKey* mpFirstHotKey; // HotKey-Verwaltung
- ImplEventHook* mpFirstEventHook; // Event-Hooks
- sal_uInt64 mnLastInputTime; // GetLastInputTime()
- sal_uInt16 mnDispatchLevel; // DispatchLevel
- sal_uInt16 mnModalMode; // ModalMode Count
- SystemWindowFlags mnSysWinMode; // Mode, when SystemWindows should be created
- bool mbInAppMain; // is Application::Main() on stack
- bool mbInAppExecute; // is Application::Execute() on stack
- bool mbAppQuit; // is Application::Quit() called
- bool mbSettingsInit; // true: Settings are initialized
- Application::DialogCancelMode meDialogCancel; // true: All Dialog::Execute() calls will be terminated immediately with return false
+ ImplHotKey* mpFirstHotKey = nullptr; // HotKey-Verwaltung
+ ImplEventHook* mpFirstEventHook = nullptr; // Event-Hooks
+ sal_uInt64 mnLastInputTime = 0; // GetLastInputTime()
+ sal_uInt16 mnDispatchLevel = 0; // DispatchLevel
+ sal_uInt16 mnModalMode = 0; // ModalMode Count
+ SystemWindowFlags mnSysWinMode = SystemWindowFlags(0); // Mode, when SystemWindows should be created
+ bool mbInAppMain = false; // is Application::Main() on stack
+ bool mbInAppExecute = false; // is Application::Execute() on stack
+ bool mbAppQuit = false; // is Application::Quit() called
+ bool mbSettingsInit = false; // true: Settings are initialized
+ Application::DialogCancelMode meDialogCancel = Application::DialogCancelMode::Off; // true: All Dialog::Execute() calls will be terminated immediately with return false
/** Controls whether showing any IME status window is toggled on or off.
Only meaningful if showing IME status windows can be toggled on and off
externally (see Application::CanToggleImeStatusWindow).
*/
- ImeStatusWindowMode meShowImeStatusWindow;
+ ImeStatusWindowMode meShowImeStatusWindow = ImeStatusWindowMode_UNKNOWN;
- SvFileStream* mpEventTestInput;
- Idle* mpEventTestingIdle;
- int mnEventTestLimit;
+ SvFileStream* mpEventTestInput = nullptr;
+ Idle* mpEventTestingIdle = nullptr;
+ int mnEventTestLimit = 0;
DECL_STATIC_LINK(ImplSVAppData, ImplQuitMsg, void*, void);
DECL_STATIC_LINK(ImplSVAppData, ImplPrepareExitMsg, void*, void);
@@ -161,19 +166,19 @@ struct ImplSVGDIData
VclPtr<OutputDevice> mpLastPrnGraphics; // Last OutputDevice with a InfoPrinter Graphics
VclPtr<VirtualDevice> mpFirstVirDev; // First VirtualDevice
VclPtr<VirtualDevice> mpLastVirDev; // Last VirtualDevice
- OpenGLContext* mpFirstContext; // First OpenGLContext
- OpenGLContext* mpLastContext; // Last OpenGLContext
+ OpenGLContext* mpFirstContext = nullptr; // First OpenGLContext
+ OpenGLContext* mpLastContext = nullptr; // Last OpenGLContext
VclPtr<Printer> mpFirstPrinter; // First Printer
VclPtr<Printer> mpLastPrinter; // Last Printer
- ImplPrnQueueList* mpPrinterQueueList; // List of all printer queue
- PhysicalFontCollection* mpScreenFontList; // Screen-Font-List
- ImplFontCache* mpScreenFontCache; // Screen-Font-Cache
- ImplDirectFontSubstitution* mpDirectFontSubst; // Font-Substitutons defined in Tools->Options->Fonts
- GraphicConverter* mpGrfConverter; // Converter for graphics
- long mnAppFontX; // AppFont X-Numenator for 40/tel Width
- long mnAppFontY; // AppFont Y-Numenator for 80/tel Height
- bool mbFontSubChanged; // true: FontSubstitution was changed between Begin/End
- bool mbNativeFontConfig; // true: do not override UI font
+ ImplPrnQueueList* mpPrinterQueueList = nullptr; // List of all printer queue
+ PhysicalFontCollection* mpScreenFontList = nullptr; // Screen-Font-List
+ ImplFontCache* mpScreenFontCache = nullptr; // Screen-Font-Cache
+ ImplDirectFontSubstitution* mpDirectFontSubst = nullptr; // Font-Substitutons defined in Tools->Options->Fonts
+ GraphicConverter* mpGrfConverter = nullptr; // Converter for graphics
+ long mnAppFontX = 0; // AppFont X-Numenator for 40/tel Width
+ long mnAppFontY = 0; // AppFont Y-Numenator for 80/tel Height
+ bool mbFontSubChanged = false; // true: FontSubstitution was changed between Begin/End
+ bool mbNativeFontConfig = false; // true: do not override UI font
};
struct ImplSVWinData
@@ -188,56 +193,56 @@ struct ImplSVWinData
VclPtr<Dialog> mpLastExecuteDlg; // First Dialog that is in Execute
VclPtr<vcl::Window> mpExtTextInputWin; // Window, which is in ExtTextInput
VclPtr<vcl::Window> mpTrackWin; // window, that is in tracking mode
- AutoTimer* mpTrackTimer; // tracking timer
- ImageList* mpMsgBoxImgList; // ImageList for MessageBox
+ AutoTimer* mpTrackTimer = nullptr; // tracking timer
+ ImageList* mpMsgBoxImgList = nullptr; // ImageList for MessageBox
VclPtr<vcl::Window> mpAutoScrollWin; // window, that is in AutoScrollMode mode
VclPtr<vcl::Window> mpLastWheelWindow; // window, that last received a mouse wheel event
SalWheelMouseEvent maLastWheelEvent; // the last received mouse whell event
- StartTrackingFlags mnTrackFlags; // tracking flags
- StartAutoScrollFlags mnAutoScrollFlags; // auto scroll flags
- bool mbNoDeactivate; // true: do not execute Deactivate
- bool mbNoSaveFocus; // true: menus must not save/restore focus
+ StartTrackingFlags mnTrackFlags = StartTrackingFlags::NONE; // tracking flags
+ StartAutoScrollFlags mnAutoScrollFlags = StartAutoScrollFlags::NONE; // auto scroll flags
+ bool mbNoDeactivate = false; // true: do not execute Deactivate
+ bool mbNoSaveFocus = false; // true: menus must not save/restore focus
};
typedef std::vector< std::pair< OUString, FieldUnit > > FieldUnitStringList;
struct ImplSVCtrlData
{
- ImageList* mpCheckImgList; // ImageList for CheckBoxes
- ImageList* mpRadioImgList; // ImageList for RadioButtons
- ImageList* mpPinImgList; // ImageList for PIN
- ImageList* mpSplitHPinImgList; // ImageList for Horizontale SplitWindows
- ImageList* mpSplitVPinImgList; // ImageList for Vertikale SplitWindows (PIN's)
- Image* mpDisclosurePlus;
- Image* mpDisclosureMinus;
- ImplTBDragMgr* mpTBDragMgr; // DragMgr for ToolBox
- sal_uInt16 mnCheckStyle; // CheckBox-Style for ImageList-Update
- sal_uInt16 mnRadioStyle; // Radio-Style for ImageList-Update
- sal_uLong mnLastCheckFColor; // Letzte FaceColor fuer CheckImage
- sal_uLong mnLastCheckWColor; // Letzte WindowColor fuer CheckImage
- sal_uLong mnLastCheckLColor; // Letzte LightColor fuer CheckImage
- sal_uLong mnLastRadioFColor; // Letzte FaceColor fuer RadioImage
- sal_uLong mnLastRadioWColor; // Letzte WindowColor fuer RadioImage
- sal_uLong mnLastRadioLColor; // Letzte LightColor fuer RadioImage
- FieldUnitStringList* mpFieldUnitStrings; // list with field units
- FieldUnitStringList* mpCleanUnitStrings; // same list but with some "fluff" like spaces removed
+ ImageList* mpCheckImgList = nullptr; // ImageList for CheckBoxes
+ ImageList* mpRadioImgList = nullptr; // ImageList for RadioButtons
+ ImageList* mpPinImgList = nullptr; // ImageList for PIN
+ ImageList* mpSplitHPinImgList = nullptr; // ImageList for Horizontale SplitWindows
+ ImageList* mpSplitVPinImgList = nullptr; // ImageList for Vertikale SplitWindows (PIN's)
+ Image* mpDisclosurePlus = nullptr;
+ Image* mpDisclosureMinus = nullptr;
+ ImplTBDragMgr* mpTBDragMgr = nullptr; // DragMgr for ToolBox
+ sal_uInt16 mnCheckStyle = 0; // CheckBox-Style for ImageList-Update
+ sal_uInt16 mnRadioStyle = 0; // Radio-Style for ImageList-Update
+ sal_uLong mnLastCheckFColor = 0; // Letzte FaceColor fuer CheckImage
+ sal_uLong mnLastCheckWColor = 0; // Letzte WindowColor fuer CheckImage
+ sal_uLong mnLastCheckLColor = 0; // Letzte LightColor fuer CheckImage
+ sal_uLong mnLastRadioFColor = 0; // Letzte FaceColor fuer RadioImage
+ sal_uLong mnLastRadioWColor = 0; // Letzte WindowColor fuer RadioImage
+ sal_uLong mnLastRadioLColor = 0; // Letzte LightColor fuer RadioImage
+ FieldUnitStringList* mpFieldUnitStrings = nullptr; // list with field units
+ FieldUnitStringList* mpCleanUnitStrings = nullptr; // same list but with some "fluff" like spaces removed
};
struct ImplSVHelpData
{
- bool mbContextHelp; // is ContextHelp enabled
- bool mbExtHelp; // is ExtendedHelp enabled
- bool mbExtHelpMode; // is in ExtendedHelp Mode
- bool mbOldBalloonMode; // BalloonMode, before ExtHelpMode started
- bool mbBalloonHelp; // is BalloonHelp enabled
- bool mbQuickHelp; // is QuickHelp enabled
- bool mbSetKeyboardHelp; // tiphelp was activated by keyboard
- bool mbKeyboardHelp; // tiphelp was activated by keyboard
- bool mbAutoHelpId; // generate HelpIds
- bool mbRequestingHelp; // In Window::RequestHelp
+ bool mbContextHelp = false; // is ContextHelp enabled
+ bool mbExtHelp = false; // is ExtendedHelp enabled
+ bool mbExtHelpMode = false; // is in ExtendedHelp Mode
+ bool mbOldBalloonMode = false; // BalloonMode, before ExtHelpMode started
+ bool mbBalloonHelp = false; // is BalloonHelp enabled
+ bool mbQuickHelp = false; // is QuickHelp enabled
+ bool mbSetKeyboardHelp = false; // tiphelp was activated by keyboard
+ bool mbKeyboardHelp = false; // tiphelp was activated by keyboard
+ bool mbAutoHelpId = true; // generate HelpIds
+ bool mbRequestingHelp = false; // In Window::RequestHelp
VclPtr<HelpTextWindow> mpHelpWin; // HelpWindow
- sal_uInt64 mnLastHelpHideTime; // ticks of last show
+ sal_uInt64 mnLastHelpHideTime = 0; // ticks of last show
};
// "NWF" means "Native Widget Framework" and was the term used for the
@@ -247,38 +252,38 @@ struct ImplSVHelpData
struct ImplSVNWFData
{
- int mnStatusBarLowerRightOffset; // amount in pixel to avoid in the lower righthand corner
- int mnMenuFormatBorderX; // horizontal inner popup menu border
- int mnMenuFormatBorderY; // vertical inner popup menu border
- int mnMenuSeparatorBorderX; // gap at each side of separator
- ::Color maMenuBarHighlightTextColor; // override higlight text color
+ int mnStatusBarLowerRightOffset = 0; // amount in pixel to avoid in the lower righthand corner
+ int mnMenuFormatBorderX = 0; // horizontal inner popup menu border
+ int mnMenuFormatBorderY = 0; // vertical inner popup menu border
+ int mnMenuSeparatorBorderX = 0; // gap at each side of separator
+ ::Color maMenuBarHighlightTextColor = Color( COL_TRANSPARENT ); // override higlight text color
// in menubar if not transparent
- bool mbMenuBarDockingAreaCommonBG; // e.g. WinXP default theme
- bool mbDockingAreaSeparateTB; // individual toolbar backgrounds
+ bool mbMenuBarDockingAreaCommonBG = false; // e.g. WinXP default theme
+ bool mbDockingAreaSeparateTB = false; // individual toolbar backgrounds
// instead of one for docking area
- bool mbDockingAreaAvoidTBFrames; ///< don't draw frames around the individual toolbars if mbDockingAreaSeparateTB is false
- bool mbToolboxDropDownSeparate; // two adjacent buttons for
+ bool mbDockingAreaAvoidTBFrames = false; ///< don't draw frames around the individual toolbars if mbDockingAreaSeparateTB is false
+ bool mbToolboxDropDownSeparate = false; // two adjacent buttons for
// toolbox dropdown buttons
- bool mbFlatMenu; // no popup 3D border
- bool mbOpenMenuOnF10; // on gnome the first menu opens on F10
- bool mbNoFocusRects; // on Aqua/Gtk3 use native focus rendering, except for flat buttons
- bool mbNoFocusRectsForFlatButtons; // on Gtk3 native focusing is also preferred for flat buttons
- bool mbCenteredTabs; // on Aqua, tabs are centered
- bool mbNoActiveTabTextRaise; // on Aqua the text for the selected tab
+ bool mbFlatMenu = false; // no popup 3D border
+ bool mbOpenMenuOnF10 = false; // on gnome the first menu opens on F10
+ bool mbNoFocusRects = false; // on Aqua/Gtk3 use native focus rendering, except for flat buttons
+ bool mbNoFocusRectsForFlatButtons = false; // on Gtk3 native focusing is also preferred for flat buttons
+ bool mbCenteredTabs = false; // on Aqua, tabs are centered
+ bool mbNoActiveTabTextRaise = false; // on Aqua the text for the selected tab
// should not "jump up" a pixel
- bool mbProgressNeedsErase; // set true for platforms that should draw the
+ bool mbProgressNeedsErase = false; // set true for platforms that should draw the
// window background before drawing the native
// progress bar
- bool mbCheckBoxNeedsErase; // set true for platforms that should draw the
+ bool mbCheckBoxNeedsErase = false; // set true for platforms that should draw the
// window background before drawing the native
// checkbox
- bool mbCanDrawWidgetAnySize; // set to true currently on gtk
+ bool mbCanDrawWidgetAnySize = false; // set to true currently on gtk
/// entire drop down listbox resembles a button, no textarea/button parts (as currently on Windows)
- bool mbDDListBoxNoTextArea;
- bool mbEnableAccel; // whether or not accelerators are shown
- bool mbAutoAccel; // whether accelerators are only shown when Alt is held down
- bool mbRolloverMenubar; // theming engine supports rollover in menubar
+ bool mbDDListBoxNoTextArea = false;
+ bool mbEnableAccel = true; // whether or not accelerators are shown
+ bool mbAutoAccel = false; // whether accelerators are only shown when Alt is held down
+ bool mbRolloverMenubar = false; // theming engine supports rollover in menubar
};
struct BlendFrameCache
@@ -304,38 +309,36 @@ struct BlendFrameCache
struct ImplSVData
{
- ImplSVData();
-
- SalData* mpSalData;
- SalInstance* mpDefInst; // Default SalInstance
- Application* mpApp; // pApp
+ SalData* mpSalData = nullptr;
+ SalInstance* mpDefInst = nullptr; // Default SalInstance
+ Application* mpApp = nullptr; // pApp
VclPtr<WorkWindow> mpDefaultWin; // Default-Window
- bool mbDeInit; // Is VCL deinitializing
- ImplSchedulerData* mpFirstSchedulerData; // list of all running tasks
- SalTimer* mpSalTimer; // interface to sal event loop/timers
- SalI18NImeStatus* mpImeStatus; // interface to ime status window
- SalSystem* mpSalSystem; // SalSystem interface
- ResMgr* mpResMgr; // SV-Resource-Manager
- sal_uInt64 mnTimerPeriod; // current timer period
+ bool mbDeInit = false; // Is VCL deinitializing
+ ImplSchedulerData* mpFirstSchedulerData = nullptr; // list of all running tasks
+ SalTimer* mpSalTimer = nullptr; // interface to sal event loop/timers
+ SalI18NImeStatus* mpImeStatus = nullptr; // interface to ime status window
+ SalSystem* mpSalSystem = nullptr; // SalSystem interface
+ ResMgr* mpResMgr = nullptr; // SV-Resource-Manager
+ sal_uInt64 mnTimerPeriod = 0; // current timer period
ImplSVAppData maAppData; // indepen data for class Application
ImplSVGDIData maGDIData; // indepen data for Output classes
ImplSVWinData maWinData; // indepen data for Windows classes
ImplSVCtrlData maCtrlData; // indepen data for Control classes
ImplSVHelpData maHelpData; // indepen data for Help classes
ImplSVNWFData maNWFData;
- UnoWrapperBase* mpUnoWrapper;
+ UnoWrapperBase* mpUnoWrapper = nullptr;
VclPtr<vcl::Window> mpIntroWindow; // the splash screen
- DockingManager* mpDockingManager;
- BlendFrameCache* mpBlendFrameCache;
- vcl::CommandInfoProvider* mpCommandInfoProvider;
+ DockingManager* mpDockingManager = nullptr;
+ BlendFrameCache* mpBlendFrameCache = nullptr;
+ vcl::CommandInfoProvider* mpCommandInfoProvider = nullptr;
- oslThreadIdentifier mnMainThreadId;
+ oslThreadIdentifier mnMainThreadId = 0;
rtl::Reference< vcl::DisplayConnectionDispatch > mxDisplayConnection;
css::uno::Reference< css::lang::XComponent > mxAccessBridge;
- vcl::SettingsConfigItem* mpSettingsConfigItem;
- std::list< vcl::DeleteOnDeinitBase* >* mpDeinitDeleteList;
- std::unordered_map< int, OUString >* mpPaperNames;
+ vcl::SettingsConfigItem* mpSettingsConfigItem = nullptr;
+ std::list< vcl::DeleteOnDeinitBase* >* mpDeinitDeleteList = nullptr;
+ std::unordered_map< int, OUString >* mpPaperNames = nullptr;
Link<LinkParamNone*,void> maDeInitHook;
};
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index becfa0f..b394c53 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -187,10 +187,6 @@ struct ImplPostEventData
~ImplPostEventData() {}
};
-typedef ::std::pair< VclPtr<vcl::Window>, ImplPostEventData* > ImplPostEventPair;
-
-static ::std::list< ImplPostEventPair > aPostedEventList;
-
Application* GetpApp()
{
ImplSVData* pSVData = ImplGetSVData();
@@ -917,7 +913,7 @@ ImplSVEvent * Application::PostKeyEvent( sal_uLong nEvent, vcl::Window *pWin, Ke
if( nEventId )
{
pPostEventData->mnEventId = nEventId;
- aPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) );
+ ImplGetSVData()->maAppData.maPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) );
}
else
delete pPostEventData;
@@ -950,7 +946,7 @@ ImplSVEvent * Application::PostMouseEvent( sal_uLong nEvent, vcl::Window *pWin,
if( nEventId )
{
pPostEventData->mnEventId = nEventId;
- aPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) );
+ ImplGetSVData()->maAppData.maPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) );
}
else
delete pPostEventData;
@@ -1015,14 +1011,15 @@ IMPL_STATIC_LINK( Application, PostEventHandler, void*, pCallData, void )
ImplWindowFrameProc( pData->mpWin.get()->mpWindowImpl->mpFrameWindow.get(), nEvent, pEventData );
// remove this event from list of posted events, watch for destruction of internal data
- ::std::list< ImplPostEventPair >::iterator aIter( aPostedEventList.begin() );
+ auto svdata = ImplGetSVData();
+ ::std::list< ImplPostEventPair >::iterator aIter( svdata->maAppData.maPostedEventList.begin() );
- while( aIter != aPostedEventList.end() )
+ while( aIter != svdata->maAppData.maPostedEventList.end() )
{
if( nEventId == (*aIter).second->mnEventId )
{
delete (*aIter).second;
- aIter = aPostedEventList.erase( aIter );
+ aIter = svdata->maAppData.maPostedEventList.erase( aIter );
}
else
++aIter;
@@ -1034,9 +1031,10 @@ void Application::RemoveMouseAndKeyEvents( vcl::Window* pWin )
const SolarMutexGuard aGuard;
// remove all events for specific window, watch for destruction of internal data
- ::std::list< ImplPostEventPair >::iterator aIter( aPostedEventList.begin() );
+ auto svdata = ImplGetSVData();
+ ::std::list< ImplPostEventPair >::iterator aIter( svdata->maAppData.maPostedEventList.begin() );
- while( aIter != aPostedEventList.end() )
+ while( aIter != svdata->maAppData.maPostedEventList.end() )
{
if( pWin == (*aIter).first )
{
@@ -1044,7 +1042,7 @@ void Application::RemoveMouseAndKeyEvents( vcl::Window* pWin )
RemoveUserEvent( (*aIter).second->mnEventId );
delete (*aIter).second;
- aIter = aPostedEventList.erase( aIter );
+ aIter = svdata->maAppData.maPostedEventList.erase( aIter );
}
else
++aIter;
diff --git a/vcl/source/app/svdata.cxx b/vcl/source/app/svdata.cxx
index b43f00c..74fd791 100644
--- a/vcl/source/app/svdata.cxx
+++ b/vcl/source/app/svdata.cxx
@@ -79,16 +79,6 @@ SalSystem* ImplGetSalSystem()
return pSVData->mpSalSystem;
}
-ImplSVData::ImplSVData()
-{
- // init global instance data
- memset( this, 0, sizeof( ImplSVData ) );
- maHelpData.mbAutoHelpId = true;
- maNWFData.maMenuBarHighlightTextColor = Color( COL_TRANSPARENT );
- maNWFData.mbEnableAccel = true;
- maNWFData.mbAutoAccel = false;
-}
-
ImplSVGDIData::~ImplSVGDIData()
{
// FIXME: deliberately leak any remaining OutputDevice
More information about the Libreoffice-commits
mailing list