From 011bcd1ea1e8ce10f6b9946d8d44d05a59387b8c Mon Sep 17 00:00:00 2001
From: RĂ¼diger Timm <rt@openoffice.org>
Date: Wed, 29 Oct 2008 09:25:50 +0000
Subject: CWS-TOOLING: integrate CWS vcl95

---
 vcl/source/app/settings.cxx   |  6 +++
 vcl/source/control/edit.cxx   | 19 ++++++++++
 vcl/source/gdi/bitmap.cxx     |  3 ++
 vcl/source/gdi/outdev3.cxx    |  2 +-
 vcl/source/window/window.cxx  | 10 +++++
 vcl/source/window/winproc.cxx | 87 ++++++++++++++++++++++++++++++++++++++++++-
 6 files changed, 125 insertions(+), 2 deletions(-)

(limited to 'vcl/source')

diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 47577ecc4260..12213c25a64f 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -485,6 +485,8 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
     maWindowColor( rData.maWindowColor ),
     maWindowTextColor( rData.maWindowTextColor ),
     maWorkspaceColor( rData.maWorkspaceColor ),
+    maActiveTabColor( rData.maActiveTabColor ),
+    maInactiveTabColor( rData.maInactiveTabColor ),
     maAppFont( rData.maAppFont ),
     maHelpFont( rData.maAppFont ),
     maTitleFont( rData.maTitleFont ),
@@ -599,6 +601,8 @@ void ImplStyleData::SetStandardStyles()
     maMenuHighlightTextColor    = Color( COL_WHITE );
     maHighlightColor            = Color( COL_BLUE );
     maHighlightTextColor        = Color( COL_WHITE );
+    maActiveTabColor            = Color( COL_WHITE );
+    maInactiveTabColor          = Color( COL_LIGHTGRAY );
     maDisableColor              = Color( COL_GRAY );
     maHelpColor                 = Color( 0xFF, 0xFF, 0xE0 );
     maHelpTextColor             = Color( COL_BLACK );
@@ -1028,6 +1032,8 @@ BOOL StyleSettings::operator ==( const StyleSettings& rSet ) const
          (mpData->maMenuHighlightTextColor  == rSet.mpData->maMenuHighlightTextColor)   &&
          (mpData->maHighlightColor          == rSet.mpData->maHighlightColor)           &&
          (mpData->maHighlightTextColor      == rSet.mpData->maHighlightTextColor)       &&
+         (mpData->maActiveTabColor          == rSet.mpData->maActiveTabColor)           &&
+         (mpData->maInactiveTabColor        == rSet.mpData->maInactiveTabColor)         &&
          (mpData->maDisableColor            == rSet.mpData->maDisableColor)             &&
          (mpData->maHelpColor               == rSet.mpData->maHelpColor)                &&
          (mpData->maHelpTextColor           == rSet.mpData->maHelpTextColor)            &&
diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx
index 4ed4b0968116..8754aaabf3a9 100644
--- a/vcl/source/control/edit.cxx
+++ b/vcl/source/control/edit.cxx
@@ -2221,6 +2221,12 @@ void Edit::Command( const CommandEvent& rCEvt )
             SetCursorRect();
         }
     }
+    else if ( rCEvt.GetCommand() == COMMAND_SELECTIONCHANGE )
+    {
+        const CommandSelectionChangeData *pData = rCEvt.GetSelectionChangeData();
+        Selection aSelection( pData->GetStart(), pData->GetEnd() );
+        SetSelection(aSelection);
+    }
     else
         Control::Command( rCEvt );
 }
@@ -2981,3 +2987,16 @@ void ImplSubEdit::Modify()
 {
     GetParent()->Modify();
 }
