Coverage Report

Created: 2026-03-31 11:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/vcl/inc/svdata.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#pragma once
21
22
#include <sal/config.h>
23
24
#include <o3tl/lru_map.hxx>
25
#include <o3tl/hash_combine.hxx>
26
#include <o3tl/sorted_vector.hxx>
27
#include <osl/conditn.hxx>
28
#include <tools/fldunit.hxx>
29
#include <unotools/options.hxx>
30
#include <vcl/bitmap.hxx>
31
#include <vcl/cvtgrf.hxx>
32
#include <vcl/dropcache.hxx>
33
#include <vcl/image.hxx>
34
#include <vcl/settings.hxx>
35
#include <vcl/svapp.hxx>
36
#include <vcl/print.hxx>
37
#include <vcl/uitest/logger.hxx>
38
#include <vcl/virdev.hxx>
39
#include <vcl/wrkwin.hxx>
40
#include <vcl/window.hxx>
41
#include <vcl/task.hxx>
42
#include <LibreOfficeKit/LibreOfficeKitTypes.h>
43
#include <unotools/resmgr.hxx>
44
45
#include <com/sun/star/lang/XComponent.hpp>
46
#include <com/sun/star/i18n/XCharacterClassification.hpp>
47
#include "vcleventlisteners.hxx"
48
#include "print.h"
49
#include "salwtype.hxx"
50
#include "windowdev.hxx"
51
#include "displayconnectiondispatch.hxx"
52
53
#include <atomic>
54
#include <list>
55
#include <mutex>
56
#include <optional>
57
#include <vector>
58
#include <unordered_map>
59
#include <unordered_set>
60
#include "schedulerimpl.hxx"
61
#include <basegfx/DrawCommands.hxx>
62
63
struct ImplPostEventData;
64
struct ImplTimerData;
65
struct ImplIdleData;
66
struct ImplConfigData;
67
namespace rtl
68
{
69
    class OStringBuffer;
70
}
71
namespace vcl::font
72
{
73
    class DirectFontSubstitution;
74
    class PhysicalFontCollection;
75
}
76
struct BlendFrameCache;
77
struct ImplHotKey;
78
struct ImplEventHook;
79
class Point;
80
class ImplAccelManager;
81
class ImplFontCache;
82
class HelpTextWindow;
83
class ImplTBDragMgr;
84
class ImplIdleMgr;
85
class FloatingWindow;
86
class AllSettings;
87
class NotifyEvent;
88
class Timer;
89
class AutoTimer;
90
class Idle;
91
class Help;
92
class PopupMenu;
93
class Application;
94
class OutputDevice;
95
class SvFileStream;
96
class SystemWindow;
97
class WorkWindow;
98
class Dialog;
99
class VirtualDevice;
100
class Printer;
101
class SalFrame;
102
class SalInstance;
103
class SalSystem;
104
class ImplPrnQueueList;
105
class UnoWrapperBase;
106
class GraphicConverter;
107
class ImplWheelWindow;
108
class SalTimer;
109
class DockingManager;
110
class VclEventListeners2;
111
class SalData;
112
class OpenGLContext;
113
class UITestLogger;
114
115
#define SV_ICON_ID_OFFICE                               1
116
#define SV_ICON_ID_TEXT                                 2
117
#define SV_ICON_ID_TEXT_TEMPLATE                        3
118
#define SV_ICON_ID_SPREADSHEET                          4
119
#define SV_ICON_ID_SPREADSHEET_TEMPLATE                 5
120
#define SV_ICON_ID_DRAWING                              6
121
#define SV_ICON_ID_PRESENTATION                         8
122
#define SV_ICON_ID_MASTER_DOCUMENT                     10
123
#define SV_ICON_ID_TEMPLATE                            11
124
#define SV_ICON_ID_DATABASE                            12
125
#define SV_ICON_ID_FORMULA                             13
126
127
const FloatWinPopupFlags LISTBOX_FLOATWINPOPUPFLAGS = FloatWinPopupFlags::Down |
128
    FloatWinPopupFlags::NoHorzPlacement | FloatWinPopupFlags::AllMouseButtonClose;
