summaryrefslogtreecommitdiff
path: root/vcl/unx/inc
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/unx/inc')
-rw-r--r--vcl/unx/inc/XIM.h137
-rw-r--r--vcl/unx/inc/Xproto.h49
-rw-r--r--vcl/unx/inc/cdeint.hxx44
-rw-r--r--vcl/unx/inc/dtint.hxx78
-rw-r--r--vcl/unx/inc/i18n_cb.hxx95
-rw-r--r--vcl/unx/inc/i18n_ic.hxx100
-rw-r--r--vcl/unx/inc/i18n_im.hxx69
-rw-r--r--vcl/unx/inc/i18n_keysym.hxx71
-rw-r--r--vcl/unx/inc/i18n_status.hxx125
-rw-r--r--vcl/unx/inc/i18n_xkb.hxx115
-rw-r--r--vcl/unx/inc/plugins/gtk/atkbridge.hxx36
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkdata.hxx89
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkframe.hxx401
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkgdi.hxx182
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkinst.hxx105
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkobject.hxx69
-rw-r--r--vcl/unx/inc/plugins/kde/kdedata.hxx110
-rw-r--r--vcl/unx/inc/pspgraphics.h193
-rw-r--r--vcl/unx/inc/salbmp.h237
-rw-r--r--vcl/unx/inc/saldata.hxx128
-rw-r--r--vcl/unx/inc/saldisp.hxx565
-rw-r--r--vcl/unx/inc/salfont.h180
-rw-r--r--vcl/unx/inc/salframe.h286
-rw-r--r--vcl/unx/inc/salgdi.h396
-rw-r--r--vcl/unx/inc/salinst.h131
-rw-r--r--vcl/unx/inc/salmenu.h65
-rw-r--r--vcl/unx/inc/salobj.h103
-rw-r--r--vcl/unx/inc/salprn.h120
-rw-r--r--vcl/unx/inc/salstd.hxx77
-rw-r--r--vcl/unx/inc/salsys.h67
-rw-r--r--vcl/unx/inc/saltimer.h44
-rw-r--r--vcl/unx/inc/salunx.h128
-rw-r--r--vcl/unx/inc/salvd.h101
-rw-r--r--vcl/unx/inc/sm.hxx91
-rw-r--r--vcl/unx/inc/soicon.hxx37
-rw-r--r--vcl/unx/inc/strhelper.hxx41
-rw-r--r--vcl/unx/inc/svsys.h32
-rw-r--r--vcl/unx/inc/svunx.h35
-rw-r--r--vcl/unx/inc/wmadaptor.hxx326
-rw-r--r--vcl/unx/inc/xfont.hxx162
40 files changed, 5420 insertions, 0 deletions
diff --git a/vcl/unx/inc/XIM.h b/vcl/unx/inc/XIM.h
new file mode 100644
index 000000000000..b00634090b5d
--- /dev/null
+++ b/vcl/unx/inc/XIM.h
@@ -0,0 +1,137 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _XIM_h
+#define _XIM_h
+
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
+
+#ifdef __cplusplus
+extern "C"
+#endif
+XIM XvaOpenIM( Display*, XrmDatabase, char*, char*, ... );
+
+extern Status XCloseIM(XIM);
+
+#ifndef XIMCallback1
+typedef int (*XIMProc1)(XIC, XPointer, XPointer);
+typedef struct {
+ XPointer client_data;
+ XIMProc1 callback;
+} XIMCallback1;
+#endif
+
+typedef struct _XIMAnnotation {
+ int start_position;
+ int end_position;
+ XPointer data;
+} XIMAnnotation;
+
+/*
+ XIMUText: XIMText extention for UTF16
+ */
+typedef struct _XIMUnicodeText {
+ unsigned short length;
+ XIMFeedback *feedback;
+ Bool encoding_is_wchar;
+ union {
+ char *multi_byte;
+ wchar_t *wide_char;
+ unsigned short *utf16_char;
+ } string;
+ unsigned int count_annotations;
+ XIMAnnotation *annotations;
+} XIMUnicodeText;
+
+/* lookup choice */
+typedef enum {
+ XIMDrawUpHorizontally = 0 ,
+ XIMDrawUpVertically = 1
+} XIMDrawUpDirection ;
+
+typedef struct _XIMLookupStartCallbackStruct {
+ int choice_per_window; /* Number of choices can be display
+ * in the region
+ */
+ int nrows;
+ int ncolumns;
+ XIMDrawUpDirection draw_up_direction;
+} XIMLookupStartCallbackStruct;
+
+typedef struct _XIMUnicodeChoiceObject {
+ XIMUnicodeText *label;
+ XIMUnicodeText *value;
+} XIMUnicodeChoiceObject;
+
+typedef struct _XIMLookupDrawCallbackStruct {
+ XIMUnicodeChoiceObject *choices; /* the lookup choices */
+ int n_choices; /* Total number of lookup choices */
+ int first_index;
+ int last_index;
+ int current_index;
+ XIMUnicodeText *title;
+} XIMLookupDrawCallbackStruct;
+
+/* Unicode Subset */
+typedef enum {
+ XIMKatakana, XIMHanzi
+} XIMUnicodeCharacterSubsetID;
+
+typedef struct _XIMUncodeSubset {
+ XIMUnicodeCharacterSubsetID index;
+ XIMUnicodeCharacterSubsetID subset_id;
+ char *name;
+ Bool is_active;
+} XIMUnicodeCharacterSubset;
+
+typedef struct _XIMUncodeSubsets {
+ unsigned short count_subsets;
+ XIMUnicodeCharacterSubset *supported_subsets;
+} XIMUnicodeCharacterSubsets;
+
+typedef struct _XIMSwitchIMNotifyCallbackStruct {
+ XIMUnicodeCharacterSubset *from;
+ XIMUnicodeCharacterSubset *to;
+} XIMSwitchIMNotifyCallbackStruct;
+
+/* XIM attributes for multilingual IM extension */
+#define XNMultiLingualInput "multiLingualInput"
+#define XNQueryUnicodeCharacterSubset "unicodeCharacterSubset"
+
+/* XIC attributes for multilingual IM extension */
+
+#define XNUnicodeCharacterSubset "UnicodeChararcterSubset"
+
+#define XNSwitchIMNotifyCallback "switchIMNotifyCallback"
+#define XNCommitStringCallback "commitStringCallback"
+#define XNForwardEventCallback "forwardEventCallback"
+
+#define XNLookupStartCallback "lookupStartCallback"
+#define XNLookupDrawCallback "lookupDrawCallback"
+#define XNLookupDoneCallback "lookupDoneCallback"
+
+#endif
diff --git a/vcl/unx/inc/Xproto.h b/vcl/unx/inc/Xproto.h
new file mode 100644
index 000000000000..804b3ffa98cc
--- /dev/null
+++ b/vcl/unx/inc/Xproto.h
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_VCL_UNX_INC_XPROTO_H
+#define INCLUDED_VCL_UNX_INC_XPROTO_H
+
+#include "sal/config.h"
+
+#include <tools/prex.h>
+
+#if defined __GNUC__
+#pragma GCC system_header
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#endif
+
+#include <X11/Xproto.h>
+
+#if defined __SUNPRO_CC
+#pragma enable_warn
+#endif
+
+#include <tools/postx.h>
+
+#endif
diff --git a/vcl/unx/inc/cdeint.hxx b/vcl/unx/inc/cdeint.hxx
new file mode 100644
index 000000000000..91cbf33caf47
--- /dev/null
+++ b/vcl/unx/inc/cdeint.hxx
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_CDEINT_HXX
+#define _SV_CDEINT_HXX
+
+#include <dtint.hxx>
+
+class CDEIntegrator : public DtIntegrator
+{
+ friend DtIntegrator* DtIntegrator::CreateDtIntegrator();
+private:
+ CDEIntegrator();
+
+public:
+ virtual ~CDEIntegrator();
+
+ virtual void GetSystemLook( AllSettings& rSettings );
+};
+
+#endif
diff --git a/vcl/unx/inc/dtint.hxx b/vcl/unx/inc/dtint.hxx
new file mode 100644
index 000000000000..75f197c81e13
--- /dev/null
+++ b/vcl/unx/inc/dtint.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_DTINT_HXX
+#define _SV_DTINT_HXX
+
+#include <tools/link.hxx>
+#include <tools/string.hxx>
+#include <tools/color.hxx>
+#include <vcl/font.hxx>
+
+class SalBitmap;
+class SalDisplay;
+class AllSettings;
+
+#ifndef _XLIB_H_
+// forwards from X
+struct Display;
+struct XEvent;
+#define Atom UINT32
+#define XLIB_Window UINT32
+#endif
+
+enum DtType {
+ DtGeneric,
+ DtCDE
+};
+
+class DtIntegrator
+{
+protected:
+ DtType meType;
+ Display* mpDisplay;
+ SalDisplay* mpSalDisplay;
+ int mnSystemLookCommandProcess;
+
+
+ DtIntegrator();
+
+ static String aHomeDir;
+
+public:
+ static DtIntegrator* CreateDtIntegrator();
+
+ virtual ~DtIntegrator();
+
+ // SystemLook
+ virtual void GetSystemLook( AllSettings& rSettings );
+
+ DtType GetDtType() { return meType; }
+ SalDisplay* GetSalDisplay() { return mpSalDisplay; }
+ Display* GetDisplay() { return mpDisplay; }
+};
+
+#endif
diff --git a/vcl/unx/inc/i18n_cb.hxx b/vcl/unx/inc/i18n_cb.hxx
new file mode 100644
index 000000000000..d2301c26a3b0
--- /dev/null
+++ b/vcl/unx/inc/i18n_cb.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SAL_I18N_CALLBACK_HXX
+#define _SAL_I18N_CALLBACK_HXX
+
+#include <vcl/salwtype.hxx>
+#include <vector>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// for iiimp / ml input
+int CommitStringCallback( XIC ic, XPointer client_data, XPointer call_data);
+
+// xim callbacks
+void PreeditDoneCallback ( XIC ic, XPointer client_data, XPointer call_data);
+int PreeditStartCallback( XIC ic, XPointer client_data, XPointer call_data);
+void PreeditDoneCallback ( XIC ic, XPointer client_data, XPointer call_data);
+void PreeditDrawCallback ( XIC ic, XPointer client_data,
+ XIMPreeditDrawCallbackStruct *call_data );
+void PreeditCaretCallback( XIC ic, XPointer client_data,
+ XIMPreeditCaretCallbackStruct *call_data );
+void GetPreeditSpotLocation(XIC ic, XPointer client_data);
+
+// private hook to prevent from sending further edit events
+void PreeditCancelCallback( XPointer client_data );
+
+void StatusStartCallback (XIC ic, XPointer client_data, XPointer call_data);
+void StatusDoneCallback (XIC ic, XPointer client_data, XPointer call_data);
+void StatusDrawCallback (XIC ic, XPointer client_data,
+ XIMStatusDrawCallbackStruct *call_data);
+void SwitchIMCallback (XIC ix, XPointer client_data, XPointer call_data );
+
+// keep informed if kinput2 crashed again
+void IC_IMDestroyCallback (XIM im, XPointer client_data, XPointer call_data);
+void IM_IMDestroyCallback (XIM im, XPointer client_data, XPointer call_data);
+
+Bool IsControlCode(sal_Unicode nChar);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+typedef struct {
+ sal_Unicode *pUnicodeBuffer;
+ XIMFeedback *pCharStyle;
+ unsigned int nCursorPos;
+ unsigned int nLength;
+ unsigned int nSize;
+} preedit_text_t;
+
+class SalFrame;
+
+typedef enum {
+ ePreeditStatusDontKnow = 0,
+ ePreeditStatusActive,
+ ePreeditStatusActivationRequired,
+ ePreeditStatusStartPending
+} preedit_status_t;
+
+typedef struct {
+ SalFrame* pFrame;
+ Bool bIsMultilingual;
+ preedit_status_t eState;
+ preedit_text_t aText;
+ SalExtTextInputEvent aInputEv;
+ std::vector< USHORT > aInputFlags;
+} preedit_data_t;
+
+#endif /* _SAL_I18N_CALLBACK_HXX */
diff --git a/vcl/unx/inc/i18n_ic.hxx b/vcl/unx/inc/i18n_ic.hxx
new file mode 100644
index 000000000000..2fb97a00b6f2
--- /dev/null
+++ b/vcl/unx/inc/i18n_ic.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAL_I18N_INPUTCONTEXT_HXX
+#define _SAL_I18N_INPUTCONTEXT_HXX
+
+#include <i18npool/lang.h>
+#include "i18n_cb.hxx"
+
+class SalI18N_InputContext
+{
+
+private:
+
+ Bool mbUseable; // system supports current locale ?
+ Bool mbMultiLingual; // system supports iiimp ?
+ XIC maContext;
+
+ XIMStyle mnSupportedStatusStyle;
+ XIMStyle mnSupportedPreeditStyle;
+ XIMStyle mnStatusStyle;
+ XIMStyle mnPreeditStyle;
+
+ preedit_data_t maClientData;
+ XIMCallback maPreeditStartCallback;
+ XIMCallback maPreeditDoneCallback;
+ XIMCallback maPreeditDrawCallback;
+ XIMCallback maPreeditCaretCallback;
+ XIMCallback maCommitStringCallback;
+ XIMCallback maSwitchIMCallback;
+ XIMCallback maDestroyCallback;
+
+ XVaNestedList mpAttributes;
+ XVaNestedList mpStatusAttributes;
+ XVaNestedList mpPreeditAttributes;
+
+ Bool SupportInputMethodStyle( XIMStyles *pIMStyles );
+ unsigned int GetWeightingOfIMStyle( XIMStyle n_style ) const ;
+ Bool IsSupportedIMStyle( XIMStyle n_style ) const ;
+
+public:
+
+ Bool UseContext() { return mbUseable; }
+ Bool IsMultiLingual() { return mbMultiLingual; }
+ Bool IsPreeditMode() { return maClientData.eState == ePreeditStatusActive; }
+ XIC GetContext() { return maContext; }
+
+ void ExtendEventMask( XLIB_Window aFocusWindow );
+ void SetICFocus( SalFrame* pFocusFrame );
+ void UnsetICFocus( SalFrame* pFrame );
+ void HandleDestroyIM();
+
+ int HandleKeyEvent( XKeyEvent *pEvent, SalFrame *pFrame ); // unused
+ void EndExtTextInput( USHORT nFlags ); // unused
+ int CommitStringCallback( sal_Unicode* pText, sal_Size nLength );
+ int CommitKeyEvent( sal_Unicode* pText, sal_Size nLength );
+ int UpdateSpotLocation();
+
+ void Map( SalFrame *pFrame );
+ void Unmap( SalFrame* pFrame );
+
+ void SetPreeditState(Bool aPreeditState);
+ void SetLanguage(LanguageType aInputLanguage);
+
+ SalI18N_InputContext( SalFrame *aFrame );
+ ~SalI18N_InputContext();
+
+private:
+
+ SalI18N_InputContext(); // do not use this
+
+};
+
+#endif // _SAL_I18N_INPUTCONTEXT_HXX
+
+
diff --git a/vcl/unx/inc/i18n_im.hxx b/vcl/unx/inc/i18n_im.hxx
new file mode 100644
index 000000000000..297bc8edec17
--- /dev/null
+++ b/vcl/unx/inc/i18n_im.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAL_I18N_INPUTMETHOD_HXX
+#define _SAL_I18N_INPUTMETHOD_HXX
+
+#include <vcl/dllapi.h>
+
+extern "C" char* GetMethodName( XIMStyle nStyle, char *pBuf, int nBufSize);
+
+#define bUseInputMethodDefault True
+
+class VCL_DLLPUBLIC SalI18N_InputMethod
+{
+ Bool mbUseable; // system supports locale as well as status
+ // and preedit style ?
+ Bool mbMultiLingual; // system supports iiimp
+ XIM maMethod;
+ XIMCallback maDestroyCallback;
+ XIMStyles *mpStyles;
+
+public:
+
+ Bool IsMultiLingual() { return mbMultiLingual; }
+ Bool PosixLocale();
+ Bool UseMethod() { return mbUseable; }
+ XIM GetMethod() { return maMethod; }
+ void HandleDestroyIM();
+ Bool CreateMethod( Display *pDisplay );
+ XIMStyles *GetSupportedStyles() { return mpStyles; }
+ Bool SetLocale( const char* pLocale = "" );
+ Bool FilterEvent( XEvent *pEvent, XLIB_Window window );
+ Bool AddConnectionWatch (Display *pDisplay, void *pConnectionHandler);
+
+ #ifdef _USE_PRINT_EXTENSION_
+ void Invalidate() { mbUseable = False; }
+ #endif
+
+ SalI18N_InputMethod();
+ ~SalI18N_InputMethod();
+};
+
+#endif // _SAL_I18N_INPUTMETHOD_HXX
+
+
diff --git a/vcl/unx/inc/i18n_keysym.hxx b/vcl/unx/inc/i18n_keysym.hxx
new file mode 100644
index 000000000000..641d00dc02c0
--- /dev/null
+++ b/vcl/unx/inc/i18n_keysym.hxx
@@ -0,0 +1,71 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAL_I18N_KEYSYM_HXX
+#define _SAL_I18N_KEYSYM_HXX
+
+/*
+ convert a keysym as defined in /usr/{X11R6|openwin}/include/X11/keysymdef.h
+ to unicode
+
+ supported charsets: (byte1 and byte2 are always 0x0)
+
+ Latin-1 Byte 3 = 0x00
+ Latin-2 Byte 3 = 0x01
+ Latin-3 Byte 3 = 0x02
+ Latin-4 Byte 3 = 0x03
+ Kana Byte 3 = 0x04
+ Arabic Byte 3 = 0x05
+ Cyrillic Byte 3 = 0x06
+ Greek Byte 3 = 0x07
+ Technical Byte 3 = 0x08
+ Special Byte 3 = 0x09
+ Publishing Byte 3 = 0x0a = 10
+ APL Byte 3 = 0x0b = 11
+ Hebrew Byte 3 = 0x0c = 12
+ Thai Byte 3 = 0x0d = 13
+ Korean Byte 3 = 0x0e = 14
+ Latin-9 Byte 3 = 0x13 = 19
+ Currency Byte 3 = 0x20 = 32
+ Keyboard Byte 3 = 0xff = 255
+
+ missing charsets:
+
+ Latin-8 Byte 3 = 0x12 = 18
+ Armenian Byte 3 = 0x14 = 20
+ Georgian Byte 3 = 0x15 = 21
+ Azeri Byte 3 = 0x16 = 22
+ Vietnamese Byte 3 = 0x1e = 30
+
+ of course not all keysyms can be mapped to a unicode code point
+*/
+
+sal_Unicode KeysymToUnicode (KeySym nKeySym);
+
+#endif /* _SAL_I18N_KEYSYM_HXX */
+
+
diff --git a/vcl/unx/inc/i18n_status.hxx b/vcl/unx/inc/i18n_status.hxx
new file mode 100644
index 000000000000..7202cf6e0eef
--- /dev/null
+++ b/vcl/unx/inc/i18n_status.hxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAL_I18N_STATUS_HXX
+#define _SAL_I18N_STATUS_HXX
+
+#include <tools/string.hxx>
+#include <tools/link.hxx>
+#include <tools/gen.hxx>
+
+#ifndef _RTL_USTRING_HXX
+#include <rtl/ustring.hxx>
+#endif
+#include <vcl/salimestatus.hxx>
+
+#include <vector>
+
+class SalFrame;
+class WorkWindow;
+class ListBox;
+class FixedText;
+class PushButton;
+class SalI18N_InputContext;
+
+namespace vcl
+{
+
+class StatusWindow;
+
+class X11ImeStatus : public SalI18NImeStatus
+{
+public:
+ X11ImeStatus() {}
+ virtual ~X11ImeStatus();
+
+ virtual bool canToggle();
+ virtual void toggle();
+};
+
+class I18NStatus
+{
+public:
+ struct ChoiceData
+ {
+ String aString;
+ void* pData;
+ };
+private:
+ SalFrame* m_pParent;
+ StatusWindow* m_pStatusWindow;
+ String m_aCurrentIM;
+ ::std::vector< ChoiceData > m_aChoices;
+
+ I18NStatus();
+ ~I18NStatus();
+
+ static I18NStatus* pInstance;
+
+ static bool getStatusWindowMode();
+
+public:
+ static I18NStatus& get();
+ static bool exists();
+ static void free();
+
+ void setParent( SalFrame* pParent );
+ SalFrame* getParent() const { return m_pParent; }
+ SalFrame* getStatusFrame() const;
+
+ void setStatusText( const String& rText );
+ String getStatusText() const;
+
+ enum ShowReason { focus, presentation, contextmap };
+ void show( bool bShow, ShowReason eReason );
+
+ const ::std::vector< ChoiceData >& getChoices() const { return m_aChoices; }
+ void clearChoices();
+ void addChoice( const String&, void* pData );
+
+ void toTop() const;
+
+ // for SwitchIMCallback
+ void changeIM( const String& );
+
+ // External Control:
+
+ /** Return true if the status window can be toggled on and off externally.
+ */
+ bool canToggleStatusWindow() const;
+
+ /** Toggle the status window on or off.
+
+ This only works if canToggleStatusWindow returns true (otherwise, any
+ calls of this method are ignored).
+ */
+ void toggleStatusWindow();
+};
+
+} // namespace
+
+#endif // _SAL_I18N_STATUS_HXX
diff --git a/vcl/unx/inc/i18n_xkb.hxx b/vcl/unx/inc/i18n_xkb.hxx
new file mode 100644
index 000000000000..db6517cbea0b
--- /dev/null
+++ b/vcl/unx/inc/i18n_xkb.hxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAL_I18N_XKBDEXTENSION_HXX
+#define _SAL_I18N_XKBDEXTENSION_HXX
+
+#include <sal/types.h>
+#include <vcl/dllapi.h>
+
+class VCL_DLLPUBLIC SalI18N_KeyboardExtension
+{
+private:
+
+ sal_Bool mbUseExtension;
+ sal_uInt32 mnDefaultGroup;
+ sal_uInt32 mnGroup;
+ int mnEventBase;
+ int mnErrorBase;
+ Display* mpDisplay;
+
+public:
+
+ SalI18N_KeyboardExtension( Display *pDisplay );
+ inline ~SalI18N_KeyboardExtension();
+
+ inline sal_Bool UseExtension() const ; // server and client support the
+ // extension
+ inline void UseExtension( sal_Bool bState );// used to disable the Extension
+
+ void Dispatch( XEvent *pEvent ); // keep track of group changes
+
+ sal_uInt32 LookupKeysymInGroup( sal_uInt32 nKeyCode,
+ sal_uInt32 nShiftState,
+ sal_uInt32 nGroup ) const ;
+
+ inline sal_uInt32 LookupKeysymInDefaultGroup(
+ sal_uInt32 nKeyCode,
+ sal_uInt32 nShiftState ) const ;
+ inline sal_uInt32 GetGroup() const ; // the current keyboard group
+ inline sal_uInt32 GetDefaultGroup() const ; // base group, usually group 1
+ inline int GetEventBase() const ;
+
+protected:
+
+ SalI18N_KeyboardExtension(); // disabled
+};
+
+inline
+SalI18N_KeyboardExtension::~SalI18N_KeyboardExtension()
+{
+}
+
+inline sal_Bool
+SalI18N_KeyboardExtension::UseExtension() const
+{
+ return mbUseExtension;
+}
+
+inline void
+SalI18N_KeyboardExtension::UseExtension( sal_Bool bState )
+{
+ mbUseExtension = mbUseExtension && bState;
+}
+
+inline sal_uInt32
+SalI18N_KeyboardExtension::LookupKeysymInDefaultGroup( sal_uInt32 nKeyCode,
+ sal_uInt32 nShiftState ) const
+{
+ return LookupKeysymInGroup( nKeyCode, nShiftState, mnDefaultGroup );
+}
+
+inline sal_uInt32
+SalI18N_KeyboardExtension::GetGroup() const
+{
+ return mnGroup;
+}
+
+inline sal_uInt32
+SalI18N_KeyboardExtension::GetDefaultGroup() const
+{
+ return mnDefaultGroup;
+}
+
+inline int
+SalI18N_KeyboardExtension::GetEventBase() const
+{
+ return mnEventBase;
+}
+
+#endif // _SAL_I18N_XKBDEXTENSION_HXX
+
diff --git a/vcl/unx/inc/plugins/gtk/atkbridge.hxx b/vcl/unx/inc/plugins/gtk/atkbridge.hxx
new file mode 100644
index 000000000000..959b3aec1fb1
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/atkbridge.hxx
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __ATK_BRIDGE_HXX__
+#define __ATK_BRIDGE_HXX__
+
+#include <vcl/dllapi.h>
+
+bool VCL_DLLPUBLIC InitAtkBridge(void);
+void VCL_DLLPUBLIC DeInitAtkBridge(void);
+
+#endif
diff --git a/vcl/unx/inc/plugins/gtk/gtkdata.hxx b/vcl/unx/inc/plugins/gtk/gtkdata.hxx
new file mode 100644
index 000000000000..d4dec957a6b3
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/gtkdata.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_GTKDATA_HXX
+#define _VCL_GTKDATA_HXX
+
+#include <tools/prex.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include <tools/postx.h>
+
+#include <saldisp.hxx>
+#include <saldata.hxx>
+#include <vcl/ptrstyle.hxx>
+
+#include <list>
+
+class GtkData : public X11SalData
+{
+public:
+ GtkData() {}
+ virtual ~GtkData();
+
+ virtual void Init();
+
+ virtual void initNWF();
+ virtual void deInitNWF();
+};
+
+class GtkSalFrame;
+
+class GtkSalDisplay : public SalDisplay
+{
+ GdkDisplay* m_pGdkDisplay;
+ GdkCursor *m_aCursors[ POINTER_COUNT ];
+ bool m_bStartupCompleted;
+ GdkCursor* getFromXPM( const char *pBitmap, const char *pMask,
+ int nWidth, int nHeight, int nXHot, int nYHot );
+public:
+ GtkSalDisplay( GdkDisplay* pDisplay );
+ virtual ~GtkSalDisplay();
+
+ GdkDisplay* GetGdkDisplay() const { return m_pGdkDisplay; }
+
+ virtual void deregisterFrame( SalFrame* pFrame );
+ GdkCursor *getCursor( PointerStyle ePointerStyle );
+ virtual int CaptureMouse( SalFrame* pFrame );
+ virtual long Dispatch( XEvent *pEvent );
+ virtual void initScreen( int nScreen ) const;
+
+ static GdkFilterReturn filterGdkEvent( GdkXEvent* sys_event,
+ GdkEvent* event,
+ gpointer data );
+ inline bool HasMoreEvents() { return m_aUserEvents.size() > 1; }
+ inline void EventGuardAcquire() { osl_acquireMutex( hEventGuard_ ); }
+ inline void EventGuardRelease() { osl_releaseMutex( hEventGuard_ ); }
+ void startupNotificationCompleted() { m_bStartupCompleted = true; }
+
+ void screenSizeChanged( GdkScreen* );
+ void monitorsChanged( GdkScreen* );
+};
+
+
+#endif // _VCL_GTKDATA_HXX
diff --git a/vcl/unx/inc/plugins/gtk/gtkframe.hxx b/vcl/unx/inc/plugins/gtk/gtkframe.hxx
new file mode 100644
index 000000000000..0a91d99fd839
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/gtkframe.hxx
@@ -0,0 +1,401 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_GTKFRAME_HXX
+#define _VCL_GTKFRAME_HXX
+
+#include <tools/prex.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
+#include <tools/postx.h>
+
+#include <vcl/salframe.hxx>
+#include <vcl/sysdata.hxx>
+
+#include <list>
+#include <vector>
+
+class GtkSalGraphics;
+class GtkSalDisplay;
+
+class GtkSalFrame : public SalFrame
+{
+ static const int nMaxGraphics = 2;
+
+ struct GraphicsHolder
+ {
+ GtkSalGraphics* pGraphics;
+ bool bInUse;
+ GraphicsHolder()
+ : pGraphics( NULL ),
+ bInUse( false )
+ {}
+ ~GraphicsHolder();
+ };
+
+ struct IMHandler
+ {
+ //--------------------------------------------------------
+ // Not all GTK Input Methods swallow key release
+ // events. Since they swallow the key press events and we
+ // are left with the key release events, we need to
+ // manually swallow those. To do this, we keep a list of
+ // the previous 10 key press events in each GtkSalFrame
+ // and when we get a key release that matches one of the
+ // key press events in our list, we swallow it.
+ struct PreviousKeyPress
+ {
+ GdkWindow *window;
+ gint8 send_event;
+ guint32 time;
+ guint state;
+ guint keyval;
+ guint16 hardware_keycode;
+ guint8 group;
+
+ PreviousKeyPress (GdkEventKey *event)
+ : window (NULL),
+ send_event (0),
+ time (0),
+ state (0),
+ keyval (0),
+ hardware_keycode (0),
+ group (0)
+ {
+ if (event)
+ {
+ window = event->window;
+ send_event = event->send_event;
+ time = event->time;
+ state = event->state;
+ keyval = event->keyval;
+ hardware_keycode = event->hardware_keycode;
+ group = event->group;
+ }
+ }
+
+ PreviousKeyPress( const PreviousKeyPress& rPrev )
+ : window( rPrev.window ),
+ send_event( rPrev.send_event ),
+ time( rPrev.time ),
+ state( rPrev.state ),
+ keyval( rPrev.keyval ),
+ hardware_keycode( rPrev.hardware_keycode ),
+ group( rPrev.group )
+ {}
+
+ bool operator== (GdkEventKey *event) const
+ {
+ return (event != NULL)
+ && (event->window == window)
+ && (event->send_event == send_event)
+ && (event->state == state)
+ && (event->keyval == keyval)
+ && (event->hardware_keycode == hardware_keycode)
+ && (event->group == group)
+ && (event->time - time < 3)
+ ;
+ }
+ };
+
+
+ GtkSalFrame* m_pFrame;
+ std::list< PreviousKeyPress > m_aPrevKeyPresses;
+ int m_nPrevKeyPresses; // avoid using size()
+ GtkIMContext* m_pIMContext;
+ bool m_bFocused;
+ SalExtTextInputEvent m_aInputEvent;
+ std::vector< USHORT > m_aInputFlags;
+
+ IMHandler( GtkSalFrame* );
+ ~IMHandler();
+
+ void createIMContext();
+ void deleteIMContext();
+ void updateIMSpotLocation();
+ void setInputContext( SalInputContext* pContext );
+ void endExtTextInput( USHORT nFlags );
+ bool handleKeyEvent( GdkEventKey* pEvent );
+ void focusChanged( bool bFocusIn );
+
+ void doCallEndExtTextInput();
+ void sendEmptyCommit();
+
+
+ static void signalIMCommit( GtkIMContext*, gchar*, gpointer );
+ static gboolean signalIMDeleteSurrounding( GtkIMContext*, gint, gint, gpointer );
+ static void signalIMPreeditChanged( GtkIMContext*, gpointer );
+ static void signalIMPreeditEnd( GtkIMContext*, gpointer );
+ static void signalIMPreeditStart( GtkIMContext*, gpointer );
+ static gboolean signalIMRetrieveSurrounding( GtkIMContext*, gpointer );
+ };
+ friend struct IMHandler;
+
+ int m_nScreen;
+ GtkWidget* m_pWindow;
+ GdkWindow* m_pForeignParent;
+ GdkNativeWindow m_aForeignParentWindow;
+ GdkWindow* m_pForeignTopLevel;
+ GdkNativeWindow m_aForeignTopLevelWindow;
+ Pixmap m_hBackgroundPixmap;
+ ULONG m_nStyle;
+ SalExtStyle m_nExtStyle;
+ GtkFixed* m_pFixedContainer;
+ GtkSalFrame* m_pParent;
+ std::list< GtkSalFrame* > m_aChildren;
+ GdkWindowState m_nState;
+ SystemEnvData m_aSystemData;
+ GraphicsHolder m_aGraphics[ nMaxGraphics ];
+ USHORT m_nKeyModifiers;
+ GdkCursor *m_pCurrentCursor;
+ GdkVisibilityState m_nVisibility;
+ PointerStyle m_ePointerStyle;
+ int m_nSavedScreenSaverTimeout;
+ guint m_nGSMCookie;
+ int m_nWorkArea;
+ bool m_bFullscreen;
+ bool m_bSingleAltPress;
+ bool m_bDefaultPos;
+ bool m_bDefaultSize;
+ bool m_bSendModChangeOnRelease;
+ bool m_bWindowIsGtkPlug;
+ String m_aTitle;
+
+ IMHandler* m_pIMHandler;
+
+ Size m_aMaxSize;
+ Size m_aMinSize;
+ Rectangle m_aRestorePosSize;
+
+ GdkRegion* m_pRegion;
+
+ void Init( SalFrame* pParent, ULONG nStyle );
+ void Init( SystemParentData* pSysData );
+ void InitCommon();
+
+ // signals
+ static gboolean signalButton( GtkWidget*, GdkEventButton*, gpointer );
+ static void signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer );
+ static gboolean signalExpose( GtkWidget*, GdkEventExpose*, gpointer );
+ static gboolean signalFocus( GtkWidget*, GdkEventFocus*, gpointer );
+ static gboolean signalMap( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalUnmap( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalConfigure( GtkWidget*, GdkEventConfigure*, gpointer );
+ static gboolean signalMotion( GtkWidget*, GdkEventMotion*, gpointer );
+ static gboolean signalKey( GtkWidget*, GdkEventKey*, gpointer );
+ static gboolean signalDelete( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalState( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalScroll( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalCrossing( GtkWidget*, GdkEventCrossing*, gpointer );
+ static gboolean signalVisibility( GtkWidget*, GdkEventVisibility*, gpointer );
+ static void signalDestroy( GtkObject*, gpointer );
+
+ void Center();
+ void SetDefaultSize();
+ void setAutoLock( bool bLock );
+ void setScreenSaverTimeout( int nTimeout );
+
+ void doKeyCallback( guint state,
+ guint keyval,
+ guint16 hardware_keycode,
+ guint8 group,
+ guint32 time,
+ sal_Unicode aOrigCode,
+ bool bDown,
+ bool bSendRelease
+ );
+
+
+ GdkNativeWindow findTopLevelSystemWindow( GdkNativeWindow aWindow );
+
+ static int m_nFloats;
+
+ bool isFloatGrabWindow() const
+ {
+ return
+ (m_nStyle & SAL_FRAME_STYLE_FLOAT) && // only a float can be floatgrab
+ !(m_nStyle & SAL_FRAME_STYLE_TOOLTIP) && // tool tips are not
+ !(m_nStyle & SAL_FRAME_STYLE_OWNERDRAWDECORATION) && // toolbars are also not
+ !(m_nStyle & SAL_FRAME_STYLE_FLOAT_FOCUSABLE); // focusable floats are not
+ }
+
+ bool isChild( bool bPlug = true, bool bSysChild = true )
+ {
+ ULONG nMask = 0;
+ if( bPlug )
+ nMask |= SAL_FRAME_STYLE_PLUG;
+ if( bSysChild )
+ nMask |= SAL_FRAME_STYLE_SYSTEMCHILD;
+ return (m_nStyle & nMask) != 0;
+ }
+
+ void resizeWindow( long nWidth, long nHeight );
+ void moveWindow( long nX, long nY );
+
+ Size calcDefaultSize();
+
+ void setMinMaxSize();
+ void createNewWindow( XLIB_Window aParent, bool bXEmbed, int nScreen );
+ void askForXEmbedFocus( sal_Int32 nTimecode );
+public:
+ GtkSalFrame( SalFrame* pParent, ULONG nStyle );
+ GtkSalFrame( SystemParentData* pSysData );
+
+ // dispatches an event, returns true if dispatched
+ // and false else; if true was returned the event should
+ // be swallowed
+ bool Dispatch( const XEvent* pEvent );
+ void grabPointer( BOOL bGrab, BOOL bOwnerEvents = FALSE );
+
+ GtkSalDisplay* getDisplay();
+ GdkDisplay* getGdkDisplay();
+ GtkWidget* getWindow() const { return m_pWindow; }
+ GtkFixed* getFixedContainer() const { return m_pFixedContainer; }
+ GdkWindow* getForeignParent() const { return m_pForeignParent; }
+ GdkNativeWindow getForeignParentWindow() const { return m_aForeignParentWindow; }
+ GdkWindow* getForeignTopLevel() const { return m_pForeignTopLevel; }
+ GdkNativeWindow getForeignTopLevelWindow() const { return m_aForeignTopLevelWindow; }
+ GdkVisibilityState getVisibilityState() const
+ { return m_nVisibility; }
+ Pixmap getBackgroundPixmap() const { return m_hBackgroundPixmap; }
+ int getScreenNumber() const { return m_nScreen; }
+ void updateScreenNumber();
+
+ void moveToScreen( int nScreen );
+
+ virtual ~GtkSalFrame();
+
+ // SalGraphics or NULL, but two Graphics for all SalFrames
+ // must be returned
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics* pGraphics );
+
+ // Event must be destroyed, when Frame is destroyed
+ // When Event is called, SalInstance::Yield() must be returned
+ virtual BOOL PostEvent( void* pData );
+
+ virtual void SetTitle( const XubString& rTitle );
+ virtual void SetIcon( USHORT nIcon );
+ virtual void SetMenu( SalMenu *pSalMenu );
+ virtual void DrawMenuBar();
+
+ virtual void SetExtendedFrameStyle( SalExtStyle nExtStyle );
+ // Before the window is visible, a resize event
+ // must be sent with the correct size
+ virtual void Show( BOOL bVisible, BOOL bNoActivate = FALSE );
+ virtual void Enable( BOOL bEnable );
+ // Set ClientSize and Center the Window to the desktop
+ // and send/post a resize message
+ virtual void SetMinClientSize( long nWidth, long nHeight );
+ virtual void SetMaxClientSize( long nWidth, long nHeight );
+ virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight, USHORT nFlags );
+ virtual void GetClientSize( long& rWidth, long& rHeight );
+ virtual void GetWorkArea( Rectangle& rRect );
+ virtual SalFrame* GetParent() const;
+ virtual void SetWindowState( const SalFrameState* pState );
+ virtual BOOL GetWindowState( SalFrameState* pState );
+ virtual void ShowFullScreen( BOOL bFullScreen, sal_Int32 nDisplay );
+ // Enable/Disable ScreenSaver, SystemAgents, ...
+ virtual void StartPresentation( BOOL bStart );
+ // Show Window over all other Windows
+ virtual void SetAlwaysOnTop( BOOL bOnTop );
+
+ // Window to top and grab focus
+ virtual void ToTop( USHORT nFlags );
+
+ // this function can call with the same
+ // pointer style
+ virtual void SetPointer( PointerStyle ePointerStyle );
+ virtual void CaptureMouse( BOOL bMouse );
+ virtual void SetPointerPos( long nX, long nY );
+
+ // flush output buffer
+ using SalFrame::Flush;
+ virtual void Flush();
+ // flush output buffer, wait till outstanding operations are done
+ virtual void Sync();
+
+ virtual void SetInputContext( SalInputContext* pContext );
+ virtual void EndExtTextInput( USHORT nFlags );
+
+ virtual String GetKeyName( USHORT nKeyCode );
+ virtual String GetSymbolKeyName( const XubString& rFontName, USHORT nKeyCode );
+ virtual BOOL MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangType, KeyCode& rKeyCode );
+
+ // returns the input language used for the last key stroke
+ // may be LANGUAGE_DONTKNOW if not supported by the OS
+ virtual LanguageType GetInputLanguage();
+
+ virtual SalBitmap* SnapShot();
+
+ virtual void UpdateSettings( AllSettings& rSettings );
+
+ virtual void Beep( SoundType eSoundType );
+
+ // returns system data (most prominent: window handle)
+ virtual const SystemEnvData* GetSystemData() const;
+
+
+ // get current modifier and button mask
+ virtual SalPointerState GetPointerState();
+
+ // set new parent window
+ virtual void SetParent( SalFrame* pNewParent );
+ // reparent window to act as a plugin; implementation
+ // may choose to use a new system window internally
+ // return false to indicate failure
+ virtual bool SetPluginParent( SystemParentData* pNewParent );
+
+ virtual void SetBackgroundBitmap( SalBitmap* );
+
+ virtual void SetScreenNumber( unsigned int );
+
+ // shaped system windows
+ // set clip region to none (-> rectangular windows, normal state)
+ virtual void ResetClipRegion();
+ // start setting the clipregion consisting of nRects rectangles
+ virtual void BeginSetClipRegion( ULONG nRects );
+ // add a rectangle to the clip region
+ virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ // done setting up the clipregion
+ virtual void EndSetClipRegion();
+
+ static GtkSalFrame *getFromWindow( GtkWindow *pWindow );
+};
+
+
+#define OOO_TYPE_FIXED ooo_fixed_get_type()
+
+extern "C" {
+
+GType ooo_fixed_get_type( void );
+
+} // extern "C"
+
+#endif //_VCL_GTKFRAME_HXX
diff --git a/vcl/unx/inc/plugins/gtk/gtkgdi.hxx b/vcl/unx/inc/plugins/gtk/gtkgdi.hxx
new file mode 100644
index 000000000000..9db81aa30a4d
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/gtkgdi.hxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_GTKGDI_HXX
+#define _VCL_GTKGDI_HXX
+
+#include <tools/prex.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
+#include <tools/postx.h>
+
+#include <salgdi.h>
+
+class GtkSalGraphics : public X11SalGraphics
+{
+ GtkWidget *m_pWindow;
+ Region m_aClipRegion;
+
+public:
+ GtkSalGraphics( GtkWidget *window )
+ : m_pWindow( window ),
+ m_aClipRegion( REGION_NULL )
+ {}
+ virtual ~GtkSalGraphics();
+
+ inline GtkWidget* GetGtkWidget() const { return m_pWindow; }
+ inline GdkWindow* GetGdkWindow() const { return m_pWindow->window; }
+ inline GtkSalFrame* GetGtkFrame() const { return static_cast<GtkSalFrame*>(m_pFrame); }
+ void SetWindow( GtkWidget* window ) { m_pWindow = window; }
+
+
+ // will be set when UI theme was changed
+ static BOOL bThemeChanged;
+ static BOOL bNeedPixmapPaint;
+ static BOOL bGlobalNeedPixmapPaint;
+ static BOOL bToolbarGripWorkaround;
+ static BOOL bNeedButtonStyleAsEditBackgroundWorkaround;
+
+ // native widget methods
+ virtual BOOL IsNativeControlSupported( ControlType nType, ControlPart nPart );
+ virtual BOOL hitTestNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion,
+ const Point& aPos, SalControlHandle& rControlHandle, BOOL& rIsInside );
+ virtual BOOL drawNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion,
+ ControlState nState, const ImplControlValue& aValue, SalControlHandle& rControlHandle,
+ const rtl::OUString& rCaption );
+ virtual BOOL drawNativeControlText( ControlType nType, ControlPart nPart, const Region& rControlRegion,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const rtl::OUString& rCaption );
+ virtual BOOL getNativeControlRegion( ControlType nType, ControlPart nPart, const Region& rControlRegion, ControlState nState,
+ const ImplControlValue& aValue, SalControlHandle& rControlHandle, const rtl::OUString& rCaption,
+ Region &rNativeBoundingRegion, Region &rNativeContentRegion );
+
+ //helper methods for frame's UpdateSettings
+ void updateSettings( AllSettings& rSettings );
+
+ virtual void ResetClipRegion();
+ virtual void BeginSetClipRegion( ULONG nCount );
+ virtual BOOL unionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ virtual bool unionClipRegion( const ::basegfx::B2DPolyPolygon& );
+ virtual void EndSetClipRegion();
+
+ // some themes set the background pixmap of our window EVERY time
+ // a control is painted; but presentation effects need
+ // the background set to None; workaround: set the background
+ // before copyBits
+ virtual void copyBits( const SalTwoRect* pPosAry,
+ SalGraphics* pSrcGraphics );
+
+protected:
+ typedef std::list< Rectangle > clipList;
+
+ GdkPixmap* NWGetPixmapFromScreen( Rectangle srcRect );
+ BOOL NWRenderPixmapToScreen( GdkPixmap* pPixmap, Rectangle dstRect );
+
+ BOOL NWPaintGTKButton( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKRadio( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKCheck( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKScrollbar( ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKEditBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKSpinBox( ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKComboBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKTabItem( ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKListBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+
+ BOOL NWPaintGTKToolbar( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKMenubar( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKPopupMenu( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKTooltip( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKProgress( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+ BOOL NWPaintGTKListNode( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+ const Rectangle& rControlRectangle,
+ const clipList& rClipList,
+ ControlState nState, const ImplControlValue& aValue,
+ SalControlHandle& rControlHandle, const OUString& rCaption );
+
+ BOOL drawNativeMixedStateCheck( ControlType nType, ControlPart nPart, const Region& rControlRegion,
+ ControlState nState, const ImplControlValue& aValue, SalControlHandle& rControlHandle,
+ const rtl::OUString& rCaption );
+};
+
+#endif // _VCL_GTKGDI_HXX
diff --git a/vcl/unx/inc/plugins/gtk/gtkinst.hxx b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
new file mode 100644
index 000000000000..ee07199cb266
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_GTKINST_HXX
+#define _VCL_GTKINST_HXX
+
+#include <salinst.h>
+#include <salsys.h>
+
+class GtkYieldMutex : public SalYieldMutex
+{
+public:
+ GtkYieldMutex();
+ virtual void acquire();
+ virtual void release();
+ virtual sal_Bool tryToAcquire();
+
+ virtual int Grab();
+ virtual void Ungrab( int );
+
+ class GtkYieldGuard
+ {
+ GtkYieldMutex* m_pMutex;
+ int m_nGrab;
+ public:
+ GtkYieldGuard( GtkYieldMutex* pMutex )
+ : m_pMutex( pMutex )
+ {
+ m_nGrab = m_pMutex->Grab();
+ }
+ ~GtkYieldGuard()
+ {
+ m_pMutex->Ungrab( m_nGrab );
+ }
+ };
+};
+
+class GtkHookedYieldMutex : public GtkYieldMutex
+{
+ virtual int Grab() { return 0; };
+ virtual void Ungrab(int ) {};
+ std::list<ULONG> aYieldStack;
+public:
+ GtkHookedYieldMutex();
+ virtual void acquire();
+ virtual void release();
+ virtual sal_Bool tryToAcquire() { return SalYieldMutex::tryToAcquire(); }
+ void ThreadsEnter();
+ void ThreadsLeave();
+};
+
+
+#define GTK_YIELD_GRAB() GtkYieldMutex::GtkYieldGuard aLocalGtkYieldGuard( static_cast<GtkYieldMutex*>(GetSalData()->m_pInstance->GetYieldMutex()) )
+
+class GtkInstance : public X11SalInstance
+{
+public:
+ GtkInstance( SalYieldMutex* pMutex )
+ : X11SalInstance( pMutex )
+ {}
+ virtual ~GtkInstance();
+
+ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle );
+ virtual SalFrame* CreateChildFrame( SystemParentData* pParent, ULONG nStyle );
+ virtual SalObject* CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, BOOL bShow = TRUE );
+ virtual SalSystem* CreateSalSystem();
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
+};
+
+class GtkSalSystem : public X11SalSystem
+{
+public:
+ GtkSalSystem() : X11SalSystem() {}
+ virtual ~GtkSalSystem();
+ virtual int ShowNativeDialog( const String& rTitle,
+ const String& rMessage,
+ const std::list< String >& rButtons,
+ int nDefButton );
+};
+
+#endif // _VCL_GTKINST_HXX
diff --git a/vcl/unx/inc/plugins/gtk/gtkobject.hxx b/vcl/unx/inc/plugins/gtk/gtkobject.hxx
new file mode 100644
index 000000000000..ea740249f1c6
--- /dev/null
+++ b/vcl/unx/inc/plugins/gtk/gtkobject.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_GTKOBJECT_HXX
+#define _VCL_GTKOBJECT_HXX
+
+#include <vcl/sv.h>
+#include <vcl/sysdata.hxx>
+#include <vcl/salobj.hxx>
+#include <plugins/gtk/gtkframe.hxx>
+
+class GtkSalObject : public SalObject
+{
+ SystemChildData m_aSystemData;
+ GtkWidget* m_pSocket;
+ GdkRegion* m_pRegion;
+
+ // signals
+ static gboolean signalButton( GtkWidget*, GdkEventButton*, gpointer );
+ static gboolean signalFocus( GtkWidget*, GdkEventFocus*, gpointer );
+ static void signalDestroy( GtkObject*, gpointer );
+public:
+ GtkSalObject( GtkSalFrame* pParent, BOOL bShow = TRUE );
+ virtual ~GtkSalObject();
+
+ // overload all pure virtual methods
+ virtual void ResetClipRegion();
+ virtual USHORT GetClipRegionType();
+ virtual void BeginSetClipRegion( ULONG nRects );
+ virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ virtual void EndSetClipRegion();
+
+ virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight );
+ virtual void Show( BOOL bVisible );
+ virtual void Enable( BOOL nEnable );
+ virtual void GrabFocus();
+
+ virtual void SetBackground();
+ virtual void SetBackground( SalColor nSalColor );
+
+ virtual const SystemEnvData* GetSystemData() const;
+
+};
+
+#endif // _SV_SALOBJ_H
diff --git a/vcl/unx/inc/plugins/kde/kdedata.hxx b/vcl/unx/inc/plugins/kde/kdedata.hxx
new file mode 100644
index 000000000000..a55471901283
--- /dev/null
+++ b/vcl/unx/inc/plugins/kde/kdedata.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_KDEDATA_HXX
+#define _VCL_KDEDATA_HXX
+
+#include <saldisp.hxx>
+#include <saldata.hxx>
+#include <salframe.h>
+
+class KDEData : public X11SalData
+{
+public:
+ KDEData() {}
+ virtual ~KDEData();
+
+ virtual void Init();
+ virtual void initNWF();
+ virtual void deInitNWF();
+};
+
+class SalKDEDisplay : public SalX11Display
+{
+public:
+ SalKDEDisplay( Display* pDisp );
+ virtual ~SalKDEDisplay();
+};
+
+class KDESalFrame : public X11SalFrame
+{
+ static const int nMaxGraphics = 2;
+
+ struct GraphicsHolder
+ {
+ X11SalGraphics* pGraphics;
+ bool bInUse;
+ GraphicsHolder()
+ : pGraphics( NULL ),
+ bInUse( false )
+ {}
+ ~GraphicsHolder();
+ };
+ GraphicsHolder m_aGraphics[ nMaxGraphics ];
+
+public:
+ KDESalFrame( SalFrame* pParent, ULONG nStyle );
+ virtual ~KDESalFrame();
+
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics *pGraphics );
+ virtual void updateGraphics( bool bClear );
+ virtual void UpdateSettings( AllSettings& rSettings );
+ virtual void Show( BOOL bVisible, BOOL bNoActivate );
+};
+
+class KDESalInstance : public X11SalInstance
+{
+public:
+ KDESalInstance( SalYieldMutex* pMutex )
+ : X11SalInstance( pMutex ) {}
+ virtual ~KDESalInstance() {}
+ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle );
+};
+
+class KDEXLib : public SalXLib
+{
+ bool m_bStartupDone;
+ void* m_pApplication;
+ char** m_pFreeCmdLineArgs;
+ char** m_pAppCmdLineArgs;
+ int m_nFakeCmdLineArgs;
+public:
+ KDEXLib() : SalXLib(),
+ m_bStartupDone( false ),
+ m_pApplication( NULL ),
+ m_pFreeCmdLineArgs( NULL ),
+ m_pAppCmdLineArgs( NULL ),
+ m_nFakeCmdLineArgs( 0 )
+ {}
+ virtual ~KDEXLib();
+ virtual void Init();
+
+ void doStartup();
+};
+
+#endif // _VCL_KDEDATA_HXX
diff --git a/vcl/unx/inc/pspgraphics.h b/vcl/unx/inc/pspgraphics.h
new file mode 100644
index 000000000000..4dce4ee8b06c
--- /dev/null
+++ b/vcl/unx/inc/pspgraphics.h
@@ -0,0 +1,193 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_PSPGRAPHICS_H
+#define _VCL_PSPGRAPHICS_H
+
+
+#include "vcl/fontmanager.hxx"
+#include "vcl/salgdi.hxx"
+#include "vcl/sallayout.hxx"
+#include "vcl/dllapi.h"
+
+namespace psp { struct JobData; class PrinterGfx; }
+
+class ServerFont;
+class ImplDevFontAttributes;
+class SalInfoPrinter;
+
+class VCL_DLLPUBLIC PspGraphics : public SalGraphics
+{
+ psp::JobData* m_pJobData;
+ psp::PrinterGfx* m_pPrinterGfx;
+ String* m_pPhoneNr;
+ bool m_bSwallowFaxNo;
+ String m_aPhoneCollection;
+ bool m_bPhoneCollectionActive;
+
+ ServerFont* m_pServerFont[ MAX_FALLBACK ];
+ bool m_bFontVertical;
+ SalInfoPrinter* m_pInfoPrinter;
+public:
+ PspGraphics( psp::JobData* pJob, psp::PrinterGfx* pGfx, String* pPhone, bool bSwallow, SalInfoPrinter* pInfoPrinter )
+ : m_pJobData( pJob ),
+ m_pPrinterGfx( pGfx ),
+ m_pPhoneNr( pPhone ),
+ m_bSwallowFaxNo( bSwallow ),
+ m_bPhoneCollectionActive( false ),
+ m_bFontVertical( false ),
+ m_pInfoPrinter( pInfoPrinter )
+ { for( int i = 0; i < MAX_FALLBACK; i++ ) m_pServerFont[i] = 0; }
+ virtual ~PspGraphics();
+
+ // helper methods for sharing with X11SalGraphics
+ static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen );
+ static void DoFreeEmbedFontData( const void* pData, long nLen );
+ static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded );
+ static void DoGetGlyphWidths( psp::fontID aFont,
+ bool bVertical,
+ Int32Vector& rWidths,
+ Ucs2UIntMap& rUnicodeEnc );
+
+ static ImplDevFontAttributes Info2DevFontAttributes( const psp::FastPrintFontInfo& );
+ static void AnnounceFonts( ImplDevFontList*, const psp::FastPrintFontInfo& );
+ static FontWidth ToFontWidth (psp::width::type eWidth);
+ static FontWeight ToFontWeight (psp::weight::type eWeight);
+ static FontPitch ToFontPitch (psp::pitch::type ePitch);
+ static FontItalic ToFontItalic (psp::italic::type eItalic);
+ static FontFamily ToFontFamily (psp::family::type eFamily);
+
+ // overload all pure virtual methods
+ virtual void GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY );
+ virtual USHORT GetBitCount();
+ virtual long GetGraphicsWidth() const;
+
+ virtual void ResetClipRegion();
+ virtual void BeginSetClipRegion( ULONG nCount );
+ virtual BOOL unionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ virtual bool unionClipRegion( const ::basegfx::B2DPolyPolygon& );
+ virtual void EndSetClipRegion();
+
+ virtual void SetLineColor();
+ virtual void SetLineColor( SalColor nSalColor );
+ virtual void SetFillColor();
+ virtual void SetFillColor( SalColor nSalColor );
+ virtual void SetXORMode( bool bSet, bool );
+ virtual void SetROPLineColor( SalROPColor nROPColor );
+ virtual void SetROPFillColor( SalROPColor nROPColor );
+
+ virtual void SetTextColor( SalColor nSalColor );
+ virtual USHORT SetFont( ImplFontSelectData*, int nFallbackLevel );
+ virtual void GetFontMetric( ImplFontMetricData* );
+ virtual ULONG GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs );
+ virtual ImplFontCharMap* GetImplFontCharMap() const;
+ virtual void GetDevFontList( ImplDevFontList* );
+ virtual void GetDevFontSubstList( OutputDevice* );
+ virtual bool AddTempDevFont( ImplDevFontList*, const String& rFileURL, const String& rFontName );
+ virtual BOOL CreateFontSubset( const rtl::OUString& rToFile,
+ const ImplFontData*,
+ sal_Int32* pGlyphIDs,
+ sal_uInt8* pEncoding,
+ sal_Int32* pWidths,
+ int nGlyphs,
+ FontSubsetInfo& rInfo
+ );
+ virtual const Ucs2SIntMap* GetFontEncodingVector( const ImplFontData*, const Ucs2OStrMap** ppNonEncoded );
+ virtual const void* GetEmbedFontData( const ImplFontData*,
+ const sal_Ucs* pUnicodes,
+ sal_Int32* pWidths,
+ FontSubsetInfo& rInfo,
+ long* pDataLen );
+ virtual void FreeEmbedFontData( const void* pData, long nDataLen );
+ virtual void GetGlyphWidths( const ImplFontData*,
+ bool bVertical,
+ Int32Vector& rWidths,
+ Ucs2UIntMap& rUnicodeEnc );
+ virtual BOOL GetGlyphBoundRect( long nIndex, Rectangle& );
+ virtual BOOL GetGlyphOutline( long nIndex, ::basegfx::B2DPolyPolygon& );
+ virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel );
+ virtual void DrawServerFontLayout( const ServerFontLayout& );
+ virtual bool supportsOperation( OutDevSupportType ) const;
+ virtual void drawPixel( long nX, long nY );
+ virtual void drawPixel( long nX, long nY, SalColor nSalColor );
+ virtual void drawLine( long nX1, long nY1, long nX2, long nY2 );
+ virtual void drawRect( long nX, long nY, long nWidth, long nHeight );
+ virtual void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry );
+ virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
+ virtual void drawPolyPolygon( sal_uInt32 nPoly,
+ const sal_uInt32* pPoints,
+ PCONSTSALPOINT* pPtAry );
+ virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
+ virtual bool drawPolyLine( const basegfx::B2DPolygon&, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin);
+ virtual sal_Bool drawPolyLineBezier( ULONG nPoints,
+ const SalPoint* pPtAry,
+ const BYTE* pFlgAry );
+ virtual sal_Bool drawPolygonBezier( ULONG nPoints,
+ const SalPoint* pPtAry,
+ const BYTE* pFlgAry );
+ virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly,
+ const sal_uInt32* pPoints,
+ const SalPoint* const* pPtAry,
+ const BYTE* const* pFlgAry );
+ virtual void copyArea( long nDestX,
+ long nDestY,
+ long nSrcX,
+ long nSrcY,
+ long nSrcWidth,
+ long nSrcHeight,
+ USHORT nFlags );
+ virtual void copyBits( const SalTwoRect* pPosAry,
+ SalGraphics* pSrcGraphics );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nTransparentColor );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ const SalBitmap& rTransparentBitmap );
+ virtual void drawMask( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nMaskColor );
+ virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight );
+ virtual SalColor getPixel( long nX, long nY );
+ virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags );
+ virtual void invert( ULONG nPoints, const SalPoint* pPtAry, SalInvert nFlags );
+
+ virtual BOOL drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, ULONG nSize );
+ virtual bool filterText( const String& rOrigText, String& rNewText, xub_StrLen nIndex, xub_StrLen& rLen, xub_StrLen& rCutStart, xub_StrLen& rCutStop );
+
+ virtual bool drawAlphaBitmap( const SalTwoRect&,
+ const SalBitmap& rSourceBitmap,
+ const SalBitmap& rAlphaBitmap );
+ virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency );
+
+ virtual SystemGraphicsData GetGraphicsData() const;
+ virtual SystemFontData GetSysFontData( int nFallbacklevel ) const;
+};
+
+#endif // _VCL_PSPGRAPHICS_H
diff --git a/vcl/unx/inc/salbmp.h b/vcl/unx/inc/salbmp.h
new file mode 100644
index 000000000000..23e038f30ab1
--- /dev/null
+++ b/vcl/unx/inc/salbmp.h
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALBMP_H
+#define _SV_SALBMP_H
+
+#include <salstd.hxx>
+#ifndef _SV_SALGTYPE
+#include <vcl/salgtype.hxx>
+#endif
+#include <saldisp.hxx>
+#include <vcl/salbmp.hxx>
+#include <vcl/dllapi.h>
+
+struct BitmapBuffer;
+class BitmapPalette;
+class SalGraphics;
+class ImplSalDDB;
+class ImplSalBitmapCache;
+
+// -------------
+// - SalBitmap -
+// -------------
+
+class VCL_DLLPUBLIC X11SalBitmap : public SalBitmap
+{
+private:
+
+ static BitmapBuffer* ImplCreateDIB( const Size& rSize,
+ USHORT nBitCount,
+ const BitmapPalette& rPal );
+ static BitmapBuffer* ImplCreateDIB( Drawable aDrawable,
+ int nScreen,
+ long nDrawableDepth,
+ long nX, long nY,
+ long nWidth, long nHeight );
+
+public:
+
+ static ImplSalBitmapCache* mpCache;
+ static ULONG mnCacheInstCount;
+
+ static void ImplCreateCache();
+ static void ImplDestroyCache();
+ void ImplRemovedFromCache();
+
+ bool SnapShot (Display* pDisplay, XLIB_Window hWindow);
+ bool ImplCreateFromXImage( Display* pDisplay,
+ XLIB_Window hWindow,
+ int nScreen,
+ XImage* pImage);
+private:
+
+
+ BitmapBuffer* mpDIB;
+ ImplSalDDB* mpDDB;
+
+public:
+
+ SAL_DLLPRIVATE bool ImplCreateFromDrawable( Drawable aDrawable,
+ int nScreen,
+ long nDrawableDepth,
+ long nX, long nY,
+ long nWidth, long nHeight );
+
+ SAL_DLLPRIVATE XImage* ImplCreateXImage( SalDisplay* pSalDisp,
+ int nScreen, long nDepth,
+ const SalTwoRect& rTwoRect ) const;
+
+ SAL_DLLPRIVATE ImplSalDDB* ImplGetDDB( Drawable, int nScreen, long nDrawableDepth,
+ const SalTwoRect& ) const;
+ void ImplDraw( Drawable aDrawable, int nScreen, long nDrawableDepth,
+ const SalTwoRect& rTwoRect, const GC& rGC ) const;
+
+public:
+
+ X11SalBitmap();
+ virtual ~X11SalBitmap();
+
+ // overload pure virtual methods
+ virtual bool Create( const Size& rSize,
+ USHORT nBitCount,
+ const BitmapPalette& rPal );
+ virtual bool Create( const SalBitmap& rSalBmp );
+ virtual bool Create( const SalBitmap& rSalBmp,
+ SalGraphics* pGraphics );
+ virtual bool Create( const SalBitmap& rSalBmp,
+ USHORT nNewBitCount );
+
+ virtual void Destroy();
+
+ virtual Size GetSize() const;
+ virtual USHORT GetBitCount() const;
+
+ virtual BitmapBuffer* AcquireBuffer( bool bReadOnly );
+ virtual void ReleaseBuffer( BitmapBuffer* pBuffer, bool bReadOnly );
+ virtual bool GetSystemData( BitmapSystemData& rData );
+};
+
+// --------------
+// - ImplSalDDB -
+// --------------
+
+class ImplSalDDB
+{
+private:
+
+ Pixmap maPixmap;
+ SalTwoRect maTwoRect;
+ long mnDepth;
+ int mnScreen;
+
+ ImplSalDDB() {}
+
+ static void ImplDraw( Drawable aSrcDrawable, long nSrcDrawableDepth,
+ Drawable aDstDrawable, long nDstDrawableDepth,
+ long nSrcX, long nSrcY,
+ long nDestWidth, long nDestHeight,
+ long nDestX, long nDestY, const GC& rGC );
+
+public:
+
+ ImplSalDDB( XImage* pImage,
+ Drawable aDrawable, int nScreen,
+ const SalTwoRect& rTwoRect );
+ ImplSalDDB( Drawable aDrawable,
+ int nScreen,
+ long nDrawableDepth,
+ long nX, long nY, long nWidth, long nHeight );
+ ImplSalDDB( Display* pDisplay,
+ XLIB_Window hWindow,
+ int nScreen,
+ XImage* pImage);
+ ~ImplSalDDB();
+
+ Pixmap ImplGetPixmap() const { return maPixmap; }
+ long ImplGetWidth() const { return maTwoRect.mnDestWidth; }
+ long ImplGetHeight() const { return maTwoRect.mnDestHeight; }
+ long ImplGetDepth() const { return mnDepth; }
+ ULONG ImplGetMemSize() const { return( ( maTwoRect.mnDestWidth * maTwoRect.mnDestHeight * mnDepth ) >> 3 ); }
+ int ImplGetScreen() const { return mnScreen; }
+
+ bool ImplMatches( int nScreen, long nDepth, const SalTwoRect& rTwoRect ) const;
+ void ImplDraw( Drawable aDrawable, long nDrawableDepth,
+ const SalTwoRect& rTwoRect, const GC& rGC ) const;
+};
+
+// ----------------------
+// - ImplSalBitmapCache -
+// ----------------------
+
+class ImplSalBitmapCache
+{
+private:
+
+ List maBmpList;
+ ULONG mnTotalSize;
+
+public:
+
+ ImplSalBitmapCache();
+ ~ImplSalBitmapCache();
+
+ void ImplAdd( X11SalBitmap* pBmp, ULONG nMemSize = 0UL, ULONG nFlags = 0UL );
+ void ImplRemove( X11SalBitmap* pBmp );
+ void ImplClear();
+};
+
+#endif // _SV_SALBMP_HXX
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vcl/unx/inc/saldata.hxx b/vcl/unx/inc/saldata.hxx
new file mode 100644
index 000000000000..3810558d470d
--- /dev/null
+++ b/vcl/unx/inc/saldata.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALDATA_HXX
+#define _SV_SALDATA_HXX
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include <signal.h>
+#include <salstd.hxx>
+#include <vcl/salframe.hxx>
+#include <salinst.h>
+#include <vcl/saldatabasic.hxx>
+#ifndef _OSL_MODULE_H
+#include <osl/module.h>
+#endif
+#include <vcl/dllapi.h>
+
+// -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalXLib;
+class SalDisplay;
+class SalPrinter;
+
+// -=-= typedefs -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+DECLARE_LIST( SalDisplays, SalDisplay* )
+
+#if defined SCO || defined LINUX || defined NETBSD || defined AIX || defined HPUX || defined FREEBSD
+#include <pthread.h>
+#else
+typedef unsigned int pthread_t;
+#endif
+
+// -=-= SalData =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class VCL_DLLPUBLIC X11SalData : public SalData
+{
+protected:
+ BOOL bNoExceptions_;
+ SalXLib *pXLib_;
+ SalDisplay *m_pSalDisplay;
+ pthread_t hMainThread_;
+
+public:
+ X11SalData();
+ virtual ~X11SalData();
+
+ virtual void Init();
+ virtual void initNWF();
+ virtual void deInitNWF();
+
+ inline void XError( Display *pDisplay, XErrorEvent *pEvent ) const;
+
+ SalDisplay* GetDisplay() const
+ { return m_pSalDisplay; }
+ void SetSalDisplay( SalDisplay* pDisplay )
+ { m_pSalDisplay = pDisplay; }
+
+ void DeleteDisplay(); // for shutdown
+
+ inline SalXLib* GetLib() const { return pXLib_; }
+ inline pthread_t GetMainThread() const { return hMainThread_; }
+
+ void StartTimer( ULONG nMS );
+ inline void StopTimer();
+ void Timeout() const;
+
+ static int XErrorHdl( Display*, XErrorEvent* );
+ static int XIOErrorHdl( Display* );
+
+ // set helper functions to set class and res name in W_CLASS hint
+ static const char* getFrameResName();
+ static const char* getFrameClassName();
+ static rtl::OString getFrameResName( SalExtStyle nStyle );
+
+};
+
+inline X11SalData* GetX11SalData()
+{ return (X11SalData*)ImplGetSVData()->mpSalData; }
+
+
+#ifdef _SV_SALDISP_HXX
+inline void X11SalData::XError( Display *pDisplay, XErrorEvent *pEvent ) const
+{ pXLib_->XError( pDisplay, pEvent ); }
+#endif
+
+class YieldMutexReleaser
+{
+ ULONG m_nYieldCount;
+public:
+ inline YieldMutexReleaser();
+ inline ~YieldMutexReleaser();
+};
+
+inline YieldMutexReleaser::YieldMutexReleaser()
+{
+ m_nYieldCount = GetSalData()->m_pInstance->ReleaseYieldMutex();
+}
+
+inline YieldMutexReleaser::~YieldMutexReleaser()
+{
+ GetSalData()->m_pInstance->AcquireYieldMutex( m_nYieldCount );
+}
+
+#endif // _SV_SALDATA_HXX
+
diff --git a/vcl/unx/inc/saldisp.hxx b/vcl/unx/inc/saldisp.hxx
new file mode 100644
index 000000000000..368e554794ad
--- /dev/null
+++ b/vcl/unx/inc/saldisp.hxx
@@ -0,0 +1,565 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALDISP_HXX
+#define _SV_SALDISP_HXX
+
+// -=-= exports =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalDisplay;
+class SalColormap;
+class SalVisual;
+class SalXLib;
+
+// -=-= #includes =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include <salunx.h>
+#include <vcl/salgtype.hxx>
+#ifndef _SV_PTRSTYLE_HXX
+#include <vcl/ptrstyle.hxx>
+#endif
+#include <sal/types.h>
+#ifndef _OSL_MUTEX_H
+#include <osl/mutex.h>
+#endif
+#include <vector>
+#include <list>
+#include <hash_map>
+#include <tools/gen.hxx>
+#include <vcl/salwtype.hxx>
+#include <vcl/dllapi.h>
+
+// -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class BitmapPalette;
+class SalFrame;
+class ColorMask;
+
+namespace vcl_sal { class WMAdaptor; }
+class DtIntegrator;
+
+// -=-= #defines -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#define PROPERTY_SUPPORT_WM_SetPos 0x00000001
+#define PROPERTY_SUPPORT_WM_Screen 0x00000002
+#define PROPERTY_SUPPORT_WM_Parent_Pixmap_None 0x00000004
+#define PROPERTY_SUPPORT_WM_ClientPos 0x00000008
+#define PROPERTY_SUPPORT_XSetClipMask 0x00000010 // for bitmap ops.
+#define PROPERTY_SUPPORT_3ButtonMouse 0x00000020
+
+#define PROPERTY_BUG_XA_FAMILY_NAME_nil 0x00001000
+#define PROPERTY_BUG_XCopyArea_GXxor 0x00002000 // from window
+#define PROPERTY_BUG_Stipple 0x00004000 // 0/1 inverted
+#define PROPERTY_BUG_Tile 0x00008000 // Recreate the
+ // dither brush each time
+#define PROPERTY_BUG_FillPolygon_Tile 0x00010000 // always Toggle Fillstyle
+#define PROPERTY_BUG_DrawLine 0x00020000 // a DrawLine is one point to short
+#define PROPERTY_BUG_CopyPlane_RevertBWPixel 0x00040000 // revert fg and bg for xcopyplane
+#define PROPERTY_BUG_CopyArea_OnlySmallSlices 0x00080000
+#define PROPERTY_BUG_Bitmap_Bit_Order 0x00100000
+
+#define PROPERTY_FEATURE_Maximize 0x01000000
+#define PROPERTY_FEATURE_SharedMemory 0x02000000
+#define PROPERTY_FEATURE_TrustedSolaris 0x04000000
+
+#define PROPERTY_DEFAULT 0x00000FCB
+
+// ------------------------------------------------------------------------
+// server vendor
+
+typedef enum {
+ vendor_none = 0,
+ vendor_attachmate,
+ vendor_excursion,
+ vendor_hp,
+ vendor_hummingbird,
+ vendor_ibm,
+ vendor_sco,
+ vendor_sgi,
+ vendor_sun,
+ vendor_xfree,
+ vendor_xinside,
+ vendor_xprinter,
+ vendor_unknown
+} srv_vendor_t;
+
+extern "C" srv_vendor_t sal_GetServerVendor( Display *p_display );
+
+// -=-= SalWM =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+enum SalWM { olwm, // Open Look
+ mwm, // Motif
+ kwm, // KDE Desktop Environment
+ FourDwm, // SGI
+ vuewm, // HP
+ dtwm, // CDE
+ winmgr, // Oracle NC
+ twm,
+ fvwm, // ...
+ pmwm, // SCO
+ otherwm };
+
+// -=-= SalRGB -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// MSB/Bigendian Sicht (SalColor == RGB, r=0xFF0000, g=0xFF00, b=0xFF)
+
+enum SalRGB { RGB, RBG,
+ GBR, GRB,
+ BGR, BRG,
+ RGBA, RBGA,
+ GBRA, GRBA,
+ BGRA, BRGA,
+ other };
+
+// -=-= SalVisual =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalVisual : public XVisualInfo
+{
+ SalRGB eRGBMode_;
+ int nRedShift_;
+ int nGreenShift_;
+ int nBlueShift_;
+ int nRedBits_;
+ int nGreenBits_;
+ int nBlueBits_;
+public:
+ SalVisual();
+ ~SalVisual();
+ SalVisual( const XVisualInfo* pXVI );
+
+ inline VisualID GetVisualId() const { return visualid; }
+ inline Visual *GetVisual() const { return visual; }
+ inline int GetClass() const { return c_class; }
+ inline int GetDepth() const { return depth; }
+ inline SalRGB GetMode() const { return eRGBMode_; }
+
+ Pixel GetTCPixel( SalColor nColor ) const;
+ SalColor GetTCColor( Pixel nPixel ) const;
+ BOOL Convert( int &n0, int &n1, int &n2, int &n3 ); // 32bit
+ BOOL Convert( int &n0, int &n1, int &n2 ); // 24bit
+};
+
+// -=-= SalColormap =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalColormap
+{
+ const SalDisplay* m_pDisplay;
+ Colormap m_hColormap;
+ std::vector<SalColor> m_aPalette; // Pseudocolor
+ SalVisual m_aVisual;
+ std::vector<USHORT> m_aLookupTable; // Pseudocolor: 12bit reduction
+ Pixel m_nWhitePixel;
+ Pixel m_nBlackPixel;
+ Pixel m_nUsed; // Pseudocolor
+ int m_nScreen;
+
+ void GetPalette();
+ void GetLookupTable();
+public:
+ SalColormap( const SalDisplay* pSalDisplay,
+ Colormap hColormap,
+ int nScreen );
+ SalColormap( const BitmapPalette &rpPalette );
+ SalColormap( USHORT nDepth );
+ SalColormap();
+ ~SalColormap();
+
+ inline Colormap GetXColormap() const { return m_hColormap; }
+ inline const SalDisplay* GetDisplay() const { return m_pDisplay; }
+ inline Display* GetXDisplay() const;
+ inline const SalVisual& GetVisual() const { return m_aVisual; }
+ inline Visual* GetXVisual() const { return m_aVisual.GetVisual(); }
+ inline Pixel GetWhitePixel() const { return m_nWhitePixel; }
+ inline Pixel GetBlackPixel() const { return m_nBlackPixel; }
+ inline Pixel GetUsed() const { return m_nUsed; }
+ inline int GetClass() const { return m_aVisual.GetClass(); }
+ inline int GetScreenNumber() const { return m_nScreen; }
+
+ BOOL GetXPixels( XColor &rColor,
+ int r,
+ int g,
+ int b ) const;
+ inline BOOL GetXPixel( XColor &rColor,
+ int r,
+ int g,
+ int b ) const;
+ Pixel GetPixel( SalColor nColor ) const;
+ SalColor GetColor( Pixel nPixel ) const;
+ void SetPalette( const BitmapPalette &rPalette );
+};
+
+// -=-= SalXLib =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+typedef int(*YieldFunc)(int fd, void* data);
+struct YieldEntry;
+
+class VCL_DLLPUBLIC SalXLib
+{
+protected:
+ timeval m_aTimeout;
+ ULONG m_nTimeoutMS;
+ int m_pTimeoutFDS[2];
+
+ bool m_bHaveSystemChildFrames;
+
+ int nFDs_;
+ fd_set aReadFDS_;
+ fd_set aExceptionFDS_;
+ YieldEntry *pYieldEntries_;
+
+
+ struct XErrorStackEntry
+ {
+ bool m_bIgnore;
+ bool m_bWas;
+ unsigned int m_nLastErrorRequest;
+ XErrorHandler m_aHandler;
+ };
+ std::vector< XErrorStackEntry > m_aXErrorHandlerStack;
+public:
+ SalXLib();
+ virtual ~SalXLib();
+ virtual void Init();
+
+ virtual void Yield( bool bWait, bool bHandleAllCurrentEvents );
+ virtual void Wakeup();
+ virtual void PostUserEvent();
+
+ virtual void Insert( int fd, void* data,
+ YieldFunc pending,
+ YieldFunc queued,
+ YieldFunc handle );
+ virtual void Remove( int fd );
+
+ void XError( Display *pDisp, XErrorEvent *pEvent );
+ bool HasXErrorOccured() const { return m_aXErrorHandlerStack.back().m_bWas; }
+ unsigned int GetLastXErrorRequestCode() const { return m_aXErrorHandlerStack.back().m_nLastErrorRequest; }
+ void ResetXErrorOccured() { m_aXErrorHandlerStack.back().m_bWas = false; }
+ void PushXErrorLevel( bool bIgnore );
+ void PopXErrorLevel();
+
+ virtual void StartTimer( ULONG nMS );
+ virtual void StopTimer();
+
+ bool CheckTimeout( bool bExecuteTimers = true );
+
+ void setHaveSystemChildFrame()
+ { m_bHaveSystemChildFrames = true; }
+ bool getHaveSystemChildFrame() const
+ { return m_bHaveSystemChildFrames; }
+};
+
+// -=-= SalDisplay -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+class SalI18N_InputMethod;
+class SalI18N_KeyboardExtension;
+class XlfdStorage;
+class ExtendedFontStruct;
+class ExtendedXlfd;
+class AttributeProvider;
+class SalUnicodeConverter;
+class SalConverterCache;
+
+DECLARE_LIST( SalFontCache, ExtendedFontStruct* )
+
+extern "C" {
+ struct SnDisplay;
+ struct SnLauncheeContext;
+ typedef Bool(*X_if_predicate)(Display*,XEvent*,XPointer);
+}
+
+class VCL_DLLPUBLIC SalDisplay
+{
+public:
+ struct RenderEntry
+ {
+ Pixmap m_aPixmap;
+ Picture m_aPicture;
+
+ RenderEntry() : m_aPixmap( 0 ), m_aPicture( 0 ) {}
+ };
+
+ typedef std::hash_map<int,RenderEntry> RenderEntryMap;
+
+ struct ScreenData
+ {
+ bool m_bInit;
+
+ XLIB_Window m_aRoot;
+ XLIB_Window m_aRefWindow;
+ Size m_aSize;
+ SalVisual m_aVisual;
+ SalColormap m_aColormap;
+ GC m_aMonoGC;
+ GC m_aCopyGC;
+ GC m_aAndInvertedGC;
+ GC m_aAndGC;
+ GC m_aOrGC;
+ GC m_aStippleGC;
+ Pixmap m_hInvert50;
+ mutable RenderEntryMap m_aRenderData;
+
+ ScreenData() :
+ m_bInit( false ),
+ m_aRoot( None ),
+ m_aRefWindow( None ),
+ m_aMonoGC( None ),
+ m_aCopyGC( None ),
+ m_aAndInvertedGC( None ),
+ m_aAndGC( None ),
+ m_aOrGC( None ),
+ m_aStippleGC( None ),
+ m_hInvert50( None ),
+ m_aRenderData( 1 )
+ {}
+ };
+// -=-= UserEvent =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ struct SalUserEvent
+ {
+ SalFrame* m_pFrame;
+ void* m_pData;
+ USHORT m_nEvent;
+
+ SalUserEvent( SalFrame* pFrame, void* pData, USHORT nEvent = SALEVENT_USEREVENT )
+ : m_pFrame( pFrame ),
+ m_pData( pData ),
+ m_nEvent( nEvent )
+ {}
+ };
+
+protected:
+ SalXLib *pXLib_;
+ SalI18N_InputMethod *mpInputMethod;
+ SalI18N_KeyboardExtension *mpKbdExtension;
+
+ AttributeProvider *mpFactory;
+ XlfdStorage *mpFontList;
+ const ExtendedXlfd *mpFallbackFactory;
+
+ Display *pDisp_; // X Display
+ int m_nDefaultScreen; // XDefaultScreen
+ std::vector< ScreenData > m_aScreens;
+ ScreenData m_aInvalidScreenData;
+ Pair aResolution_; // [dpi]
+ bool mbExactResolution;
+ ULONG nMaxRequestSize_; // [byte]
+
+ srv_vendor_t meServerVendor;
+ SalWM eWindowManager_;
+ ULONG nProperties_; // PROPERTY_SUPPORT, BUG, FEATURE
+ BOOL bLocal_; // Server==Client? Init
+ // in SalDisplay::IsLocal()
+ BOOL mbLocalIsValid; // bLocal_ is valid ?
+ // until x bytes
+
+ oslMutex hEventGuard_;
+ std::list< SalUserEvent > m_aUserEvents;
+
+ XLIB_Cursor aPointerCache_[POINTER_COUNT];
+ SalFrame* m_pCapture;
+
+ mutable SalFontCache* m_pFontCache;
+
+ // Keyboard
+ BOOL bNumLockFromXS_; // Num Lock handled by X Server
+ int nNumLockIndex_; // modifier index in modmap
+ int nNumLockMask_; // keyevent state mask for
+ KeySym nShiftKeySym_; // first shift modifier
+ KeySym nCtrlKeySym_; // first control modifier
+ KeySym nMod1KeySym_; // first mod1 modifier
+ ByteString m_aKeyboardName;
+
+ vcl_sal::WMAdaptor* m_pWMAdaptor;
+ DtIntegrator* m_pDtIntegrator;
+
+ bool m_bXinerama;
+ std::vector< Rectangle > m_aXineramaScreens;
+ std::list<SalFrame*> m_aFrames;
+ std::list<SalObject*> m_aSalObjects;
+
+ bool m_bUseRandRWrapper; // don't use randr on gtk, use gdk signals there
+
+ mutable XLIB_Time m_nLastUserEventTime; // mutable because changed on first access
+
+ void DestroyFontCache();
+ virtual long Dispatch( XEvent *pEvent ) = 0;
+ void InitXinerama();
+ void InitRandR( XLIB_Window aRoot ) const;
+ void DeInitRandR();
+ int processRandREvent( XEvent* );
+
+ void doDestruct();
+public:
+ static SalDisplay *GetSalDisplay( Display* display );
+ static BOOL BestVisual( Display *pDisp,
+ int nScreen,
+ XVisualInfo &rVI );
+
+ SalDisplay( Display* pDisp );
+
+ virtual ~SalDisplay();
+
+
+ virtual void registerFrame( SalFrame* pFrame );
+ virtual void deregisterFrame( SalFrame* pFrame );
+ void setHaveSystemChildFrame() const
+ { pXLib_->setHaveSystemChildFrame(); }
+ bool getHaveSystemChildFrame() const
+ { return pXLib_->getHaveSystemChildFrame(); }
+
+ void Init();
+
+ void SendInternalEvent( SalFrame* pFrame, void* pData, USHORT nEvent = SALEVENT_USEREVENT );
+ void CancelInternalEvent( SalFrame* pFrame, void* pData, USHORT nEvent );
+ bool DispatchInternalEvent();
+ void PrintInfo() const;
+
+ void PrintEvent( const ByteString &rComment,
+ XEvent *pEvent ) const;
+
+ XlfdStorage* GetXlfdList() const;
+ ExtendedFontStruct*
+ GetFont( const ExtendedXlfd *pFont,
+ const Size& rPixelSize, sal_Bool bVertical ) const;
+ const ExtendedXlfd*
+ GetFallbackFactory()
+ { return mpFallbackFactory; }
+
+ void Beep() const;
+
+ void ModifierMapping();
+ String GetKeyNameFromKeySym( KeySym keysym ) const;
+ XubString GetKeyName( USHORT nKeyCode ) const;
+ USHORT GetKeyCode( KeySym keysym, char*pcPrintable ) const;
+ KeySym GetKeySym( XKeyEvent *pEvent,
+ unsigned char *pPrintable,
+ int *pLen,
+ KeySym *pUnmodifiedKeySym,
+ Status *pStatus,
+ XIC = NULL ) const;
+
+ XLIB_Cursor GetPointer( int ePointerStyle );
+ virtual int CaptureMouse( SalFrame *pCapture );
+
+ BOOL IsLocal();
+
+ void Remove( XEvent *pEvent );
+
+ virtual void initScreen( int nScreen ) const;
+ const ScreenData& getDataForScreen( int nScreen ) const
+ {
+ if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
+ return m_aInvalidScreenData;
+ if( ! m_aScreens[nScreen].m_bInit )
+ initScreen( nScreen );
+ return m_aScreens[nScreen];
+ }
+
+ XLIB_Window GetDrawable( int nScreen ) const { return getDataForScreen( nScreen ).m_aRefWindow; }
+ Display *GetDisplay() const { return pDisp_; }
+ int GetDefaultScreenNumber() const { return m_nDefaultScreen; }
+ const Size& GetScreenSize( int nScreen ) const { return getDataForScreen( nScreen ).m_aSize; }
+ srv_vendor_t GetServerVendor() const { return meServerVendor; }
+ void SetServerVendor() { meServerVendor = sal_GetServerVendor(pDisp_); }
+ BOOL IsDisplay() const { return !!pXLib_; }
+ GC GetMonoGC( int nScreen ) const { return getDataForScreen(nScreen).m_aMonoGC; }
+ GC GetCopyGC( int nScreen ) const { return getDataForScreen(nScreen).m_aCopyGC; }
+ GC GetAndInvertedGC( int nScreen ) const { return getDataForScreen(nScreen).m_aAndInvertedGC; }
+ GC GetAndGC( int nScreen ) const { return getDataForScreen(nScreen).m_aAndGC; }
+ GC GetOrGC( int nScreen ) const { return getDataForScreen(nScreen).m_aOrGC; }
+ GC GetStippleGC( int nScreen ) const { return getDataForScreen(nScreen).m_aStippleGC; }
+ GC GetGC( USHORT nDepth, int nScreen ) const;
+ Pixmap GetInvert50( int nScreen ) const { return getDataForScreen(nScreen).m_hInvert50; }
+ const SalColormap& GetColormap( int nScreen ) const { return getDataForScreen(nScreen).m_aColormap; }
+ const SalVisual& GetVisual( int nScreen ) const { return getDataForScreen(nScreen).m_aVisual; }
+ RenderEntryMap& GetRenderEntries( int nScreen ) const { return getDataForScreen(nScreen).m_aRenderData; }
+ const Pair &GetResolution() const { return aResolution_; }
+ bool GetExactResolution() const { return mbExactResolution; }
+ ULONG GetProperties() const { return nProperties_; }
+ ULONG GetMaxRequestSize() const { return nMaxRequestSize_; }
+ XLIB_Time GetLastUserEventTime( bool bAlwaysReget = false ) const;
+
+ bool XIfEventWithTimeout( XEvent*, XPointer, X_if_predicate, long i_nTimeout = 1000 ) const;
+
+ BOOL MouseCaptured( const SalFrame *pFrameData ) const
+ { return m_pCapture == pFrameData; }
+ SalFrame* GetCaptureFrame() const
+ { return m_pCapture; }
+ SalXLib* GetXLib() const { return pXLib_; }
+
+ SalI18N_InputMethod* GetInputMethod() const { return mpInputMethod; }
+ SalI18N_KeyboardExtension* GetKbdExtension() const { return mpKbdExtension; }
+ void SetInputMethod( SalI18N_InputMethod *pInputMethod )
+ { mpInputMethod = pInputMethod; }
+ void SetKbdExtension(SalI18N_KeyboardExtension *pKbdExtension)
+ { mpKbdExtension = pKbdExtension; }
+ const char* GetKeyboardName( BOOL bRefresh = FALSE );
+ ::vcl_sal::WMAdaptor* getWMAdaptor() const { return m_pWMAdaptor; }
+ DtIntegrator* getDtIntegrator() const { return m_pDtIntegrator; }
+ bool IsXinerama() const { return m_bXinerama; }
+ const std::vector< Rectangle >& GetXineramaScreens() const { return m_aXineramaScreens; }
+ XLIB_Window GetRootWindow( int nScreen ) const
+ { return getDataForScreen( nScreen ).m_aRoot; }
+ const std::vector< ScreenData >& GetScreenData()
+ { return m_aScreens; }
+ int GetScreenCount() const { return static_cast<int>(m_aScreens.size()); }
+
+ const std::list< SalFrame* >& getFrames() const
+ { return m_aFrames; }
+
+ BOOL IsNumLockFromXS() const { return bNumLockFromXS_; }
+
+ std::list< SalObject* >& getSalObjects() { return m_aSalObjects; }
+};
+
+// -=-= inlines =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+inline GC SalDisplay::GetGC( USHORT nDepth, int nScreen ) const
+{ return 1 == nDepth
+ ? GetMonoGC( nScreen )
+ : getDataForScreen(nScreen).m_aVisual.GetDepth() == nDepth
+ ? GetCopyGC( nScreen )
+ : None; }
+
+inline Display *SalColormap::GetXDisplay() const
+{ return m_pDisplay->GetDisplay(); }
+
+class VCL_DLLPUBLIC SalX11Display : public SalDisplay
+{
+public:
+ SalX11Display( Display* pDisp );
+ virtual ~SalX11Display();
+
+ virtual long Dispatch( XEvent *pEvent );
+ virtual void Yield();
+
+ BOOL IsEvent();
+};
+
+/*----------------------------------------------------------
+ keep track of correct size of the initial window
+ */
+// get foreign key names
+namespace vcl_sal {
+ String getKeysymReplacementName(
+ const char* pKeyboard,
+ KeySym nSymbol );
+}
+
+
+#endif // _SV_SALDISP_HXX
diff --git a/vcl/unx/inc/salfont.h b/vcl/unx/inc/salfont.h
new file mode 100644
index 000000000000..b3fbe93137f3
--- /dev/null
+++ b/vcl/unx/inc/salfont.h
@@ -0,0 +1,180 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALFONT_H
+#define _SV_SALFONT_H
+
+// -=-= exports =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalFontCache;
+struct SalFontDimension;
+class SalFontFamily;
+class SalFontFamilyList;
+class SalFontStruct;
+class SalFontStructList;
+class SalFonts;
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include <salstd.hxx>
+#include <vcl/outfont.hxx>
+
+// -=-= forwards =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+typedef ULONG XFP_FLAGS;
+
+class SalDisplay;
+class SalFontCacheItem;
+
+// -=-= SalFontCache -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+DECLARE_LIST( SalFontCache, SalFontCacheItem* )
+
+// -=-= SalFontDimension -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+struct SalFontDimension
+{
+ USHORT nHeight_; // [pixel]
+ USHORT nPtHeight_; // [point/10]
+ USHORT nAverage_; // [pixel/10]
+ USHORT nXRes_; // [dpi]
+ USHORT nYRes_; // [dpi]
+ USHORT nSlant_; // [pixel]
+// size_t nUnderlineThickness_; // [pixel]
+// size_t nUnderlinePosition_; // [pixel]
+// size_t nStrikeoutAscent_; // [pixel]
+// size_t nStrikeoutDescent_; // [pixel]
+// Subscript, Superscript, Capital, Space ...
+
+ inline SalFontDimension( USHORT nA = 0, USHORT nH = 0 );
+
+ inline BOOL IsScalable() const;
+ inline USHORT GetWidth() const { return (nAverage_ + 5) / 10; }
+ inline Size GetSize() const;
+ inline void SetSize( const Size & rSize );
+ inline BOOL operator == ( const SalFontDimension &r ) const;
+ inline BOOL operator != ( const SalFontDimension &r ) const;
+ inline BOOL operator >= ( const SalFontDimension &r ) const;
+};
+
+inline SalFontDimension::SalFontDimension( USHORT nA, USHORT nH )
+ : nHeight_( nH ), nAverage_( nA )
+{ nPtHeight_ = nXRes_ = nYRes_ = nSlant_ = 0; }
+
+inline BOOL SalFontDimension::IsScalable() const
+{ return !nHeight_ && !nPtHeight_ && !nAverage_; }
+
+inline Size SalFontDimension::GetSize() const
+{ return Size( (nAverage_ + 5) / 10, nHeight_ ); }
+
+inline void SalFontDimension::SetSize( const Size & rSize )
+{ nAverage_ = (USHORT)rSize.Width() * 10; nHeight_ = (USHORT)rSize.Height(); }
+
+inline BOOL SalFontDimension::operator == ( const SalFontDimension &r ) const
+{ return nHeight_ == r.nHeight_ && (!r.nAverage_ || nAverage_ == r.nAverage_); }
+
+inline BOOL SalFontDimension::operator != ( const SalFontDimension &r ) const
+{ return !(*this == r); }
+
+inline BOOL SalFontDimension::operator >= ( const SalFontDimension &r ) const
+{ return nHeight_ > r.nHeight_
+ || (nHeight_ == r.nHeight_ && nAverage_ >= r.nAverage_); }
+
+// -=-= SalFontStruct =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalFontStruct : public ImplFontMetricData
+{
+ friend class SalDisplay;
+ friend class SalGraphicsData;
+
+ SalFontCacheItem*pCache_;
+
+#if (OSL_DEBUG_LEVEL > 1) || defined DBG_UTIL
+ ByteString aFontName_;
+#endif
+ USHORT nHeightCount_; // Anzahl der Hoehen-Eintraege
+ SalFontDimension*pDimensions_; // Hoehen-Array
+ USHORT nWeight_;
+
+ USHORT nFoundry_; // properties indexies
+ USHORT nFamily_;
+ USHORT nWeightName_;
+ USHORT nSlant_;
+ USHORT nSetWidthName_;
+ ByteString aAddStyleName_;
+ USHORT nSpacing_;
+ USHORT nCharSet_;
+ USHORT nFaceName_;
+ BOOL mbValidFontDescription; // valid xlfd entries
+
+ void Init();
+ BOOL Init( SalDisplay* pDisp,
+ const char* pFontName,
+ SalFontDimension& rDim );
+
+ ByteString GetXFontName( const SalFontDimension& );
+
+ inline void SetFoundry( USHORT n )
+ { nFoundry_ = n; }
+ inline void SetFamily( USHORT n )
+ { meFamily = sal_FamilyToSal( nFamily_ = n ); }
+ inline void SetWeightName( USHORT n )
+ { meWeight = sal_WeightToSal( nWeightName_ = n ); }
+ inline void SetSlant( USHORT n )
+ { meItalic = sal_ItalicToSal( nSlant_ = n ); }
+ inline void SetSetWidthName( USHORT n )
+ { nSetWidthName_ = n; }
+ inline void SetAddStyleName( const ByteString& rAddStyle )
+ { aAddStyleName_ = rAddStyle; aAddStyleName_.ToLowerAscii(); }
+ inline void SetSpacing( USHORT n )
+ { mePitch = sal_PitchToSal( nSpacing_ = n ); }
+ inline void SetAverage( long n )
+ { mnWidth = (n + 5) / 10; }
+ void SetCharSet( USHORT n );
+
+ SalFontStruct( const SalFontStruct& rFont );
+public:
+ SalFontStruct( SalDisplay* pDisp,
+ const char* pFontName,
+ SalFontDimension& rDim );
+
+ ~SalFontStruct();
+
+ inline void Cache( SalFontCacheItem *p ) { pCache_ = p; }
+ inline SalFontCacheItem*IsCache() const { return pCache_; }
+ inline BOOL IsScalable() const { return TYPE_SCALABLE==meType; }
+ inline SalFontDimension*GetDim() const { return pDimensions_; }
+ inline BOOL IsValid() const { return mbValidFontDescription; }
+#ifdef DBG_UTIL
+ const ByteString& GetName() const { return aFontName_; }
+#endif
+
+ ImplFontData *GetDevFontData();
+ SalFontCacheItem*Load( SalDisplay *pDisp, const SalFontDimension &rDim );
+ CharSet GetCharSet() { return meCharSet; }
+
+};
+
+// -=-= SalFontStructList =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+DECLARE_LIST( SalFontStructList, SalFontStruct* )
+
+#endif // _SV_SALFONT_H
+
diff --git a/vcl/unx/inc/salframe.h b/vcl/unx/inc/salframe.h
new file mode 100644
index 000000000000..6f962c9a13b3
--- /dev/null
+++ b/vcl/unx/inc/salframe.h
@@ -0,0 +1,286 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_SALFRAME_H
+#define _SV_SALFRAME_H
+
+// -=-= #includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+#include <salstd.hxx>
+#include <vcl/salframe.hxx>
+#include <vcl/salwtype.hxx>
+#ifndef _SV_PTRSTYLE_HXX
+#include <vcl/ptrstyle.hxx>
+#endif
+#include <vcl/salinst.hxx>
+#include <vcl/sysdata.hxx>
+#include <vcl/timer.hxx>
+#include <vcl/dllapi.h>
+
+#include <salunx.h>
+#include <list>
+
+// -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalDisplay;
+class X11SalGraphics;
+class SalGraphicsLayout;
+class SalI18N_InputContext;
+
+namespace vcl_sal { class WMAdaptor; class NetWMAdaptor; class GnomeWMAdaptor; }
+
+// -=-= X11SalFrame =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+#define SHOWSTATE_UNKNOWN -1
+#define SHOWSTATE_MINIMIZED 0
+#define SHOWSTATE_NORMAL 1
+#define SHOWSTATE_HIDDEN 2
+
+class VCL_DLLPUBLIC X11SalFrame : public SalFrame
+{
+ friend class vcl_sal::WMAdaptor;
+ friend class vcl_sal::NetWMAdaptor;
+ friend class vcl_sal::GnomeWMAdaptor;
+
+ static X11SalFrame* s_pSaveYourselfFrame;
+
+ X11SalFrame* mpParent; // pointer to parent frame
+ // which should never obscur this frame
+ bool mbTransientForRoot;
+ std::list< X11SalFrame* > maChildren; // List of child frames
+
+ SalDisplay *pDisplay_;
+ int m_nScreen;
+ XLIB_Window mhWindow;
+ XLIB_Window mhShellWindow;
+ XLIB_Window mhForeignParent;
+ // window to fall back to when no longer in fullscreen mode
+ XLIB_Window mhStackingWindow;
+ // window to listen for CirculateNotify events
+
+ Pixmap mhBackgroundPixmap;
+
+ XLIB_Cursor hCursor_;
+ int nCaptured_; // is captured
+
+ X11SalGraphics *pGraphics_; // current frame graphics
+ X11SalGraphics *pFreeGraphics_; // first free frame graphics
+
+ XLIB_Time nReleaseTime_; // timestamp of last key release
+ USHORT nKeyCode_; // last key code
+ USHORT nKeyState_; // last key state
+ int nCompose_; // compose state
+ bool mbKeyMenu;
+ bool mbSendExtKeyModChange;
+ USHORT mnExtKeyMod;
+
+ int nShowState_; // show state
+ int nWidth_; // client width
+ int nHeight_; // client height
+ Rectangle maRestorePosSize;
+ ULONG nStyle_;
+ SalExtStyle mnExtStyle;
+ BOOL bAlwaysOnTop_;
+ BOOL bViewable_;
+ BOOL bMapped_;
+ BOOL mbInShow;
+ BOOL bDefaultPosition_; // client is centered initially
+ bool m_bXEmbed;
+ int nVisibility_;
+ int m_nWorkArea;
+
+ int nScreenSaversTimeout_;
+ Rectangle maPaintRegion;
+
+ Timer maAlwaysOnTopRaiseTimer;
+
+ // data for WMAdaptor
+ int meWindowType;
+ int mnDecorationFlags;
+ bool mbMaximizedVert;
+ bool mbMaximizedHorz;
+ bool mbShaded;
+ bool mbFullScreen;
+
+ // icon id
+ int mnIconID;
+
+ String m_aTitle;
+
+ SystemChildData maSystemChildData;
+
+ SalI18N_InputContext *mpInputContext;
+ Bool mbInputFocus;
+
+ XRectangle* m_pClipRectangles;
+ int m_nCurClipRect;
+ int m_nMaxClipRect;
+
+
+ void GetPosSize( Rectangle &rPosSize );
+ void SetSize ( const Size &rSize );
+ void Center();
+ void SetPosSize( const Rectangle &rPosSize );
+ void Minimize();
+ void Maximize();
+ void Restore();
+ void SetWindowGravity (int nGravity ) const;
+
+ void RestackChildren( XLIB_Window* pTopLevelWindows, int nTopLevelWindows );
+ void RestackChildren();
+
+ long HandleKeyEvent ( XKeyEvent *pEvent );
+ long HandleMouseEvent ( XEvent *pEvent );
+ long HandleFocusEvent ( XFocusChangeEvent *pEvent );
+ long HandleExposeEvent ( XEvent *pEvent );
+ long HandleSizeEvent ( XConfigureEvent *pEvent );
+ long HandleColormapEvent ( XColormapEvent *pEvent );
+ long HandleMapUnmapEvent ( XEvent *pEvent );
+ long HandleStateEvent ( XPropertyEvent *pEvent );
+ long HandleReparentEvent ( XReparentEvent *pEvent );
+ long HandleClientMessage ( XClientMessageEvent*pEvent );
+
+ DECL_LINK( HandleAlwaysOnTopRaise, void* );
+
+ void passOnSaveYourSelf();
+
+ void createNewWindow( XLIB_Window aParent, int nScreen = -1 );
+ void updateScreenNumber();
+
+ void setXEmbedInfo();
+ void askForXEmbedFocus( sal_Int32 i_nTimeCode );
+public:
+ X11SalFrame( SalFrame* pParent, ULONG nSalFrameStyle, SystemParentData* pSystemParent = NULL );
+ virtual ~X11SalFrame();
+
+ long Dispatch( XEvent *pEvent );
+ void Init( ULONG nSalFrameStyle, int nScreen = -1,
+ SystemParentData* pParentData = NULL, bool bUseGeometry = false );
+
+ SalDisplay* GetDisplay() const { return pDisplay_; }
+ Display* GetXDisplay() const;
+ XLIB_Window GetDrawable() const;
+ int GetScreenNumber() const { return m_nScreen; }
+ XLIB_Window GetWindow() const { return mhWindow; }
+ XLIB_Window GetShellWindow() const { return mhShellWindow; }
+ XLIB_Window GetForeignParent() const { return mhForeignParent; }
+ XLIB_Window GetStackingWindow() const { return mhStackingWindow; }
+ long ShutDown() const { return CallCallback( SALEVENT_SHUTDOWN, 0 ); }
+ long Close() const { return CallCallback( SALEVENT_CLOSE, 0 ); }
+ ULONG GetStyle() const { return nStyle_; }
+
+ inline XLIB_Cursor GetCursor() const { return hCursor_; }
+ inline BOOL IsCaptured() const { return nCaptured_ == 1; }
+#if !defined(__synchronous_extinput__)
+ void HandleExtTextEvent (XClientMessageEvent *pEvent);
+ void PostExtTextEvent (sal_uInt16 nExtTextEventType,
+ void *pExtTextEvent);
+#endif
+ bool IsOverrideRedirect() const;
+ bool IsChildWindow() const { return (nStyle_ & (SAL_FRAME_STYLE_PLUG|SAL_FRAME_STYLE_SYSTEMCHILD)) != 0; }
+ bool IsSysChildWindow() const { return (nStyle_ & (SAL_FRAME_STYLE_SYSTEMCHILD)) != 0; }
+ bool IsFloatGrabWindow() const;
+ SalI18N_InputContext* getInputContext() const { return mpInputContext; }
+ void getPosSize( Rectangle& rRect ) { GetPosSize( rRect ); }
+ void setPosSize( const Rectangle& rRect ) { SetPosSize( rRect ); }
+ bool isMapped() const { return bMapped_; }
+ bool hasFocus() const { return mbInputFocus; }
+
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics* pGraphics );
+
+ // call with true to clear graphics (setting None as drawable)
+ // call with false to setup graphics with window (GetWindow())
+ virtual void updateGraphics( bool bClear );
+
+ virtual BOOL PostEvent( void* pData );
+
+ virtual void SetTitle( const XubString& rTitle );
+ virtual void SetIcon( USHORT nIcon );
+ virtual void SetMenu( SalMenu* pMenu );
+ virtual void DrawMenuBar();
+
+ virtual void SetExtendedFrameStyle( SalExtStyle nExtStyle );
+ virtual void Show( BOOL bVisible, BOOL bNoActivate = FALSE );
+ virtual void Enable( BOOL bEnable );
+ virtual void SetMinClientSize( long nWidth, long nHeight );
+ virtual void SetMaxClientSize( long nWidth, long nHeight );
+ virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight, USHORT nFlags );
+ virtual void GetClientSize( long& rWidth, long& rHeight );
+ virtual void GetWorkArea( Rectangle& rRect );
+ virtual SalFrame* GetParent() const;
+ virtual void SetWindowState( const SalFrameState* pState );
+ virtual BOOL GetWindowState( SalFrameState* pState );
+ virtual void ShowFullScreen( BOOL bFullScreen, sal_Int32 nMonitor );
+ virtual void StartPresentation( BOOL bStart );
+ virtual void SetAlwaysOnTop( BOOL bOnTop );
+ virtual void ToTop( USHORT nFlags );
+ virtual void SetPointer( PointerStyle ePointerStyle );
+ virtual void CaptureMouse( BOOL bMouse );
+ virtual void SetPointerPos( long nX, long nY );
+ using SalFrame::Flush;
+ virtual void Flush();
+ virtual void Sync();
+ virtual void SetInputContext( SalInputContext* pContext );
+ virtual void EndExtTextInput( USHORT nFlags );
+ virtual String GetKeyName( USHORT nKeyCode );
+ virtual String GetSymbolKeyName( const XubString& rFontName, USHORT nKeyCode );
+ virtual BOOL MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangType, KeyCode& rKeyCode );
+ virtual LanguageType GetInputLanguage();
+ virtual SalBitmap* SnapShot();
+ virtual void UpdateSettings( AllSettings& rSettings );
+ virtual void Beep( SoundType eSoundType );
+ virtual const SystemEnvData* GetSystemData() const;
+ virtual SalPointerState GetPointerState();
+ virtual void SetParent( SalFrame* pNewParent );
+ virtual bool SetPluginParent( SystemParentData* pNewParent );
+ virtual void SetBackgroundBitmap( SalBitmap* pBitmap );
+
+ virtual void SetScreenNumber( unsigned int );
+
+ // shaped system windows
+ // set clip region to none (-> rectangular windows, normal state)
+ virtual void ResetClipRegion();
+ // start setting the clipregion consisting of nRects rectangles
+ virtual void BeginSetClipRegion( ULONG nRects );
+ // add a rectangle to the clip region
+ virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ // done setting up the clipregion
+ virtual void EndSetClipRegion();
+
+ static void SaveYourselfDone( SalFrame* );
+ static Bool checkKeyReleaseForRepeat( Display*, XEvent*, XPointer pX11SalFrame );
+};
+
+#ifdef _SV_SALDISP_HXX
+
+inline Display *X11SalFrame::GetXDisplay() const
+{ return pDisplay_->GetDisplay(); }
+
+inline XLIB_Window X11SalFrame::GetDrawable() const
+{ return GetWindow(); }
+
+#endif
+
+#endif // _SV_SALFRAME_H
+
diff --git a/vcl/unx/inc/salgdi.h b/vcl/unx/inc/salgdi.h
new file mode 100644
index 000000000000..09e85c6840b8
--- /dev/null
+++ b/vcl/unx/inc/salgdi.h
@@ -0,0 +1,396 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALGDI_H
+#define _SV_SALGDI_H
+
+
+// -=-= exports -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+class SalFontCacheItem;
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include "salstd.hxx"
+#include "vcl/salgdi.hxx"
+#include "vcl/salgtype.hxx"
+#include "tools/fract.hxx"
+#include "vcl/dllapi.h"
+#include <deque>
+#include "xfont.hxx"
+
+// -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+struct ImplFontMetricData;
+struct ImplFontSelectData;
+class SalBitmap;
+class SalColormap;
+class SalDisplay;
+class SalFrame;
+class X11SalVirtualDevice;
+class SalPolyLine;
+class PspSalPrinter;
+class PspSalInfoPrinter;
+class ServerFont;
+class ImplLayoutArgs;
+class X11FontLayout;
+class ServerFontLayout;
+
+// -=-= SalGraphicsData =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+class CairoFontsCache
+{
+private:
+ static int mnRefCount;
+ typedef std::deque< std::pair<void *, void*> > LRUFonts;
+ static LRUFonts maLRUFonts;
+public:
+ CairoFontsCache();
+ static void CacheFont(void *pFont, void *pId);
+ static void* FindCachedFont(void *pId);
+ ~CairoFontsCache();
+};
+
+class VCL_DLLPUBLIC X11SalGraphics : public SalGraphics
+{
+ friend class X11FontLayout;
+ friend class ServerFontLayout;
+protected:
+ SalFrame* m_pFrame; // the SalFrame which created this Graphics or NULL
+ X11SalVirtualDevice* m_pVDev; // the SalVirtualDevice which created this Graphics or NULL
+
+ const SalColormap* m_pColormap;
+ SalColormap *m_pDeleteColormap;
+ Drawable hDrawable_; // use
+ int m_nScreen;
+ void* m_pRenderFormat;
+ XID m_aRenderPicture;
+ CairoFontsCache m_aCairoFontsCache;
+
+ XLIB_Region pPaintRegion_;
+ XLIB_Region pClipRegion_;
+
+ GC pPenGC_; // Pen attributes
+ SalColor nPenColor_;
+ Pixel nPenPixel_;
+
+ GC pFontGC_; // Font attributes
+ ExtendedFontStructRef mXFont[ MAX_FALLBACK ];
+ ServerFont* mpServerFont[ MAX_FALLBACK ];
+
+ SalColor nTextColor_;
+ Pixel nTextPixel_;
+ BOOL bFontVertical_;
+
+ BOOL bDisableGraphite_;
+
+ GC pBrushGC_; // Brush attributes
+ SalColor nBrushColor_;
+ Pixel nBrushPixel_;
+ Pixmap hBrush_; // Dither
+
+ GC pMonoGC_;
+ GC pCopyGC_;
+ GC pMaskGC_;
+ GC pInvertGC_;
+ GC pInvert50GC_;
+ GC pStippleGC_;
+ GC pTrackingGC_;
+
+ BOOL bWindow_ : 1; // is Window
+ BOOL bPrinter_ : 1; // is Printer
+ BOOL bVirDev_ : 1; // is VirDev
+ BOOL bPenGC_ : 1; // is Pen GC valid
+ BOOL bFontGC_ : 1; // is Font GC valid
+ BOOL bBrushGC_ : 1; // is Brush GC valid
+ BOOL bMonoGC_ : 1; // is Mono GC valid
+ BOOL bCopyGC_ : 1; // is Copy GC valid
+ BOOL bInvertGC_ : 1; // is Invert GC valid
+ BOOL bInvert50GC_ : 1; // is Invert50 GC valid
+ BOOL bStippleGC_ : 1; // is Stipple GC valid
+ BOOL bTrackingGC_ : 1; // is Tracking GC valid
+ bool bXORMode_ : 1; // is ROP XOR Mode set
+ BOOL bDitherBrush_ : 1; // is solid or tile
+
+ void SetClipRegion( GC pGC,
+ XLIB_Region pXReg = NULL ) const;
+
+ GC GetTrackingGC();
+ GC GetInvertGC();
+ GC GetInvert50GC();
+ GC CreateGC( Drawable hDrawable,
+ unsigned long nMask = GCGraphicsExposures );
+ GC SelectPen();
+ GC SelectBrush();
+ void DrawLines( ULONG nPoints,
+ const SalPolyLine &rPoints,
+ GC pGC,
+ bool bClose
+ );
+ BOOL GetDitherPixmap ( SalColor nSalColor );
+
+ inline GC GetMonoGC( Pixmap hPixmap );
+ inline GC GetCopyGC();
+ inline GC GetStippleGC();
+
+ int Clip ( XLIB_Region pRegion,
+ int &nX,
+ int &nY,
+ unsigned int &nDX,
+ unsigned int &nDY,
+ int &nSrcX,
+ int &nSrcY ) const;
+ int Clip ( int &nX,
+ int &nY,
+ unsigned int &nDX,
+ unsigned int &nDY,
+ int &nSrcX,
+ int &nSrcY ) const;
+ GC SetMask ( int &nX,
+ int &nY,
+ unsigned int &nDX,
+ unsigned int &nDY,
+ int &nSrcX,
+ int &nSrcY,
+ Pixmap hClipMask );
+ using SalGraphics::DrawBitmap;
+ void DrawBitmap( const SalTwoRect *pPosAry,
+ SalGraphics *pThis,
+ const SalBitmap &rSalBitmap,
+ const SalBitmap &rTransparentBitmap,
+ SalColor nTransparentColor );
+
+ GC SelectFont();
+ bool setFont( const ImplFontSelectData* pEntry, int nFallbackLevel );
+
+ void drawMaskedBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ const SalBitmap& rTransparentBitmap );
+
+protected:
+ void DrawStringUCS2MB( ExtendedFontStruct& rFont, const Point&,
+ const sal_Unicode* pStr, int nLength );
+
+ void DrawPrinterString( const SalLayout& );
+
+ void DrawServerFontString( const ServerFontLayout& );
+ void DrawServerSimpleFontString( const ServerFontLayout& );
+ void DrawServerAAFontString( const ServerFontLayout& );
+ bool DrawServerAAForcedString( const ServerFontLayout& );
+ void DrawCairoAAFontString( const ServerFontLayout& );
+
+ void freeResources();
+public:
+ X11SalGraphics();
+ virtual ~X11SalGraphics();
+
+ void Init( SalFrame *pFrame, Drawable aDrawable, int nScreen );
+ void Init( X11SalVirtualDevice *pVirtualDevice, SalColormap* pColormap = NULL, bool bDeleteColormap = false );
+ void Init( class ImplSalPrinterData *pPrinter );
+ void DeInit();
+
+ inline const SalDisplay* GetDisplay() const;
+ inline Display* GetXDisplay() const;
+ inline const SalVisual& GetVisual() const;
+ inline Drawable GetDrawable() const { return hDrawable_; }
+ void SetDrawable( Drawable d, int nScreen );
+ XID GetXRenderPicture();
+ void* GetXRenderFormat() const { return m_pRenderFormat; }
+ inline void SetXRenderFormat( void* pRenderFormat ) { m_pRenderFormat = pRenderFormat; }
+ inline const SalColormap& GetColormap() const { return *m_pColormap; }
+ using SalGraphics::GetPixel;
+ inline Pixel GetPixel( SalColor nSalColor ) const;
+
+ int GetScreenNumber() const { return m_nScreen; }
+
+ // overload all pure virtual methods
+ virtual void GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY );
+ virtual USHORT GetBitCount();
+ virtual long GetGraphicsWidth() const;
+ virtual long GetGraphicsHeight() const;
+
+ virtual void ResetClipRegion();
+ virtual void BeginSetClipRegion( ULONG nCount );
+ virtual BOOL unionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ virtual bool unionClipRegion( const ::basegfx::B2DPolyPolygon& );
+ virtual void EndSetClipRegion();
+
+ virtual void SetLineColor();
+ virtual void SetLineColor( SalColor nSalColor );
+ virtual void SetFillColor();
+
+ virtual void SetFillColor( SalColor nSalColor );
+
+ virtual void SetXORMode( bool bSet, bool );
+
+ virtual void SetROPLineColor( SalROPColor nROPColor );
+ virtual void SetROPFillColor( SalROPColor nROPColor );
+
+ virtual void SetTextColor( SalColor nSalColor );
+ virtual USHORT SetFont( ImplFontSelectData*, int nFallbackLevel );
+ virtual void GetFontMetric( ImplFontMetricData* );
+ virtual ULONG GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs );
+ virtual ImplFontCharMap* GetImplFontCharMap() const;
+ virtual void GetDevFontList( ImplDevFontList* );
+ virtual void GetDevFontSubstList( OutputDevice* );
+ virtual bool AddTempDevFont( ImplDevFontList*, const String& rFileURL, const String& rFontName );
+ virtual BOOL CreateFontSubset( const rtl::OUString& rToFile,
+ const ImplFontData*,
+ sal_Int32* pGlyphIDs,
+ sal_uInt8* pEncoding,
+ sal_Int32* pWidths,
+ int nGlyphs,
+ FontSubsetInfo& rInfo
+ );
+ virtual const Ucs2SIntMap* GetFontEncodingVector( const ImplFontData*, const Ucs2OStrMap** ppNonEncoded );
+ virtual const void* GetEmbedFontData( const ImplFontData*,
+ const sal_Ucs* pUnicodes,
+ sal_Int32* pWidths,
+ FontSubsetInfo& rInfo,
+ long* pDataLen );
+ virtual void FreeEmbedFontData( const void* pData, long nDataLen );
+ virtual void GetGlyphWidths( const ImplFontData*,
+ bool bVertical,
+ Int32Vector& rWidths,
+ Ucs2UIntMap& rUnicodeEnc );
+ virtual BOOL GetGlyphBoundRect( long nIndex, Rectangle& );
+ virtual BOOL GetGlyphOutline( long nIndex, ::basegfx::B2DPolyPolygon& );
+ virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel );
+ virtual void DrawServerFontLayout( const ServerFontLayout& );
+ virtual bool supportsOperation( OutDevSupportType ) const;
+ virtual void drawPixel( long nX, long nY );
+ virtual void drawPixel( long nX, long nY, SalColor nSalColor );
+ virtual void drawLine( long nX1, long nY1, long nX2, long nY2 );
+ virtual void drawRect( long nX, long nY, long nWidth, long nHeight );
+ void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry, bool bClose );
+ virtual void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry );
+ virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
+ virtual void drawPolyPolygon( sal_uInt32 nPoly,
+ const sal_uInt32* pPoints,
+ PCONSTSALPOINT* pPtAry );
+ virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency );
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin);
+ virtual sal_Bool drawPolyLineBezier( ULONG nPoints,
+ const SalPoint* pPtAry,
+ const BYTE* pFlgAry );
+ virtual sal_Bool drawPolygonBezier( ULONG nPoints,
+ const SalPoint* pPtAry,
+ const BYTE* pFlgAry );
+ virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly,
+ const sal_uInt32* pPoints,
+ const SalPoint* const* pPtAry,
+ const BYTE* const* pFlgAry );
+ virtual void copyArea( long nDestX,
+ long nDestY,
+ long nSrcX,
+ long nSrcY,
+ long nSrcWidth,
+ long nSrcHeight,
+ USHORT nFlags );
+ virtual void copyBits( const SalTwoRect* pPosAry,
+ SalGraphics* pSrcGraphics );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nTransparentColor );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ const SalBitmap& rMaskBitmap );
+ virtual void drawMask( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nMaskColor );
+ virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight );
+ virtual SalColor getPixel( long nX, long nY );
+ virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags );
+ virtual void invert( ULONG nPoints, const SalPoint* pPtAry, SalInvert nFlags );
+
+ virtual BOOL drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, ULONG nSize );
+
+ virtual bool drawAlphaBitmap( const SalTwoRect&,
+ const SalBitmap& rSourceBitmap,
+ const SalBitmap& rAlphaBitmap );
+
+ virtual bool drawAlphaRect( long nX, long nY, long nWidth,
+ long nHeight, sal_uInt8 nTransparency );
+
+ virtual SystemGraphicsData GetGraphicsData() const;
+ virtual SystemFontData GetSysFontData( int nFallbacklevel ) const;
+
+ /* use to handle GraphicsExpose/NoExpose after XCopyArea & friends
+ * if pFrame is not NULL, corresponding Paint events are generated
+ * and dispatched to pFrame
+ *
+ * it is imperative to eat up graphics exposes even in case you don't need
+ * them because the next one using XCopyArea can depend on them
+ */
+ void YieldGraphicsExpose();
+
+ // do XCopyArea or XGet/PutImage depending on screen numbers
+ // signature is like XCopyArea with screen numbers added
+ static void CopyScreenArea( Display* pDisplay,
+ Drawable aSrc, int nScreenSrc, int nSrcDepth,
+ Drawable aDest, int nScreenDest, int nDestDepth,
+ GC aDestGC,
+ int src_x, int src_y,
+ unsigned int w, unsigned int h,
+ int dest_x, int dest_y );
+ static void releaseGlyphPeer();
+};
+
+
+inline const SalDisplay *X11SalGraphics::GetDisplay() const
+{ return GetColormap().GetDisplay(); }
+
+inline const SalVisual& X11SalGraphics::GetVisual() const
+{ return GetColormap().GetVisual(); }
+
+inline Display *X11SalGraphics::GetXDisplay() const
+{ return GetColormap().GetXDisplay(); }
+
+inline Pixel X11SalGraphics::GetPixel( SalColor nSalColor ) const
+{ return GetColormap().GetPixel( nSalColor ); }
+
+
+// -=-= Shortcuts =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#ifdef DBG_UTIL
+#define stderr0( s ) fprintf( stderr, s )
+#define stderr1( s, a ) fprintf( stderr, s, a )
+#define stderr2( s, a, b ) fprintf( stderr, s, a, b )
+#define stderr3( s, a, b, c ) fprintf( stderr, s, a, b, c )
+#define stdass0( b ) (void)( !(b) \
+ ? fprintf( stderr, "\"%s\" (%s line %d)\n", \
+ #b, __FILE__, __LINE__ ) \
+ : 0 )
+#else
+#define stderr0( s ) ;
+#define stderr1( s, a ) ;
+#define stderr2( s, a, b ) ;
+#define stderr3( s, a, b, c ) ;
+#define stdass0( b ) ;
+#endif
+
+#endif // _SV_SALGDI_H
+
diff --git a/vcl/unx/inc/salinst.h b/vcl/unx/inc/salinst.h
new file mode 100644
index 000000000000..d73d67f81425
--- /dev/null
+++ b/vcl/unx/inc/salinst.h
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#ifndef _SV_SALINST_H
+#define _SV_SALINST_H
+
+#include <vcl/sv.h>
+#ifndef _VOS_MUTEX_HXX
+#include <vos/mutex.hxx>
+#endif
+#ifndef _VOS_THREAD_HXX
+#include <vos/thread.hxx>
+#endif
+#include <vcl/dllapi.h>
+#include <vcl/salinst.hxx>
+
+class VCL_DLLPUBLIC SalYieldMutex : public NAMESPACE_VOS(OMutex)
+{
+protected:
+ ULONG mnCount;
+ NAMESPACE_VOS(OThread)::TThreadIdentifier mnThreadId;
+
+public:
+ SalYieldMutex();
+
+ virtual void acquire();
+ virtual void release();
+ virtual sal_Bool tryToAcquire();
+
+ ULONG GetAcquireCount() const { return mnCount; }
+ NAMESPACE_VOS(OThread)::TThreadIdentifier GetThreadId() const { return mnThreadId; }
+};
+
+// -=-= SalInstanceData =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class VCL_DLLPUBLIC X11SalInstance : public SalInstance
+{
+protected:
+ SalYieldMutex* mpSalYieldMutex;
+ bool mbPrinterInit;
+
+public:
+ X11SalInstance( SalYieldMutex* pMutex )
+ : mpSalYieldMutex( pMutex ),
+ mbPrinterInit( false )
+ {}
+ virtual ~X11SalInstance();
+
+ virtual SalFrame* CreateChildFrame( SystemParentData* pParent, ULONG nStyle );
+ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle );
+ virtual void DestroyFrame( SalFrame* pFrame );
+
+ virtual SalObject* CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, BOOL bShow = TRUE );
+ virtual void DestroyObject( SalObject* pObject );
+
+ virtual SalVirtualDevice* CreateVirtualDevice( SalGraphics* pGraphics,
+ long nDX, long nDY,
+ USHORT nBitCount, const SystemGraphicsData *pData = NULL );
+ virtual void DestroyVirtualDevice( SalVirtualDevice* pDevice );
+
+ virtual SalInfoPrinter* CreateInfoPrinter( SalPrinterQueueInfo* pQueueInfo,
+ ImplJobSetup* pSetupData );
+ virtual void DestroyInfoPrinter( SalInfoPrinter* pPrinter );
+ virtual SalPrinter* CreatePrinter( SalInfoPrinter* pInfoPrinter );
+ virtual void DestroyPrinter( SalPrinter* pPrinter );
+
+ virtual void GetPrinterQueueInfo( ImplPrnQueueList* pList );
+ virtual void GetPrinterQueueState( SalPrinterQueueInfo* pInfo );
+ virtual void DeletePrinterQueueInfo( SalPrinterQueueInfo* pInfo );
+ virtual String GetDefaultPrinter();
+
+ virtual SalTimer* CreateSalTimer();
+ virtual SalI18NImeStatus* CreateI18NImeStatus();
+ virtual SalSystem* CreateSalSystem();
+ virtual SalBitmap* CreateSalBitmap();
+ virtual SalSession* CreateSalSession();
+
+ virtual vos::IMutex* GetYieldMutex();
+ virtual ULONG ReleaseYieldMutex();
+ virtual void AcquireYieldMutex( ULONG nCount );
+
+ virtual void Yield( bool bWait, bool bHandleAllCurrentEvents );
+ virtual bool AnyInput( USHORT nType );
+ virtual SalMenu* CreateMenu( BOOL bMenuBar );
+ virtual void DestroyMenu( SalMenu* pMenu);
+ virtual SalMenuItem* CreateMenuItem( const SalItemParams* pItemData );
+ virtual void DestroyMenuItem( SalMenuItem* pItem );
+
+ virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
+ void FillFontPathList( std::list< rtl::OString >& o_rFontPaths );
+
+ // dtrans implementation
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
+
+
+ bool isPrinterInit() const
+ {
+ return mbPrinterInit;
+ }
+};
+
+#endif // _SV_SALINST_H
+
diff --git a/vcl/unx/inc/salmenu.h b/vcl/unx/inc/salmenu.h
new file mode 100644
index 000000000000..09a753ff1d98
--- /dev/null
+++ b/vcl/unx/inc/salmenu.h
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALMENU_H
+#define _SV_SALMENU_H
+
+#include <vcl/sv.h>
+#include <vcl/bitmap.hxx>
+#include <vcl/salmenu.hxx>
+
+
+class X11SalMenu : public SalMenu
+{
+public:
+ X11SalMenu() {}
+ virtual ~X11SalMenu();
+
+ virtual BOOL VisibleMenuBar(); // must return TRUE to actually DISPLAY native menu bars
+ // otherwise only menu messages are processed (eg, OLE on Windows)
+
+ virtual void InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos );
+ virtual void RemoveItem( unsigned nPos );
+ virtual void SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsigned nPos );
+ virtual void SetFrame( const SalFrame* pFrame );
+ virtual void CheckItem( unsigned nPos, BOOL bCheck );
+ virtual void EnableItem( unsigned nPos, BOOL bEnable );
+ virtual void SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const XubString& rText );
+ virtual void SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage);
+ virtual void SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const XubString& rKeyName );
+ virtual void GetSystemMenuData( SystemMenuData* pData );
+};
+
+class X11SalMenuItem : public SalMenuItem
+{
+public:
+ X11SalMenuItem() {}
+ virtual ~X11SalMenuItem();
+};
+
+#endif // _SV_SALMENU_H
+
diff --git a/vcl/unx/inc/salobj.h b/vcl/unx/inc/salobj.h
new file mode 100644
index 000000000000..fa9f1309c8ca
--- /dev/null
+++ b/vcl/unx/inc/salobj.h
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALOBJ_H
+#define _SV_SALOBJ_H
+
+#include <vcl/sv.h>
+#include <vcl/sysdata.hxx>
+#include <vcl/salobj.hxx>
+#include <vcl/dllapi.h>
+
+class SalClipRegion
+{
+
+public:
+
+ SalClipRegion();
+ ~SalClipRegion();
+
+ void BeginSetClipRegion( ULONG nRects );
+ void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
+
+ XRectangle *EndSetClipRegion() {
+ return ClipRectangleList; }
+ void ResetClipRegion() {
+ numClipRectangles = 0; }
+ USHORT GetClipRegionType() {
+ return nClipRegionType; }
+ void SetClipRegionType( USHORT nType ) {
+ nClipRegionType = nType; }
+ int GetRectangleCount() {
+ return numClipRectangles; }
+
+private:
+
+ XRectangle* ClipRectangleList;
+ int numClipRectangles;
+ int maxClipRectangles;
+ USHORT nClipRegionType;
+};
+
+
+class X11SalObject : public SalObject
+{
+public:
+ SystemChildData maSystemChildData;
+ SalFrame* mpParent;
+ XLIB_Window maPrimary;
+ XLIB_Window maSecondary;
+ Colormap maColormap;
+ SalClipRegion maClipRegion;
+ BOOL mbVisible;
+
+ static VCL_DLLPUBLIC long Dispatch( XEvent* pEvent );
+ static VCL_DLLPUBLIC X11SalObject* CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, BOOL bShow = TRUE );
+
+ X11SalObject();
+ virtual ~X11SalObject();
+
+ // overload all pure virtual methods
+ virtual void ResetClipRegion();
+ virtual USHORT GetClipRegionType();
+ virtual void BeginSetClipRegion( ULONG nRects );
+ virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
+ virtual void EndSetClipRegion();
+
+ virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight );
+ virtual void Show( BOOL bVisible );
+ virtual void Enable( BOOL nEnable );
+ virtual void GrabFocus();
+
+ virtual void SetBackground();
+ virtual void SetBackground( SalColor nSalColor );
+
+ virtual const SystemEnvData* GetSystemData() const;
+
+};
+
+#endif // _SV_SALOBJ_H
diff --git a/vcl/unx/inc/salprn.h b/vcl/unx/inc/salprn.h
new file mode 100644
index 000000000000..fa68f1b38e73
--- /dev/null
+++ b/vcl/unx/inc/salprn.h
@@ -0,0 +1,120 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALPRN_H
+#define _SV_SALPRN_H
+
+#include "vcl/jobdata.hxx"
+#include "vcl/printergfx.hxx"
+#include "vcl/printerjob.hxx"
+#include "vcl/salprn.hxx"
+
+class PspGraphics;
+
+class PspSalInfoPrinter : public SalInfoPrinter
+{
+public:
+ PspGraphics* m_pGraphics;
+ psp::JobData m_aJobData;
+ psp::PrinterGfx m_aPrinterGfx;
+
+ PspSalInfoPrinter();
+ virtual ~PspSalInfoPrinter();
+
+ // overload all pure virtual methods
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics* pGraphics );
+ virtual BOOL Setup( SalFrame* pFrame, ImplJobSetup* pSetupData );
+ virtual BOOL SetPrinterData( ImplJobSetup* pSetupData );
+ virtual BOOL SetData( ULONG nFlags, ImplJobSetup* pSetupData );
+ virtual void GetPageInfo( const ImplJobSetup* pSetupData,
+ long& rOutWidth, long& rOutHeight,
+ long& rPageOffX, long& rPageOffY,
+ long& rPageWidth, long& rPageHeight );
+ virtual ULONG GetCapabilities( const ImplJobSetup* pSetupData, USHORT nType );
+ virtual ULONG GetPaperBinCount( const ImplJobSetup* pSetupData );
+ virtual String GetPaperBinName( const ImplJobSetup* pSetupData, ULONG nPaperBin );
+ virtual void InitPaperFormats( const ImplJobSetup* pSetupData );
+ virtual int GetLandscapeAngle( const ImplJobSetup* pSetupData );
+};
+
+class PspSalPrinter : public SalPrinter
+{
+public:
+ String m_aFileName;
+ String m_aTmpFile;
+ String m_aFaxNr;
+ bool m_bFax:1;
+ bool m_bPdf:1;
+ bool m_bSwallowFaxNo:1;
+ PspGraphics* m_pGraphics;
+ psp::PrinterJob m_aPrintJob;
+ psp::JobData m_aJobData;
+ psp::PrinterGfx m_aPrinterGfx;
+ ULONG m_nCopies;
+ bool m_bCollate;
+ SalInfoPrinter* m_pInfoPrinter;
+
+ PspSalPrinter( SalInfoPrinter* );
+ virtual ~PspSalPrinter();
+
+ // overload all pure virtual methods
+ using SalPrinter::StartJob;
+ virtual BOOL StartJob( const XubString* pFileName,
+ const XubString& rJobName,
+ const XubString& rAppName,
+ ULONG nCopies,
+ bool bCollate,
+ bool bDirect,
+ ImplJobSetup* pSetupData );
+ virtual BOOL EndJob();
+ virtual BOOL AbortJob();
+ virtual SalGraphics* StartPage( ImplJobSetup* pSetupData, BOOL bNewJobData );
+ virtual BOOL EndPage();
+ virtual ULONG GetErrorCode();
+};
+
+class Timer;
+
+namespace vcl_sal {
+class VCL_DLLPUBLIC PrinterUpdate
+{
+ static Timer* pPrinterUpdateTimer;
+ static int nActiveJobs;
+
+ static void doUpdate();
+ DECL_STATIC_LINK( PrinterUpdate, UpdateTimerHdl, void* );
+public:
+ static void update();
+ static void jobStarted() { nActiveJobs++; }
+ static void jobEnded();
+};
+}
+
+#endif // _SV_SALPRN_H
+
+
diff --git a/vcl/unx/inc/salstd.hxx b/vcl/unx/inc/salstd.hxx
new file mode 100644
index 000000000000..cc03b3fb35a4
--- /dev/null
+++ b/vcl/unx/inc/salstd.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SALSTD_HXX
+#define _SALSTD_HXX
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include <tools/ref.hxx>
+#include <tools/string.hxx>
+#include <tools/gen.hxx>
+#include <vcl/sv.h>
+
+// -=-= X-Lib forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#ifndef _SVUNX_H
+typedef unsigned long Pixel;
+typedef unsigned long XID;
+typedef unsigned long XLIB_Time;
+typedef unsigned long XtIntervalId;
+
+typedef XID Colormap;
+typedef XID Drawable;
+typedef XID Pixmap;
+typedef XID XLIB_Cursor;
+typedef XID XLIB_Font;
+typedef XID XLIB_Window;
+
+typedef struct _XDisplay Display;
+typedef struct _XGC *GC;
+typedef struct _XImage XImage;
+typedef struct _XRegion *XLIB_Region;
+
+typedef union _XEvent XEvent;
+
+typedef struct _XConfigureEvent XConfigureEvent;
+typedef struct _XReparentEvent XReparentEvent;
+typedef struct _XClientMessageEvent XClientMessageEvent;
+typedef struct _XErrorEvent XErrorEvent;
+
+struct Screen;
+struct Visual;
+struct XColormapEvent;
+struct XFocusChangeEvent;
+struct XFontStruct;
+struct XKeyEvent;
+struct XPropertyEvent;
+struct XTextItem;
+struct XWindowChanges;
+
+#define None 0L
+#endif
+
+#endif
+
diff --git a/vcl/unx/inc/salsys.h b/vcl/unx/inc/salsys.h
new file mode 100644
index 000000000000..1da7cae8564a
--- /dev/null
+++ b/vcl/unx/inc/salsys.h
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#ifndef _SV_SALSYS_H
+#define _SV_SALSYS_H
+
+#include <vcl/sv.h>
+#ifndef _VOS_MUTEX_HXX
+#include <vos/mutex.hxx>
+#endif
+#ifndef _VOS_THREAD_HXX
+#include <vos/thread.hxx>
+#endif
+#include <vcl/salsys.hxx>
+#include <vcl/dllapi.h>
+
+#include <list>
+
+class VCL_DLLPUBLIC X11SalSystem : public SalSystem
+{
+public:
+ X11SalSystem() {}
+ virtual ~X11SalSystem();
+
+ // overload pure virtual methods
+ virtual unsigned int GetDisplayScreenCount();
+ virtual bool IsMultiDisplay();
+ virtual unsigned int GetDefaultDisplayNumber();
+ virtual Rectangle GetDisplayScreenPosSizePixel( unsigned int nScreen );
+ virtual Rectangle GetDisplayWorkAreaPosSizePixel( unsigned int nScreen );
+ virtual rtl::OUString GetScreenName( unsigned int nScreen );
+ virtual int ShowNativeDialog( const String& rTitle,
+ const String& rMessage,
+ const std::list< String >& rButtons,
+ int nDefButton );
+ virtual int ShowNativeMessageBox( const String& rTitle,
+ const String& rMessage,
+ int nButtonCombination,
+ int nDefaultButton);
+};
+
+#endif // _SV_SALSYS_H
diff --git a/vcl/unx/inc/saltimer.h b/vcl/unx/inc/saltimer.h
new file mode 100644
index 000000000000..132107d705f8
--- /dev/null
+++ b/vcl/unx/inc/saltimer.h
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALTIMER_H
+#define _SV_SALTIMER_H
+
+#include <vcl/saltimer.hxx>
+
+class X11SalTimer : public SalTimer
+{
+public:
+ X11SalTimer() {}
+ virtual ~X11SalTimer();
+
+ // overload all pure virtual methods
+ void Start( ULONG nMS );
+ void Stop();
+};
+
+#endif
diff --git a/vcl/unx/inc/salunx.h b/vcl/unx/inc/salunx.h
new file mode 100644
index 000000000000..ef53273b60b4
--- /dev/null
+++ b/vcl/unx/inc/salunx.h
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SALUNX_H
+#define _SALUNX_H
+
+// -=-= #includes =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#if defined SCO || defined LINUX || defined HPUX || defined FREEBSD || defined NETBSD
+#include <sys/time.h>
+#elif defined AIX
+#include <time.h>
+#include <sys/time.h>
+#include <strings.h>
+#endif
+#include <svunx.h>
+#include <salstd.hxx>
+
+// -=-= #defines -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#define capacityof(a) (sizeof(a)/sizeof(*a))
+
+// -=-= inlines =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+inline long Divide( long nDividend, long nDivisor )
+{ return (nDividend + nDivisor/2) / nDivisor; }
+
+inline long DPI( long pixel, long mm )
+{ return Divide( pixel*254, mm*10 ); }
+
+// -=-= timeval =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+inline int operator >= ( const timeval &t1, const timeval &t2 )
+{
+ if( t1.tv_sec == t2.tv_sec )
+ return t1.tv_usec >= t2.tv_usec;
+ return t1.tv_sec > t2.tv_sec;
+}
+
+inline int operator > ( const timeval &t1, const timeval &t2 )
+{
+ if( t1.tv_sec == t2.tv_sec )
+ return t1.tv_usec > t2.tv_usec;
+ return t1.tv_sec > t2.tv_sec;
+}
+
+inline int operator == ( const timeval &t1, const timeval &t2 )
+{
+ if( t1.tv_sec == t2.tv_sec )
+ return t1.tv_usec == t2.tv_usec;
+ return FALSE;
+}
+
+inline timeval &operator -= ( timeval &t1, const timeval &t2 )
+{
+ if( t1.tv_usec < t2.tv_usec )
+ {
+ t1.tv_sec--;
+ t1.tv_usec += 1000000;
+ }
+ t1.tv_sec -= t2.tv_sec;
+ t1.tv_usec -= t2.tv_usec;
+ return t1;
+}
+
+inline timeval &operator += ( timeval &t1, const timeval &t2 )
+{
+ t1.tv_sec += t2.tv_sec;
+ t1.tv_usec += t2.tv_usec;
+ if( t1.tv_usec > 1000000 )
+ {
+ t1.tv_sec++;
+ t1.tv_usec -= 1000000;
+ }
+ return t1;
+}
+
+inline timeval &operator += ( timeval &t1, ULONG t2 )
+{
+ t1.tv_sec += t2 / 1000;
+ t1.tv_usec += t2 ? (t2 % 1000) * 1000 : 500;
+ if( t1.tv_usec > 1000000 )
+ {
+ t1.tv_sec++;
+ t1.tv_usec -= 1000000;
+ }
+ return t1;
+}
+
+inline timeval operator + ( const timeval &t1, const timeval &t2 )
+{
+ timeval t0 = t1;
+ return t0 += t2;
+}
+
+inline timeval operator + ( const timeval &t1, ULONG t2 )
+{
+ timeval t0 = t1;
+ return t0 += t2;
+}
+
+inline timeval operator - ( const timeval &t1, const timeval &t2 )
+{
+ timeval t0 = t1;
+ return t0 -= t2;
+}
+#endif
+
diff --git a/vcl/unx/inc/salvd.h b/vcl/unx/inc/salvd.h
new file mode 100644
index 000000000000..3d8c681c4e22
--- /dev/null
+++ b/vcl/unx/inc/salvd.h
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_SALVD_H
+#define _SV_SALVD_H
+
+// -=-= #includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+#include <salstd.hxx>
+#include <vcl/salvd.hxx>
+
+// -=-= forwards -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+class SalDisplay;
+class X11SalGraphics;
+
+// -=-= SalVirDevData -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+class X11SalVirtualDevice : public SalVirtualDevice
+{
+ SalDisplay *pDisplay_;
+ X11SalGraphics *pGraphics_;
+
+
+ Pixmap hDrawable_;
+ int m_nScreen;
+
+ int nDX_;
+ int nDY_;
+ USHORT nDepth_;
+ BOOL bGraphics_; // is Graphics used
+ BOOL bExternPixmap_;
+
+public:
+ X11SalVirtualDevice();
+ virtual ~X11SalVirtualDevice();
+
+ BOOL Init( SalDisplay *pDisplay,
+ long nDX, long nDY,
+ USHORT nBitCount,
+ int nScreen,
+ Pixmap hDrawable = None,
+ void* pRenderFormat = NULL );
+ inline void InitGraphics( X11SalVirtualDevice *pVD );
+
+ inline Display *GetXDisplay() const;
+ inline SalDisplay *GetDisplay() const;
+ inline BOOL IsDisplay() const;
+ inline Pixmap GetDrawable() const { return hDrawable_; }
+ inline USHORT GetDepth() const { return nDepth_; }
+ int GetWidth() const { return nDX_; }
+ int GetHeight() const { return nDY_; }
+ int GetScreenNumber() const { return m_nScreen; }
+
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics* pGraphics );
+
+ // Set new size, without saving the old contents
+ virtual BOOL SetSize( long nNewDX, long nNewDY );
+ virtual void GetSize( long& rWidth, long& rHeight );
+};
+
+#ifdef _SV_SALDISP_HXX
+
+inline void X11SalVirtualDevice::InitGraphics( X11SalVirtualDevice *pVD )
+{ pGraphics_->Init( pVD ); }
+
+inline Display *X11SalVirtualDevice::GetXDisplay() const
+{ return pDisplay_->GetDisplay(); }
+
+inline SalDisplay *X11SalVirtualDevice::GetDisplay() const
+{ return pDisplay_; }
+
+inline BOOL X11SalVirtualDevice::IsDisplay() const
+{ return pDisplay_->IsDisplay(); }
+
+#endif
+
+#endif // _SV_SALVD_H
+
diff --git a/vcl/unx/inc/sm.hxx b/vcl/unx/inc/sm.hxx
new file mode 100644
index 000000000000..b4339bb8567e
--- /dev/null
+++ b/vcl/unx/inc/sm.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _VCL_SM_HXX
+#define _VCL_SM_HXX
+
+#include <tools/link.hxx>
+#include <salunx.h>
+#include <X11/SM/SMlib.h>
+#include <vcl/salsession.hxx>
+
+class SessionManagerClient
+{
+ static SmcConn aSmcConnection;
+ static ByteString aClientID;
+ static bool bDocSaveDone;
+
+ static void SaveYourselfProc( SmcConn connection,
+ SmPointer client_data,
+ int save_type,
+ Bool shutdown,
+ int interact_style,
+ Bool fast );
+ static void DieProc( SmcConn connection,
+ SmPointer client_data );
+ static void SaveCompleteProc( SmcConn connection,
+ SmPointer client_data );
+ static void ShutdownCanceledProc( SmcConn connection,
+ SmPointer client_data );
+ static void InteractProc( SmcConn connection,
+ SmPointer clientData );
+
+ static const ByteString& getPreviousSessionID();
+
+ DECL_STATIC_LINK( SessionManagerClient, ShutDownHdl, void* );
+ DECL_STATIC_LINK( SessionManagerClient, ShutDownCancelHdl, void* );
+ DECL_STATIC_LINK( SessionManagerClient, SaveYourselfHdl, void* );
+ DECL_STATIC_LINK( SessionManagerClient, InteractionHdl, void* );
+public:
+ static VCL_DLLPUBLIC void open(); // needed by other plugins, so export
+ static void close();
+
+ static bool checkDocumentsSaved();
+ static bool queryInteraction();
+ static void saveDone();
+ static void interactionDone( bool bCancelShutdown );
+
+ static String getExecName();
+ static VCL_DLLPUBLIC const ByteString& getSessionID();
+};
+
+class SalFrame;
+
+class IceSalSession : public SalSession
+{
+public:
+ IceSalSession();
+ virtual ~IceSalSession();
+
+ virtual void queryInteraction();
+ virtual void interactionDone();
+ virtual void saveDone();
+ virtual bool cancelShutdown();
+
+ static void handleOldX11SaveYourself( SalFrame* pFrame );
+};
+
+#endif
diff --git a/vcl/unx/inc/soicon.hxx b/vcl/unx/inc/soicon.hxx
new file mode 100644
index 000000000000..419f9b2cc54a
--- /dev/null
+++ b/vcl/unx/inc/soicon.hxx
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_SOICON_HXX
+#define _SV_SOICON_HXX
+
+class SalDisplay;
+class SalBitmap;
+class Bitmap;
+
+BOOL SelectAppIconPixmap( SalDisplay *pDisplay, int nScreen,
+ USHORT nIcon, USHORT iconSize,
+ Pixmap& icon_pixmap, Pixmap& icon_mask );
+#endif
diff --git a/vcl/unx/inc/strhelper.hxx b/vcl/unx/inc/strhelper.hxx
new file mode 100644
index 000000000000..cd0220b77e05
--- /dev/null
+++ b/vcl/unx/inc/strhelper.hxx
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_STRHELPER_HXX
+#define _SV_STRHELPER_HXX
+#include <tools/string.hxx>
+
+String GetCommandLineToken( int, const String& );
+// gets one token of a unix command line style string
+// doublequote, singlequote and singleleftquote protect their respective
+// contents
+
+int GetCommandLineTokenCount( const String& );
+// returns number of tokens (zero if empty or whitespace only)
+
+String WhitespaceToSpace( const String&, BOOL bProtect = TRUE );
+
+#endif
diff --git a/vcl/unx/inc/svsys.h b/vcl/unx/inc/svsys.h
new file mode 100644
index 000000000000..d4077d0998e9
--- /dev/null
+++ b/vcl/unx/inc/svsys.h
@@ -0,0 +1,32 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SV_SVSYS_H
+#define _SV_SVSYS_H
+
+#include <svunx.h>
+
+#endif // _SV_SVSYS_H
diff --git a/vcl/unx/inc/svunx.h b/vcl/unx/inc/svunx.h
new file mode 100644
index 000000000000..e7d6150b79f4
--- /dev/null
+++ b/vcl/unx/inc/svunx.h
@@ -0,0 +1,35 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SVUNX_H
+#define _SVUNX_H
+
+#include <tools/prex.h>
+#include <tools/postx.h>
+
+#endif
+
diff --git a/vcl/unx/inc/wmadaptor.hxx b/vcl/unx/inc/wmadaptor.hxx
new file mode 100644
index 000000000000..c628cfe091ef
--- /dev/null
+++ b/vcl/unx/inc/wmadaptor.hxx
@@ -0,0 +1,326 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _VCL_WMADAPTOR_HXX_
+#define _VCL_WMADAPTOR_HXX_
+
+#ifndef _TL_STRING_HXX
+#include <tools/string.hxx>
+#endif
+#include <tools/gen.hxx>
+#include <vcl/dllapi.h>
+#ifndef _PREX_H
+#include <tools/prex.h>
+#include <X11/Xlib.h>
+#include <tools/postx.h>
+#endif
+#include <vector>
+
+class SalDisplay;
+class X11SalFrame;
+
+namespace vcl_sal {
+
+class VCL_DLLPUBLIC WMAdaptor
+{
+public:
+ enum WMAtom {
+ // atoms for types
+ UTF8_STRING,
+
+ // atoms for extended WM hints
+ NET_SUPPORTED,
+ NET_SUPPORTING_WM_CHECK,
+ NET_WM_NAME,
+ NET_WM_DESKTOP,
+ NET_WM_ICON_NAME,
+ NET_WM_STATE,
+ NET_WM_STATE_MAXIMIZED_HORZ,
+ NET_WM_STATE_MAXIMIZED_VERT,
+ NET_WM_STATE_MODAL,
+ NET_WM_STATE_SHADED,
+ NET_WM_STATE_SKIP_PAGER,
+ NET_WM_STATE_SKIP_TASKBAR,
+ NET_WM_STATE_STAYS_ON_TOP,
+ NET_WM_STATE_STICKY,
+ NET_WM_STATE_FULLSCREEN,
+ NET_WM_STRUT,
+ NET_WM_STRUT_PARTIAL,
+ NET_WM_USER_TIME,
+ NET_WM_WINDOW_TYPE,
+ NET_WM_WINDOW_TYPE_DESKTOP,
+ NET_WM_WINDOW_TYPE_DIALOG,
+ NET_WM_WINDOW_TYPE_DOCK,
+ NET_WM_WINDOW_TYPE_MENU,
+ NET_WM_WINDOW_TYPE_NORMAL,
+ NET_WM_WINDOW_TYPE_TOOLBAR,
+ KDE_NET_WM_WINDOW_TYPE_OVERRIDE,
+ NET_WM_WINDOW_TYPE_SPLASH,
+ NET_WM_WINDOW_TYPE_UTILITY,
+ NET_NUMBER_OF_DESKTOPS,
+ NET_CURRENT_DESKTOP,
+ NET_WORKAREA,
+
+ // atoms for Gnome WM hints
+ WIN_SUPPORTING_WM_CHECK,
+ WIN_PROTOCOLS,
+ WIN_WORKSPACE_COUNT,
+ WIN_WORKSPACE,
+ WIN_LAYER,
+ WIN_STATE,
+ WIN_HINTS,
+ WIN_APP_STATE,
+ WIN_EXPANDED_SIZE,
+ WIN_ICONS,
+ WIN_WORKSPACE_NAMES,
+ WIN_CLIENT_LIST,
+
+ // atoms for general WM hints
+ WM_STATE,
+ MOTIF_WM_HINTS,
+ WM_PROTOCOLS,
+ WM_DELETE_WINDOW,
+ WM_TAKE_FOCUS,
+ WM_SAVE_YOURSELF,
+ WM_CLIENT_LEADER,
+ WM_COMMAND,
+ WM_LOCALE_NAME,
+ WM_TRANSIENT_FOR,
+
+ // special atoms
+ SAL_QUITEVENT,
+ SAL_USEREVENT,
+ SAL_EXTTEXTEVENT,
+ SAL_GETTIMEEVENT,
+ DTWM_IS_RUNNING,
+ VCL_SYSTEM_SETTINGS,
+ XSETTINGS,
+ XEMBED,
+ XEMBED_INFO,
+ NetAtomMax
+ };
+
+ /*
+ * flags for frame decoration
+ */
+ static const int decoration_Title = 0x00000001;
+ static const int decoration_Border = 0x00000002;
+ static const int decoration_Resize = 0x00000004;
+ static const int decoration_MinimizeBtn = 0x00000008;
+ static const int decoration_MaximizeBtn = 0x00000010;
+ static const int decoration_CloseBtn = 0x00000020;
+ static const int decoration_All = 0x10000000;
+
+ /*
+ * window type
+ */
+ enum WMWindowType
+ {
+ windowType_Normal,
+ windowType_ModalDialogue,
+ windowType_ModelessDialogue,
+ windowType_Utility,
+ windowType_Splash,
+ windowType_Toolbar,
+ windowType_Dock
+ };
+
+protected:
+ SalDisplay* m_pSalDisplay; // Display to use
+ Display* m_pDisplay; // X Display of SalDisplay
+ String m_aWMName;
+ Atom m_aWMAtoms[ NetAtomMax];
+ int m_nDesktops;
+ bool m_bEqualWorkAreas;
+ ::std::vector< Rectangle >
+ m_aWMWorkAreas;
+ bool m_bTransientBehaviour;
+ bool m_bEnableAlwaysOnTopWorks;
+ int m_nWinGravity;
+ int m_nInitWinGravity;
+
+ WMAdaptor( SalDisplay * )
+;
+ void initAtoms();
+ bool getNetWmName();
+
+ /*
+ * returns whether this instance is useful
+ * only useful for createWMAdaptor
+ */
+ virtual bool isValid() const;
+
+public:
+ virtual ~WMAdaptor();
+
+ /*
+ * creates a vaild WMAdaptor instance for the SalDisplay
+ */
+ static WMAdaptor* createWMAdaptor( SalDisplay* );
+
+ /*
+ * may return an empty string if the window manager could
+ * not be identified.
+ */
+ const String& getWindowManagerName() const
+ { return m_aWMName; }
+
+ /*
+ * gets the number of workareas
+ */
+ int getWorkAreaCount() const
+ { return m_aWMWorkAreas.size(); }
+
+ /*
+ * gets the current work area/desktop number: [0,m_nDesktops[ or -1 if unknown
+ */
+ int getCurrentWorkArea() const;
+ /*
+ * gets the workarea the specified window is on (or -1)
+ */
+ int getWindowWorkArea( XLIB_Window aWindow ) const;
+ /*
+ * gets the specified workarea
+ */
+ const Rectangle& getWorkArea( int n ) const
+ { return m_aWMWorkAreas[n]; }
+
+ /*
+ * attemp to switch the desktop to a certain workarea
+ */
+ void switchToWorkArea( int nWorkArea ) const;
+
+ /*
+ * sets window title
+ */
+ virtual void setWMName( X11SalFrame* pFrame, const String& rWMName ) const;
+
+ /*
+ * maximizes frame
+ * maximization can be toggled in either direction
+ * to get the original position and size
+ * use maximizeFrame( pFrame, false, false )
+ */
+ virtual void maximizeFrame( X11SalFrame* pFrame, bool bHorizontal = true, bool bVertical = true ) const;
+ /*
+ * start/stop fullscreen mode on a frame
+ */
+ virtual void showFullScreen( X11SalFrame* pFrame, bool bFullScreen ) const;
+ /*
+ * set window struts
+ */
+ virtual void setFrameStruts( X11SalFrame*pFrame,
+ int left, int right, int top, int bottom,
+ int left_start_y, int left_end_y,
+ int right_start_y, int right_end_y,
+ int top_start_x, int top_end_x,
+ int bottom_start_x, int bottom_end_x ) const;
+ /*
+ * set _NET_WM_USER_TIME property, if NetWM
+ */
+ virtual void setUserTime( X11SalFrame* i_pFrame, long i_nUserTime ) const;
+
+ /*
+ * tells whether fullscreen mode is supported by WM
+ */
+ bool supportsFullScreen() const { return m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ] != 0; }
+
+ /*
+ * shade/unshade frame
+ */
+ virtual void shade( X11SalFrame* pFrame, bool bToShaded ) const;
+
+ /*
+ * set hints what decoration is needed;
+ * must be called before showing the frame
+ */
+ virtual void setFrameTypeAndDecoration( X11SalFrame* pFrame, WMWindowType eType, int nDecorationFlags, X11SalFrame* pTransientFrame = NULL ) const;
+
+ /*
+ * tells whether there is WM support for splash screens
+ */
+ bool supportsSplash() const { return m_aWMAtoms[ NET_WM_WINDOW_TYPE_SPLASH ] != 0; }
+
+ /*
+ * tells whteher there is WM support for NET_WM_WINDOW_TYPE_TOOLBAR
+ */
+ bool supportsToolbar() const { return m_aWMAtoms[ NET_WM_WINDOW_TYPE_TOOLBAR ] != 0; }
+
+ /*
+ * enables always on top or equivalent if possible
+ */
+ virtual void enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) const;
+
+ /*
+ * tells whether enableAlwaysOnTop actually works with this WM
+ */
+ bool isAlwaysOnTopOK() const { return m_bEnableAlwaysOnTopWorks; }
+
+ /*
+ * handle WM messages (especially WM state changes)
+ */
+ virtual int handlePropertyNotify( X11SalFrame* pFrame, XPropertyEvent* pEvent ) const;
+
+ /*
+ * called by SalFrame::Show: time to update state properties
+ */
+ virtual void frameIsMapping( X11SalFrame* ) const;
+
+ /*
+ * gets a WM atom
+ */
+ Atom getAtom( WMAtom eAtom ) const
+ { return m_aWMAtoms[ eAtom ]; }
+
+ /*
+ * supports correct positioning
+ */
+
+ virtual bool supportsICCCMPos () const;
+
+ int getPositionWinGravity () const
+ { return m_nWinGravity; }
+ int getInitWinGravity() const
+ { return m_nInitWinGravity; }
+
+ /*
+ * expected behaviour is that the WM will not allow transient
+ * windows to get stacked behind the windows they are transient for
+ */
+ bool isTransientBehaviourAsExpected() const
+ { return m_bTransientBehaviour; }
+
+ /*
+ * changes the transient hint of a window to reference frame
+ * if reference frame is NULL the root window is used instead
+ */
+ void changeReferenceFrame( X11SalFrame* pFrame, X11SalFrame* pReferenceFrame ) const;
+};
+
+} // namespace
+
+#endif
diff --git a/vcl/unx/inc/xfont.hxx b/vcl/unx/inc/xfont.hxx
new file mode 100644
index 000000000000..4041ed7ce67d
--- /dev/null
+++ b/vcl/unx/inc/xfont.hxx
@@ -0,0 +1,162 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef EXTENDED_FONTSTRUCT_HXX
+#define EXTENDED_FONTSTRUCT_HXX
+
+#ifndef _XLIB_H_
+#include <tools/prex.h>
+#include <X11/Xlib.h>
+#include <tools/postx.h>
+#endif
+#include <tools/ref.hxx>
+#include <rtl/tencinfo.h>
+#include <vcl/vclenum.hxx>
+#include <vcl/sallayout.hxx>
+
+typedef unsigned short sal_MultiByte;
+
+class ImplFontMetricData;
+class ExtendedXlfd;
+
+struct VerticalTextItem
+{
+ BOOL mbFixed;
+ XFontStruct* mpXFontStruct;
+ const sal_Unicode* mpString;
+ int mnLength;
+ int mnTransX;
+ int mnTransY;
+ int mnFixedAdvance;
+ int* mpAdvanceAry;
+
+ VerticalTextItem( XFontStruct* pXFontStruct,
+ const sal_Unicode* pString,
+ int nLength,
+ int nTransX,
+ int nTransY,
+ int nFixedAdvance )
+ : mbFixed( TRUE ),
+ mpXFontStruct( pXFontStruct ),
+ mpString( pString ),
+ mnLength( nLength ),
+ mnTransX( nTransX ),
+ mnTransY( nTransY ),
+ mnFixedAdvance( nFixedAdvance )
+ {}
+
+ VerticalTextItem( XFontStruct* pXFontStruct,
+ const sal_Unicode* pString,
+ int nLength,
+ int nTransX,
+ int nTransY,
+ int* pAdvanceAry )
+ : mbFixed( FALSE ),
+ mpXFontStruct( pXFontStruct ),
+ mpString( pString ),
+ mnLength( nLength ),
+ mnTransX( nTransX ),
+ mnTransY( nTransY ),
+ mpAdvanceAry( pAdvanceAry )
+ {}
+
+ ~VerticalTextItem()
+ {
+ if (!mbFixed)
+ {
+ delete( mpAdvanceAry );
+ }
+ }
+};
+
+class ExtendedFontStruct : public SvRefBase
+{
+ private:
+ Display* mpDisplay;
+ Size maPixelSize;
+ float mfXScale;
+ float mfYScale;
+ sal_Size mnDefaultWidth;
+ sal_Bool mbVertical;
+ rtl_TextEncoding mnCachedEncoding;
+ rtl_TextEncoding mnAsciiEncoding;
+
+ ExtendedXlfd* mpXlfd;
+ XFontStruct** mpXFontStruct;
+
+ // unicode range cache
+ mutable sal_uInt32* mpRangeCodes;
+ mutable int mnRangeCount;
+
+ int LoadEncoding( rtl_TextEncoding nEncoding );
+ FontPitch GetSpacing( rtl_TextEncoding nEncoding );
+ bool GetFontBoundingBox( XCharStruct *pCharStruct,
+ int *pAscent, int *pDescent ) ;
+
+ sal_Size GetDefaultWidth();
+ sal_Size GetCharWidth8( sal_Unicode nFrom, sal_Unicode nTo,
+ sal_Int32 *pWidthArray,
+ rtl_TextEncoding nEncoding );
+ sal_Size GetCharWidthUTF16( sal_Unicode nFrom, sal_Unicode nTo,
+ sal_Int32 *pWidthArray );
+ sal_Size GetCharWidth16( sal_Unicode nFrom, sal_Unicode nTo,
+ sal_Int32 *pWidthArray, ExtendedFontStruct *pFallback );
+ public:
+ ExtendedFontStruct( Display* pDisplay,
+ const Size& rPixelSize, sal_Bool bVertical,
+ ExtendedXlfd* pXlfd );
+ ~ExtendedFontStruct();
+ bool Match( const ExtendedXlfd *pXlfd,
+ const Size& rPixelSize, sal_Bool bVertical ) const;
+ XFontStruct* GetFontStruct( rtl_TextEncoding nEncoding );
+ XFontStruct* GetFontStruct( sal_Unicode nChar,
+ rtl_TextEncoding *pEncoding );
+ bool ToImplFontMetricData( ImplFontMetricData *pMetric );
+ rtl_TextEncoding GetAsciiEncoding( int *pAsciiRange = NULL ) const;
+ sal_Size GetCharWidth( sal_Unicode,
+ sal_Int32* pPhysWidth, sal_Int32* pLogWidth );
+ int GetFontCodeRanges( sal_uInt32* pCodePairs ) const;
+ bool HasUnicodeChar( sal_Unicode ) const;
+};
+
+// Declaration and Implementation for ExtendedFontStructRef: Add RefCounting
+// to ExtendedFontStruct (it's not possible to separate decl and impl into
+// a separate source file: all ref member functions are inline
+SV_DECL_IMPL_REF( ExtendedFontStruct );
+
+class X11FontLayout : public GenericSalLayout
+{
+public:
+ X11FontLayout( ExtendedFontStruct& );
+ virtual bool LayoutText( ImplLayoutArgs& );
+ virtual void AdjustLayout( ImplLayoutArgs& );
+ virtual void DrawText( SalGraphics& ) const;
+
+private:
+ ExtendedFontStruct& mrFont;
+};
+
+#endif /* EXTENDED_FONTSTRUCT_HXX */