+
+XubString Edit::GetSurroundingText() const
+{
+  if ( mpSubEdit )
+    return mpSubEdit->GetSurroundingText();
+  else
+    return maText;
+}
+
+Selection Edit::GetSurroundingTextSelection() const
+{
+  return GetSelection();
+}
diff --git a/vcl/source/gdi/bitmap.cxx b/vcl/source/gdi/bitmap.cxx
index 2d12a67efedf..572946f71690 100644
--- a/vcl/source/gdi/bitmap.cxx
+++ b/vcl/source/gdi/bitmap.cxx
@@ -513,6 +513,9 @@ void Bitmap::ReleaseAccess( BitmapReadAccess* pBitmapAccess )
 
 BOOL Bitmap::Erase( const Color& rFillColor )
 {
+    if( !(*this) )
+        return TRUE;
+
     BitmapWriteAccess*  pWriteAcc = AcquireWriteAccess();
     BOOL                bRet = FALSE;
 
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index cb5357fb6a3e..dafb288f4b68 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -7173,7 +7173,7 @@ void OutputDevice::DrawCtrlText( const Point& rPos, const XubString& rStr,
     long        nMnemonicX = 0;
     long        nMnemonicY = 0;
     long        nMnemonicWidth = 0;
-    if ( nStyle & TEXT_DRAW_MNEMONIC )
+    if ( (nStyle & TEXT_DRAW_MNEMONIC) && nLen > 1 )
     {
         aStr = GetNonMnemonicString( aStr, nMnemonicPos );
         if ( nMnemonicPos != STRING_NOTFOUND )
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 8116cbf04088..3fdc789bf781 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -9827,3 +9827,13 @@ void Window::PaintToDevice( OutputDevice* pDev, const Point& rPos, const Size& /
     pDev->Pop();
 }
 
+XubString Window::GetSurroundingText() const
+{
+  return XubString::EmptyString();
+}
+
+Selection Window::GetSurroundingTextSelection() const
+{
+  return Selection( 0, 0 );
+}
+
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 89007a3421da..56fcdee394d3 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -2289,6 +2289,78 @@ static long ImplHandleShowDialog( Window* pWindow, int nDialogId )
 
 // -----------------------------------------------------------------------
 
+static void ImplHandleSurroundingTextRequest( Window *pWindow,
+                          XubString& rText,
+                          Selection &rSelRange )
+{
+    Window* pChild = ImplGetKeyInputWindow( pWindow );
+
+    if ( !pChild )
+    {
+    rText = XubString::EmptyString();
+    rSelRange.setMin( 0 );
+    rSelRange.setMax( 0 );
+    }
+    else
+    {
+
+    rText = pChild->GetSurroundingText();
+    Selection aSel = pChild->GetSurroundingTextSelection();
+    rSelRange.setMin( aSel.Min() );
+    rSelRange.setMax( aSel.Max() );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+static void ImplHandleSalSurroundingTextRequest( Window *pWindow,
+                         SalSurroundingTextRequestEvent *pEvt )
+{
+    Selection aSelRange;
+    ImplHandleSurroundingTextRequest( pWindow, pEvt->maText, aSelRange );
+
+    aSelRange.Justify();
+
+    if( aSelRange.Min() < 0 )
+        pEvt->mnStart = 0;
+    else if( aSelRange.Min() > pEvt->maText.Len() )
+        pEvt->mnStart = pEvt->maText.Len();
+    else
+        pEvt->mnStart = aSelRange.Min();
+
+    if( aSelRange.Max() < 0 )
+        pEvt->mnStart = 0;
+    else if( aSelRange.Max() > pEvt->maText.Len() )
+        pEvt->mnEnd = pEvt->maText.Len();
+    else
+        pEvt->mnEnd = aSelRange.Max();
+}
+
+// -----------------------------------------------------------------------
+
+static void ImplHandleSurroundingTextSelectionChange( Window *pWindow,
+                              ULONG nStart,
+                              ULONG nEnd )
+{
+    Window* pChild = ImplGetKeyInputWindow( pWindow );
+    if( pChild )
+    {
+        CommandSelectionChangeData data( nStart, nEnd );
+        ImplCallCommand( pChild, COMMAND_SELECTIONCHANGE, &data );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+static void ImplHandleStartReconversion( Window *pWindow )
+{
+    Window* pChild = ImplGetKeyInputWindow( pWindow );
+    if( pChild )
+    ImplCallCommand( pChild, COMMAND_PREPARERECONVERSION );
+}
+
+// -----------------------------------------------------------------------
+
 long ImplWindowFrameProc( Window* pWindow, SalFrame* /*pFrame*/,
                           USHORT nEvent, const void* pEvent )
 {
@@ -2521,7 +2593,20 @@ long ImplWindowFrameProc( Window* pWindow, SalFrame* /*pFrame*/,
                 nRet = ImplHandleShowDialog( pWindow, nDialogID );
             }
             break;
-
+        case SALEVENT_SURROUNDINGTEXTREQUEST:
+            ImplHandleSalSurroundingTextRequest( pWindow, (SalSurroundingTextRequestEvent*)pEvent );
+            break;
+        case SALEVENT_SURROUNDINGTEXTSELECTIONCHANGE:
+        {
+            SalSurroundingTextSelectionChangeEvent* pEvt
+             = (SalSurroundingTextSelectionChangeEvent*)pEvent;
+            ImplHandleSurroundingTextSelectionChange( pWindow,
+                              pEvt->mnStart,
+                              pEvt->mnEnd );
+        }
+        case SALEVENT_STARTRECONVERSION:
+            ImplHandleStartReconversion( pWindow );
+            break;
 #ifdef DBG_UTIL
         default:
             DBG_ERROR1( "ImplWindowFrameProc(): unknown event (%lu)", (ULONG)nEvent );
-- 
cgit