129
130
namespace com::sun::star::datatransfer::clipboard { class XClipboard; }
131
132
namespace vcl
133
{
134
    class DisplayConnectionDispatch;
135
    class Window;
136
}
137
138
namespace basegfx
139
{
140
    class SystemDependentDataManager;
141
}
142
143
class LocaleConfigurationListener final : public utl::ConfigurationListener
144
{
145
public:
146
    virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, ConfigurationHints ) override;
147
};
148
149
typedef std::pair<VclPtr<vcl::Window>, ImplPostEventData *> ImplPostEventPair;
150
151
struct ImplSVAppData
152
{
153
    ImplSVAppData();
154
    ~ImplSVAppData();
155
156
    std::optional<AllSettings> mxSettings;           // Application settings
157
    LocaleConfigurationListener* mpCfgListener = nullptr;
158
    VclEventListeners       maEventListeners;     // listeners for vcl events (eg, extended toolkit)
159
    std::vector<Link<VclWindowEvent&,bool> >
160
                            maKeyListeners;       // listeners for key events only (eg, extended toolkit)
161
    std::vector<ImplPostEventPair> maPostedEventList;
162
    ImplAccelManager*       mpAccelMgr = nullptr; // Accelerator Manager
163
    std::optional<OUString> mxAppName;            // Application name
164
    std::optional<OUString> mxAppFileName;        // Abs. Application FileName
165
    std::optional<OUString> mxDisplayName;        // Application Display Name
166
    Help*                   mpHelp = nullptr;               // Application help
167
    VclPtr<PopupMenu>       mpActivePopupMenu;              // Actives Popup-Menu (in Execute)
168
    VclPtr<ImplWheelWindow> mpWheelWindow;                  // WheelWindow
169
    sal_uInt64              mnLastInputTime = 0;            // GetLastInputTime()
170
    sal_uInt16              mnDispatchLevel = 0;            // DispatchLevel
171
    sal_uInt16              mnModalMode = 0;                // ModalMode Count
172
    SystemWindowFlags       mnSysWinMode = SystemWindowFlags(0); // Mode, when SystemWindows should be created
173
    bool                    mbInAppMain = false;            // is Application::Main() on stack
174
    bool                    mbInAppExecute = false;         // is Application::Execute() on stack
175
    std::atomic<bool>       mbAppQuit = false;              // is Application::Quit() called, volatile because we read/write from different threads
176
    bool                    mbSettingsInit = false;         // true: Settings are initialized
177
    DialogCancelMode meDialogCancel = DialogCancelMode::Off; // true: All Dialog::Execute() calls will be terminated immediately with return false
178
    bool mbRenderToBitmaps = false; // set via svp / headless plugin
179
    bool m_bUseSystemLoop = false;
180
181
    DECL_STATIC_LINK(ImplSVAppData, ImplQuitMsg, void*, void);
182
};
183
184
/// Cache multiple scalings for the same bitmap
185
struct ScaleCacheKey {
186
    SalBitmap *mpBitmap;
187
    Size       maDestSize;
188
    ScaleCacheKey(SalBitmap *pBitmap, const Size &aDestSize)
189
1.92k
    {
190
1.92k
        mpBitmap = pBitmap;
191
1.92k
        maDestSize = aDestSize;
192
1.92k
    }
193
    ScaleCacheKey(const ScaleCacheKey &key)
194
5.77k
    {
195
5.77k
        mpBitmap = key.mpBitmap;
196
5.77k
        maDestSize = key.maDestSize;
197
5.77k
    }
198
    bool operator==(ScaleCacheKey const& rOther) const
199
1.92k
    {
200
1.92k
        return mpBitmap == rOther.mpBitmap && maDestSize == rOther.maDestSize;
201
1.92k
    }
202
};
203
204
namespace std
205
{
206
template <> struct hash<ScaleCacheKey>
207
{
208
    std::size_t operator()(ScaleCacheKey const& k) const noexcept
209
7.26k
    {
210
7.26k
        std::size_t seed = 0;
211
7.26k
        o3tl::hash_combine(seed, k.mpBitmap);
212
7.26k
        o3tl::hash_combine(seed, k.maDestSize.getWidth());
213
7.26k
        o3tl::hash_combine(seed, k.maDestSize.getHeight());
214
7.26k
        return seed;
215
7.26k
    }
216
};
217
218
} // end std namespace
219
220
typedef o3tl::lru_map<ScaleCacheKey, Bitmap> lru_scale_cache;
221
222
struct ImplSVGDIData
223
{
224
    ~ImplSVGDIData();
225
226
    VclPtr<vcl::WindowOutputDevice> mpFirstWinGraphics;     // First OutputDevice with a Frame Graphics
227
    VclPtr<vcl::WindowOutputDevice> mpLastWinGraphics;      // Last OutputDevice with a Frame Graphics
228
    VclPtr<OutputDevice>    mpFirstVirGraphics;             // First OutputDevice with a VirtualDevice Graphics
229
    VclPtr<OutputDevice>    mpLastVirGraphics;              // Last OutputDevice with a VirtualDevice Graphics
230
    VclPtr<Printer>         mpFirstPrnGraphics;             // First OutputDevice with an InfoPrinter Graphics
231
    VclPtr<Printer>         mpLastPrnGraphics;              // Last OutputDevice with an InfoPrinter Graphics
232
    VclPtr<VirtualDevice>   mpFirstVirDev;                  // First VirtualDevice
233
    std::list<OpenGLContext*> maOpenGLContexts; // OpenGL contexts
234
    VclPtr<Printer>         mpFirstPrinter;                 // First Printer
235
    std::unique_ptr<ImplPrnQueueList> mpPrinterQueueList;   // List of all printer queue
236
    std::shared_ptr<vcl::font::PhysicalFontCollection> mxScreenFontList; // Screen-Font-List
237
    std::shared_ptr<ImplFontCache> mxScreenFontCache;       // Screen-Font-Cache
238
    lru_scale_cache         maScaleCache = lru_scale_cache(10); // Cache for scaled images
239
    vcl::font::DirectFontSubstitution* mpDirectFontSubst = nullptr; // Font-Substitutions defined in Tools->Options->Fonts
240
    std::unique_ptr<GraphicConverter> mxGrfConverter;       // Converter for graphics
241
    tools::Long                    mnAppFontX = 0;                 // AppFont X-Numenator for 40/tel Width
242
    tools::Long                    mnAppFontY = 0;                 // AppFont Y-Numenator for 80/tel Height
243
    bool                    mbFontSubChanged = false;       // true: FontSubstitution was changed between Begin/End
244
245
    o3tl::lru_map<OUString, Bitmap> maThemeImageCache = o3tl::lru_map<OUString, Bitmap>(10);
246
    o3tl::lru_map<OUString, gfx::DrawRoot> maThemeDrawCommandsCache = o3tl::lru_map<OUString, gfx::DrawRoot>(50);
247
};
248
249
struct ImplSVFrameData
250
{
251
    ~ImplSVFrameData();
252
    VclPtr<vcl::Window>     mpFirstFrame;                   // First FrameWindow
253
    VclPtr<vcl::Window>     mpActiveApplicationFrame;       // the last active application frame, can be used as DefModalDialogParent if no focuswin set
254
    VclPtr<WorkWindow>      mpAppWin;                       // Application-Window
255
256
    std::unique_ptr<UITestLogger> m_pUITestLogger;
257
};
258
259
struct ImplSVWinData
260
{
261
    ~ImplSVWinData();
262
    VclPtr<vcl::Window>     mpFocusWin;                     // window, that has the focus
263
    VclPtr<vcl::Window>     mpCaptureWin;                   // window, that has the mouse capture
264
    VclPtr<vcl::Window>     mpLastDeacWin;                  // Window, that need a deactivate (FloatingWindow-Handling)
265
    VclPtr<FloatingWindow>  mpFirstFloat;                   // First FloatingWindow in PopupMode
266
    std::vector<VclPtr<Dialog>> mpExecuteDialogs;           ///< Stack of dialogs that are Execute()'d - the last one is the top most one.
267
    VclPtr<vcl::Window>     mpExtTextInputWin;              // Window, which is in ExtTextInput
268
    VclPtr<vcl::Window>     mpTrackWin;                     // window, that is in tracking mode
269
    std::unique_ptr<AutoTimer> mpTrackTimer;                // tracking timer
270
    std::vector<Image>      maMsgBoxImgList;                // ImageList for MessageBox
271
    VclPtr<vcl::Window>     mpAutoScrollWin;                // window, that is in AutoScrollMode mode
272
    VclPtr<vcl::Window>     mpLastWheelWindow;              // window, that last received a mouse wheel event
273
    SalWheelMouseEvent      maLastWheelEvent;               // the last received mouse wheel event
274
275
    StartTrackingFlags      mnTrackFlags = StartTrackingFlags::NONE; // tracking flags
276
    StartAutoScrollFlags    mnAutoScrollFlags = StartAutoScrollFlags::NONE; // auto scroll flags
277
    bool                    mbNoDeactivate = false;         // true: do not execute Deactivate
278
    bool                    mbNoSaveFocus = false;          // true: menus must not save/restore focus
279
    bool                    mbIsLiveResize = false;         // true: skip waiting for events and low priority timers
280
    bool                    mbIsWaitingForNativeEvent = false; // true: code is executing via a native callback while waiting for the next native event
281
};
282
283
typedef std::vector< std::pair< OUString, FieldUnit > > FieldUnitStringList;
284
285
struct ImplSVCtrlData
286
{
287
    std::vector<Image>      maCheckImgList;                 // ImageList for CheckBoxes
288
    std::vector<Image>      maRadioImgList;                 // ImageList for RadioButtons
289
    std::optional<Image>    moDisclosurePlus;
290
    std::optional<Image>    moDisclosureMinus;
291
    ImplTBDragMgr*          mpTBDragMgr = nullptr;          // DragMgr for ToolBox
292
    sal_uInt16              mnCheckStyle = 0;               // CheckBox-Style for ImageList-Update
293
    sal_uInt16              mnRadioStyle = 0;               // Radio-Style for ImageList-Update
294
    Color                   mnLastCheckFColor;              // Last FaceColor for CheckImage
295
    Color                   mnLastCheckWColor;              // Last WindowColor for CheckImage
296
    Color                   mnLastCheckLColor;              // Last LightColor for CheckImage
297
    Color                   mnLastRadioFColor;              // Last FaceColor for RadioImage
298
    Color                   mnLastRadioWColor;              // Last WindowColor for RadioImage
299
    Color                   mnLastRadioLColor;              // Last LightColor for RadioImage
300
    FieldUnitStringList     maFieldUnitStrings;   // list with field units
301
    FieldUnitStringList     maCleanUnitStrings;   // same list but with some "fluff" like spaces removed
302
};
303
304
struct ImplSVHelpData
305
{
306
    ~ImplSVHelpData();
307
    bool                    mbContextHelp = false;          // is ContextHelp enabled
308
    bool                    mbExtHelp = false;              // is ExtendedHelp enabled
309
    bool                    mbExtHelpMode = false;          // is in ExtendedHelp Mode
310
    bool                    mbOldBalloonMode = false;       // BalloonMode, before ExtHelpMode started
311
    bool                    mbBalloonHelp = false;          // is BalloonHelp enabled
312
    bool                    mbQuickHelp = false;            // is QuickHelp enabled
313
    bool                    mbSetKeyboardHelp = false;      // tiphelp was activated by keyboard
314
    bool                    mbKeyboardHelp = false;         // tiphelp was activated by keyboard
315
    bool                    mbRequestingHelp = false;       // In Window::RequestHelp
316
    VclPtr<HelpTextWindow>  mpHelpWin;                      // HelpWindow
317
    sal_uInt64              mnLastHelpHideTime = 0;         // ticks of last show
318
};
319
320
// "NWF" means "Native Widget Framework" and was the term used for the
321
// idea that StarView/OOo "widgets" should *look* (and feel) like the
322
// "native widgets" on each platform, even if not at all implemented
323
// using them. See http://people.redhat.com/dcbw/ooo-nwf.html .
324
325
struct ImplSVNWFData
326
{
327
    int                     mnStatusBarLowerRightOffset = 0; // amount in pixel to avoid in the lower righthand corner
328
    int                     mnMenuFormatBorderX = 0;        // horizontal inner popup menu border
329
    int                     mnMenuFormatBorderY = 0;        // vertical inner popup menu border
330
    ::Color                 maMenuBarHighlightTextColor = COL_TRANSPARENT; // override highlight text color
331
                                                            // in menubar if not transparent
332
    bool                    mbMenuBarDockingAreaCommonBG = false; // e.g. WinXP default theme
333
    bool                    mbDockingAreaSeparateTB = false; // individual toolbar backgrounds
334
                                                            // instead of one for docking area
335
    bool                    mbDockingAreaAvoidTBFrames = false; ///< don't draw frames around the individual toolbars if mbDockingAreaSeparateTB is false
336
    bool                    mbFlatMenu = false;             // no popup 3D border
337
    bool                    mbNoFocusRects = false;         // on Aqua/Gtk3 use native focus rendering, except for flat buttons
338
    bool                    mbNoFocusRectsForFlatButtons = false; // on Gtk3 native focusing is also preferred for flat buttons
339
    bool                    mbNoFrameJunctionForPopups = false; // on Gtk4 popups are done via popovers and a toolbar menu won't align to its toolitem, so
340
                                                                // omit the effort the creation a visual junction
341
    bool                    mbCenteredTabs = false;         // on Aqua, tabs are centered
342
    bool                    mbNoActiveTabTextRaise = false; // on Aqua the text for the selected tab
343
                                                            // should not "jump up" a pixel
344
    bool                    mbProgressNeedsErase = false;   // set true for platforms that should draw the
345
                                                            // window background before drawing the native
346
                                                            // progress bar
347
    bool                    mbCanDrawWidgetAnySize = false; // set to true currently on gtk
348
349
    /// entire drop down listbox resembles a button, no textarea/button parts (as currently on Windows)
350
    bool                    mbDDListBoxNoTextArea = false;
351
    bool                    mbAutoAccel = false;            // whether accelerators are only shown when Alt is held down
352
    bool                    mbRolloverMenubar = false;      // theming engine supports rollover in menubar
353
    // gnome#768128 I cannot see a route under wayland at present to support
354
    // floating toolbars that can be redocked because there's no way to track
355
    // that the toolbar is over a dockable area.
356
    bool                    mbCanDetermineWindowPosition = true;
357
358
    int mnListBoxEntryMargin = 0;
359
};
360
361
struct ImplSchedulerContext
362
{
363
    ImplSchedulerData*      mpFirstSchedulerData[PRIO_COUNT] = { nullptr, }; ///< list of all active tasks per priority
364
    ImplSchedulerData*      mpLastSchedulerData[PRIO_COUNT] = { nullptr, };  ///< last item of each mpFirstSchedulerData list
365
    ImplSchedulerData*      mpSchedulerStack = nullptr;     ///< stack of invoked tasks
366
    ImplSchedulerData*      mpSchedulerStackTop = nullptr;  ///< top most stack entry to detect needed rescheduling during pop
367
    SalTimer*               mpSalTimer = nullptr;           ///< interface to sal event loop / system timer
368
    sal_uInt64              mnTimerStart = 0;               ///< start time of the timer
369
    sal_uInt64              mnTimerPeriod = SAL_MAX_UINT64; ///< current timer period
370
    std::mutex              maMutex;                        ///< the "scheduler mutex" (see
371
                                                            ///< vcl/README.scheduler)
372
    bool                    mbActive = true;                ///< is the scheduler active?
373
    oslInterlockedCount     mnIdlesLockCount = 0;           ///< temporary ignore idles
374
};
375
376
struct ImplSVData
377
{
378
    ImplSVData();
379
    ~ImplSVData();
380
    SalData*                mpSalData = nullptr;
381
    SalInstance*            mpDefInst = nullptr;            // Default SalInstance
382
    Application*            mpApp = nullptr;                // pApp
383
    VclPtr<WorkWindow>      mpDefaultWin;                   // Default-Window
384
    bool                    mbDeInit = false;               // Is VCL deinitializing
385
    std::unique_ptr<SalSystem> mpSalSystem;                 // SalSystem interface
386
    bool                    mbResLocaleSet = false;         // SV-Resource-Manager
387
    std::locale             maResLocale;                    // Resource locale
388
    ImplSchedulerContext    maSchedCtx;                     // Data for class Scheduler
389
    ImplSVAppData           maAppData;                      // Data for class Application
390
    ImplSVGDIData           maGDIData;                      // Data for Output classes
391
    ImplSVFrameData         maFrameData;                    // Data for Frame classes
392
    ImplSVWinData*          mpWinData = nullptr;            // Data for per-view Windows classes
393
    ImplSVCtrlData          maCtrlData;                     // Data for Control classes
394
    ImplSVHelpData*         mpHelpData;                     // Data for Help classes
395
    ImplSVNWFData           maNWFData;
396
    UnoWrapperBase*         mpUnoWrapper = nullptr;
397
    VclPtr<vcl::Window>     mpIntroWindow;                  // the splash screen
398
    std::unique_ptr<DockingManager> mpDockingManager;
399
    std::unique_ptr<BlendFrameCache> mpBlendFrameCache;
400
401
    oslThreadIdentifier     mnMainThreadId = 0;
402
    rtl::Reference< vcl::DisplayConnectionDispatch > mxDisplayConnection;
403
404
    css::uno::Reference< css::lang::XComponent > mxAccessBridge;
405
    std::unordered_map< int, OUString > maPaperNames;
406
    std::unordered_set<CacheOwner*> maCacheOwners;
407
408
    css::uno::Reference<css::i18n::XCharacterClassification> m_xCharClass;
409
410
#if defined _WIN32
411
    css::uno::Reference<css::datatransfer::clipboard::XClipboard> m_xSystemClipboard;
412
#endif
413
414
    osl::Condition m_inExecuteCondtion; // Set when code returns to Application::Execute,
415
                                        // i.e. no nested message loops run
416
417
    Link<LinkParamNone*,void> maDeInitHook;
418
419
    // LOK & headless backend specific hooks
420
    LibreOfficeKitPollCallback mpPollCallback = nullptr;
421
    LibreOfficeKitWakeCallback mpWakeCallback = nullptr;
422
    void *mpPollClosure = nullptr;
423
424
    void registerCacheOwner(CacheOwner&);
425
    void deregisterCacheOwner(CacheOwner&);
426
    void dropCaches();
427
    void dumpState(rtl::OStringBuffer &rState);
428
};
429
430
css::uno::Reference<css::i18n::XCharacterClassification> const& ImplGetCharClass();
431
432
void        ImplDeInitSVData();
433
VCL_PLUGIN_PUBLIC basegfx::SystemDependentDataManager& ImplGetSystemDependentDataManager();
434
VCL_PLUGIN_PUBLIC vcl::Window* ImplGetDefaultWindow();
435
vcl::Window* ImplGetDefaultContextWindow();
436
const std::locale& ImplGetResLocale();
437
VCL_PLUGIN_PUBLIC OUString VclResId(TranslateId sContextAndId);
438
DockingManager*     ImplGetDockingManager();
439
void GenerateAutoMnemonicsOnHierarchy(const vcl::Window* pWindow);
440
441
VCL_PLUGIN_PUBLIC ImplSVHelpData& ImplGetSVHelpData();
442
443
VCL_DLLPUBLIC bool        ImplCallPreNotify( NotifyEvent& rEvt );
444
445
VCL_PLUGIN_PUBLIC ImplSVData* ImplGetSVData();
446
VCL_PLUGIN_PUBLIC void ImplHideSplash();
447
448
const FieldUnitStringList& ImplGetFieldUnits();
449
const FieldUnitStringList& ImplGetCleanedFieldUnits();
450
451
struct ImplSVEvent
452
{
453
    void*               mpData;
454
    Link<void*,void>    maLink;
455
    VclPtr<vcl::Window> mpInstanceRef;
456
    VclPtr<vcl::Window> mpWindow;
457
    bool                mbCall;
458
};
459
460
extern int nImplSysDialog;
461
462
210k
inline SalData* GetSalData() { return ImplGetSVData()->mpSalData; }
463
106
inline void SetSalData(SalData* pData) { ImplGetSVData()->mpSalData = pData; }
464
968M
inline SalInstance* GetSalInstance() { return ImplGetSVData()->mpDefInst; }
465
466
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */