[ooo-build-commit] Branch 'ooo/OOO320' - 4 commits - transex3/source vcl/aqua vcl/source vcl/unx

Jan Holesovsky kendy at kemper.freedesktop.org
Fri Dec 11 18:51:22 PST 2009


 transex3/source/help/HelpLinker.cxx            |   64 ++++++++++++++-----------
 transex3/source/help/compilehelp.hxx           |    1 
 vcl/aqua/inc/salframeview.h                    |    6 ++
 vcl/aqua/source/a11y/documentfocuslistener.cxx |    4 -
 vcl/aqua/source/window/salframeview.mm         |   35 +++++++++++++
 vcl/source/gdi/pdfwriter_impl.hxx              |    3 +
 vcl/unx/gtk/a11y/atktext.cxx                   |   20 +++++--
 vcl/unx/gtk/window/gtkframe.cxx                |    5 +
 vcl/unx/inc/plugins/kde/kdedata.hxx            |    2 
 vcl/unx/inc/salframe.h                         |    4 +
 vcl/unx/kde/salnativewidgets-kde.cxx           |    5 +
 vcl/unx/kde4/KDESalFrame.cxx                   |    5 +
 vcl/unx/kde4/KDESalFrame.hxx                   |    2 
 vcl/unx/source/printergfx/glyphset.cxx         |   38 ++++++++++++--
 vcl/unx/source/window/salframe.cxx             |   10 ++-
 15 files changed, 150 insertions(+), 54 deletions(-)

New commits:
commit bd01682b18fc74d02f941ae0a5640973067844b2
Author: Oliver Bolte <obo at openoffice.org>
Date:   Fri Dec 11 12:15:00 2009 +0000

    CWS-TOOLING: integrate CWS calc32stopper6
    2009-12-09 15:52:59 +0100 ab  r277768 : #i107075# Check any type in getTextMarkup()
    2009-11-24 19:33:17 +0100 dr  r277618 : #i107170# use current script for default cell style
    2009-11-24 14:58:30 +0100 nn  r277610 : #i107151# Compare/CompareMat: call Pop for svEmptyCell
    2009-11-24 14:41:47 +0100 dr  r277609 : #i107075# check interface pointer, XAxccessibleTextMarkup is not implemented in Calc

diff --git a/vcl/unx/gtk/a11y/atktext.cxx b/vcl/unx/gtk/a11y/atktext.cxx
index 201c651..0a97e5b 100644
--- a/vcl/unx/gtk/a11y/atktext.cxx
+++ b/vcl/unx/gtk/a11y/atktext.cxx
@@ -187,13 +187,21 @@ static accessibility::XAccessibleTextMarkup*
         if( !pWrap->mpTextMarkup && pWrap->mpContext )
         {
             uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleTextMarkup::static_type(NULL) );
-            pWrap->mpTextMarkup = reinterpret_cast< accessibility::XAccessibleTextMarkup * > (any.pReserved);
-            pWrap->mpTextMarkup->acquire();
+            /* Since this not a dedicated interface in Atk and thus has not
+             * been queried during wrapper initialization, we need to check
+             * the return value here.
+             */
+            if( typelib_TypeClass_INTERFACE == any.pType->eTypeClass )
+            {
+                pWrap->mpTextMarkup = reinterpret_cast< accessibility::XAccessibleTextMarkup * > (any.pReserved);
+                if( pWrap->mpTextMarkup )
+                    pWrap->mpTextMarkup->acquire();
+            }
         }
-        
+
         return pWrap->mpTextMarkup;
     }
-    
+
     return NULL;
 }
 
