[ooo-build-commit] .: patches/dev300

Kohei Yoshida kohei at kemper.freedesktop.org
Mon Mar 1 13:55:41 PST 2010


 patches/dev300/apply                                         |    1 
 patches/dev300/autocorrect-accidental-caps-lock-vcl-xkb.diff |   90 ---
 patches/dev300/autocorrect-accidental-caps-lock-vcl.diff     |  257 ++++++-----
 3 files changed, 145 insertions(+), 203 deletions(-)

New commits:
commit 3421817ba632beac34fa8f8fbe6cb3007616b15b
Author: Kohei Yoshida <kyoshida at novell.com>
Date:   Sun Feb 28 15:22:54 2010 -0500

    Combined caps lock toggling patches.
    
    * patches/dev300/apply:
    * patches/dev300/autocorrect-accidental-caps-lock-vcl-xkb.diff: removed,
      combined with the patch below.
    * patches/dev300/autocorrect-accidental-caps-lock-vcl.diff: combined with
      the patch above.

diff --git a/patches/dev300/apply b/patches/dev300/apply
index ea8dcbb..9e0aab7 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -2521,7 +2521,6 @@ autocorrect-accidental-caps-lock-sc.diff
 autocorrect-accidental-caps-lock-sw.diff
 autocorrect-accidental-caps-lock-svx.diff
 autocorrect-accidental-caps-lock-vcl.diff
-autocorrect-accidental-caps-lock-vcl-xkb.diff
 
 # cbosdo01 cws: add non breaking spaces before :;?! in french text
 cws-cbosdo01.diff, cbosdo
