1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski #ifndef _SV_SALDISP_HXX
25*b1cdbd2cSJim Jagielski #define _SV_SALDISP_HXX
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski // -=-= exports =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
28*b1cdbd2cSJim Jagielski class SalDisplay;
29*b1cdbd2cSJim Jagielski class SalColormap;
30*b1cdbd2cSJim Jagielski class SalVisual;
31*b1cdbd2cSJim Jagielski class SalXLib;
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski // -=-= #includes =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
34*b1cdbd2cSJim Jagielski #include <unx/salunx.h>
35*b1cdbd2cSJim Jagielski #include <vcl/salgtype.hxx>
36*b1cdbd2cSJim Jagielski #ifndef _SV_PTRSTYLE_HXX
37*b1cdbd2cSJim Jagielski #include <vcl/ptrstyle.hxx>
38*b1cdbd2cSJim Jagielski #endif
39*b1cdbd2cSJim Jagielski #include <sal/types.h>
40*b1cdbd2cSJim Jagielski #ifndef _OSL_MUTEX_H
41*b1cdbd2cSJim Jagielski #include <osl/mutex.h>
42*b1cdbd2cSJim Jagielski #endif
43*b1cdbd2cSJim Jagielski #include <vector>
44*b1cdbd2cSJim Jagielski #include <list>
45*b1cdbd2cSJim Jagielski #include <hash_map>
46*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
47*b1cdbd2cSJim Jagielski #include <salwtype.hxx>
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski #include <vclpluginapi.h>
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski // -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
52*b1cdbd2cSJim Jagielski class BitmapPalette;
53*b1cdbd2cSJim Jagielski class SalFrame;
54*b1cdbd2cSJim Jagielski class ColorMask;
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski namespace vcl_sal { class WMAdaptor; }
57*b1cdbd2cSJim Jagielski class DtIntegrator;
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski // -=-= #defines -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
60*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_WM_SetPos 0x00000001
61*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_WM_Screen 0x00000002
62*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_WM_Parent_Pixmap_None 0x00000004
63*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_WM_ClientPos 0x00000008
64*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_XSetClipMask 0x00000010 // for bitmap ops.
65*b1cdbd2cSJim Jagielski #define PROPERTY_SUPPORT_3ButtonMouse 0x00000020
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_XA_FAMILY_NAME_nil 0x00001000
68*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_XCopyArea_GXxor 0x00002000 // from window
69*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_Stipple 0x00004000 // 0/1 inverted
70*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_Tile 0x00008000 // Recreate the
71*b1cdbd2cSJim Jagielski // dither brush each time
72*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_FillPolygon_Tile 0x00010000 // always Toggle Fillstyle
73*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_DrawLine 0x00020000 // a DrawLine is one point to short
74*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_CopyPlane_RevertBWPixel 0x00040000 // revert fg and bg for xcopyplane
75*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_CopyArea_OnlySmallSlices 0x00080000
76*b1cdbd2cSJim Jagielski #define PROPERTY_BUG_Bitmap_Bit_Order 0x00100000
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski #define PROPERTY_FEATURE_Maximize 0x01000000
79*b1cdbd2cSJim Jagielski #define PROPERTY_FEATURE_SharedMemory 0x02000000
80*b1cdbd2cSJim Jagielski #define PROPERTY_FEATURE_TrustedSolaris 0x04000000
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski #define PROPERTY_DEFAULT 0x00000FCB
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------
85*b1cdbd2cSJim Jagielski // server vendor
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski typedef enum {
88*b1cdbd2cSJim Jagielski vendor_none = 0,
89*b1cdbd2cSJim Jagielski vendor_attachmate,
90*b1cdbd2cSJim Jagielski vendor_excursion,
91*b1cdbd2cSJim Jagielski vendor_hp,
92*b1cdbd2cSJim Jagielski vendor_hummingbird,
93*b1cdbd2cSJim Jagielski vendor_ibm,
94*b1cdbd2cSJim Jagielski vendor_sco,
95*b1cdbd2cSJim Jagielski vendor_sgi,
96*b1cdbd2cSJim Jagielski vendor_sun,
97*b1cdbd2cSJim Jagielski vendor_xfree,
98*b1cdbd2cSJim Jagielski vendor_xinside,
99*b1cdbd2cSJim Jagielski vendor_xprinter,
100*b1cdbd2cSJim Jagielski vendor_unknown
101*b1cdbd2cSJim Jagielski } srv_vendor_t;
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski extern "C" srv_vendor_t sal_GetServerVendor( Display *p_display );
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski // -=-= SalWM =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
106*b1cdbd2cSJim Jagielski enum SalWM { olwm, // Open Look
107*b1cdbd2cSJim Jagielski mwm, // Motif
108*b1cdbd2cSJim Jagielski kwm, // KDE Desktop Environment
109*b1cdbd2cSJim Jagielski FourDwm, // SGI
110*b1cdbd2cSJim Jagielski vuewm, // HP
111*b1cdbd2cSJim Jagielski dtwm, // CDE
112*b1cdbd2cSJim Jagielski winmgr, // Oracle NC
113*b1cdbd2cSJim Jagielski twm,
114*b1cdbd2cSJim Jagielski fvwm, // ...
115*b1cdbd2cSJim Jagielski pmwm, // SCO
116*b1cdbd2cSJim Jagielski otherwm };
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski // -=-= SalRGB -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
119*b1cdbd2cSJim Jagielski // MSB/Bigendian Sicht (SalColor == RGB, r=0xFF0000, g=0xFF00, b=0xFF)
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski enum SalRGB { RGB, RBG,
122*b1cdbd2cSJim Jagielski GBR, GRB,
123*b1cdbd2cSJim Jagielski BGR, BRG,
124*b1cdbd2cSJim Jagielski RGBA, RBGA,
125*b1cdbd2cSJim Jagielski GBRA, GRBA,
126*b1cdbd2cSJim Jagielski BGRA, BRGA,
127*b1cdbd2cSJim Jagielski otherSalRGB };
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski // -=-= SalVisual =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
130*b1cdbd2cSJim Jagielski class SalVisual : public XVisualInfo
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski SalRGB eRGBMode_;
133*b1cdbd2cSJim Jagielski int nRedShift_;
134*b1cdbd2cSJim Jagielski int nGreenShift_;
135*b1cdbd2cSJim Jagielski int nBlueShift_;
136*b1cdbd2cSJim Jagielski int nRedBits_;
137*b1cdbd2cSJim Jagielski int nGreenBits_;
138*b1cdbd2cSJim Jagielski int nBlueBits_;
139*b1cdbd2cSJim Jagielski public:
140*b1cdbd2cSJim Jagielski SalVisual();
141*b1cdbd2cSJim Jagielski ~SalVisual();
142*b1cdbd2cSJim Jagielski SalVisual( const XVisualInfo* pXVI );
143*b1cdbd2cSJim Jagielski
GetVisualId() const144*b1cdbd2cSJim Jagielski inline VisualID GetVisualId() const { return visualid; }
GetVisual() const145*b1cdbd2cSJim Jagielski inline Visual *GetVisual() const { return visual; }
GetClass() const146*b1cdbd2cSJim Jagielski inline int GetClass() const { return c_class; }
GetDepth() const147*b1cdbd2cSJim Jagielski inline int GetDepth() const { return depth; }
GetMode() const148*b1cdbd2cSJim Jagielski inline SalRGB GetMode() const { return eRGBMode_; }
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski Pixel GetTCPixel( SalColor nColor ) const;
151*b1cdbd2cSJim Jagielski SalColor GetTCColor( Pixel nPixel ) const;
152*b1cdbd2cSJim Jagielski sal_Bool Convert( int &n0, int &n1, int &n2, int &n3 ); // 32bit
153*b1cdbd2cSJim Jagielski sal_Bool Convert( int &n0, int &n1, int &n2 ); // 24bit
154*b1cdbd2cSJim Jagielski };
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski // -=-= SalColormap =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
157*b1cdbd2cSJim Jagielski class SalColormap
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski const SalDisplay* m_pDisplay;
160*b1cdbd2cSJim Jagielski Colormap m_hColormap;
161*b1cdbd2cSJim Jagielski std::vector<SalColor> m_aPalette; // Pseudocolor
162*b1cdbd2cSJim Jagielski SalVisual m_aVisual;
163*b1cdbd2cSJim Jagielski std::vector<sal_uInt16> m_aLookupTable; // Pseudocolor: 12bit reduction
164*b1cdbd2cSJim Jagielski Pixel m_nWhitePixel;
165*b1cdbd2cSJim Jagielski Pixel m_nBlackPixel;
166*b1cdbd2cSJim Jagielski Pixel m_nUsed; // Pseudocolor
167*b1cdbd2cSJim Jagielski int m_nScreen;
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski void GetPalette();
170*b1cdbd2cSJim Jagielski void GetLookupTable();
171*b1cdbd2cSJim Jagielski public:
172*b1cdbd2cSJim Jagielski SalColormap( const SalDisplay* pSalDisplay,
173*b1cdbd2cSJim Jagielski Colormap hColormap,
174*b1cdbd2cSJim Jagielski int nScreen );
175*b1cdbd2cSJim Jagielski SalColormap( const BitmapPalette &rpPalette );
176*b1cdbd2cSJim Jagielski SalColormap( sal_uInt16 nDepth );
177*b1cdbd2cSJim Jagielski SalColormap();
178*b1cdbd2cSJim Jagielski ~SalColormap();
179*b1cdbd2cSJim Jagielski
GetXColormap() const180*b1cdbd2cSJim Jagielski inline Colormap GetXColormap() const { return m_hColormap; }
GetDisplay() const181*b1cdbd2cSJim Jagielski inline const SalDisplay* GetDisplay() const { return m_pDisplay; }
182*b1cdbd2cSJim Jagielski inline Display* GetXDisplay() const;
GetVisual() const183*b1cdbd2cSJim Jagielski inline const SalVisual& GetVisual() const { return m_aVisual; }
GetXVisual() const184*b1cdbd2cSJim Jagielski inline Visual* GetXVisual() const { return m_aVisual.GetVisual(); }
GetWhitePixel() const185*b1cdbd2cSJim Jagielski inline Pixel GetWhitePixel() const { return m_nWhitePixel; }
GetBlackPixel() const186*b1cdbd2cSJim Jagielski inline Pixel GetBlackPixel() const { return m_nBlackPixel; }
GetUsed() const187*b1cdbd2cSJim Jagielski inline Pixel GetUsed() const { return m_nUsed; }
GetClass() const188*b1cdbd2cSJim Jagielski inline int GetClass() const { return m_aVisual.GetClass(); }
GetScreenNumber() const189*b1cdbd2cSJim Jagielski inline int GetScreenNumber() const { return m_nScreen; }
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski sal_Bool GetXPixels( XColor &rColor,
192*b1cdbd2cSJim Jagielski int r,
193*b1cdbd2cSJim Jagielski int g,
194*b1cdbd2cSJim Jagielski int b ) const;
195*b1cdbd2cSJim Jagielski inline sal_Bool GetXPixel( XColor &rColor,
196*b1cdbd2cSJim Jagielski int r,
197*b1cdbd2cSJim Jagielski int g,
198*b1cdbd2cSJim Jagielski int b ) const;
199*b1cdbd2cSJim Jagielski Pixel GetPixel( SalColor nColor ) const;
200*b1cdbd2cSJim Jagielski SalColor GetColor( Pixel nPixel ) const;
201*b1cdbd2cSJim Jagielski void SetPalette( const BitmapPalette &rPalette );
202*b1cdbd2cSJim Jagielski };
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski // -=-= SalXLib =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
205*b1cdbd2cSJim Jagielski typedef int(*YieldFunc)(int fd, void* data);
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski class VCLPLUG_GEN_PUBLIC SalXLib
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski protected:
210*b1cdbd2cSJim Jagielski timeval m_aTimeout;
211*b1cdbd2cSJim Jagielski sal_uLong m_nTimeoutMS;
212*b1cdbd2cSJim Jagielski int m_pTimeoutFDS[2];
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski bool m_bHaveSystemChildFrames;
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski int nFDs_;
217*b1cdbd2cSJim Jagielski fd_set aReadFDS_;
218*b1cdbd2cSJim Jagielski fd_set aExceptionFDS_;
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski struct XErrorStackEntry
222*b1cdbd2cSJim Jagielski {
223*b1cdbd2cSJim Jagielski bool m_bIgnore;
224*b1cdbd2cSJim Jagielski bool m_bWas;
225*b1cdbd2cSJim Jagielski unsigned int m_nLastErrorRequest;
226*b1cdbd2cSJim Jagielski XErrorHandler m_aHandler;
227*b1cdbd2cSJim Jagielski };
228*b1cdbd2cSJim Jagielski std::vector< XErrorStackEntry > m_aXErrorHandlerStack;
229*b1cdbd2cSJim Jagielski XIOErrorHandler m_aOrigXIOErrorHandler;
230*b1cdbd2cSJim Jagielski public:
231*b1cdbd2cSJim Jagielski SalXLib();
232*b1cdbd2cSJim Jagielski virtual ~SalXLib();
233*b1cdbd2cSJim Jagielski virtual void Init();
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski virtual void Yield( bool bWait, bool bHandleAllCurrentEvents );
236*b1cdbd2cSJim Jagielski virtual void Wakeup();
237*b1cdbd2cSJim Jagielski virtual void PostUserEvent();
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski virtual void Insert( int fd, void* data,
240*b1cdbd2cSJim Jagielski YieldFunc pending,
241*b1cdbd2cSJim Jagielski YieldFunc queued,
242*b1cdbd2cSJim Jagielski YieldFunc handle );
243*b1cdbd2cSJim Jagielski virtual void Remove( int fd );
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski void XError( Display *pDisp, XErrorEvent *pEvent );
HasXErrorOccured() const246*b1cdbd2cSJim Jagielski bool HasXErrorOccured() const { return m_aXErrorHandlerStack.back().m_bWas; }
GetLastXErrorRequestCode() const247*b1cdbd2cSJim Jagielski unsigned int GetLastXErrorRequestCode() const { return m_aXErrorHandlerStack.back().m_nLastErrorRequest; }
ResetXErrorOccured()248*b1cdbd2cSJim Jagielski void ResetXErrorOccured() { m_aXErrorHandlerStack.back().m_bWas = false; }
249*b1cdbd2cSJim Jagielski void PushXErrorLevel( bool bIgnore );
250*b1cdbd2cSJim Jagielski void PopXErrorLevel();
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski virtual void StartTimer( sal_uLong nMS );
253*b1cdbd2cSJim Jagielski virtual void StopTimer();
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski bool CheckTimeout( bool bExecuteTimers = true );
256*b1cdbd2cSJim Jagielski
setHaveSystemChildFrame()257*b1cdbd2cSJim Jagielski void setHaveSystemChildFrame()
258*b1cdbd2cSJim Jagielski { m_bHaveSystemChildFrames = true; }
getHaveSystemChildFrame() const259*b1cdbd2cSJim Jagielski bool getHaveSystemChildFrame() const
260*b1cdbd2cSJim Jagielski { return m_bHaveSystemChildFrames; }
261*b1cdbd2cSJim Jagielski };
262*b1cdbd2cSJim Jagielski
263*b1cdbd2cSJim Jagielski // -=-= SalDisplay -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski class SalI18N_InputMethod;
266*b1cdbd2cSJim Jagielski class SalI18N_KeyboardExtension;
267*b1cdbd2cSJim Jagielski class AttributeProvider;
268*b1cdbd2cSJim Jagielski class SalUnicodeConverter;
269*b1cdbd2cSJim Jagielski class SalConverterCache;
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielski extern "C" {
272*b1cdbd2cSJim Jagielski struct SnDisplay;
273*b1cdbd2cSJim Jagielski struct SnLauncheeContext;
274*b1cdbd2cSJim Jagielski typedef Bool(*X_if_predicate)(Display*,XEvent*,XPointer);
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski class VCLPLUG_GEN_PUBLIC SalDisplay
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski public:
280*b1cdbd2cSJim Jagielski struct RenderEntry
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski Pixmap m_aPixmap;
283*b1cdbd2cSJim Jagielski Picture m_aPicture;
284*b1cdbd2cSJim Jagielski
RenderEntrySalDisplay::RenderEntry285*b1cdbd2cSJim Jagielski RenderEntry() : m_aPixmap( 0 ), m_aPicture( 0 ) {}
286*b1cdbd2cSJim Jagielski };
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski typedef std::hash_map<int,RenderEntry> RenderEntryMap;
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski struct ScreenData
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski bool m_bInit;
293*b1cdbd2cSJim Jagielski
294*b1cdbd2cSJim Jagielski XLIB_Window m_aRoot;
295*b1cdbd2cSJim Jagielski XLIB_Window m_aRefWindow;
296*b1cdbd2cSJim Jagielski Size m_aSize;
297*b1cdbd2cSJim Jagielski SalVisual m_aVisual;
298*b1cdbd2cSJim Jagielski SalColormap m_aColormap;
299*b1cdbd2cSJim Jagielski GC m_aMonoGC;
300*b1cdbd2cSJim Jagielski GC m_aCopyGC;
301*b1cdbd2cSJim Jagielski GC m_aAndInvertedGC;
302*b1cdbd2cSJim Jagielski GC m_aAndGC;
303*b1cdbd2cSJim Jagielski GC m_aOrGC;
304*b1cdbd2cSJim Jagielski GC m_aStippleGC;
305*b1cdbd2cSJim Jagielski Pixmap m_hInvert50;
306*b1cdbd2cSJim Jagielski mutable RenderEntryMap m_aRenderData;
307*b1cdbd2cSJim Jagielski
ScreenDataSalDisplay::ScreenData308*b1cdbd2cSJim Jagielski ScreenData() :
309*b1cdbd2cSJim Jagielski m_bInit( false ),
310*b1cdbd2cSJim Jagielski m_aRoot( None ),
311*b1cdbd2cSJim Jagielski m_aRefWindow( None ),
312*b1cdbd2cSJim Jagielski m_aMonoGC( None ),
313*b1cdbd2cSJim Jagielski m_aCopyGC( None ),
314*b1cdbd2cSJim Jagielski m_aAndInvertedGC( None ),
315*b1cdbd2cSJim Jagielski m_aAndGC( None ),
316*b1cdbd2cSJim Jagielski m_aOrGC( None ),
317*b1cdbd2cSJim Jagielski m_aStippleGC( None ),
318*b1cdbd2cSJim Jagielski m_hInvert50( None ),
319*b1cdbd2cSJim Jagielski m_aRenderData( 1 )
320*b1cdbd2cSJim Jagielski {}
321*b1cdbd2cSJim Jagielski };
322*b1cdbd2cSJim Jagielski // -=-= UserEvent =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
323*b1cdbd2cSJim Jagielski struct SalUserEvent
324*b1cdbd2cSJim Jagielski {
325*b1cdbd2cSJim Jagielski SalFrame* m_pFrame;
326*b1cdbd2cSJim Jagielski void* m_pData;
327*b1cdbd2cSJim Jagielski sal_uInt16 m_nEvent;
328*b1cdbd2cSJim Jagielski
SalUserEventSalDisplay::SalUserEvent329*b1cdbd2cSJim Jagielski SalUserEvent( SalFrame* pFrame, void* pData, sal_uInt16 nEvent = SALEVENT_USEREVENT )
330*b1cdbd2cSJim Jagielski : m_pFrame( pFrame ),
331*b1cdbd2cSJim Jagielski m_pData( pData ),
332*b1cdbd2cSJim Jagielski m_nEvent( nEvent )
333*b1cdbd2cSJim Jagielski {}
334*b1cdbd2cSJim Jagielski };
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim Jagielski protected:
337*b1cdbd2cSJim Jagielski SalXLib *pXLib_;
338*b1cdbd2cSJim Jagielski SalI18N_InputMethod *mpInputMethod;
339*b1cdbd2cSJim Jagielski SalI18N_KeyboardExtension *mpKbdExtension;
340*b1cdbd2cSJim Jagielski
341*b1cdbd2cSJim Jagielski AttributeProvider *mpFactory;
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski Display *pDisp_; // X Display
344*b1cdbd2cSJim Jagielski int m_nDefaultScreen; // XDefaultScreen
345*b1cdbd2cSJim Jagielski std::vector< ScreenData > m_aScreens;
346*b1cdbd2cSJim Jagielski ScreenData m_aInvalidScreenData;
347*b1cdbd2cSJim Jagielski Pair aResolution_; // [dpi]
348*b1cdbd2cSJim Jagielski bool mbExactResolution;
349*b1cdbd2cSJim Jagielski sal_uLong nMaxRequestSize_; // [byte]
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski srv_vendor_t meServerVendor;
352*b1cdbd2cSJim Jagielski SalWM eWindowManager_;
353*b1cdbd2cSJim Jagielski sal_uLong nProperties_; // PROPERTY_SUPPORT, BUG, FEATURE
354*b1cdbd2cSJim Jagielski sal_Bool bLocal_; // Server==Client? Init
355*b1cdbd2cSJim Jagielski // in SalDisplay::IsLocal()
356*b1cdbd2cSJim Jagielski sal_Bool mbLocalIsValid; // bLocal_ is valid ?
357*b1cdbd2cSJim Jagielski // until x bytes
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski oslMutex hEventGuard_;
360*b1cdbd2cSJim Jagielski std::list< SalUserEvent > m_aUserEvents;
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim Jagielski XLIB_Cursor aPointerCache_[POINTER_COUNT];
363*b1cdbd2cSJim Jagielski SalFrame* m_pCapture;
364*b1cdbd2cSJim Jagielski
365*b1cdbd2cSJim Jagielski // Keyboard
366*b1cdbd2cSJim Jagielski sal_Bool bNumLockFromXS_; // Num Lock handled by X Server
367*b1cdbd2cSJim Jagielski int nNumLockIndex_; // modifier index in modmap
368*b1cdbd2cSJim Jagielski int nNumLockMask_; // keyevent state mask for
369*b1cdbd2cSJim Jagielski KeySym nShiftKeySym_; // first shift modifier
370*b1cdbd2cSJim Jagielski KeySym nCtrlKeySym_; // first control modifier
371*b1cdbd2cSJim Jagielski KeySym nMod1KeySym_; // first mod1 modifier
372*b1cdbd2cSJim Jagielski ByteString m_aKeyboardName;
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski vcl_sal::WMAdaptor* m_pWMAdaptor;
375*b1cdbd2cSJim Jagielski DtIntegrator* m_pDtIntegrator;
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski bool m_bXinerama;
378*b1cdbd2cSJim Jagielski std::vector< Rectangle > m_aXineramaScreens;
379*b1cdbd2cSJim Jagielski std::list<SalFrame*> m_aFrames;
380*b1cdbd2cSJim Jagielski std::list<SalObject*> m_aSalObjects;
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski bool m_bUseRandRWrapper; // don't use randr on gtk, use gdk signals there
383*b1cdbd2cSJim Jagielski
384*b1cdbd2cSJim Jagielski mutable XLIB_Time m_nLastUserEventTime; // mutable because changed on first access
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski virtual long Dispatch( XEvent *pEvent ) = 0;
387*b1cdbd2cSJim Jagielski void InitXinerama();
388*b1cdbd2cSJim Jagielski void InitRandR( XLIB_Window aRoot ) const;
389*b1cdbd2cSJim Jagielski void DeInitRandR();
390*b1cdbd2cSJim Jagielski int processRandREvent( XEvent* );
391*b1cdbd2cSJim Jagielski
392*b1cdbd2cSJim Jagielski void doDestruct();
393*b1cdbd2cSJim Jagielski int addXineramaScreenUnique( long i_nX, long i_nY, long i_nWidth, long i_nHeight );
394*b1cdbd2cSJim Jagielski public:
395*b1cdbd2cSJim Jagielski static SalDisplay *GetSalDisplay( Display* display );
396*b1cdbd2cSJim Jagielski static sal_Bool BestVisual( Display *pDisp,
397*b1cdbd2cSJim Jagielski int nScreen,
398*b1cdbd2cSJim Jagielski XVisualInfo &rVI );
399*b1cdbd2cSJim Jagielski
400*b1cdbd2cSJim Jagielski SalDisplay( Display* pDisp );
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski virtual ~SalDisplay();
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski virtual void registerFrame( SalFrame* pFrame );
406*b1cdbd2cSJim Jagielski virtual void deregisterFrame( SalFrame* pFrame );
setHaveSystemChildFrame() const407*b1cdbd2cSJim Jagielski void setHaveSystemChildFrame() const
408*b1cdbd2cSJim Jagielski { pXLib_->setHaveSystemChildFrame(); }
getHaveSystemChildFrame() const409*b1cdbd2cSJim Jagielski bool getHaveSystemChildFrame() const
410*b1cdbd2cSJim Jagielski { return pXLib_->getHaveSystemChildFrame(); }
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski void Init();
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski void SendInternalEvent( SalFrame* pFrame, void* pData, sal_uInt16 nEvent = SALEVENT_USEREVENT );
415*b1cdbd2cSJim Jagielski void CancelInternalEvent( SalFrame* pFrame, void* pData, sal_uInt16 nEvent );
416*b1cdbd2cSJim Jagielski bool DispatchInternalEvent();
417*b1cdbd2cSJim Jagielski void PrintInfo() const;
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski void PrintEvent( const ByteString &rComment,
420*b1cdbd2cSJim Jagielski XEvent *pEvent ) const;
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski void Beep() const;
423*b1cdbd2cSJim Jagielski
424*b1cdbd2cSJim Jagielski void ModifierMapping();
425*b1cdbd2cSJim Jagielski String GetKeyNameFromKeySym( KeySym keysym ) const;
426*b1cdbd2cSJim Jagielski XubString GetKeyName( sal_uInt16 nKeyCode ) const;
427*b1cdbd2cSJim Jagielski sal_uInt16 GetKeyCode( KeySym keysym, char*pcPrintable ) const;
428*b1cdbd2cSJim Jagielski KeySym GetKeySym( XKeyEvent *pEvent,
429*b1cdbd2cSJim Jagielski unsigned char *pPrintable,
430*b1cdbd2cSJim Jagielski int *pLen,
431*b1cdbd2cSJim Jagielski KeySym *pUnmodifiedKeySym,
432*b1cdbd2cSJim Jagielski Status *pStatus,
433*b1cdbd2cSJim Jagielski XIC = NULL ) const;
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski XLIB_Cursor GetPointer( int ePointerStyle );
436*b1cdbd2cSJim Jagielski virtual int CaptureMouse( SalFrame *pCapture );
437*b1cdbd2cSJim Jagielski
438*b1cdbd2cSJim Jagielski sal_Bool IsLocal();
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim Jagielski void Remove( XEvent *pEvent );
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski virtual void initScreen( int nScreen ) const;
getDataForScreen(int nScreen) const443*b1cdbd2cSJim Jagielski const ScreenData& getDataForScreen( int nScreen ) const
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
446*b1cdbd2cSJim Jagielski return m_aInvalidScreenData;
447*b1cdbd2cSJim Jagielski if( ! m_aScreens[nScreen].m_bInit )
448*b1cdbd2cSJim Jagielski initScreen( nScreen );
449*b1cdbd2cSJim Jagielski return m_aScreens[nScreen];
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski
GetDrawable(int nScreen) const452*b1cdbd2cSJim Jagielski XLIB_Window GetDrawable( int nScreen ) const { return getDataForScreen( nScreen ).m_aRefWindow; }
GetDisplay() const453*b1cdbd2cSJim Jagielski Display *GetDisplay() const { return pDisp_; }
GetDefaultScreenNumber() const454*b1cdbd2cSJim Jagielski int GetDefaultScreenNumber() const { return m_nDefaultScreen; }
GetDefaultMonitorNumber() const455*b1cdbd2cSJim Jagielski virtual int GetDefaultMonitorNumber() const { return 0; }
GetScreenSize(int nScreen) const456*b1cdbd2cSJim Jagielski const Size& GetScreenSize( int nScreen ) const { return getDataForScreen( nScreen ).m_aSize; }
GetServerVendor() const457*b1cdbd2cSJim Jagielski srv_vendor_t GetServerVendor() const { return meServerVendor; }
SetServerVendor()458*b1cdbd2cSJim Jagielski void SetServerVendor() { meServerVendor = sal_GetServerVendor(pDisp_); }
IsDisplay() const459*b1cdbd2cSJim Jagielski sal_Bool IsDisplay() const { return !!pXLib_; }
GetMonoGC(int nScreen) const460*b1cdbd2cSJim Jagielski GC GetMonoGC( int nScreen ) const { return getDataForScreen(nScreen).m_aMonoGC; }
GetCopyGC(int nScreen) const461*b1cdbd2cSJim Jagielski GC GetCopyGC( int nScreen ) const { return getDataForScreen(nScreen).m_aCopyGC; }
GetAndInvertedGC(int nScreen) const462*b1cdbd2cSJim Jagielski GC GetAndInvertedGC( int nScreen ) const { return getDataForScreen(nScreen).m_aAndInvertedGC; }
GetAndGC(int nScreen) const463*b1cdbd2cSJim Jagielski GC GetAndGC( int nScreen ) const { return getDataForScreen(nScreen).m_aAndGC; }
GetOrGC(int nScreen) const464*b1cdbd2cSJim Jagielski GC GetOrGC( int nScreen ) const { return getDataForScreen(nScreen).m_aOrGC; }
GetStippleGC(int nScreen) const465*b1cdbd2cSJim Jagielski GC GetStippleGC( int nScreen ) const { return getDataForScreen(nScreen).m_aStippleGC; }
466*b1cdbd2cSJim Jagielski GC GetGC( sal_uInt16 nDepth, int nScreen ) const;
GetInvert50(int nScreen) const467*b1cdbd2cSJim Jagielski Pixmap GetInvert50( int nScreen ) const { return getDataForScreen(nScreen).m_hInvert50; }
GetColormap(int nScreen) const468*b1cdbd2cSJim Jagielski const SalColormap& GetColormap( int nScreen ) const { return getDataForScreen(nScreen).m_aColormap; }
GetVisual(int nScreen) const469*b1cdbd2cSJim Jagielski const SalVisual& GetVisual( int nScreen ) const { return getDataForScreen(nScreen).m_aVisual; }
GetRenderEntries(int nScreen) const470*b1cdbd2cSJim Jagielski RenderEntryMap& GetRenderEntries( int nScreen ) const { return getDataForScreen(nScreen).m_aRenderData; }
GetResolution() const471*b1cdbd2cSJim Jagielski const Pair &GetResolution() const { return aResolution_; }
GetExactResolution() const472*b1cdbd2cSJim Jagielski bool GetExactResolution() const { return mbExactResolution; }
GetProperties() const473*b1cdbd2cSJim Jagielski sal_uLong GetProperties() const { return nProperties_; }
GetMaxRequestSize() const474*b1cdbd2cSJim Jagielski sal_uLong GetMaxRequestSize() const { return nMaxRequestSize_; }
475*b1cdbd2cSJim Jagielski XLIB_Time GetLastUserEventTime( bool bAlwaysReget = false ) const;
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski bool XIfEventWithTimeout( XEvent*, XPointer, X_if_predicate, long i_nTimeout = 1000 ) const;
478*b1cdbd2cSJim Jagielski
MouseCaptured(const SalFrame * pFrameData) const479*b1cdbd2cSJim Jagielski sal_Bool MouseCaptured( const SalFrame *pFrameData ) const
480*b1cdbd2cSJim Jagielski { return m_pCapture == pFrameData; }
GetCaptureFrame() const481*b1cdbd2cSJim Jagielski SalFrame* GetCaptureFrame() const
482*b1cdbd2cSJim Jagielski { return m_pCapture; }
GetXLib() const483*b1cdbd2cSJim Jagielski SalXLib* GetXLib() const { return pXLib_; }
484*b1cdbd2cSJim Jagielski
GetInputMethod() const485*b1cdbd2cSJim Jagielski SalI18N_InputMethod* GetInputMethod() const { return mpInputMethod; }
GetKbdExtension() const486*b1cdbd2cSJim Jagielski SalI18N_KeyboardExtension* GetKbdExtension() const { return mpKbdExtension; }
SetInputMethod(SalI18N_InputMethod * pInputMethod)487*b1cdbd2cSJim Jagielski void SetInputMethod( SalI18N_InputMethod *pInputMethod )
488*b1cdbd2cSJim Jagielski { mpInputMethod = pInputMethod; }
SetKbdExtension(SalI18N_KeyboardExtension * pKbdExtension)489*b1cdbd2cSJim Jagielski void SetKbdExtension(SalI18N_KeyboardExtension *pKbdExtension)
490*b1cdbd2cSJim Jagielski { mpKbdExtension = pKbdExtension; }
491*b1cdbd2cSJim Jagielski const char* GetKeyboardName( sal_Bool bRefresh = sal_False );
getWMAdaptor() const492*b1cdbd2cSJim Jagielski ::vcl_sal::WMAdaptor* getWMAdaptor() const { return m_pWMAdaptor; }
getDtIntegrator() const493*b1cdbd2cSJim Jagielski DtIntegrator* getDtIntegrator() const { return m_pDtIntegrator; }
IsXinerama() const494*b1cdbd2cSJim Jagielski bool IsXinerama() const { return m_bXinerama; }
GetXineramaScreens() const495*b1cdbd2cSJim Jagielski const std::vector< Rectangle >& GetXineramaScreens() const { return m_aXineramaScreens; }
GetRootWindow(int nScreen) const496*b1cdbd2cSJim Jagielski XLIB_Window GetRootWindow( int nScreen ) const
497*b1cdbd2cSJim Jagielski { return getDataForScreen( nScreen ).m_aRoot; }
GetScreenData()498*b1cdbd2cSJim Jagielski const std::vector< ScreenData >& GetScreenData()
499*b1cdbd2cSJim Jagielski { return m_aScreens; }
GetScreenCount() const500*b1cdbd2cSJim Jagielski int GetScreenCount() const { return static_cast<int>(m_aScreens.size()); }
501*b1cdbd2cSJim Jagielski
getFrames() const502*b1cdbd2cSJim Jagielski const std::list< SalFrame* >& getFrames() const
503*b1cdbd2cSJim Jagielski { return m_aFrames; }
504*b1cdbd2cSJim Jagielski
IsNumLockFromXS() const505*b1cdbd2cSJim Jagielski sal_Bool IsNumLockFromXS() const { return bNumLockFromXS_; }
506*b1cdbd2cSJim Jagielski
getSalObjects()507*b1cdbd2cSJim Jagielski std::list< SalObject* >& getSalObjects() { return m_aSalObjects; }
508*b1cdbd2cSJim Jagielski };
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski // -=-= inlines =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
511*b1cdbd2cSJim Jagielski
GetGC(sal_uInt16 nDepth,int nScreen) const512*b1cdbd2cSJim Jagielski inline GC SalDisplay::GetGC( sal_uInt16 nDepth, int nScreen ) const
513*b1cdbd2cSJim Jagielski { return 1 == nDepth
514*b1cdbd2cSJim Jagielski ? GetMonoGC( nScreen )
515*b1cdbd2cSJim Jagielski : getDataForScreen(nScreen).m_aVisual.GetDepth() == nDepth
516*b1cdbd2cSJim Jagielski ? GetCopyGC( nScreen )
517*b1cdbd2cSJim Jagielski : None; }
518*b1cdbd2cSJim Jagielski
GetXDisplay() const519*b1cdbd2cSJim Jagielski inline Display *SalColormap::GetXDisplay() const
520*b1cdbd2cSJim Jagielski { return m_pDisplay->GetDisplay(); }
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski class VCLPLUG_GEN_PUBLIC SalX11Display : public SalDisplay
523*b1cdbd2cSJim Jagielski {
524*b1cdbd2cSJim Jagielski public:
525*b1cdbd2cSJim Jagielski SalX11Display( Display* pDisp );
526*b1cdbd2cSJim Jagielski virtual ~SalX11Display();
527*b1cdbd2cSJim Jagielski
528*b1cdbd2cSJim Jagielski virtual long Dispatch( XEvent *pEvent );
529*b1cdbd2cSJim Jagielski virtual void Yield();
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim Jagielski sal_Bool IsEvent();
532*b1cdbd2cSJim Jagielski };
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski /*----------------------------------------------------------
535*b1cdbd2cSJim Jagielski keep track of correct size of the initial window
536*b1cdbd2cSJim Jagielski */
537*b1cdbd2cSJim Jagielski // get foreign key names
538*b1cdbd2cSJim Jagielski namespace vcl_sal {
539*b1cdbd2cSJim Jagielski String getKeysymReplacementName(
540*b1cdbd2cSJim Jagielski const char* pKeyboard,
541*b1cdbd2cSJim Jagielski KeySym nSymbol );
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski
545*b1cdbd2cSJim Jagielski #endif // _SV_SALDISP_HXX
546