1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23 #ifndef _SV_SALFRAME_H
24 #define _SV_SALFRAME_H
25
26 // -=-= #includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
27 #include <unx/salstd.hxx>
28 #include <unx/salunx.h>
29
30 #include <salframe.hxx>
31 #include <salwtype.hxx>
32 #include <salinst.hxx>
33
34 #include <vcl/ptrstyle.hxx>
35 #include <vcl/sysdata.hxx>
36 #include <vcl/timer.hxx>
37 #include <vclpluginapi.h>
38
39
40 #include <list>
41
42 // -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
43 class SalDisplay;
44 class X11SalGraphics;
45 class SalGraphicsLayout;
46 class SalI18N_InputContext;
47
48 namespace vcl_sal { class WMAdaptor; class NetWMAdaptor; class GnomeWMAdaptor; }
49
50 // -=-= X11SalFrame =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
51 #define SHOWSTATE_UNKNOWN -1
52 #define SHOWSTATE_MINIMIZED 0
53 #define SHOWSTATE_NORMAL 1
54 #define SHOWSTATE_HIDDEN 2
55
56 class VCLPLUG_GEN_PUBLIC X11SalFrame : public SalFrame
57 {
58 friend class vcl_sal::WMAdaptor;
59 friend class vcl_sal::NetWMAdaptor;
60 friend class vcl_sal::GnomeWMAdaptor;
61
62 static X11SalFrame* s_pSaveYourselfFrame;
63
64 X11SalFrame* mpParent; // pointer to parent frame
65 // which should never obscur this frame
66 bool mbTransientForRoot;
67 std::list< X11SalFrame* > maChildren; // List of child frames
68
69 SalDisplay *pDisplay_;
70 int m_nScreen;
71 XLIB_Window mhWindow;
72 XLIB_Window mhShellWindow;
73 XLIB_Window mhForeignParent;
74 // window to fall back to when no longer in fullscreen mode
75 XLIB_Window mhStackingWindow;
76 // window to listen for CirculateNotify events
77
78 Pixmap mhBackgroundPixmap;
79
80 XLIB_Cursor hCursor_;
81 int nCaptured_; // is captured
82
83 X11SalGraphics *pGraphics_; // current frame graphics
84 X11SalGraphics *pFreeGraphics_; // first free frame graphics
85
86 XLIB_Time nReleaseTime_; // timestamp of last key release
87 sal_uInt16 nKeyCode_; // last key code
88 sal_uInt16 nKeyState_; // last key state
89 int nCompose_; // compose state
90 bool mbKeyMenu;
91 bool mbSendExtKeyModChange;
92 sal_uInt16 mnExtKeyMod;
93
94 int nShowState_; // show state
95 int nWidth_; // client width
96 int nHeight_; // client height
97 Rectangle maRestorePosSize;
98 sal_uIntPtr nStyle_;
99 SalExtStyle mnExtStyle;
100 sal_Bool bAlwaysOnTop_;
101 sal_Bool bViewable_;
102 sal_Bool bMapped_;
103 sal_Bool mbInShow;
104 sal_Bool bDefaultPosition_; // client is centered initially
105 bool m_bXEmbed;
106 int nVisibility_;
107 int m_nWorkArea;
108 bool m_bSetFocusOnMap;
109
110
111 int nScreenSaversTimeout_;
112 Rectangle maPaintRegion;
113
114 Timer maAlwaysOnTopRaiseTimer;
115
116 // data for WMAdaptor
117 int meWindowType;
118 int mnDecorationFlags;
119 bool mbMaximizedVert;
120 bool mbMaximizedHorz;
121 bool mbShaded;
122 bool mbFullScreen;
123
124 // icon id
125 int mnIconID;
126
127 String m_aTitle;
128
129 SystemChildData maSystemChildData;
130
131 SalI18N_InputContext *mpInputContext;
132 Bool mbInputFocus;
133
134 XRectangle* m_pClipRectangles;
135 int m_nCurClipRect;
136 int m_nMaxClipRect;
137
138
139 void GetPosSize( Rectangle &rPosSize );
140 void SetSize ( const Size &rSize );
141 void Center();
142 void SetPosSize( const Rectangle &rPosSize );
143 void Minimize();
144 void Maximize();
145 void Restore();
146 void SetWindowGravity (int nGravity ) const;
147
148 void RestackChildren( XLIB_Window* pTopLevelWindows, int nTopLevelWindows );
149 void RestackChildren();
150
151 long HandleKeyEvent ( XKeyEvent *pEvent );
152 long HandleMouseEvent ( XEvent *pEvent );
153 long HandleFocusEvent ( XFocusChangeEvent *pEvent );
154 long HandleExposeEvent ( XEvent *pEvent );
155 long HandleSizeEvent ( XConfigureEvent *pEvent );
156 long HandleColormapEvent ( XColormapEvent *pEvent );
157 long HandleMapUnmapEvent ( XEvent *pEvent );
158 long HandleStateEvent ( XPropertyEvent *pEvent );
159 long HandleReparentEvent ( XReparentEvent *pEvent );
160 long HandleClientMessage ( XClientMessageEvent*pEvent );
161
162 DECL_LINK( HandleAlwaysOnTopRaise, void* );
163
164 void passOnSaveYourSelf();
165
166 void createNewWindow( XLIB_Window aParent, int nScreen = -1 );
167 void updateScreenNumber();
168
169 void setXEmbedInfo();
170 void askForXEmbedFocus( sal_Int32 i_nTimeCode );
171 public:
172 X11SalFrame( SalFrame* pParent, sal_uIntPtr nSalFrameStyle, SystemParentData* pSystemParent = NULL );
173 virtual ~X11SalFrame();
174
175 long Dispatch( XEvent *pEvent );
176 void Init( sal_uIntPtr nSalFrameStyle, int nScreen = -1,
177 SystemParentData* pParentData = NULL, bool bUseGeometry = false );
178
GetDisplay() const179 SalDisplay* GetDisplay() const { return pDisplay_; }
180 Display* GetXDisplay() const;
181 XLIB_Window GetDrawable() const;
GetScreenNumber() const182 int GetScreenNumber() const { return m_nScreen; }
GetWindow() const183 XLIB_Window GetWindow() const { return mhWindow; }
GetShellWindow() const184 XLIB_Window GetShellWindow() const { return mhShellWindow; }
GetForeignParent() const185 XLIB_Window GetForeignParent() const { return mhForeignParent; }
GetStackingWindow() const186 XLIB_Window GetStackingWindow() const { return mhStackingWindow; }
ShutDown() const187 long ShutDown() const { return CallCallback( SALEVENT_SHUTDOWN, 0 ); }
Close() const188 long Close() const { return CallCallback( SALEVENT_CLOSE, 0 ); }
GetStyle() const189 sal_uIntPtr GetStyle() const { return nStyle_; }
190
GetCursor() const191 inline XLIB_Cursor GetCursor() const { return hCursor_; }
IsCaptured() const192 inline sal_Bool IsCaptured() const { return nCaptured_ == 1; }
193 #if !defined(__synchronous_extinput__)
194 void HandleExtTextEvent (XClientMessageEvent *pEvent);
195 void PostExtTextEvent (sal_uInt16 nExtTextEventType,
196 void *pExtTextEvent);
197 #endif
198 bool IsOverrideRedirect() const;
IsChildWindow() const199 bool IsChildWindow() const { return (nStyle_ & (SAL_FRAME_STYLE_PLUG|SAL_FRAME_STYLE_SYSTEMCHILD)) != 0; }
IsSysChildWindow() const200 bool IsSysChildWindow() const { return (nStyle_ & (SAL_FRAME_STYLE_SYSTEMCHILD)) != 0; }
201 bool IsFloatGrabWindow() const;
getInputContext() const202 SalI18N_InputContext* getInputContext() const { return mpInputContext; }
getPosSize(Rectangle & rRect)203 void getPosSize( Rectangle& rRect ) { GetPosSize( rRect ); }
setPosSize(const Rectangle & rRect)204 void setPosSize( const Rectangle& rRect ) { SetPosSize( rRect ); }
isMapped() const205 bool isMapped() const { return bMapped_; }
hasFocus() const206 bool hasFocus() const { return mbInputFocus; }
207
208 void beginUnicodeSequence();
209 bool appendUnicodeSequence( sal_Unicode );
210 bool endUnicodeSequence();
211
212 virtual SalGraphics* GetGraphics();
213 virtual void ReleaseGraphics( SalGraphics* pGraphics );
214
215 // call with true to clear graphics (setting None as drawable)
216 // call with false to setup graphics with window (GetWindow())
217 virtual void updateGraphics( bool bClear );
218
219 virtual sal_Bool PostEvent( void* pData );
220
221 virtual void SetTitle( const XubString& rTitle );
222 virtual void SetIcon( sal_uInt16 nIcon );
223 virtual void SetMenu( SalMenu* pMenu );
224 virtual void DrawMenuBar();
225
226 virtual void SetExtendedFrameStyle( SalExtStyle nExtStyle );
227 virtual void Show( sal_Bool bVisible, sal_Bool bNoActivate = sal_False );
228 virtual void Enable( sal_Bool bEnable );
229 virtual void SetMinClientSize( long nWidth, long nHeight );
230 virtual void SetMaxClientSize( long nWidth, long nHeight );
231 virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags );
232 virtual void GetClientSize( long& rWidth, long& rHeight );
233 virtual void GetWorkArea( Rectangle& rRect );
234 virtual SalFrame* GetParent() const;
235 virtual void SetWindowState( const SalFrameState* pState );
236 virtual sal_Bool GetWindowState( SalFrameState* pState );
237 virtual void ShowFullScreen( sal_Bool bFullScreen, sal_Int32 nMonitor );
238 virtual void StartPresentation( sal_Bool bStart );
239 virtual void SetAlwaysOnTop( sal_Bool bOnTop );
240 virtual void ToTop( sal_uInt16 nFlags );
241 virtual void SetPointer( PointerStyle ePointerStyle );
242 virtual void CaptureMouse( sal_Bool bMouse );
243 virtual void SetPointerPos( long nX, long nY );
244 using SalFrame::Flush;
245 virtual void Flush();
246 virtual void Sync();
247 virtual void SetInputContext( SalInputContext* pContext );
248 virtual void EndExtTextInput( sal_uInt16 nFlags );
249 virtual String GetKeyName( sal_uInt16 nKeyCode );
250 virtual String GetSymbolKeyName( const XubString& rFontName, sal_uInt16 nKeyCode );
251 virtual sal_Bool MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangType, KeyCode& rKeyCode );
252 virtual LanguageType GetInputLanguage();
253 virtual SalBitmap* SnapShot();
254 virtual void UpdateSettings( AllSettings& rSettings );
255 virtual void Beep( SoundType eSoundType );
256 virtual const SystemEnvData* GetSystemData() const;
257 virtual SalPointerState GetPointerState();
258 virtual void SetParent( SalFrame* pNewParent );
259 virtual bool SetPluginParent( SystemParentData* pNewParent );
260 virtual void SetBackgroundBitmap( SalBitmap* pBitmap );
261
262 virtual void SetScreenNumber( unsigned int );
263
264 // shaped system windows
265 // set clip region to none (-> rectangular windows, normal state)
266 virtual void ResetClipRegion();
267 // start setting the clipregion consisting of nRects rectangles
268 virtual void BeginSetClipRegion( sal_uIntPtr nRects );
269 // add a rectangle to the clip region
270 virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
271 // done setting up the clipregion
272 virtual void EndSetClipRegion();
273
274 static void SaveYourselfDone( SalFrame* );
275 static Bool checkKeyReleaseForRepeat( Display*, XEvent*, XPointer pX11SalFrame );
276 };
277
278 #ifdef _SV_SALDISP_HXX
279
GetXDisplay() const280 inline Display *X11SalFrame::GetXDisplay() const
281 { return pDisplay_->GetDisplay(); }
282
GetDrawable() const283 inline XLIB_Window X11SalFrame::GetDrawable() const
284 { return GetWindow(); }
285
286 #endif
287
288 #endif // _SV_SALFRAME_H
289
290