@@ -490,7 +498,7 @@ text_wrapper_get_run_attributes( AtkText        *text,
         accessibility::XAccessibleTextMarkup* pTextMarkup = getTextMarkup( text );
         if( pTextMarkup )
         {
-            uno::Sequence< accessibility::TextSegment > aTextSegmentSeq = 
+            uno::Sequence< accessibility::TextSegment > aTextSegmentSeq =
                 pTextMarkup->getTextMarkupAtIndex( offset, com::sun::star::text::TextMarkupType::SPELLCHECK );
             if( aTextSegmentSeq.getLength() > 0 )
             {
@@ -501,7 +509,7 @@ text_wrapper_get_run_attributes( AtkText        *text,
                 // Get attribute run here if it hasn't been done before
                 if( !bOffsetsAreValid )
                 {
-                    accessibility::TextSegment aAttributeTextSegment = 
+                    accessibility::TextSegment aAttributeTextSegment =
                         pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN);
                     *start_offset = aAttributeTextSegment.SegmentStart;
                     *end_offset = aAttributeTextSegment.SegmentEnd;
commit 8405218997f129311af6dc197f29d3c4e050a1e3
Author: Oliver Bolte <obo at openoffice.org>
Date:   Fri Dec 11 11:17:18 2009 +0000

    CWS-TOOLING: integrate CWS fwk131
    2009-12-09 14:31:58 +0100 cd  r277766 : #161124# Fix problem with cpu frequency as float. Added context class loader code to fix problems with certain Java versions.
    2009-12-04 12:06:17 +0100 mav  r277732 : #i107440# in case of problems with extensions the office libraries still should be usable
    2009-12-03 18:22:08 +0100 ab  r277716 : #i107283# Pass config help path as argument to compileExtensionHelp()
    2009-12-03 18:21:16 +0100 ab  r277715 : #i107283# Pass config help path as argument to compileExtensionHelp()
    2009-12-03 10:35:18 +0100 cd  r277707 : #161124# Update service tag implementation for additional fields
    2009-11-30 14:04:15 +0100 ab  r277674 : #i107263 Fixed service ctor search algorithm
    2009-11-27 10:59:04 +0100 cd  r277666 : #161124# Update service tag sources
    2009-11-26 15:14:53 +0100 cd  r277659 : #i107087# Remove event listener from tab window on TabWindowService dtor
    2009-11-25 15:05:01 +0100 cd  r277637 : #i107087# TabWindowService must set member pointer to zero on VCLEVENT_OBJECT_DYING. The window life time is controlled by the docking window! Adding missing RemoveEventListener call.

diff --git a/transex3/source/help/HelpLinker.cxx b/transex3/source/help/HelpLinker.cxx
index cf7fed4..845b410 100644
--- a/transex3/source/help/HelpLinker.cxx
+++ b/transex3/source/help/HelpLinker.cxx
@@ -114,35 +114,41 @@ void IndexerPreProcessor::processDocument
 {
     std::string aStdStr_EncodedDocPathURL = getEncodedPath( EncodedDocPath );
 
-    xmlDocPtr resCaption = xsltApplyStylesheet( m_xsltStylesheetPtrCaption, doc, NULL );
-    xmlNodePtr pResNodeCaption = resCaption->xmlChildrenNode;
-    if( pResNodeCaption )
+    if( m_xsltStylesheetPtrCaption )
     {
-        fs::path fsCaptionPureTextFile_docURL = m_fsCaptionFilesDirName / aStdStr_EncodedDocPathURL;
-        std::string aCaptionPureTextFileStr_docURL = fsCaptionPureTextFile_docURL.native_file_string();
-        FILE* pFile_docURL = fopen( aCaptionPureTextFileStr_docURL.c_str(), "w" );
-        if( pFile_docURL )
+        xmlDocPtr resCaption = xsltApplyStylesheet( m_xsltStylesheetPtrCaption, doc, NULL );
+        xmlNodePtr pResNodeCaption = resCaption->xmlChildrenNode;
+        if( pResNodeCaption )
         {
-            fprintf( pFile_docURL, "%s\n", pResNodeCaption->content );
-            fclose( pFile_docURL );
+            fs::path fsCaptionPureTextFile_docURL = m_fsCaptionFilesDirName / aStdStr_EncodedDocPathURL;
+            std::string aCaptionPureTextFileStr_docURL = fsCaptionPureTextFile_docURL.native_file_string();
+            FILE* pFile_docURL = fopen( aCaptionPureTextFileStr_docURL.c_str(), "w" );
+            if( pFile_docURL )
+            {
+                fprintf( pFile_docURL, "%s\n", pResNodeCaption->content );
+                fclose( pFile_docURL );
+            }
         }
+        xmlFreeDoc(resCaption);
     }
-    xmlFreeDoc(resCaption);
 
-    xmlDocPtr resContent = xsltApplyStylesheet( m_xsltStylesheetPtrContent, doc, NULL );
-    xmlNodePtr pResNodeContent = resContent->xmlChildrenNode;
-    if( pResNodeContent )
+    if( m_xsltStylesheetPtrContent )
     {
-        fs::path fsContentPureTextFile_docURL = m_fsContentFilesDirName / aStdStr_EncodedDocPathURL;
-        std::string aContentPureTextFileStr_docURL = fsContentPureTextFile_docURL.native_file_string();
-        FILE* pFile_docURL = fopen( aContentPureTextFileStr_docURL.c_str(), "w" );
-        if( pFile_docURL )
+        xmlDocPtr resContent = xsltApplyStylesheet( m_xsltStylesheetPtrContent, doc, NULL );
+        xmlNodePtr pResNodeContent = resContent->xmlChildrenNode;
+        if( pResNodeContent )
         {
-            fprintf( pFile_docURL, "%s\n", pResNodeContent->content );
-            fclose( pFile_docURL );
+            fs::path fsContentPureTextFile_docURL = m_fsContentFilesDirName / aStdStr_EncodedDocPathURL;
+            std::string aContentPureTextFileStr_docURL = fsContentPureTextFile_docURL.native_file_string();
+            FILE* pFile_docURL = fopen( aContentPureTextFileStr_docURL.c_str(), "w" );
+            if( pFile_docURL )
+            {
+                fprintf( pFile_docURL, "%s\n", pResNodeContent->content );
+                fclose( pFile_docURL );
+            }
         }
+        xmlFreeDoc(resContent);
     }
-    xmlFreeDoc(resContent);
 }
 
 struct Data
@@ -233,8 +239,9 @@ public:
 class HelpLinker
 {
 public:
-    void main(std::vector<std::string> &args, std::string* pExtensionPath = NULL )
-        throw( HelpProcessingException );
+    void main(std::vector<std::string> &args,
+        std::string* pExtensionPath = NULL, const rtl::OUString* pOfficeHelpPath = NULL )
+            throw( HelpProcessingException );
 
     HelpLinker()
         : init(true)
@@ -739,21 +746,21 @@ void HelpLinker::link() throw( HelpProcessingException )
 }
 
 
-void HelpLinker::main(std::vector<std::string> &args, std::string* pExtensionPath)
-    throw( HelpProcessingException )
+void HelpLinker::main( std::vector<std::string> &args,
+    std::string* pExtensionPath, const rtl::OUString* pOfficeHelpPath )
+        throw( HelpProcessingException )
 {
     rtl::OUString aOfficeHelpPath;
 
     bExtensionMode = false;
-    if( pExtensionPath && pExtensionPath->length() > 0 )
+    if( pExtensionPath && pExtensionPath->length() > 0 && pOfficeHelpPath )
     {
         helpFiles.clear();
         bExtensionMode = true;
         extensionPath = *pExtensionPath;
         sourceRoot = fs::path(extensionPath);
 
-        aOfficeHelpPath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/help") );
-        rtl::Bootstrap::expandMacros( aOfficeHelpPath );
+        aOfficeHelpPath = *pOfficeHelpPath;
     }
     if (args.size() > 0 && args[0][0] == '@')
     {
@@ -1053,6 +1060,7 @@ HelpProcessingErrorInfo& HelpProcessingErrorInfo::operator=( const struct HelpPr
 // Returns true in case of success, false in case of error
 HELPLINKER_DLLPUBLIC bool compileExtensionHelp
 (
+     const rtl::OUString& aOfficeHelpPath,
     const rtl::OUString& aExtensionName,
     const rtl::OUString& aExtensionLanguageRoot,
     sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
@@ -1095,7 +1103,7 @@ HELPLINKER_DLLPUBLIC bool compileExtensionHelp
     try
     {
         HelpLinker* pHelpLinker = new HelpLinker();
-        pHelpLinker->main( args,&aStdStrExtensionPath );
+        pHelpLinker->main( args, &aStdStrExtensionPath, &aOfficeHelpPath );
         delete pHelpLinker;
     }
     catch( const HelpProcessingException& e )
diff --git a/transex3/source/help/compilehelp.hxx b/transex3/source/help/compilehelp.hxx
index e371fca..560ad8d 100644
--- a/transex3/source/help/compilehelp.hxx
+++ b/transex3/source/help/compilehelp.hxx
@@ -71,6 +71,7 @@ struct HelpProcessingErrorInfo
 // Returns true in case of success, false in case of error
 HELPLINKER_DLLPUBLIC bool compileExtensionHelp
 (
+     const rtl::OUString& aOfficeHelpPath,
     const rtl::OUString& aExtensionName,
     const rtl::OUString& aExtensionLanguageRoot,
     sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
commit b17a22c131ad323b6ea2862842637d9ffd0015cd
Author: Oliver Bolte <obo at openoffice.org>
Date:   Fri Dec 11 10:57:41 2009 +0000

    CWS-TOOLING: integrate CWS ooo32gsl09
    2009-12-07 16:21:13 +0100 tl  r277744 : #i105988# accessibility crash
    2009-12-07 14:59:17 +0100 od  r277743 : #i107365# method <ViewShell::ImplEndAction(..)>
    	  - take care of transparent child windows after direct paint.
    2009-12-07 12:22:08 +0100 fs  r277739 : #i107485#
    2009-12-04 15:28:51 +0100 pl  r277736 : #i107358# fix uninitialized value (thanks cmc)
    2009-12-04 15:24:57 +0100 pl  r277735 : #i106833# fix subset font encoding

diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index 2b179e8..bffc625 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -679,6 +679,7 @@ private:
                 m_aOverlineColor( COL_TRANSPARENT ),
                 m_nAntiAlias( 1 ),
                 m_nLayoutMode( 0 ),
+                m_aDigitLanguage( 0 ),
                 m_nTransparentPercent( 0 ),
                 m_nFlags( 0xffff ),
                 m_nUpdateFlags( 0xffff )
@@ -693,6 +694,7 @@ private:
                 m_aClipRegion( rState.m_aClipRegion ),
                 m_nAntiAlias( rState.m_nAntiAlias ),
                 m_nLayoutMode( rState.m_nLayoutMode ),
+                m_aDigitLanguage( rState.m_aDigitLanguage ),
                 m_nTransparentPercent( rState.m_nTransparentPercent ),
                 m_nFlags( rState.m_nFlags ),
                 m_nUpdateFlags( rState.m_nUpdateFlags )
@@ -710,6 +712,7 @@ private:
             m_aClipRegion			= rState.m_aClipRegion;
             m_nAntiAlias			= rState.m_nAntiAlias;
             m_nLayoutMode			= rState.m_nLayoutMode;
+            m_aDigitLanguage        = rState.m_aDigitLanguage;
             m_nTransparentPercent	= rState.m_nTransparentPercent;
             m_nFlags				= rState.m_nFlags;
             m_nUpdateFlags          = rState.m_nUpdateFlags;
diff --git a/vcl/unx/source/printergfx/glyphset.cxx b/vcl/unx/source/printergfx/glyphset.cxx
index 24ca791..9af9c66 100644
--- a/vcl/unx/source/printergfx/glyphset.cxx
+++ b/vcl/unx/source/printergfx/glyphset.cxx
@@ -46,6 +46,7 @@
 
 #include <set>
 #include <map>
+#include <algorithm>
 
 using namespace vcl;
 using namespace psp;
@@ -785,6 +786,17 @@ GlyphSet::PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx)
     return sal_True;
 }
 
+struct EncEntry
+{
+    sal_uChar  aEnc;
+    long       aGID;
+    
+    EncEntry() : aEnc( 0 ), aGID( 0 ) {}
+    
+    bool operator<( const EncEntry& rRight ) const
+    { return aEnc < rRight.aEnc; }
+};
+    
 static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile,
     const char* pGlyphSetName, int nGlyphCount,
     /*const*/ sal_uInt16* pRequestedGlyphs, /*const*/ sal_uChar* pEncoding,
@@ -795,18 +807,30 @@ static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile,
     int nTargetMask = FontSubsetInfo::TYPE1_PFA | FontSubsetInfo::TYPE3_FONT;
     if( bAllowType42 )
         nTargetMask |= FontSubsetInfo::TYPE42_FONT;
+    
+    std::vector< EncEntry > aSorted( nGlyphCount, EncEntry() );
+    for( int i = 0; i < nGlyphCount; i++ )
+    {
+        aSorted[i].aEnc = pEncoding[i];
+        aSorted[i].aGID = pRequestedGlyphs[i];
+    }
+    
+    std::stable_sort( aSorted.begin(), aSorted.end() );
+    
+    std::vector< sal_uChar > aEncoding( nGlyphCount );
+    std::vector< long > aRequestedGlyphs( nGlyphCount );
 
+    for( int i = 0; i < nGlyphCount; i++ )
+    {
+        aEncoding[i]        = aSorted[i].aEnc;
+        aRequestedGlyphs[i] = aSorted[i].aGID;
+    }
+    
     FontSubsetInfo aInfo;
     aInfo.LoadFont( pSrcFont );
 
-#if 1 // TODO: remove 16bit->long conversion when input args has been changed
-        long aRequestedGlyphs[256];
-        for( int i = 0; i < nGlyphCount; ++i )
-            aRequestedGlyphs[i] = pRequestedGlyphs[i];
-#endif
-
     aInfo.CreateFontSubset( nTargetMask, pTmpFile, pGlyphSetName,
-        aRequestedGlyphs, pEncoding, nGlyphCount, NULL );
+        &aRequestedGlyphs[0], &aEncoding[0], nGlyphCount, NULL );
 }
 
 sal_Bool
commit 8adb2202a6e002619b0d49646dcfeac0a16691df
Author: Oliver Bolte <obo at openoffice.org>
Date:   Fri Dec 11 10:38:18 2009 +0000

    CWS-TOOLING: integrate CWS ooo32gsl08
    2009-11-30 18:15:30 +0100 pl  r277678 : #i107248# cleanup updateGraphics
    2009-11-30 17:03:42 +0100 pl  r277677 : #i107080# invalidate is needed
    2009-11-30 16:58:46 +0100 pl  r277676 : #i107322# fix an access to dead memory
    2009-11-27 18:39:26 +0100 thb  r277670 : #i107248# Free render Picture before killing underlying drawable
    2009-11-26 11:50:48 +0100 pl  r277652 : #i107204# fix some native shortcuts on Snow Leopard
    2009-11-25 17:04:16 +0100 cl  r277638 : fixed typo
    2009-11-25 13:34:59 +0100 pl  r277634 : revert earlier ineffective change
    2009-11-24 13:04:19 +0100 pl  r277607 : #i107080# autorelease pool only on first yield

diff --git a/vcl/aqua/inc/salframeview.h b/vcl/aqua/inc/salframeview.h
index 4a26dab..1b19407 100755
--- a/vcl/aqua/inc/salframeview.h
+++ b/vcl/aqua/inc/salframeview.h
@@ -132,7 +132,11 @@
 -(void)moveWordForwardAndModifySelection: (id)aSender;
 -(void)moveWordRightAndModifySelection: (id)aSender;
 -(void)moveToEndOfLine: (id)aSender;
+-(void)moveToRightEndOfLine: (id)aSender;
+-(void)moveToLeftEndOfLine: (id)aSender;
 -(void)moveToEndOfLineAndModifySelection: (id)aSender;
+-(void)moveToRightEndOfLineAndModifySelection: (id)aSender;
+-(void)moveToLeftEndOfLineAndModifySelection: (id)aSender;
 -(void)moveToBeginningOfLine: (id)aSender;
 -(void)moveToBeginningOfLineAndModifySelection: (id)aSender;
 -(void)moveToEndOfParagraph: (id)aSender;
@@ -144,8 +148,10 @@
 -(void)moveParagraphBackward: (id)aSender;
 -(void)moveParagraphBackwardAndModifySelection: (id)aSender;
 -(void)moveToEndOfDocument: (id)aSender;
+-(void)scrollToEndOfDocument: (id)aSender;
 -(void)moveToEndOfDocumentAndModifySelection: (id)aSender;
 -(void)moveToBeginningOfDocument: (id)aSender;
+-(void)scrollToBeginningOfDocument: (id)aSender;
 -(void)moveToBeginningOfDocumentAndModifySelection: (id)aSender;
 -(void)insertNewline: (id)aSender;
 -(void)deleteBackward: (id)aSender;
diff --git a/vcl/aqua/source/a11y/documentfocuslistener.cxx b/vcl/aqua/source/a11y/documentfocuslistener.cxx
index 93e1530..f18eb35 100644
--- a/vcl/aqua/source/a11y/documentfocuslistener.cxx
+++ b/vcl/aqua/source/a11y/documentfocuslistener.cxx
@@ -102,12 +102,12 @@ DocumentFocusListener::notifyEvent( const AccessibleEventObject& aEvent )
             break;
             
         case AccessibleEventId::INVALIDATE_ALL_CHILDREN:
-/*        {
+        {
             Reference< XAccessible > xAccessible( getAccessible(aEvent) );
             detachRecursive(xAccessible);
             attachRecursive(xAccessible);
         }
-*/
+
             OSL_TRACE( "Invalidate all children called\n" );
             break;
         default:
diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm
index a1d94a1..b008ef3 100755
--- a/vcl/aqua/source/window/salframeview.mm
+++ b/vcl/aqua/source/window/salframeview.mm
@@ -1061,21 +1061,41 @@ private:
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_END_OF_LINE character: 0  modifiers: 0];
 }
 
+-(void)moveToRightEndOfLine: (id)aSender
+{
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_END_OF_LINE character: 0  modifiers: 0];
+}
+
 -(void)moveToEndOfLineAndModifySelection: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_END_OF_LINE character: 0  modifiers: 0];
 }
 
