LibreOffice Module vcl (master) 1
ctrl.cxx
Go to the documentation of this file.
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#include <o3tl/safeint.hxx>
21#include <vcl/svapp.hxx>
22#include <vcl/event.hxx>
23#include <vcl/ctrl.hxx>
24#include <vcl/decoview.hxx>
25#include <vcl/mnemonic.hxx>
26#include <vcl/settings.hxx>
27#include <vcl/uitest/logger.hxx>
28#include <sal/log.hxx>
29
30#include <textlayout.hxx>
31#include <svdata.hxx>
32
33using namespace vcl;
34
36{
37 mbHasControlFocus = false;
38 mbShowAccelerator = false;
39}
40
42 Window( nType )
43{
45}
46
49{
51 ImplInit( pParent, nStyle, nullptr );
52}
53
55{
57}
58
60{
61 mxLayoutData.reset();
63 Window::dispose();
64}
65
66void Control::EnableRTL( bool bEnable )
67{
68 // convenience: for controls also switch layout mode
72 Window::EnableRTL(bEnable);
73}
74
76{
78 Window::Resize();
79}
80
82{
83}
84
86{
87 SAL_WARN_IF( mxLayoutData, "vcl", "Control::CreateLayoutData: should be called with non-existent layout data only!" );
88 mxLayoutData.emplace();
89}
90
92{
93 return bool(mxLayoutData);
94}
95
96void Control::SetText( const OUString& rStr )
97{
99 Window::SetText( rStr );
100}
101
102ControlLayoutData::ControlLayoutData() : m_pParent( nullptr )
103{
104}
105
107{
109}
110
112{
113 if( !HasLayoutData() )
114 FillLayoutData();
115 return mxLayoutData ? mxLayoutData->GetCharacterBounds( nIndex ) : tools::Rectangle();
116}
117
119{
120 tools::Long nIndex = -1;
121 for( tools::Long i = m_aUnicodeBoundRects.size()-1; i >= 0; i-- )
122 {
123 Point aTopLeft = m_aUnicodeBoundRects[i].TopLeft();
124 Point aBottomRight = m_aUnicodeBoundRects[i].BottomRight();
125 if (rPoint.X() >= aTopLeft.X() && rPoint.Y() >= aTopLeft.Y() &&
126 rPoint.X() <= aBottomRight.X() && rPoint.Y() <= aBottomRight.Y())
127 {
128 nIndex = i;
129 break;
130 }
131 }
132 return nIndex;
133}
134
135tools::Long Control::GetIndexForPoint( const Point& rPoint ) const
136{
137 if( ! HasLayoutData() )
138 FillLayoutData();
139 return mxLayoutData ? mxLayoutData->GetIndexForPoint( rPoint ) : -1;
140}
141
143{
144 tools::Long nLines = m_aLineIndices.size();
145 if( nLines == 0 && !m_aDisplayText.isEmpty() )
146 nLines = 1;
147 return nLines;
148}
149
151{
152 Pair aPair( -1, -1 );
153
154 int nDisplayLines = m_aLineIndices.size();
155 if( nLine >= 0 && nLine < nDisplayLines )
156 {
157 aPair.A() = m_aLineIndices[nLine];
158 if( nLine+1 < nDisplayLines )
159 aPair.B() = m_aLineIndices[nLine+1]-1;
160 else
161 aPair.B() = m_aDisplayText.getLength()-1;
162 }
163 else if( nLine == 0 && nDisplayLines == 0 && !m_aDisplayText.isEmpty() )
164 {
165 // special case for single line controls so the implementations
166 // in that case do not have to fill in the line indices
167 aPair.A() = 0;
168 aPair.B() = m_aDisplayText.getLength()-1;
169 }
170 return aPair;
171}
172
174{
175 if( !HasLayoutData() )
176 FillLayoutData();
177 return mxLayoutData ? mxLayoutData->GetLineStartEnd( nLine ) : Pair( -1, -1 );
178}
179
181{
182 // is the index sensible at all ?
183 if( nIndex >= 0 && nIndex < m_aDisplayText.getLength() )
184 {
185 int nDisplayLines = m_aLineIndices.size();
186 // if only 1 line exists, then absolute and relative index are
187 // identical -> do nothing
188 if( nDisplayLines > 1 )
189 {
190 int nLine;
191 for( nLine = nDisplayLines-1; nLine >= 0; nLine-- )
193 if( m_aLineIndices[nLine] <= nIndex )
194 {
196 break;
197 }
198 }
199 if( nLine < 0 )
200 {
201 SAL_WARN_IF( nLine < 0, "vcl", "ToRelativeLineIndex failed" );
202 nIndex = -1;
203 }
204 }
205 }
206 else
207 nIndex = -1;
208
209 return nIndex;
210}
211
213{
214 if( !HasLayoutData() )
215 FillLayoutData();
216 return mxLayoutData ? mxLayoutData->ToRelativeLineIndex( nIndex ) : -1;
217}
218
220{
221 if( !HasLayoutData() )
222 FillLayoutData();
223 return mxLayoutData ? mxLayoutData->m_aDisplayText : GetText();
224}
225
227{
228 if ( rNEvt.GetType() == NotifyEventType::GETFOCUS )
229 {
230 if ( !mbHasControlFocus )
231 {
232 mbHasControlFocus = true;
233 CompatStateChanged( StateChangedType::ControlFocus );
234 if ( ImplCallEventListenersAndHandler( VclEventId::ControlGetFocus, {} ) )
235 // been destroyed within the handler
236 return true;
237 }
238 }
239 else
240 {
241 if ( rNEvt.GetType() == NotifyEventType::LOSEFOCUS )
242 {
244 if ( !pFocusWin || !ImplIsWindowOrChild( pFocusWin ) )
245 {
246 mbHasControlFocus = false;
247 CompatStateChanged( StateChangedType::ControlFocus );
248 if ( ImplCallEventListenersAndHandler( VclEventId::ControlLoseFocus, [this] () { maLoseFocusHdl.Call(*this); } ) )
249 // been destroyed within the handler
250 return true;
251 }
252 }
253 }
254 return Window::EventNotify( rNEvt );
255}
256
258{
259 if( nStateChange == StateChangedType::InitShow ||
260 nStateChange == StateChangedType::Visible ||
261 nStateChange == StateChangedType::Zoom ||
262 nStateChange == StateChangedType::ControlFont
263 )
264 {
265 ImplClearLayoutData();
266 }
267 Window::StateChanged( nStateChange );
268}
269
270void Control::AppendLayoutData( const Control& rSubControl ) const
271{
272 if( !rSubControl.HasLayoutData() )
273 rSubControl.FillLayoutData();
274 if( !rSubControl.HasLayoutData() || rSubControl.mxLayoutData->m_aDisplayText.isEmpty() )
275 return;
276
277 tools::Long nCurrentIndex = mxLayoutData->m_aDisplayText.getLength();
278 mxLayoutData->m_aDisplayText += rSubControl.mxLayoutData->m_aDisplayText;
279 int nLines = rSubControl.mxLayoutData->m_aLineIndices.size();
280 int n;
281 mxLayoutData->m_aLineIndices.push_back( nCurrentIndex );
282 for( n = 1; n < nLines; n++ )
283 mxLayoutData->m_aLineIndices.push_back( rSubControl.mxLayoutData->m_aLineIndices[n] + nCurrentIndex );
284 int nRectangles = rSubControl.mxLayoutData->m_aUnicodeBoundRects.size();
285 tools::Rectangle aRel = rSubControl.GetWindowExtentsRelative(this);
286 for( n = 0; n < nRectangles; n++ )
287 {
288 tools::Rectangle aRect = rSubControl.mxLayoutData->m_aUnicodeBoundRects[n];
289 aRect.Move( aRel.Left(), aRel.Top() );
290 mxLayoutData->m_aUnicodeBoundRects.push_back( aRect );
291 }
292}
293
294void Control::CallEventListeners( VclEventId nEvent, void* pData)
295{
296 VclPtr<Control> xThis(this);
297 UITestLogger::getInstance().logAction(xThis, nEvent);
298
300}
301
302bool Control::ImplCallEventListenersAndHandler( VclEventId nEvent, std::function<void()> const & callHandler )
303{
304 VclPtr<Control> xThis(this);
305
307
308 if ( !xThis->isDisposed() )
309 {
310 if (callHandler)
311 {
312 callHandler();
313 }
314
315 if ( !xThis->isDisposed() )
316 return false;
317 }
318 return true;
319}
320
321void Control::SetLayoutDataParent( const Control* pParent ) const
322{
323 if( HasLayoutData() )
324 mxLayoutData->m_pParent = pParent;
325}
326
328{
329 mxLayoutData.reset();
330}
331
333{
334 // use a deco view to draw the frame
335 // However, since there happens a lot of magic there, we need to fake some (style) settings
336 // on the device
337 AllSettings aOriginalSettings( pDev->GetSettings() );
338
339 AllSettings aNewSettings( aOriginalSettings );
340 StyleSettings aStyle( aNewSettings.GetStyleSettings() );
341
342 // The *only known* clients of the Draw methods of the various VCL-controls are form controls:
343 // During print preview, and during printing, Draw is called. Thus, drawing always happens with a
344 // mono (colored) border
346 aStyle.SetMonoColor( GetSettings().GetStyleSettings().GetMonoColor() );
347
348 aNewSettings.SetStyleSettings( aStyle );
349 // #i67023# do not call data changed listeners for this fake
350 // since they may understandably invalidate on settings changed
351 pDev->OutputDevice::SetSettings( aNewSettings );
352
353 DecorationView aDecoView( pDev );
355
356 pDev->OutputDevice::SetSettings( aOriginalSettings );
357}
358
360{
361 mbShowAccelerator = bVal;
362};
363
365{
366 if( m_pParent )
368}
369
371{
372 return Size( GetTextWidth( GetText() ) + 2 * 12,
373 GetTextHeight() + 2 * 6 );
374}
375
377{
378 if ( mpReferenceDevice == _referenceDevice )
379 return;
380
381 mpReferenceDevice = _referenceDevice;
382 Invalidate();
383}
384
386{
387 // tdf#118377 It can happen that mpReferenceDevice is already disposed and
388 // stays disposed (see task, even when Dialog is closed). I have no idea if
389 // this may be very bad - someone who knows more about lifetime of OutputDevice's
390 // will have to decide.
391 // To secure this, I changed all accesses to mpControlData->mpReferenceDevice to
392 // use Control::GetReferenceDevice() - only use mpControlData->mpReferenceDevice
393 // inside Control::SetReferenceDevice and Control::GetReferenceDevice().
394 // Control::GetReferenceDevice() will now reset mpReferenceDevice if it is already
395 // disposed. This way all usages will do a kind of 'test-and-get' call.
396 if(nullptr != mpReferenceDevice && mpReferenceDevice->isDisposed())
397 {
398 const_cast<Control*>(this)->SetReferenceDevice(nullptr);
399 }
400
401 return mpReferenceDevice;
402}
403
405{
406 return _rStyle.GetLabelFont();
407}
408
410{
411 return _rStyle.GetLabelTextColor();
412}
413
415{
416 const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
417
418 ApplyControlFont(rRenderContext, GetCanonicalFont(rStyleSettings));
419
420 ApplyControlForeground(rRenderContext, GetCanonicalTextColor(rStyleSettings));
421 rRenderContext.SetTextFillColor();
422}
423
425{
426 ApplySettings(*GetOutDev());
427}
428
429tools::Rectangle Control::DrawControlText( OutputDevice& _rTargetDevice, const tools::Rectangle& rRect, const OUString& _rStr,
430 DrawTextFlags _nStyle, std::vector< tools::Rectangle >* _pVector, OUString* _pDisplayText, const Size* i_pDeviceSize ) const
431{
432 OUString rPStr = _rStr;
433 DrawTextFlags nPStyle = _nStyle;
434
435 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
436
437 if (autoacc && !mbShowAccelerator)
438 {
439 rPStr = removeMnemonicFromString( _rStr );
440 nPStyle &= ~DrawTextFlags::HideMnemonic;
441 }
442
443 if( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
444 {
445 const tools::Rectangle aRet = _rTargetDevice.GetTextRect(rRect, rPStr, nPStyle);
446 _rTargetDevice.DrawText(aRet, rPStr, nPStyle, _pVector, _pDisplayText);
447 return aRet;
448 }
449
450 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
451 return aRenderer.DrawText(rRect, rPStr, nPStyle, _pVector, _pDisplayText, i_pDeviceSize);
452}
453
455 const OUString& _rStr, DrawTextFlags _nStyle, Size* o_pDeviceSize ) const
456{
457 OUString rPStr = _rStr;
458 DrawTextFlags nPStyle = _nStyle;
459
460 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
461
462 if (autoacc && !mbShowAccelerator)
463 {
464 rPStr = removeMnemonicFromString( _rStr );
465 nPStyle &= ~DrawTextFlags::HideMnemonic;
466 }
467
468 if ( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
469 {
470 tools::Rectangle aRet = _rTargetDevice.GetTextRect( rRect, rPStr, nPStyle );
471 if (o_pDeviceSize)
472 {
473 *o_pDeviceSize = aRet.GetSize();
474 }
475 return aRet;
476 }
477
478 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
479 return aRenderer.GetTextRect(rRect, rPStr, nPStyle, o_pDeviceSize);
480}
481
482Font
484{
485 Font aFont(GetCanonicalFont(GetSettings().GetStyleSettings()));
486 if (IsControlFont())
487 aFont.Merge(GetControlFont());
488 return aFont;
489}
490
492{
493 MouseButtonDown(rEvent);
494}
495
497{
498 MouseButtonUp(rEvent);
499}
500
502{
503 MouseMove(rEvent);
504}
505
506/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
DrawTextFlags
const StyleSettings & GetStyleSettings() const
void SetStyleSettings(const StyleSettings &rSet)
static vcl::Window * GetFocusWindow()
Get the currently focused window.
Definition: svapp.cxx:1161
Definition: ctrl.hxx:82
OutputDevice * GetReferenceDevice() const
Definition: ctrl.cxx:385
virtual void ApplySettings(vcl::RenderContext &rRenderContext) override
Definition: ctrl.cxx:414
std::optional< vcl::ControlLayoutData > mxLayoutData
Definition: ctrl.hxx:84
void CreateLayoutData() const
creates the mpData->mpLayoutData structure
Definition: ctrl.cxx:85
vcl::Font GetUnzoomedControlPointFont() const
Definition: ctrl.cxx:483
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:135
VclPtr< OutputDevice > mpReferenceDevice
Definition: ctrl.hxx:85
SAL_DLLPRIVATE void ImplClearLayoutData() const
Definition: ctrl.cxx:327
tools::Rectangle DrawControlText(OutputDevice &_rTargetDevice, const tools::Rectangle &_rRect, const OUString &_rStr, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize=nullptr) const
draws the given text onto the given device
Definition: ctrl.cxx:429
virtual void FillLayoutData() const
Definition: ctrl.cxx:81
Control(const Control &)=delete
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:212
bool mbHasControlFocus
Definition: ctrl.hxx:88
virtual const Color & GetCanonicalTextColor(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:409
bool ImplCallEventListenersAndHandler(VclEventId nEvent, std::function< void()> const &callHandler)
this calls both our event listeners, and a specified handler
Definition: ctrl.cxx:302
Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:173
void SetLayoutDataParent(const Control *pParent) const
Definition: ctrl.cxx:321
void LogicMouseButtonDown(const MouseEvent &rMouseEvent) override
Same as MouseButtonDown(), but coordinates are in logic unit. used for LOK.
Definition: ctrl.cxx:491
virtual bool EventNotify(NotifyEvent &rNEvt) override
Definition: ctrl.cxx:226
tools::Rectangle GetControlTextRect(OutputDevice &_rTargetDevice, const tools::Rectangle &rRect, const OUString &_rStr, DrawTextFlags _nStyle, Size *o_pDeviceSize=nullptr) const
Definition: ctrl.cxx:454
virtual void StateChanged(StateChangedType nStateChange) override
Definition: ctrl.cxx:257
SAL_DLLPRIVATE void ImplInitControlData()
Definition: ctrl.cxx:35
virtual void Resize() override
Definition: ctrl.cxx:75
virtual ~Control() override
Definition: ctrl.cxx:54
void LogicMouseMove(const MouseEvent &rMouseEvent) override
Same as MouseMove(), but coordinates are in logic unit. used for LOK.
Definition: ctrl.cxx:501
virtual void EnableRTL(bool bEnable=true) override
Definition: ctrl.cxx:66
bool HasLayoutData() const
determines whether we currently have layout data
Definition: ctrl.cxx:91
bool mbShowAccelerator
Definition: ctrl.hxx:89
void SetReferenceDevice(OutputDevice *_referenceDevice)
sets a reference device used for rendering control text
Definition: ctrl.cxx:376
void LogicMouseButtonUp(const MouseEvent &rMouseEvent) override
Same as MouseButtonUp(), but coordinates are in logic unit. used for LOK.
Definition: ctrl.cxx:496
virtual void SetText(const OUString &rStr) override
Definition: ctrl.cxx:96
virtual OUString GetDisplayText() const override
Definition: ctrl.cxx:219
virtual Size GetOptimalSize() const override
Definition: ctrl.cxx:370
void AppendLayoutData(const Control &rSubControl) const
Definition: ctrl.cxx:270
SAL_DLLPRIVATE void ImplDrawFrame(OutputDevice *pDev, tools::Rectangle &rRect)
draws a frame around the give rectangle, onto the given device
Definition: ctrl.cxx:332
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: ctrl.cxx:294
void ImplInitSettings()
Definition: ctrl.cxx:424
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:111
virtual const vcl::Font & GetCanonicalFont(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:404
void SetShowAccelerator(bool val)
Definition: ctrl.cxx:359
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects.
Definition: ctrl.cxx:59
void DrawFrame(const tools::Rectangle &rRect, const Color &rLeftTopColor, const Color &rRightBottomColor)
Definition: decoview.cxx:804
NotifyEventType GetType() const
Definition: event.hxx:308
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:171
tools::Rectangle GetTextRect(const tools::Rectangle &rRect, const OUString &rStr, DrawTextFlags nStyle=DrawTextFlags::WordBreak, TextRectInfo *pInfo=nullptr, const vcl::ITextLayout *_pTextLayout=nullptr) const
Definition: text.cxx:1913
void SetTextFillColor()
Definition: text.cxx:734
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
Definition: text.cxx:797
void SetLayoutMode(vcl::text::ComplexTextLayoutFlags nTextLayoutMode)
Definition: text.cxx:60
const AllSettings & GetSettings() const
Definition: outdev.hxx:289
tools::Long A() const
tools::Long B() const
StyleSettingsOptions GetOptions() const
const Color & GetLabelTextColor() const
const vcl::Font & GetLabelFont() const
void SetMonoColor(const Color &rColor)
void SetOptions(StyleSettingsOptions nOptions)
void logAction(VclPtr< Control > const &xUIElement, VclEventId nEvent)
Definition: logger.cxx:147
static UITestLogger & getInstance()
Definition: logger.cxx:611
void clear()
Definition: vclptr.hxx:190
bool isDisposed() const
constexpr tools::Long Top() const
constexpr Size GetSize() const
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
constexpr tools::Long Left() const
a class which allows rendering text of a Control onto a device, by taking into account the metrics of...
Definition: textlayout.hxx:88
tools::Rectangle DrawText(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize)
Definition: textlayout.cxx:335
tools::Rectangle GetTextRect(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, Size *o_pDeviceSize)
Definition: textlayout.cxx:341
void Merge(const Font &rFont)
Definition: font/font.cxx:388
virtual void StateChanged(StateChangedType nStateChange)
Definition: window.cxx:1942
::OutputDevice const * GetOutDev() const
Definition: window.cxx:567
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
Definition: window.cxx:2915
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: event.cxx:219
virtual bool EventNotify(NotifyEvent &rNEvt)
Definition: event.cxx:104
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nStyle, SystemParentData *pSystemParentData)
Definition: window.cxx:940
SAL_DLLPRIVATE void CompatStateChanged(StateChangedType nStateChange)
Definition: window.cxx:3897
sal_Int32 nIndex
sal_Int64 n
#define SAL_WARN_IF(condition, area, stream)
std::unique_ptr< sal_Int32[]> pData
int i
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
long Long
QPRO_FUNC_TYPE nType
@ MouseButtonDown
ImplSVNWFData maNWFData
Definition: svdata.hxx:406
bool mbAutoAccel
Definition: svdata.hxx:342
::Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:150
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:180
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:118
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:106
std::vector< tools::Rectangle > m_aUnicodeBoundRects
Definition: ctrl.hxx:46
std::vector< tools::Long > m_aLineIndices
Definition: ctrl.hxx:48
VclPtr< const Control > m_pParent
Definition: ctrl.hxx:50
tools::Long GetLineCount() const
Definition: ctrl.cxx:142
OUString m_aDisplayText
Definition: ctrl.hxx:43
ImplSVData * ImplGetSVData()
Definition: svdata.cxx:76
OUString removeMnemonicFromString(OUString const &rStr)
VclEventId
Definition: vclevent.hxx:38
StateChangedType
Definition: window.hxx:291
sal_Int64 WinBits
Definition: wintypes.hxx:109
WindowType
Definition: wintypes.hxx:27