diff --git a/patches/dev300/autocorrect-accidental-caps-lock-vcl-xkb.diff b/patches/dev300/autocorrect-accidental-caps-lock-vcl-xkb.diff
deleted file mode 100644
index cfd544b..0000000
--- a/patches/dev300/autocorrect-accidental-caps-lock-vcl-xkb.diff
+++ /dev/null
@@ -1,90 +0,0 @@
-diff --git vcl/unx/source/app/saldisp.cxx vcl/unx/source/app/saldisp.cxx
-index 8ef3762..cbcb0e6 100644
---- vcl/unx/source/app/saldisp.cxx
-+++ vcl/unx/source/app/saldisp.cxx
-@@ -60,7 +60,7 @@
- #define XK_KOREAN
- #endif
- #include <X11/keysym.h>
--
-+#include <X11/XKBlib.h>
- #include <X11/Xatom.h>
- 
- #ifdef USE_XINERAMA
-@@ -81,12 +81,6 @@ Status XineramaGetInfo(Display*, int, XRectangle*, unsigned char*, int*);
- #endif
- #endif
- 
--#if __XTestExtension__
--#include <X11/extensions/XTest.h>
--#include <X11/extensions/XKB.h>
--#include <X11/XKBlib.h>
--#endif
--
- #include <tools/postx.h>
- 
- #include <salunx.h>
-@@ -1052,16 +1046,58 @@ void SalDisplay::Beep() const
- // Keyboard
- // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- 
-+namespace {
-+
-+bool InitXkb(Display* dpy)
-+{
-+    int nOpcode, nEvent, nError;
-+    int nXkbMajor = XkbMajorVersion;
-+    int nXkbMinor = XkbMinorVersion;
-+
-+    if (!XkbLibraryVersion(&nXkbMajor, &nXkbMinor))
-+        return false;
-+
-+    return XkbQueryExtension(
-+        dpy, &nOpcode, &nEvent, &nError, &nXkbMajor, &nXkbMinor);
-+}
-+
-+unsigned int GetKeySymMask(Display* dpy, KeySym nKeySym)
-+{
-+    int nMask = 0;
-+    XModifierKeymap* pXmkMap = XGetModifierMapping(dpy);
-+    KeyCode nKeyCode = XKeysymToKeycode(dpy, nKeySym);
-+    if (nKeyCode == NoSymbol)
-+        return 0;
-+
-+    for (int i = 0; i < 8; ++i)
-+    {
-+        KeyCode nThisKeyCode = pXmkMap->modifiermap[pXmkMap->max_keypermod*i];
-+        if (nThisKeyCode == nKeyCode)
-+            nMask = 1 << i;
-+	}
-+    XFreeModifiermap(pXmkMap);
-+    return nMask;
-+}
-+
-+}
-+
- void SalDisplay::SimulateKeyPress( USHORT nKeyCode )
- {
--#if __XTestExtension__
-     if (nKeyCode == KEY_CAPSLOCK)
-     {
--        XLIB_KeyCode keyCaps = XKeysymToKeycode(GetDisplay(), XK_Caps_Lock);
--        if (XTestFakeKeyEvent(GetDisplay(), keyCaps, true, CurrentTime))
--            XTestFakeKeyEvent(GetDisplay(), keyCaps, false, CurrentTime);
-+        Display* dpy = GetDisplay();
-+        if (!InitXkb(dpy))
-+            return;
-+
-+        unsigned int nMask = GetKeySymMask(dpy, XK_Caps_Lock);
-+        XkbStateRec xkbState;
-+        XkbGetState(dpy, XkbUseCoreKbd, &xkbState);
-+        unsigned int nCapsLockState = xkbState.locked_mods & nMask;
-+        if (nCapsLockState)
-+            XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, 0);
-+        else
-+            XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, nMask);
-     }
--#endif
- }
- 
- USHORT SalDisplay::GetIndicatorState() const
diff --git a/patches/dev300/autocorrect-accidental-caps-lock-vcl.diff b/patches/dev300/autocorrect-accidental-caps-lock-vcl.diff
index 603af41..699bcb7 100644
--- a/patches/dev300/autocorrect-accidental-caps-lock-vcl.diff
+++ b/patches/dev300/autocorrect-accidental-caps-lock-vcl.diff
@@ -1,7 +1,8 @@
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/inc/salframe.h vcl/aqua/inc/salframe.h
---- vcl.clean/aqua/inc/salframe.h	2008-01-14 11:13:04.000000000 -0500
-+++ vcl/aqua/inc/salframe.h	2008-02-28 12:57:14.000000000 -0500
-@@ -146,6 +146,8 @@ public:
+diff --git vcl/aqua/inc/salframe.h vcl/aqua/inc/salframe.h
+index f853328..5eb6f43 100644
+--- vcl/aqua/inc/salframe.h
++++ vcl/aqua/inc/salframe.h
+@@ -154,6 +154,8 @@ public:
      virtual void				Beep( SoundType eSoundType );
      virtual const SystemEnvData*	GetSystemData() const;
      virtual SalPointerState		GetPointerState();
@@ -10,10 +11,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/
      virtual void				SetParent( SalFrame* pNewParent );
      virtual bool				SetPluginParent( SystemParentData* pNewParent );
      virtual void                SetExtendedFrameStyle( SalExtStyle );
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/source/window/salframe.cxx vcl/aqua/source/window/salframe.cxx
---- vcl.clean/aqua/source/window/salframe.cxx	2008-01-14 11:18:51.000000000 -0500
-+++ vcl/aqua/source/window/salframe.cxx	2008-02-28 12:57:39.000000000 -0500
-@@ -1197,6 +1197,17 @@ SalPointerState	AquaSalFrame::GetPointer
+diff --git vcl/aqua/source/window/salframe.cxx vcl/aqua/source/window/salframe.cxx
+index 468d7ad..ff635ff 100644
+--- vcl/aqua/source/window/salframe.cxx
++++ vcl/aqua/source/window/salframe.cxx
+@@ -1379,6 +1379,17 @@ SalPointerState	AquaSalFrame::GetPointerState()
      return state;
  }
  