+-(void)moveToRightEndOfLineAndModifySelection: (id)aSender
+{
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_END_OF_LINE character: 0  modifiers: 0];
+}
+
 -(void)moveToBeginningOfLine: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_LINE character: 0  modifiers: 0];
 }
 
+-(void)moveToLeftEndOfLine: (id)aSender
+{
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_LINE character: 0  modifiers: 0];
+}
+
 -(void)moveToBeginningOfLineAndModifySelection: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_LINE character: 0  modifiers: 0];
 }
 
+-(void)moveToLeftEndOfLineAndModifySelection: (id)aSender
+{
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_LINE character: 0  modifiers: 0];
+}
+
 -(void)moveToEndOfParagraph: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_END_OF_PARAGRAPH character: 0  modifiers: 0];
@@ -1121,6 +1141,12 @@ private:
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_END_OF_DOCUMENT character: 0  modifiers: 0];
 }
 
+-(void)scrollToEndOfDocument: (id)aSender
+{
+    // this is not exactly what we should do, but it makes "End" and "Shift-End" behave consistent
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_END_OF_DOCUMENT character: 0  modifiers: 0];
+}
+
 -(void)moveToEndOfDocumentAndModifySelection: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_END_OF_DOCUMENT character: 0  modifiers: 0];
@@ -1131,6 +1157,12 @@ private:
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_DOCUMENT character: 0  modifiers: 0];
 }
 
