LibreOffice Module vcl (master) 1
bubblewindow.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 <rtl/ustrbuf.hxx>
21#include <utility>
23#include <vcl/lineinfo.hxx>
24#include <vcl/settings.hxx>
25#include <vcl/svapp.hxx>
26#include <unotools/resmgr.hxx>
27#include <bubblewindow.hxx>
28#include <bitmaps.hlst>
29
30#define TIP_HEIGHT 15
31#define TIP_WIDTH 7
32#define TIP_RIGHT_OFFSET 18
33#define BUBBLE_BORDER 10
34#define TEXT_MAX_WIDTH 300
35#define TEXT_MAX_HEIGHT 200
36
37BubbleWindow::BubbleWindow( vcl::Window* pParent, OUString aTitle,
38 OUString aText, Image aImage )
42 )
43 , maBubbleTitle(std::move( aTitle ))
44 , maBubbleText(std::move( aText ))
45 , maBubbleImage(std::move( aImage ))
46 , maMaxTextSize( TEXT_MAX_WIDTH, TEXT_MAX_HEIGHT )
47 , mnTipOffset( 0 )
48{
49 SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetHelpColor() ) );
50}
51
53{
55
56 Size aSize = GetSizePixel();
57
58 if ( ( aSize.Height() < 20 ) || ( aSize.Width() < 60 ) )
59 return;
60
61 tools::Rectangle aRect( 0, TIP_HEIGHT, aSize.Width(), aSize.Height() - TIP_HEIGHT );
62 maRectPoly = tools::Polygon( aRect, 6, 6 );
63 vcl::Region aRegion( maRectPoly );
64 tools::Long nTipOffset = aSize.Width() - TIP_RIGHT_OFFSET + mnTipOffset;
65
66 Point aPointArr[4];
67 aPointArr[0] = Point( nTipOffset, TIP_HEIGHT );
68 aPointArr[1] = Point( nTipOffset, 0 );
69 aPointArr[2] = Point( nTipOffset + TIP_WIDTH , TIP_HEIGHT );
70 aPointArr[3] = Point( nTipOffset, TIP_HEIGHT );
71 maTriPoly = tools::Polygon( 4, aPointArr );
72 vcl::Region aTriRegion( maTriPoly );
73
74 aRegion.Union( aTriRegion);
75 maBounds = aRegion;
76
78}
79
80void BubbleWindow::SetTitleAndText( const OUString& rTitle,
81 const OUString& rText,
82 const Image& rImage )
83{
84 maBubbleTitle = rTitle;
85 maBubbleText = rText;
86 maBubbleImage = rImage;
87
88 Resize();
89}
90
91void BubbleWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rRect*/)
92{
93 LineInfo aThickLine( LineStyle::Solid, 2 );
94
95 rRenderContext.DrawPolyLine( maRectPoly, aThickLine );
96 rRenderContext.DrawPolyLine( maTriPoly );
97
98 Color aOldLine = rRenderContext.GetLineColor();
99 Size aSize = GetSizePixel();
100 tools::Long nTipOffset = aSize.Width() - TIP_RIGHT_OFFSET + mnTipOffset;
101
102 rRenderContext.SetLineColor( GetSettings().GetStyleSettings().GetHelpColor() );
103 rRenderContext.DrawLine( Point( nTipOffset+2, TIP_HEIGHT ),
104 Point( nTipOffset + TIP_WIDTH -1 , TIP_HEIGHT ),
105 aThickLine );
106 rRenderContext.SetLineColor( aOldLine );
107
108 Size aImgSize = maBubbleImage.GetSizePixel();
109
111
112 vcl::Font aOldFont = GetFont();
113 vcl::Font aBoldFont = aOldFont;
114 aBoldFont.SetWeight( WEIGHT_BOLD );
115
116 SetFont( aBoldFont );
117 tools::Rectangle aTitleRect = maTitleRect;
118 aTitleRect.Move( aImgSize.Width(), 0 );
120
121 SetFont( aOldFont );
122 tools::Rectangle aTextRect = maTextRect;
123 aTextRect.Move( aImgSize.Width(), 0 );
125}
126
128{
129 Show( false );
130}
131
132void BubbleWindow::Show( bool bVisible )
133{
134 if ( !bVisible )
135 {
137 return;
138 }
139
140 // don't show bubbles without a text
141 if ( ( maBubbleTitle.isEmpty() ) && ( maBubbleText.isEmpty() ) )
142 return;
143
144 Size aWindowSize = GetSizePixel();
145
146 Size aImgSize = maBubbleImage.GetSizePixel();
147
149
150 aWindowSize.setHeight( maTitleRect.GetHeight() * 7 / 4+ maTextRect.GetHeight() +
152
154 aWindowSize.setWidth( maTitleRect.GetWidth() );
155 else
156 aWindowSize.setWidth( maTextRect.GetWidth() );
157
158 aWindowSize.setWidth( aWindowSize.Width() + 3 * BUBBLE_BORDER + aImgSize.Width() );
159
160 if ( aWindowSize.Height() < aImgSize.Height() + TIP_HEIGHT + 2 * BUBBLE_BORDER )
161 aWindowSize.setHeight( aImgSize.Height() + TIP_HEIGHT + 2 * BUBBLE_BORDER );
162
163 Point aPos;
164 aPos.setX( maTipPos.X() - aWindowSize.Width() + TIP_RIGHT_OFFSET );
165 aPos.setY( maTipPos.Y() );
166 Point aScreenPos = GetParent()->OutputToAbsoluteScreenPixel( aPos );
167 if ( aScreenPos.X() < 0 )
168 {
169 mnTipOffset = aScreenPos.X();
170 aPos.AdjustX( -mnTipOffset );
171 }
172 SetPosSizePixel( aPos, aWindowSize );
173
175}
176
178{
179 Size aTotalSize;
180 bool bFinished = false;
181 vcl::Font aOldFont = GetFont();
182 vcl::Font aBoldFont = aOldFont;
183
184 aBoldFont.SetWeight( WEIGHT_BOLD );
185
186 while ( !bFinished )
187 {
188 SetFont( aBoldFont );
189
193
194 SetFont( aOldFont );
198
199 if ( maTextRect.GetHeight() < 10 )
200 maTextRect.setHeight( 10 );
201
202 aTotalSize.setHeight( maTitleRect.GetHeight() +
203 aBoldFont.GetFontHeight() * 3 / 4 +
206 if ( aTotalSize.Height() > maMaxTextSize.Height() )
207 {
210 }
211 else
212 bFinished = true;
213 }
216}
217
219 : maTimeoutTimer("MenuBarUpdateIconManager")
220 , maWaitIdle("vcl MenuBarUpdateIconManager maWaitIdle")
221 , mbShowMenuIcon(false)
222 , mbShowBubble(false)
223 , mbBubbleChanged( false )
224{
225 maTimeoutTimer.SetTimeout( 10000 );
227
230
231 maApplicationEventHdl = LINK(this, MenuBarUpdateIconManager, ApplicationEventHdl);
233
234 maWindowEventHdl = LINK(this, MenuBarUpdateIconManager, WindowEventHdl);
235}
236
238{
239 auto aI = std::find(maIconMBars.begin(), maIconMBars.end(), pMenuBar);
240 if (aI == maIconMBars.end())
241 return 0;
242 return maIconIDs[std::distance(maIconMBars.begin(), aI)];
243}
244
246{
247 if (!mpActiveSysWin)
248 return nullptr;
249
251 if( aIconRect.IsEmpty() )
252 return nullptr;
253
254 auto pBubbleWin = mpBubbleWin;
255
256 if ( !pBubbleWin ) {
259 mbBubbleChanged = false;
260 }
261 else if ( mbBubbleChanged ) {
262 pBubbleWin->SetTitleAndText( maBubbleTitle, maBubbleText,
264 mbBubbleChanged = false;
265 }
266
267 Point aWinPos = aIconRect.BottomCenter();
268
269 pBubbleWin->SetTipPosPixel( aWinPos );
270
271 return pBubbleWin;
272}
273
275{
276 RemoveBubbleWindow();
277}
278
279IMPL_LINK(MenuBarUpdateIconManager, WindowEventHdl, VclWindowEvent&, rEvent, void)
280{
281 VclEventId nEventID = rEvent.GetId();
282
283 if ( VclEventId::ObjectDying == nEventID )
284 {
285 if (mpActiveSysWin == rEvent.GetWindow())
286 {
287 RemoveBubbleWindow();
288 mpActiveSysWin = nullptr;
289 mpActiveMBar = nullptr;
290 }
291 }
292 else if ( VclEventId::WindowMenubarAdded == nEventID )
293 {
294 vcl::Window *pWindow = rEvent.GetWindow();
295 if ( pWindow )
296 {
297 SystemWindow *pSysWin = pWindow->GetSystemWindow();
298 if (pSysWin)
299 AddMenuBarIcon(*pSysWin, false);
300 }
301 }
302 else if ( VclEventId::WindowMenubarRemoved == nEventID )
303 {
304 MenuBar *pMBar = static_cast<MenuBar*>(rEvent.GetData());
305 if (pMBar)
306 {
307 if (pMBar == mpActiveMBar)
308 {
309 RemoveBubbleWindow();
310 mpActiveMBar = nullptr;
311 }
312 RemoveMenuBarIcon(pMBar);
313 }
314 }
315 else if ( ( nEventID == VclEventId::WindowMove ) ||
316 ( nEventID == VclEventId::WindowResize ) )
317 {
318 if ( mpActiveSysWin == rEvent.GetWindow() &&
319 mpBubbleWin && mpActiveMBar )
320 {
321 tools::Rectangle aIconRect = mpActiveMBar->GetMenuBarButtonRectPixel(GetIconID(mpActiveMBar));
322 Point aWinPos = aIconRect.BottomCenter();
323 mpBubbleWin->SetTipPosPixel( aWinPos );
324 if ( mpBubbleWin->IsVisible() )
325 mpBubbleWin->Show(); // This will recalc the screen position of the bubble
326 }
327 }
328}
329
330IMPL_LINK(MenuBarUpdateIconManager, ApplicationEventHdl, VclSimpleEvent&, rEvent, void)
331{
332 switch (rEvent.GetId())
333 {
337
338 vcl::Window *pWindow = static_cast< VclWindowEvent * >(&rEvent)->GetWindow();
339 if ( pWindow && pWindow->IsTopWindow() )
340 {
341 SystemWindow *pSysWin = pWindow->GetSystemWindow();
342 MenuBar *pMBar = pSysWin ? pSysWin->GetMenuBar() : nullptr;
343 if (pMBar)
344 AddMenuBarIcon(*pSysWin, true);
345 }
346 break;
347 }
348 default: break;
349 }
350}
351
352IMPL_LINK_NOARG(MenuBarUpdateIconManager, UserEventHdl, void*, void)
353{
356 SystemWindow *pActiveSysWin = nullptr;
357
358 vcl::Window *pBubbleWin = nullptr;
359 if ( mpBubbleWin )
360 pBubbleWin = mpBubbleWin;
361
362 if ( pActiveWin && ( pActiveWin != pBubbleWin ) && pActiveWin->IsTopWindow() )
363 pActiveSysWin = pActiveWin->GetSystemWindow();
364
365 if ( pActiveWin == pBubbleWin )
366 pActiveSysWin = nullptr;
367
368 while ( !pActiveSysWin && pTopWin )
369 {
370 if ( ( pTopWin != pBubbleWin ) && pTopWin->IsTopWindow() )
371 pActiveSysWin = pTopWin->GetSystemWindow();
372 if ( !pActiveSysWin )
373 pTopWin = Application::GetNextTopLevelWindow( pTopWin );
374 }
375
376 if ( pActiveSysWin )
377 AddMenuBarIcon(*pActiveSysWin, true);
378}
379
381{
382 maWaitIdle.Stop();
383 if ( mpBubbleWin )
384 mpBubbleWin->Show( false );
385
386 maClickHdl.Call(nullptr);
387
388 return false;
389}
390
392{
393 if ( rData.bHighlight )
394 maWaitIdle.Start();
395 else
396 RemoveBubbleWindow();
397
398 return false;
399}
400
402{
403 mpBubbleWin = GetBubbleWindow();
404
405 if ( mpBubbleWin )
406 {
407 mpBubbleWin->Show();
408 }
409}
410
412{
414
417}
418
420{
421 while (!maIconMBars.empty())
423}
424
426{
427 if ( bShowMenuIcon != mbShowMenuIcon )
428 {
429 mbShowMenuIcon = bShowMenuIcon;
430 if ( bShowMenuIcon )
432 else
433 {
436 }
437 }
438}
439
441{
442 mbShowBubble = bShowBubble;
443 if ( mbShowBubble )
445 else if ( mpBubbleWin )
446 mpBubbleWin->Show( false );
447}
448
450{
451 mbBubbleChanged = true;
453 mpBubbleWin->Show( false );
454}
455
457{
458 maBubbleImage = rImage;
460}
461
463{
464 if (rTitle != maBubbleTitle)
465 {
466 maBubbleTitle = rTitle;
468 }
469}
470
472{
473 if (rText != maBubbleText)
474 {
475 maBubbleText = rText;
477 }
478}
479
480namespace {
481Image GetMenuBarIcon( MenuBar const * pMBar )
482{
483 OUString sResID;
484 vcl::Window *pMBarWin = pMBar->GetWindow();
485 sal_uInt32 nMBarHeight = 20;
486
487 if ( pMBarWin )
488 nMBarHeight = pMBarWin->GetOutputSizePixel().getHeight();
489
490 if (nMBarHeight >= 35)
491 sResID = RID_UPDATE_AVAILABLE_26;
492 else
493 sResID = RID_UPDATE_AVAILABLE_16;
494
495 return Image(StockImage::Yes, sResID);
496}
497}
498
500{
501 if (!mbShowMenuIcon)
502 return;
503
504 MenuBar *pActiveMBar = rSysWin.GetMenuBar();
505 if (&rSysWin != mpActiveSysWin || pActiveMBar != mpActiveMBar)
507
508 auto aI = std::find(maIconMBars.begin(), maIconMBars.end(), pActiveMBar);
509 if (aI == maIconMBars.end())
510 {
511 if (pActiveMBar)
512 {
513 OUStringBuffer aBuf;
514 if( !maBubbleTitle.isEmpty() )
515 aBuf.append( maBubbleTitle );
516 if( !maBubbleText.isEmpty() )
517 {
518 if( !maBubbleTitle.isEmpty() )
519 aBuf.append( "\n\n" );
520 aBuf.append( maBubbleText );
521 }
522
523 Image aImage = GetMenuBarIcon( pActiveMBar );
524 sal_uInt16 nIconID = pActiveMBar->AddMenuBarButton( aImage,
525 LINK( this, MenuBarUpdateIconManager, ClickHdl ),
526 aBuf.makeStringAndClear() );
527 maIconMBars.push_back(pActiveMBar);
528 maIconIDs.push_back(nIconID);
529 }
530
531 if (bAddEventHdl)
533 }
534
535 if (mpActiveMBar != pActiveMBar)
536 {
537 if (mpActiveMBar)
538 {
541 }
542 mpActiveMBar = pActiveMBar;
543 if (mpActiveMBar)
544 {
546 LINK(this, MenuBarUpdateIconManager, HighlightHdl));
547 }
548 }
549
550 mpActiveSysWin = &rSysWin;
551
552 if (mbShowBubble && pActiveMBar)
553 {
555 if ( mpBubbleWin )
556 {
557 mpBubbleWin->Show();
559 }
560 mbShowBubble = false;
561 }
562}
563
565{
566 auto aI = std::find(maIconMBars.begin(), maIconMBars.end(), pMenuBar);
567 if (aI == maIconMBars.end())
568 return;
569
570 auto aIconI = maIconIDs.begin() + std::distance(maIconMBars.begin(), aI);
571
572 try
573 {
574 pMenuBar->RemoveMenuBarButton(*aIconI);
575 }
576 catch (...)
577 {
578 }
579
580 maIconMBars.erase(aI);
581 maIconIDs.erase(aIconI);
582}
583
585{
589}
590
591/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
#define TIP_RIGHT_OFFSET
#define TIP_HEIGHT
IMPL_LINK_NOARG(MenuBarUpdateIconManager, TimeOutHdl, Timer *, void)
#define BUBBLE_BORDER
#define TIP_WIDTH
IMPL_LINK(MenuBarUpdateIconManager, WindowEventHdl, VclWindowEvent &, rEvent, void)
#define TEXT_MAX_WIDTH
#define TEXT_MAX_HEIGHT
static void AddEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
Add a VCL event listener to the application.
Definition: svapp.cxx:698
static vcl::Window * GetNextTopLevelWindow(vcl::Window const *pWindow)
Get the next top level window.
Definition: svapp.cxx:1067
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
Post a user event to the default window.
Definition: svapp.cxx:999
static void RemoveEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
Remove a VCL event listener from the application.
Definition: svapp.cxx:704
static vcl::Window * GetActiveTopWindow()
Get the "active" top window.
Definition: svapp.cxx:1105
static vcl::Window * GetFirstTopLevelWindow()
Get the first top-level window of the application.
Definition: svapp.cxx:1061
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
void Show(bool bVisible=true)
vcl::Region maBounds
OUString maBubbleTitle
BubbleWindow(vcl::Window *pParent, OUString aTitle, OUString aText, Image aImage)
tools::Long mnTipOffset
void RecalcTextRects()
tools::Rectangle maTextRect
tools::Polygon maTriPoly
void Resize() override
void SetTitleAndText(const OUString &rTitle, const OUString &rText, const Image &rImage)
tools::Rectangle maTitleRect
virtual void MouseButtonDown(const MouseEvent &rMEvt) override
OUString maBubbleText
tools::Polygon maRectPoly
Image maBubbleImage
Definition: image.hxx:40
Size GetSizePixel() const
Definition: Image.cxx:88
Link< VclSimpleEvent &, void > maApplicationEventHdl
void RemoveMenuBarIcon(MenuBar *pMenuBar)
void SetShowBubble(bool bShowBubble)
std::vector< sal_uInt16 > maIconIDs
Link< VclWindowEvent &, void > maWindowEventHdl
void SetBubbleImage(const Image &rImage)
void SetBubbleText(const OUString &rText)
void AddMenuBarIcon(SystemWindow &rSysWin, bool bAddEventHdl)
VclPtr< SystemWindow > mpActiveSysWin
void SetBubbleTitle(const OUString &rTitle)
sal_uInt16 GetIconID(MenuBar *pMenuBar) const
VclPtr< MenuBar > mpActiveMBar
void SetShowMenuIcon(bool bShowMenuIcon)
VclPtr< BubbleWindow > GetBubbleWindow()
VclPtr< BubbleWindow > mpBubbleWin
std::vector< VclPtr< MenuBar > > maIconMBars
sal_uInt16 AddMenuBarButton(const Image &, const Link< MenuBarButtonCallbackArg &, bool > &, const OUString &)
Definition: menu.cxx:2635
tools::Rectangle GetMenuBarButtonRectPixel(sal_uInt16 nId)
Definition: menu.cxx:2657
void SetMenuBarButtonHighlightHdl(sal_uInt16 nId, const Link< MenuBarButtonCallbackArg &, bool > &)
Definition: menu.cxx:2641
void RemoveMenuBarButton(sal_uInt16 nId)
Definition: menu.cxx:2649
vcl::Window * GetWindow() const
Definition: menu.hxx:377
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:170
void DrawPolyLine(const tools::Polygon &rPoly)
Render the given polygon as a line stroke.
Definition: polyline.cxx:31
void DrawLine(const Point &rStartPt, const Point &rEndPt)
Definition: line.cxx:161
void SetLineColor()
Definition: line.cxx:37
void DrawImage(const Point &rPos, const Image &rImage, DrawImageFlags nStyle=DrawImageFlags::NONE)
This is an overloaded member function, provided for convenience. It differs from the above function o...
const Color & GetLineColor() const
Definition: outdev.hxx:510
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
constexpr tools::Long Y() const
void setX(tools::Long nX)
void setY(tools::Long nY)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
constexpr tools::Long getHeight() const
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
MenuBar * GetMenuBar() const
Definition: syswin.hxx:183
virtual void Resize() override
Definition: syswin.cxx:993
void SetPriority(TaskPriority ePriority)
Definition: scheduler.cxx:606
void Stop()
Definition: scheduler.cxx:599
Definition: timer.hxx:27
void SetTimeout(sal_uInt64 nTimeoutMs)
Definition: timer.cxx:90
void SetInvokeHandler(const Link< Timer *, void > &rLink)
Definition: timer.hxx:56
virtual void Start(bool bStartTimer=true) override
Schedules the task for execution.
Definition: timer.cxx:83
void disposeAndClear()
Definition: vclptr.hxx:200
static VclPtr< reference_type > Create(Arg &&... arg)
A construction helper for VclPtr.
Definition: vclptr.hxx:127
constexpr tools::Long GetWidth() const
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
constexpr Point BottomCenter() const
constexpr tools::Long GetHeight() const
void setHeight(tools::Long n)
constexpr bool IsEmpty() const
tools::Long GetFontHeight() const
Definition: font/font.cxx:909
void SetWeight(FontWeight)
Definition: font/font.cxx:236
void Union(const tools::Rectangle &rRegion)
Definition: region.cxx:507
tools::Rectangle GetTextRect(const tools::Rectangle &rRect, const OUString &rStr, DrawTextFlags nStyle=DrawTextFlags::WordBreak, TextRectInfo *pInfo=nullptr, const vcl::ITextLayout *_pTextLayout=nullptr) const
Definition: window3.cxx:201
void SetFont(const vcl::Font &rNewFont)
Definition: window3.cxx:59
vcl::Window * GetParent() const
Definition: window2.cxx:1123
vcl::Window * GetWindow(GetWindowType nType) const
Definition: stacking.cxx:1036
const AllSettings & GetSettings() const
Definition: window3.cxx:129
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
Definition: window.cxx:2187
const vcl::Font & GetFont() const
Definition: window3.cxx:58
SystemWindow * GetSystemWindow() const
Definition: stacking.cxx:807
void AddEventListener(const Link< VclWindowEvent &, void > &rEventListener)
Definition: event.cxx:307
virtual Size GetSizePixel() const
Definition: window.cxx:2402
Size GetOutputSizePixel() const
Definition: window3.cxx:89
void SetWindowRegionPixel()
Definition: paint.cxx:1037
bool IsTopWindow() const
Definition: stacking.cxx:609
Point OutputToAbsoluteScreenPixel(const Point &rPos) const
Definition: window.cxx:2855
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
Definition: window2.cxx:1294
void SetBackground()
Definition: window3.cxx:100
WEIGHT_BOLD
aBuf
long Long
@ LOWEST
Low, very idle cleanup tasks.
bool bVisible
VclEventId
Definition: vclevent.hxx:38
@ WindowMenubarAdded
@ WindowMenubarRemoved
WinBits const WB_OWNERDRAWDECORATION
Definition: wintypes.hxx:173
WinBits const WB_SYSTEMWINDOW
Definition: wintypes.hxx:126
WinBits const WB_NOBORDER
Definition: wintypes.hxx:116