@@ -31,9 +33,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/
  bool AquaSalFrame::SetPluginParent( SystemParentData* pNewParent )
  {
      // plugin parent may be killed unexpectedly by
+diff --git vcl/inc/vcl/keycodes.hxx vcl/inc/vcl/keycodes.hxx
+index 74f6deb..8721c21 100644
 --- vcl/inc/vcl/keycodes.hxx
 +++ vcl/inc/vcl/keycodes.hxx
-@@ -171,6 +171,10 @@
+@@ -161,6 +161,10 @@
  #define KEY_BRACKETLEFT ((USHORT)::com::sun::star::awt::Key::BRACKETLEFT)
  #define KEY_BRACKETRIGHT ((USHORT)::com::sun::star::awt::Key::BRACKETRIGHT)
  
@@ -44,7 +48,7 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/
  #define KEY_CODE		((USHORT)0x0FFF)
  
  // Modifier-Tasten
-@@ -200,4 +204,12 @@
+@@ -193,4 +197,12 @@
  #define MOUSE_MIDDLE	((USHORT)0x0002)
  #define MOUSE_RIGHT 	((USHORT)0x0004)
  
@@ -57,10 +61,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/aqua/
 +#define INDICATOR_SCROLLLOCK    0x0004
 +
  #endif // _SV_KEYCODES_HXX
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/inc/vcl/salframe.hxx vcl/inc/vcl/salframe.hxx
---- vcl.clean/inc/vcl/salframe.hxx	2007-10-09 11:17:45.000000000 -0400
-+++ vcl/inc/vcl/salframe.hxx	2008-02-28 11:21:03.000000000 -0500
-@@ -272,6 +272,15 @@ public:
+diff --git vcl/inc/vcl/salframe.hxx vcl/inc/vcl/salframe.hxx
+index 8b2f3a2..5a06d0a 100644
+--- vcl/inc/vcl/salframe.hxx
++++ vcl/inc/vcl/salframe.hxx
+@@ -252,6 +252,15 @@ public:
  
      virtual SalPointerState		GetPointerState() = 0;
  
@@ -76,14 +81,14 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/inc/v
      // set new parent window
      virtual void				SetParent( SalFrame* pNewParent ) = 0;
      // reparent window to act as a plugin; implementation
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/inc/vcl/window.hxx vcl/inc/vcl/window.hxx
---- vcl.clean/inc/vcl/window.hxx	2008-01-14 08:04:14.000000000 -0500
-+++ vcl/inc/vcl/window.hxx	2008-02-28 02:11:44.000000000 -0500
-@@ -1121,6 +1121,22 @@ public:
-     /* mark Window for deletion in top of event queue
+diff --git vcl/inc/vcl/window.hxx vcl/inc/vcl/window.hxx
+index 540906c..55f9d0b 100644
+--- vcl/inc/vcl/window.hxx
++++ vcl/inc/vcl/window.hxx
+@@ -1141,6 +1141,22 @@ public:
      */
      void doLazyDelete();
-+
+ 
 +    //-------------------------------------
 +    //  Keyboard access functions
 +    //-------------------------------------
@@ -99,13 +104,15 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/inc/v
 +    USHORT GetIndicatorState() const;
 +
 +    void SimulateKeyPress( USHORT nKeyCode ) const;
- 
++
      virtual XubString GetSurroundingText() const;
      virtual Selection GetSurroundingTextSelection() const;
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/os2/inc/salframe.h vcl/os2/inc/salframe.h
---- vcl.clean/os2/inc/salframe.h	2007-11-02 08:44:25.000000000 -0400
-+++ vcl/os2/inc/salframe.h	2008-02-28 13:00:17.000000000 -0500
-@@ -168,6 +168,8 @@ public:
+ };
+diff --git vcl/os2/inc/salframe.h vcl/os2/inc/salframe.h
+index 1887a2c..718fd23 100644
+--- vcl/os2/inc/salframe.h
++++ vcl/os2/inc/salframe.h
+@@ -155,6 +155,8 @@ public:
      virtual void				Beep( SoundType eSoundType );
      virtual const SystemEnvData*	GetSystemData() const;
      virtual SalPointerState		GetPointerState();