+-(void)scrollToBeginningOfDocument: (id)aSender
+{
+    // this is not exactly what we should do, but it makes "Home" and "Shift-Home" behave consistent
+    [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_DOCUMENT character: 0  modifiers: 0];
+}
+
 -(void)moveToBeginningOfDocumentAndModifySelection: (id)aSender
 {
     [self sendKeyInputAndReleaseToFrame: com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_DOCUMENT character: 0  modifiers: 0];
@@ -1458,6 +1490,9 @@ private:
 {
     if( AquaSalFrame::isAlive( mpFrame ) )
     {
+        #if OSL_DEBUG_LEVEL > 1
+        // fprintf( stderr, "SalFrameView: doCommandBySelector %s\n", (char*)aSelector );
+        #endif
         if( (mpFrame->mnICOptions & SAL_INPUTCONTEXT_TEXT) != 0 &&
             aSelector != NULL && [self respondsToSelector: aSelector] )
         {
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index e658455..05714da 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -2374,6 +2374,11 @@ void GtkSalFrame::createNewWindow( XLIB_Window aNewParent, bool bXEmbed, int nSc
         }
     }
 
+    // free xrender resources
+    for( unsigned int i = 0; i < sizeof(m_aGraphics)/sizeof(m_aGraphics[0]); i++ )
+        if( m_aGraphics[i].bInUse )
+            m_aGraphics[i].pGraphics->SetDrawable( None, m_nScreen );
+
     // first deinit frame
     if( m_pIMHandler )
     {
diff --git a/vcl/unx/inc/plugins/kde/kdedata.hxx b/vcl/unx/inc/plugins/kde/kdedata.hxx
index 723562d..a0c4064 100644
--- a/vcl/unx/inc/plugins/kde/kdedata.hxx
+++ b/vcl/unx/inc/plugins/kde/kdedata.hxx
@@ -75,7 +75,7 @@ public:
 
     virtual SalGraphics* GetGraphics();
     virtual void ReleaseGraphics( SalGraphics *pGraphics );
-    virtual void updateGraphics();
+    virtual void updateGraphics( bool bClear );
     virtual void UpdateSettings( AllSettings& rSettings );
     virtual void Show( BOOL bVisible, BOOL bNoActivate );
 };
diff --git a/vcl/unx/inc/salframe.h b/vcl/unx/inc/salframe.h
index 6cc0617..f26e4ef 100644
--- a/vcl/unx/inc/salframe.h
+++ b/vcl/unx/inc/salframe.h
@@ -212,7 +212,9 @@ public:
     virtual SalGraphics*		GetGraphics();
     virtual void				ReleaseGraphics( SalGraphics* pGraphics );
     
-    virtual void                updateGraphics();
+    // 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 );
 
diff --git a/vcl/unx/kde/salnativewidgets-kde.cxx b/vcl/unx/kde/salnativewidgets-kde.cxx
index e19c589..f93d834 100644
--- a/vcl/unx/kde/salnativewidgets-kde.cxx
+++ b/vcl/unx/kde/salnativewidgets-kde.cxx
@@ -2073,12 +2073,13 @@ void KDESalFrame::ReleaseGraphics( SalGraphics *pGraphics )
     }
 }
 
-void KDESalFrame::updateGraphics()
+void KDESalFrame::updateGraphics( bool bClear )
 {
+    Drawable aDrawable = bClear ? None : GetWindow();
     for( int i = 0; i < nMaxGraphics; i++ )
     {
         if( m_aGraphics[i].bInUse )
-            m_aGraphics[i].pGraphics->SetDrawable( GetWindow(), GetScreenNumber() );
+            m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() );
     }
 }
 