@@ -114,10 +121,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/os2/i
      virtual void				SetParent( SalFrame* pNewParent );
      virtual bool				SetPluginParent( SystemParentData* pNewParent );
      virtual void                SetBackgroundBitmap( SalBitmap* );
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/os2/source/window/salframe.cxx vcl/os2/source/window/salframe.cxx
---- vcl.clean/os2/source/window/salframe.cxx	2007-11-02 08:51:30.000000000 -0400
-+++ vcl/os2/source/window/salframe.cxx	2008-02-28 13:01:25.000000000 -0500
-@@ -2335,6 +2335,19 @@ SalFrame::SalPointerState Os2SalFrame::G
+diff --git vcl/os2/source/window/salframe.cxx vcl/os2/source/window/salframe.cxx
+index fb53876..31e063d 100644
+--- vcl/os2/source/window/salframe.cxx
++++ vcl/os2/source/window/salframe.cxx
+@@ -2357,6 +2357,19 @@ SalFrame::SalPointerState Os2SalFrame::GetPointerState()
  
  // -----------------------------------------------------------------------
  
@@ -137,10 +145,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/os2/s
  void Os2SalFrame::SetBackgroundBitmap( SalBitmap* )
  {
  }
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/source/window/window.cxx vcl/source/window/window.cxx
---- vcl.clean/source/window/window.cxx	2008-01-29 11:18:41.000000000 -0500
-+++ vcl/source/window/window.cxx	2008-02-28 14:00:43.000000000 -0500
-@@ -4797,6 +4797,16 @@ void Window::doLazyDelete()
+diff --git vcl/source/window/window.cxx vcl/source/window/window.cxx
+index 5b3cf91..e4573f2 100644
+--- vcl/source/window/window.cxx
++++ vcl/source/window/window.cxx
+@@ -4770,6 +4770,16 @@ void Window::doLazyDelete()
      vcl::LazyDeletor<Window>::Delete( this );
  }
  
@@ -157,10 +166,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/sourc
  // -----------------------------------------------------------------------
  
  void Window::MouseMove( const MouseEvent& rMEvt )
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/gtk/window/gtkframe.cxx vcl/unx/gtk/window/gtkframe.cxx
---- vcl.clean/unx/gtk/window/gtkframe.cxx	2008-01-29 11:21:11.000000000 -0500
-+++ vcl/unx/gtk/window/gtkframe.cxx	2008-02-28 14:02:01.000000000 -0500
-@@ -2068,6 +2068,18 @@ SalFrame::SalPointerState GtkSalFrame::G
+diff --git vcl/unx/gtk/window/gtkframe.cxx vcl/unx/gtk/window/gtkframe.cxx
+index 027d121..75cd135 100644
+--- vcl/unx/gtk/window/gtkframe.cxx
++++ vcl/unx/gtk/window/gtkframe.cxx
+@@ -2250,6 +2250,18 @@ SalFrame::SalPointerState GtkSalFrame::GetPointerState()
      return aState;
  }
  
@@ -179,10 +189,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/g
  void GtkSalFrame::SetInputContext( SalInputContext* pContext )
  {
      if( ! pContext )
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/headless/svpframe.cxx vcl/unx/headless/svpframe.cxx
---- vcl.clean/unx/headless/svpframe.cxx	2007-08-03 10:09:51.000000000 -0400
-+++ vcl/unx/headless/svpframe.cxx	2008-02-28 11:27:06.000000000 -0500
-@@ -396,6 +396,17 @@ SalFrame::SalPointerState SvpSalFrame::G
+diff --git vcl/unx/headless/svpframe.cxx vcl/unx/headless/svpframe.cxx
+index a82827f..4bbaaf6 100644
+--- vcl/unx/headless/svpframe.cxx
++++ vcl/unx/headless/svpframe.cxx
+@@ -391,6 +391,17 @@ SalFrame::SalPointerState SvpSalFrame::GetPointerState()
      return aState;
  }
  