diff --git a/vcl/unx/kde4/KDESalFrame.cxx b/vcl/unx/kde4/KDESalFrame.cxx
index 33f4ab5..908202c 100644
--- a/vcl/unx/kde4/KDESalFrame.cxx
+++ b/vcl/unx/kde4/KDESalFrame.cxx
@@ -369,12 +369,13 @@ void KDESalFrame::ReleaseGraphics( SalGraphics *pGraphics )
     }
 }
 
-void KDESalFrame::updateGraphics()
+void KDESalFrame::updateGraphics( bool bClear )
 {
+    Drawable aDrawable = bClear ? None : GetWindow();
     for( int i = 0; i < nMaxGraphics; i++ )
     {
         if( m_aGraphics[i].bInUse )
-            m_aGraphics[i].pGraphics->SetDrawable( GetWindow(), GetScreenNumber() );
+            m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() );
     }
 }
 
diff --git a/vcl/unx/kde4/KDESalFrame.hxx b/vcl/unx/kde4/KDESalFrame.hxx
index e24b824..5aba4bc 100644
--- a/vcl/unx/kde4/KDESalFrame.hxx
+++ b/vcl/unx/kde4/KDESalFrame.hxx
@@ -52,7 +52,7 @@ class KDESalFrame : public X11SalFrame
 
         virtual SalGraphics* GetGraphics();
         virtual void ReleaseGraphics( SalGraphics *pGraphics );
-        virtual void updateGraphics();
+        virtual void updateGraphics( bool bClear );
         virtual void UpdateSettings( AllSettings& rSettings );
         virtual void Show( BOOL bVisible, BOOL bNoActivate );
 };
\ No newline at end of file
diff --git a/vcl/unx/source/window/salframe.cxx b/vcl/unx/source/window/salframe.cxx
index 3a064ab..7e61602 100644
--- a/vcl/unx/source/window/salframe.cxx
+++ b/vcl/unx/source/window/salframe.cxx
@@ -930,12 +930,13 @@ void X11SalFrame::ReleaseGraphics( SalGraphics *pGraphics )
     pGraphics_		= NULL;
 }
 
-void X11SalFrame::updateGraphics()
+void X11SalFrame::updateGraphics( bool bClear )
 {
+    Drawable aDrawable = bClear ? None : GetWindow();
     if( pGraphics_ )
-        pGraphics_->SetDrawable( GetWindow(), m_nScreen );
+        pGraphics_->SetDrawable( aDrawable, m_nScreen );
     if( pFreeGraphics_ )
-        pFreeGraphics_->SetDrawable( GetWindow(), m_nScreen );
+        pFreeGraphics_->SetDrawable( aDrawable, m_nScreen );
 }
 
 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -2726,6 +2727,7 @@ void X11SalFrame::createNewWindow( XLIB_Window aNewParent, int nScreen )
     }
 
     // first deinit frame
+    updateGraphics(true);
     if( mpInputContext )
     {
         mpInputContext->UnsetICFocus( this );
@@ -2748,7 +2750,7 @@ void X11SalFrame::createNewWindow( XLIB_Window aNewParent, int nScreen )
         Init( nStyle_ & ~SAL_FRAME_STYLE_PLUG, nScreen, NULL, true );
 
     // update graphics if necessary
-    updateGraphics();
+    updateGraphics(false);
     
     if( m_aTitle.Len() )
         SetTitle( m_aTitle );


More information about the ooo-build-commit mailing list