@@ -200,10 +211,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/h
  void SvpSalFrame::SetParent( SalFrame* pNewParent )
  {
      if( m_pParent )
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/headless/svpframe.hxx vcl/unx/headless/svpframe.hxx
---- vcl.clean/unx/headless/svpframe.hxx	2007-07-24 06:27:17.000000000 -0400
-+++ vcl/unx/headless/svpframe.hxx	2008-02-28 11:26:40.000000000 -0500
-@@ -119,6 +119,8 @@ public:
+diff --git vcl/unx/headless/svpframe.hxx vcl/unx/headless/svpframe.hxx
+index 29d3da6..9077f24 100644
+--- vcl/unx/headless/svpframe.hxx
++++ vcl/unx/headless/svpframe.hxx
+@@ -115,6 +115,8 @@ public:
      virtual void				Beep( SoundType eSoundType );
      virtual const SystemEnvData*	GetSystemData() const;
      virtual SalPointerState     GetPointerState();
@@ -212,10 +224,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/h
      virtual void				SetParent( SalFrame* pNewParent );
      virtual bool				SetPluginParent( SystemParentData* pNewParent );
      virtual void                SetBackgroundBitmap( SalBitmap* pBitmap );
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/inc/plugins/gtk/gtkframe.hxx vcl/unx/inc/plugins/gtk/gtkframe.hxx
---- vcl.clean/unx/inc/plugins/gtk/gtkframe.hxx	2008-01-29 11:21:43.000000000 -0500
-+++ vcl/unx/inc/plugins/gtk/gtkframe.hxx	2008-02-28 11:22:22.000000000 -0500
-@@ -364,6 +364,10 @@ public:
+diff --git vcl/unx/inc/plugins/gtk/gtkframe.hxx vcl/unx/inc/plugins/gtk/gtkframe.hxx
+index f55e5ec..58f7c26 100644
+--- vcl/unx/inc/plugins/gtk/gtkframe.hxx
++++ vcl/unx/inc/plugins/gtk/gtkframe.hxx
+@@ -368,6 +368,10 @@ public:
      // get current modifier and button mask
      virtual SalPointerState     GetPointerState();
  
@@ -226,25 +239,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/i
      // set new parent window
      virtual void                SetParent( SalFrame* pNewParent );
      // reparent window to act as a plugin; implementation
---- tools/inc/tools/prex.h
-+++ tools/inc/tools/prex.h
-@@ -64,6 +64,12 @@ extern "C" {
- #define __XKeyboardExtension__ 0
- #endif
- 
-+#if defined(LINUX) || defined(SOLARIS) || defined(FREEBSD)
-+#define __XTestExtension__ 1
-+#else
-+#define __XTestExtension__ 0
-+#endif
-+
- #include <X11/X.h>
- #include <X11/Xlib.h>
- #include <X11/Xutil.h>
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/inc/saldisp.hxx vcl/unx/inc/saldisp.hxx
---- vcl.clean/unx/inc/saldisp.hxx	2008-01-29 11:21:27.000000000 -0500
-+++ vcl/unx/inc/saldisp.hxx	2008-02-28 10:16:38.000000000 -0500
-@@ -457,6 +457,8 @@ public:
+diff --git vcl/unx/inc/saldisp.hxx vcl/unx/inc/saldisp.hxx
+index 859f926..89fc11b 100644
+--- vcl/unx/inc/saldisp.hxx
++++ vcl/unx/inc/saldisp.hxx
+@@ -446,6 +446,8 @@ public:
      void			Beep() const;
  
      void			ModifierMapping();
@@ -253,10 +252,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/i
      String			GetKeyNameFromKeySym( KeySym keysym ) const;
      XubString		GetKeyName( USHORT nKeyCode ) const;
      USHORT			GetKeyCode( KeySym keysym, char*pcPrintable ) const;
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/inc/salframe.h vcl/unx/inc/salframe.h
---- vcl.clean/unx/inc/salframe.h	2007-08-30 09:56:30.000000000 -0400
-+++ vcl/unx/inc/salframe.h	2008-02-28 11:25:36.000000000 -0500
-@@ -272,6 +272,8 @@ public:
+diff --git vcl/unx/inc/salframe.h vcl/unx/inc/salframe.h
+index f26e4ef..38c2897 100644
+--- vcl/unx/inc/salframe.h
++++ vcl/unx/inc/salframe.h
+@@ -255,6 +255,8 @@ public:
      virtual void				Beep( SoundType eSoundType );
      virtual const SystemEnvData*	GetSystemData() const;
      virtual SalPointerState     GetPointerState();
@@ -265,36 +265,76 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/i
      virtual void				SetParent( SalFrame* pNewParent );
      virtual bool				SetPluginParent( SystemParentData* pNewParent );
      virtual void                SetBackgroundBitmap( SalBitmap* pBitmap );
+diff --git vcl/unx/source/app/saldisp.cxx vcl/unx/source/app/saldisp.cxx
+index 451e7d5..efc9add 100644
 --- vcl/unx/source/app/saldisp.cxx
 +++ vcl/unx/source/app/saldisp.cxx
-@@ -86,6 +86,12 @@ Status XineramaGetInfo(Display*, int, XR
- #endif
+@@ -60,7 +60,7 @@
+ #define XK_KOREAN
  #endif
- 
-+#if __XTestExtension__
-+#include <X11/extensions/XTest.h>
-+#include <X11/extensions/XKB.h>
+ #include <X11/keysym.h>
+-
 +#include <X11/XKBlib.h>
-+#endif
-+
- #include <tools/postx.h>
+ #include <X11/Xatom.h>
  
- #include <salunx.h>
-@@ -1074,6 +1078,35 @@ void SalDisplay::Beep() const
+ #ifdef USE_XINERAMA
+@@ -1045,6 +1045,77 @@ void SalDisplay::Beep() const
  
  // Keyboard
  // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 +
++namespace {
++
++bool InitXkb(Display* dpy)
++{
++    int nOpcode, nEvent, nError;
++    int nXkbMajor = XkbMajorVersion;
++    int nXkbMinor = XkbMinorVersion;
++
++    if (!XkbLibraryVersion(&nXkbMajor, &nXkbMinor))
++        return false;
++
++    return XkbQueryExtension(
++        dpy, &nOpcode, &nEvent, &nError, &nXkbMajor, &nXkbMinor);
++}
++
++unsigned int GetKeySymMask(Display* dpy, KeySym nKeySym)
++{
++    int nMask = 0;
++    XModifierKeymap* pXmkMap = XGetModifierMapping(dpy);
++    KeyCode nKeyCode = XKeysymToKeycode(dpy, nKeySym);
++    if (nKeyCode == NoSymbol)
++        return 0;
++
++    for (int i = 0; i < 8; ++i)
++    {
++        KeyCode nThisKeyCode = pXmkMap->modifiermap[pXmkMap->max_keypermod*i];
++        if (nThisKeyCode == nKeyCode)
++            nMask = 1 << i;
++    }
++    XFreeModifiermap(pXmkMap);
++    return nMask;
++}
++
++}
++
 +void SalDisplay::SimulateKeyPress( USHORT nKeyCode )
 +{
-+#if __XTestExtension__
 +    if (nKeyCode == KEY_CAPSLOCK)
 +    {
-+        XLIB_KeyCode keyCaps = XKeysymToKeycode(GetDisplay(), XK_Caps_Lock);
-+        if (XTestFakeKeyEvent(GetDisplay(), keyCaps, true, CurrentTime))
-+            XTestFakeKeyEvent(GetDisplay(), keyCaps, false, CurrentTime);
++        Display* dpy = GetDisplay();
++        if (!InitXkb(dpy))
++            return;
++
++        unsigned int nMask = GetKeySymMask(dpy, XK_Caps_Lock);
++        XkbStateRec xkbState;
++        XkbGetState(dpy, XkbUseCoreKbd, &xkbState);
++        unsigned int nCapsLockState = xkbState.locked_mods & nMask;
++        if (nCapsLockState)
++            XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, 0);
++        else
++            XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, nMask);
 +    }
-+#endif
 +}
 +
 +USHORT SalDisplay::GetIndicatorState() const
@@ -315,11 +355,12 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/i
 +
  String SalDisplay::GetKeyNameFromKeySym( KeySym nKeySym ) const
  {
- 	String aRet;
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/source/window/salframe.cxx vcl/unx/source/window/salframe.cxx
---- vcl.clean/unx/source/window/salframe.cxx	2008-01-30 04:12:30.000000000 -0500
-+++ vcl/unx/source/window/salframe.cxx	2008-02-28 11:26:21.000000000 -0500
-@@ -2757,6 +2757,18 @@ SalFrame::SalPointerState X11SalFrame::G
+     String aRet;
+diff --git vcl/unx/source/window/salframe.cxx vcl/unx/source/window/salframe.cxx
+index 7e61602..30fb2f0 100644
+--- vcl/unx/source/window/salframe.cxx
++++ vcl/unx/source/window/salframe.cxx
+@@ -2848,6 +2848,18 @@ SalFrame::SalPointerState X11SalFrame::GetPointerState()
      return aState;
  }
  
@@ -337,11 +378,12 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/unx/s
 +
  long X11SalFrame::HandleMouseEvent( XEvent *pEvent )
  {
- 	SalMouseEvent		aMouseEvt;
-diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/win/inc/salframe.h vcl/win/inc/salframe.h
---- vcl.clean/win/inc/salframe.h	2007-07-24 06:33:22.000000000 -0400
-+++ vcl/win/inc/salframe.h	2008-02-28 12:58:19.000000000 -0500
-@@ -149,6 +149,8 @@ public:
+     SalMouseEvent		aMouseEvt;
+diff --git vcl/win/inc/salframe.h vcl/win/inc/salframe.h
+index 23469b4..a8576f2 100644
+--- vcl/win/inc/salframe.h
++++ vcl/win/inc/salframe.h
+@@ -138,6 +138,8 @@ public:
      virtual void				Beep( SoundType eSoundType );
      virtual const SystemEnvData*	GetSystemData() const;
      virtual SalPointerState		GetPointerState();
@@ -350,9 +392,11 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/win/i
      virtual void				SetParent( SalFrame* pNewParent );
      virtual bool				SetPluginParent( SystemParentData* pNewParent );
      virtual void                SetBackgroundBitmap( SalBitmap* );
---- vcl.clean/win/source/window/salframe.cxx	2008-01-15 08:25:15.000000000 -0500
-+++ vcl/win/source/window/salframe.cxx	2008-03-01 21:12:23.000000000 -0500
-@@ -3177,6 +3177,41 @@ SalFrame::SalPointerState WinSalFrame::G
+diff --git vcl/win/source/window/salframe.cxx vcl/win/source/window/salframe.cxx
+index 02152f8..0e28d75 100644
+--- vcl/win/source/window/salframe.cxx
++++ vcl/win/source/window/salframe.cxx
+@@ -3194,6 +3194,41 @@ SalFrame::SalPointerState WinSalFrame::GetPointerState()
  
  // -----------------------------------------------------------------------
  
@@ -394,14 +438,3 @@ diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=vcl.vpj vcl.clean/win/i
  void WinSalFrame::SetBackgroundBitmap( SalBitmap* )
  {
  }
---- vcl/util/makefile.mk
-+++ vcl/util/makefile.mk
-@@ -323,7 +323,7 @@
- 
- .IF "$(GUIBASE)"=="unx"
- 
--SHL2STDLIBS += -lXext -lSM -lICE -lX11
-+SHL2STDLIBS += -lXext -lXtst -lSM -lICE -lX11
- .IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD" && "$(OS)"!="NETBSD"
- # needed by salprnpsp.cxx
- SHL2STDLIBS+= -ldl


More information about the ooo-build-commit mailing list