[Libreoffice-commits] .: 22 commits - canvas/source unotools/source vcl/source vcl/unx

Petr Mladek pmladek at kemper.freedesktop.org
Wed Apr 6 12:27:47 PDT 2011


 canvas/source/cairo/cairo_canvashelper.cxx |    2 +-
 unotools/source/config/configmgr.cxx       |    2 +-
 unotools/source/misc/fontdefs.cxx          |    8 ++++++++
 vcl/source/gdi/gdimtf.cxx                  |    2 ++
 vcl/unx/gtk/a11y/atkutil.cxx               |    5 +++++
 vcl/unx/kde4/KDESalGraphics.cxx            |    2 ++
 vcl/unx/kde4/KDEXLib.cxx                   |   10 ++++++++++
 vcl/unx/source/gdi/salgdi3.cxx             |    2 +-
 8 files changed, 30 insertions(+), 3 deletions(-)

New commits:
commit 12b38edca935bb403632fca34b5904630d4f6a3b
Merge: 0b2b6df... 387dcf9...
Author: Petr Mladek <pmladek at suse.cz>
Date:   Wed Apr 6 19:25:25 2011 +0200

    Merge remote-tracking branch 'origin/libreoffice-3-4'

commit 387dcf9f1f5d509be76473f7eb83ee9309a04f6b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 6 16:50:36 2011 +0100

    merge oooXXXXX.vcl.x86_64.impressatk.diff from build

diff --git a/vcl/unx/gtk/a11y/atkutil.cxx b/vcl/unx/gtk/a11y/atkutil.cxx
index c7ae26d..68bb949 100644
--- a/vcl/unx/gtk/a11y/atkutil.cxx
+++ b/vcl/unx/gtk/a11y/atkutil.cxx
@@ -597,6 +597,7 @@ static void handle_menu_highlighted(::VclMenuEvent const * pEvent)
 
 long WindowEventHandler(void *, ::VclSimpleEvent const * pEvent)
 {
+    try {
     switch (pEvent->GetId())
     {
     case VCLEVENT_WINDOW_SHOW:
@@ -663,6 +664,10 @@ long WindowEventHandler(void *, ::VclSimpleEvent const * pEvent)
     default:
         break;
     }
+    } catch(lang::IndexOutOfBoundsException e)
+    {
+        g_warning("Focused object has invalid index in parent");
+    }
     return 0;
 }
 
commit ee39d120e7730970e8f5ce57ec6ec3abee37efed
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Tue Apr 5 18:25:22 2011 +0200

    rework confused and racy clipboard event polling (bnc#683941)
    
    It does not work reliably to just poll on the X connection fd,
    as there may be already incoming events in the Xlib queue (removed
    from the fd connection). So XPending() call is necessary; which
    additionally ensures the output queue is flushed before polling.
    The second poll() seems to have been just introduced as a result
    of failing to understand this, and the strange XPending() nesting
    later is no longer needed either.

diff --git a/vcl/unx/source/dtrans/X11_selection.cxx b/vcl/unx/source/dtrans/X11_selection.cxx
index 5a27af6..dda0aeb 100644
--- a/vcl/unx/source/dtrans/X11_selection.cxx
+++ b/vcl/unx/source/dtrans/X11_selection.cxx
@@ -3729,41 +3729,29 @@ bool SelectionManager::handleXEvent( XEvent& rEvent )
 
 void SelectionManager::dispatchEvent( int millisec )
 {
-    pollfd aPollFD;
-    XEvent event;
-
-    // query socket handle to poll on
-    aPollFD.fd      = ConnectionNumber( m_pDisplay );
-    aPollFD.events  = POLLIN;
-    aPollFD.revents = 0;
+    // acquire the mutex to prevent other threads
+    // from using the same X connection
+    osl::ResettableMutexGuard aGuard(m_aMutex);
 
-    // wait for activity (outside the xlib)
-    if( poll( &aPollFD, 1, millisec ) > 0 )
+    if( !XPending( m_pDisplay ))
+    { // wait for any events if none are already queued
+        pollfd aPollFD;
+        aPollFD.fd      = XConnectionNumber( m_pDisplay );
+        aPollFD.events  = POLLIN;
+        aPollFD.revents = 0;
+        // release mutex for the time of waiting for possible data
+        aGuard.clear();
+        if( poll( &aPollFD, 1, millisec ) <= 0 )
+            return;
+        aGuard.reset();
+    }
+    while( XPending( m_pDisplay ))
     {
-        // now acquire the mutex to prevent other threads
-        // from using the same X connection
-        osl::ResettableMutexGuard aGuard(m_aMutex);
-
-        // prevent that another thread already ate the input
-        // this can happen if e.g. another thread does
-        // an X request getting a response. the response
-        // would be removed from the queue and we would end up
-        // with an empty socket here
-        if( poll( &aPollFD, 1, 0 ) > 0 )
-        {
-            int nPending = 1;
-            while( nPending )
-            {
-                nPending = XPending( m_pDisplay );
-                if( nPending )
-                {
-                    XNextEvent( m_pDisplay, &event );
-                    aGuard.clear();
-                    handleXEvent( event );
-                    aGuard.reset();
-                }
-            }
-        }
+        XEvent event;
+        XNextEvent( m_pDisplay, &event );
+        aGuard.clear();
+        handleXEvent( event );
+        aGuard.reset();
     }
 }
 
commit 0944075553e0164a7cef09eaa35bafdffcc8ede8
Merge: 8d66230... a7febbd...
Author: Petr Mladek <pmladek at suse.cz>
Date:   Tue Apr 5 19:07:05 2011 +0200

    Merge remote-tracking branch 'origin/libreoffice-3-3' into libreoffice-3-4
    
    Conflicts:
    	svtools/source/control/toolbarmenu.cxx
    	vcl/inc/vcl/gdimtf.hxx
    	vcl/inc/vcl/settings.hxx
    	vcl/unx/inc/saldata.hxx
    	vcl/unx/kde4/KDESalGraphics.cxx

diff --cc unotools/source/config/configmgr.cxx
index 795a1b1,fa94533..70c2448
--- a/unotools/source/config/configmgr.cxx
+++ b/unotools/source/config/configmgr.cxx
@@@ -379,9 -403,9 +379,9 @@@ Any ConfigManager::GetDirectConfigPrope
  
      ::rtl::OUString sBrandName;
  #ifdef ENABLE_BROFFICE
-     LanguageType nType = MsLangId::getSystemUILanguage();
+     LanguageType nType = MsLangId::getRealLanguage( LANGUAGE_NONE );
      if ( nType == LANGUAGE_PORTUGUESE_BRAZILIAN )
 -        sBrandName = OUString::createFromAscii("BrOffice");
 +        sBrandName = OUString(RTL_CONSTASCII_USTRINGPARAM("BrOffice"));
      else
  #endif
          sBrandName = BrandName::get();
diff --cc vcl/source/gdi/gdimtf.cxx
index 5c787bb,8202bf1..4809b1f
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@@ -435,10 -435,10 +435,12 @@@ void GDIMetaFile::Play( GDIMetaFile& rM
      if ( !bRecord && !rMtf.bRecord )
      {
          MetaAction* pAction = GetCurAction();
 -        const ULONG nObjCount = Count();
 +        const sal_uLong nObjCount = Count();
 +
 +        rMtf.UseCanvas( rMtf.GetUseCanvas() || bUseCanvas );
  
+         rMtf.UseCanvas( rMtf.GetUseCanvas() || bUseCanvas );
+ 
          if( nPos > nObjCount )
              nPos = nObjCount;
  
diff --cc vcl/unx/kde4/KDESalGraphics.cxx
index 3b9a13c,925696a..6cf466d
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@@ -432,7 -354,9 +432,9 @@@ sal_Bool KDESalGraphics::drawNativeCont
      {   // reduce paint area only to the handle area
          const int width = kapp->style()->pixelMetric(QStyle::PM_ToolBarHandleExtent);
          QRect rect( 0, 0, width, widgetRect.height());
 -        pTempClipRegion = XCreateRegion();
 +        clipRegion = new QRegion( widgetRect.x(), widgetRect.y(), width, widgetRect.height());
+         XRectangle xRect = { widgetRect.x(), widgetRect.y(), width, widgetRect.height() };
+         XUnionRectWithRegion( &xRect, pTempClipRegion, pTempClipRegion );
          
          QStyleOption option;
          option.state = QStyle::State_Horizontal;
diff --cc vcl/unx/kde4/KDEXLib.cxx
index ca435c8,1bca18e..7757014
--- a/vcl/unx/kde4/KDEXLib.cxx
+++ b/vcl/unx/kde4/KDEXLib.cxx
@@@ -202,20 -204,14 +202,30 @@@ void KDEXLib::Init(
  static GPollFunc old_gpoll = NULL;
  static gint gpoll_wrapper( GPollFD*, guint, gint );
  #endif
 +#ifdef QT_UNIX_EVENT_LOOP_SUPPORT
 +static int (*qt_select)(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept,
 +   const struct timeval *orig_timeout);
 +static int lo_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept,
 +   const struct timeval *orig_timeout);
 +#endif
 +
 +static bool ( *old_qt_event_filter )( void* );
 +static bool qt_event_filter( void* m )
 +{
 +    if( old_qt_event_filter != NULL && old_qt_event_filter( m ))
 +        return true;
 +    if( SalKDEDisplay::self() && SalKDEDisplay::self()->checkDirectInputEvent( static_cast< XEvent* >( m )))
 +        return true;
++    return false;
++}
+ 
+ static bool ( *old_qt_event_filter )( void* );
+ static bool qt_event_filter( void* m )
+ {
+     if( old_qt_event_filter != NULL && old_qt_event_filter( m ))
+         return true;
+     if( SalKDEDisplay::self() && SalKDEDisplay::self()->checkDirectInputEvent( static_cast< XEvent* >( m )))
+         return true;
      return false;
  }
  
commit a7febbdcdc9fd4a80e8357f3812456fc3fa0f39f
Author: Radek Doulik <rodo at novell.com>
Date:   Thu Mar 10 15:47:35 2011 +0100

    fix for 3.3.2 blocker fdo#34718 - change the type of nDrawerHeight to long
    
     - before it became big positive long in the called Point::Move
       function, moving the drawer under the visible area. so it was
       basically signed/unsigned problem in the layouter

diff --git a/svtools/source/toolpanel/drawerlayouter.cxx b/svtools/source/toolpanel/drawerlayouter.cxx
index df056d9..89354e2 100644
--- a/svtools/source/toolpanel/drawerlayouter.cxx
+++ b/svtools/source/toolpanel/drawerlayouter.cxx
@@ -88,7 +88,7 @@ namespace svt
         const size_t nUpperBound = !!aActivePanel ? *aActivePanel : nPanelCount - 1;
         for ( size_t i=0; i<=nUpperBound; ++i )
         {
-            sal_uInt32 nDrawerHeight = m_aDrawers[i]->GetPreferredHeightPixel();
+            long nDrawerHeight = m_aDrawers[i]->GetPreferredHeightPixel();
             m_aDrawers[i]->SetPosSizePixel(
                 aUpperDrawerPos, Size( nWidth, nDrawerHeight ) );
             aUpperDrawerPos.Move( 0, nDrawerHeight );
@@ -98,7 +98,7 @@ namespace svt
         Point aLowerDrawerPos( i_rDeckPlayground.BottomLeft() );
         for ( size_t j = nPanelCount - 1; j > nUpperBound; --j )
         {
-            sal_uInt32 nDrawerHeight = m_aDrawers[j]->GetPreferredHeightPixel();
+            long nDrawerHeight = m_aDrawers[j]->GetPreferredHeightPixel();
             m_aDrawers[j]->SetPosSizePixel(
                 Point( aLowerDrawerPos.X(), aLowerDrawerPos.Y() - nDrawerHeight + 1 ),
                 Size( nWidth, nDrawerHeight )
commit 8d66230f9a03c994842f3b5f313e0f68dd79ceec
Author: Robert Nagy <robert at openbsd.org>
Date:   Tue Apr 5 11:59:42 2011 +0200

    link to the correct libraries on *BSD too

diff --git a/padmin/Library_spa.mk b/padmin/Library_spa.mk
index 6827729..82b3e4e 100644
--- a/padmin/Library_spa.mk
+++ b/padmin/Library_spa.mk
@@ -62,12 +62,17 @@ $(eval $(call gb_Library_add_exception_objects,spa,\
     padmin/source/titlectrl \
 ))
 
-ifeq ($(OS),LINUX)
+ifneq (,$(filter LINUX DRAGONFLY OPENBSD FREEBSD NETBSD, $(OS)))
 $(eval $(call gb_Library_add_linked_libs,spa,\
-    dl \
     m \
     pthread \
 ))
 endif
 
+ifeq ($(OS),LINUX)
+$(eval $(call gb_Library_add_linked_libs,spa,\
+    dl \
+))
+endif
+
 # vim: set noet sw=4 ts=4:
diff --git a/toolkit/Library_tk.mk b/toolkit/Library_tk.mk
index 15c8692..1a94bbd 100644
--- a/toolkit/Library_tk.mk
+++ b/toolkit/Library_tk.mk
@@ -163,7 +163,7 @@ $(eval $(call gb_Library_set_cxxflags,tk,\
     $$(CXXFLAGS) $(gb_OBJCXXFLAGS)))
 endif
 
-ifeq ($(OS),LINUX)
+ifneq (,$(filter LINUX DRAGONFLY OPENBSD FREEBSD NETBSD, $(OS)))
 $(eval $(call gb_Library_add_linked_libs,tk,\
     X11 \
 ))
commit 58ffad59de3f5c13db7678a0a0dd3edf72d381bc
Author: Robert Nagy <robert at openbsd.org>
Date:   Mon Apr 4 15:55:58 2011 +0200

    link to pthread on linux and *bsd

diff --git a/padmin/Executable_spadmin.bin.mk b/padmin/Executable_spadmin.bin.mk
index ac6f19c..5f958d4 100644
--- a/padmin/Executable_spadmin.bin.mk
+++ b/padmin/Executable_spadmin.bin.mk
@@ -59,10 +59,15 @@ $(eval $(call gb_Executable_add_exception_objects,spadmin.bin,\
     padmin/source/pamain \
 ))
 
+ifneq (,$(filter LINUX DRAGONFLY OPENBSD FREEBSD NETBSD, $(OS)))
+$(eval $(call gb_Executable_add_linked_libs,spadmin.bin,\
+    pthread \
+))
+endif
+
 ifeq ($(OS),LINUX)
 $(eval $(call gb_Executable_add_linked_libs,spadmin.bin,\
     dl \
-    pthread \
 ))
 endif
 
commit 8b70d97797e27466154151bfd62cebf92571a6fe
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Fri Apr 1 22:25:11 2011 +0100

    fix glyph fallback range crasher with negative nLevel

diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx
index 4365356..3aa1824 100644
--- a/vcl/unx/source/gdi/salgdi3.cxx
+++ b/vcl/unx/source/gdi/salgdi3.cxx
@@ -1238,7 +1238,7 @@ X11SalGraphics::GetKernPairs( sal_uLong nPairs, ImplKernPairData *pKernPairs )
 sal_Bool X11SalGraphics::GetGlyphBoundRect( long nGlyphIndex, Rectangle& rRect )
 {
     int nLevel = nGlyphIndex >> GF_FONTSHIFT;
-    if( nLevel >= MAX_FALLBACK )
+    if( nLevel < 0 || nLevel >= MAX_FALLBACK )
         return sal_False;
 
     ServerFont* pSF = mpServerFont[ nLevel ];
commit a57c528adb14a9a2ef4631d137e01ef0f7598905
Author: Petr Mladek <pmladek at suse.cz>
Date:   Fri Apr 1 15:13:16 2011 +0200

    Branch libreoffice-3-4
    
    This is 'libreoffice-3-4' - the stable branch for the 3.4.x releases
    
        + only bug fixes are allowed
        + no approval needed during beta phase (two weeks after branch)
        + 1 approval needed during rc phase and for bugfix releases
        + 2 approvals with different/no affiliation needed for late features
        + regularly merged into master by a selected person when living
    
    Please watch http://wiki.documentfoundation.org/ReleasePlan
    and read announces on libreoffice at lists.freedesktop.org
    
    If you want to build something cool, unstable, and risky, use master.
commit 9c59688b152ed2c4d46f9bd588c91a01247f6aeb
Author: Petr Mladek <pmladek at suse.cz>
Date:   Tue Mar 8 15:31:13 2011 +0100

    Version 3.3.2.1, tag libreoffice-3.3.2.1 (3.3.2-rc1)
commit f836140555c905f85464e6a0e355171231e81054
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Tue Feb 22 16:31:11 2011 +0100

    try to work around IM problems with KDE4 integration (bnc#665112)
    
    See comment for SalKDEDisplay::checkDirectInputEvent(). This was
    introduced when switching to using Qt event loop, Qt processes
    IM handling before LO gets a chance to do something and this conflicts.
    This is rather hackish but I have no better idea and as long as
    the IM protocol does not change it should be fine.
    
    ACK by Petr Mladek.

diff --git a/vcl/unx/kde4/KDESalDisplay.cxx b/vcl/unx/kde4/KDESalDisplay.cxx
index b1eb0d6..2524295 100644
--- a/vcl/unx/kde4/KDESalDisplay.cxx
+++ b/vcl/unx/kde4/KDESalDisplay.cxx
@@ -41,6 +41,7 @@ SalKDEDisplay::SalKDEDisplay( Display* pDisp )
 {
     assert( selfptr == NULL );
     selfptr = this;
+    xim_protocol = XInternAtom( pDisp_, "_XIM_PROTOCOL", False );
 }
 
 SalKDEDisplay::~SalKDEDisplay()
@@ -65,7 +66,32 @@ void SalKDEDisplay::Yield()
 
     XEvent event;
     XNextEvent( pDisp_, &event );
+    if( checkDirectInputEvent( &event ))
+        return;
     qApp->x11ProcessEvent( &event );
 }
 
+// HACK: When using Qt event loop, input methods (japanese, etc.) will get broken because
+// of XFilterEvent() getting called twice, once by Qt, once by LO (bnc#665112).
+// This function is therefore called before any XEvent is passed to Qt event handling
+// and if it is a keyboard event and no Qt widget is the active window (i.e. we are
+// processing events for some LO window), then feed the event only to LO directly and skip Qt
+// completely. Skipped events are KeyPress, KeyRelease and also _XIM_PROTOCOL client message
+// (seems to be necessary too, hopefully there are not other internal XIM messages that
+// would need this handling).
+bool SalKDEDisplay::checkDirectInputEvent( XEvent* ev )
+{
+    if( ev->xany.type == XLIB_KeyPress || ev->xany.type == KeyRelease
+        || ( ev->xany.type == ClientMessage && ev->xclient.message_type == xim_protocol ))
+    {
+        if( qApp->activeWindow() == NULL )
+        {
+            Dispatch(ev);
+            return true;
+        }
+    }
+    return false;
+}
+
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde4/KDESalDisplay.hxx b/vcl/unx/kde4/KDESalDisplay.hxx
index 1a79c86..25a8b9f 100644
--- a/vcl/unx/kde4/KDESalDisplay.hxx
+++ b/vcl/unx/kde4/KDESalDisplay.hxx
@@ -41,7 +41,9 @@ class SalKDEDisplay : public SalX11Display
         inline void EventGuardRelease() { osl_releaseMutex( hEventGuard_ ); }
 //        virtual long Dispatch( XEvent *event );
         virtual void Yield();
+        bool checkDirectInputEvent( XEvent* ev );
     private:
+        Atom xim_protocol;
         static SalKDEDisplay* selfptr;
 };
 
diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx
index 1084ba2..1bca18e 100644
--- a/vcl/unx/kde4/KDEXLib.cxx
+++ b/vcl/unx/kde4/KDEXLib.cxx
@@ -205,8 +205,19 @@ static GPollFunc old_gpoll = NULL;
 static gint gpoll_wrapper( GPollFD*, guint, gint );
 #endif
 
+static bool ( *old_qt_event_filter )( void* );
+static bool qt_event_filter( void* m )
+{
+    if( old_qt_event_filter != NULL && old_qt_event_filter( m ))
+        return true;
+    if( SalKDEDisplay::self() && SalKDEDisplay::self()->checkDirectInputEvent( static_cast< XEvent* >( m )))
+        return true;
+    return false;
+}
+
 void KDEXLib::setupEventLoop()
 {
+    old_qt_event_filter = QAbstractEventDispatcher::instance()->setEventFilter( qt_event_filter );
 #ifdef GLIB_EVENT_LOOP_SUPPORT
 // Glib is simple, it has g_main_context_set_poll_func() for wrapping the sleep call.
 // The catch is that Qt has a bug that allows triggering timers even when they should
commit 18a79a536aa38479517b1fd29eaf5e15da05d8dd
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Tue Feb 22 12:05:55 2011 +0000

    fix fdo#32640 - un-necessary reverse lookup on startup
    
    Signed-off-by: Jan Holesovsky <kendy at suse.cz>

diff --git a/vcl/unx/inc/saldata.hxx b/vcl/unx/inc/saldata.hxx
index 4164a0f..83a8ce7 100644
--- a/vcl/unx/inc/saldata.hxx
+++ b/vcl/unx/inc/saldata.hxx
@@ -87,9 +87,8 @@ public:
     void					StartTimer( ULONG nMS );
     inline	void			StopTimer();
     void					Timeout() const;
-    
-    const rtl::OUString&    GetLocalHostName() const
-    { return maLocalHostName; }
+
+    const rtl::OUString&    GetLocalHostName();
 
     static int XErrorHdl( Display*, XErrorEvent* );
     static int XIOErrorHdl( Display* );
diff --git a/vcl/unx/source/app/saldata.cxx b/vcl/unx/source/app/saldata.cxx
index bfe96f7..3840844 100644
--- a/vcl/unx/source/app/saldata.cxx
+++ b/vcl/unx/source/app/saldata.cxx
@@ -272,7 +272,13 @@ X11SalData::X11SalData()
     m_pPlugin		= NULL;
 
     hMainThread_	= pthread_self();
-    osl_getLocalHostname( &maLocalHostName.pData );
+}
+
+const rtl::OUString& X11SalData::GetLocalHostName()
+{
+    if (!maLocalHostName.getLength())
+            osl_getLocalHostname( &maLocalHostName.pData );
+    return maLocalHostName;
 }
 
 X11SalData::~X11SalData()
commit faf02acc88bc4d7ead617e8e4999ac717bbce31b
Author: Radek Doulik <rodo at novell.com>
Date:   Thu Feb 17 15:55:19 2011 +0100

    fix cairo canvas edge count calculation
    
    (cherry picked from commit abb5233c0b9b584407b4696f5db2c330ca45b632)
    
    Signed-off-by: Thorsten Behrens <tbehrens at novell.com>

diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx
index bb5f6be..29cf38e 100644
--- a/canvas/source/cairo/cairo_canvashelper.cxx
+++ b/canvas/source/cairo/cairo_canvashelper.cxx
@@ -1065,7 +1065,7 @@ namespace cairocanvas
 
                 if(nPointCount)
                 {
-                    const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount + 1: nPointCount);
+                    const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount: nPointCount - 1);
                     basegfx::B2DPolygon aEdge;
                     aEdge.append(aCandidate.getB2DPoint(0));
                     aEdge.append(basegfx::B2DPoint(0.0, 0.0));
commit 74b3688c6a388f077f6dd01dffee63bb872cce5c
Author: Radek Doulik <rodo at novell.com>
Date:   Wed Feb 16 18:12:33 2011 +0100

    fix cairo canvas regression - do not access polygon points outside range
    
    (cherry picked from commit a898a8cb077c05b1085da8254e66f61aa265b7dc)
    
    Signed-off-by: Thorsten Behrens <tbehrens at novell.com>

diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx
index 0294780..bb5f6be 100644
--- a/canvas/source/cairo/cairo_canvashelper.cxx
+++ b/canvas/source/cairo/cairo_canvashelper.cxx
@@ -1074,7 +1074,7 @@ namespace cairocanvas
                     {
                         const sal_uInt32 nNextIndex((b + 1) % nPointCount);
                         aEdge.setB2DPoint(1, aCandidate.getB2DPoint(nNextIndex));
-                        aEdge.setNextControlPoint(0, aCandidate.getNextControlPoint(b));
+                        aEdge.setNextControlPoint(0, aCandidate.getNextControlPoint(b % nPointCount));
                         aEdge.setPrevControlPoint(1, aCandidate.getPrevControlPoint(nNextIndex));
                         
                         doPolyPolygonImplementation( basegfx::B2DPolyPolygon(aEdge),
commit 104c373f43f494e059a040c323ea7e2f1b879d7c
Author: Radek Doulik <rodo at novell.com>
Date:   Tue Feb 15 17:26:00 2011 +0100

    GDIMetaFile::bUseCanvas related changes (prerequisite for fixing n#650049)
    
     - add GetUseCanvas() for read access
     - update bUseCanvas when playing on metafile

diff --git a/vcl/inc/vcl/gdimtf.hxx b/vcl/inc/vcl/gdimtf.hxx
index 14cc127..4bf3d46 100644
--- a/vcl/inc/vcl/gdimtf.hxx
+++ b/vcl/inc/vcl/gdimtf.hxx
@@ -247,6 +247,7 @@ public:
     BOOL           CreateThumbnail( sal_uInt32 nMaximumExtent, BitmapEx& rBmpEx, const BitmapEx* pOverlay = NULL, const Rectangle* pOverlayRect = NULL ) const;
 
     void           UseCanvas( BOOL _bUseCanvas );
+    BOOL           GetUseCanvas() const { return bUseCanvas; }
 };
 
 /** Create a special metaaction that delegates rendering to specified
diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx
index 2c116fa..8202bf1 100644
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@ -437,6 +437,8 @@ void GDIMetaFile::Play( GDIMetaFile& rMtf, ULONG nPos )
         MetaAction* pAction = GetCurAction();
         const ULONG nObjCount = Count();
 
+        rMtf.UseCanvas( rMtf.GetUseCanvas() || bUseCanvas );
+
         if( nPos > nObjCount )
             nPos = nObjCount;
 
commit dc42647b0dcce34d9c7d23758fb28741aae8eb00
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Tue Feb 15 12:46:06 2011 +0000

    disable EMF+ rendering on windows - it doesn't work yet

diff --git a/svtools/source/filter.vcl/wmf/enhwmf.cxx b/svtools/source/filter.vcl/wmf/enhwmf.cxx
index cc50b1b..1dd5c64 100644
--- a/svtools/source/filter.vcl/wmf/enhwmf.cxx
+++ b/svtools/source/filter.vcl/wmf/enhwmf.cxx
@@ -348,7 +348,7 @@ BOOL EnhWMFReader::ReadEnhWMF()
     static sal_Bool bEnableEMFPlus = ( getenv( "EMF_PLUS_DISABLE" ) == NULL );
 #else
     // TODO: make it possible to disable emf+ on windows
-    static sal_Bool bEnableEMFPlus = sal_True;
+    static sal_Bool bEnableEMFPlus = sal_False;
 #endif
 
     while( bStatus && nRecordCount-- )
commit 5715b3d4200b8d307243a82fdadd898877f5bd63
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Thu Feb 10 17:34:10 2011 +0000

    catch exceptions from failing UNO-ness, fdo#33785 backstop.

diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx
index dabeeaf..2c116fa 100644
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@ -512,7 +512,10 @@ bool GDIMetaFile::ImplPlayWithRenderer( OutputDevice* pOut, const Point& rPos, S
     if (!win)
         win = Application::GetFirstTopLevelWindow();
 
-    if (win) {
+    if (!win)
+        return false;
+
+    try {
         const uno::Reference<rendering::XCanvas>& xCanvas = win->GetCanvas ();
         Size aSize (rDestSize.Width () + 1, rDestSize.Height () + 1);
         const uno::Reference<rendering::XBitmap>& xBitmap = xCanvas->getDevice ()->createCompatibleAlphaBitmap (vcl::unotools::integerSize2DFromSize( aSize));
@@ -566,6 +569,10 @@ bool GDIMetaFile::ImplPlayWithRenderer( OutputDevice* pOut, const Point& rPos, S
                 }
             }
         }
+    } catch( uno::RuntimeException& ) {
+        throw; // runtime errors are fatal
+    } catch( uno::Exception& ) {
+        // ignore errors, no way of reporting them here
     }
 
     return false;
commit 29b510e2a77f65445831767fe2061a92b6b57279
Author: Petr Mladek <pmladek at suse.cz>
Date:   Fri Feb 11 22:36:09 2011 +0100

    use "BrOffice" name if the Brazilian UI translation is used (bnc#33744)
    
    it is not enough to check the system UI setting
    
    Signed off by Michael Meeks

diff --git a/unotools/source/config/configmgr.cxx b/unotools/source/config/configmgr.cxx
index 7b57234..fa94533 100644
--- a/unotools/source/config/configmgr.cxx
+++ b/unotools/source/config/configmgr.cxx
@@ -403,7 +403,7 @@ Any ConfigManager::GetDirectConfigProperty(ConfigProperty eProp)
 
     ::rtl::OUString sBrandName;
 #ifdef ENABLE_BROFFICE
-    LanguageType nType = MsLangId::getSystemUILanguage();
+    LanguageType nType = MsLangId::getRealLanguage( LANGUAGE_NONE );
     if ( nType == LANGUAGE_PORTUGUESE_BRAZILIAN )
         sBrandName = OUString::createFromAscii("BrOffice");
     else
commit 3b8c4baec540c851ebf97d933e11150192defa87
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Thu Feb 10 19:21:37 2011 +0900

    GetEnglishSearchFontName() searches Takao fonts
    
    Signed-off-by: Kohei Yoshida <kyoshida at novell.com>

diff --git a/unotools/source/misc/fontdefs.cxx b/unotools/source/misc/fontdefs.cxx
index e216348..4e0b812 100644
--- a/unotools/source/misc/fontdefs.cxx
+++ b/unotools/source/misc/fontdefs.cxx
@@ -91,6 +91,10 @@ static sal_Unicode const aIPAPMincho[] = { 'i', 'p', 'a', 'p', 0x660E, 0x671D, 0
 static sal_Unicode const aIPAGothic[] =  { 'i', 'p', 'a',  0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
 static sal_Unicode const aIPAPGothic[] =  { 'i', 'p', 'a', 'p', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
 static sal_Unicode const aIPAUIGothic[] =  { 'i', 'p', 'a', 'u', 'i', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
+static sal_Unicode const aTakaoMincho[] =  { 't', 'a', 'k', 'a', 'o', 0x660E, 0x671D, 0 };
+static sal_Unicode const aTakaoPMincho[] = { 't', 'a', 'k', 'a', 'o', 'p', 0x660E, 0x671D, 0 };
+static sal_Unicode const aTakaoGothic[] =  { 't', 'a', 'k', 'a', 'o',  0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
+static sal_Unicode const aTakaoPGothic[] =  { 't', 'a', 'k', 'a', 'o', 'p', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
 static sal_Unicode const aSazanamiMincho[] = { 0x3055, 0x3056, 0x306A, 0x307F, 0x660E, 0x671D, 0, 0 };
 static sal_Unicode const aSazanamiGothic[] = { 0x3055, 0x3056, 0x306A, 0x307F, 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0, 0 };
 static sal_Unicode const aKochiMincho[] = { 0x6771, 0x98A8, 0x660E, 0x671D, 0, 0 };
@@ -236,6 +240,10 @@ static ImplLocalizedFontName aImplLocalizedNamesList[] =
 {   "ipagothic",            aIPAGothic },
 {   "ipapgothic",           aIPAPGothic },
 {   "ipauigothic",          aIPAUIGothic },
+{   "takaomincho",          aTakaoMincho },
+{   "takaopmincho",         aTakaoPMincho },
+{   "takaogothic",          aTakaoGothic },
+{   "takaopgothic",         aTakaoPGothic },
 {   "sazanamimincho",       aSazanamiMincho },
 {   "sazanamigothic",       aSazanamiGothic },
 {   "kochimincho",          aKochiMincho },
commit 071354e24035aa359b416b17dcd53b6ae8e17f87
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Mon Feb 7 13:02:26 2011 +0100

    Fixed size computation for toolbar menus with controls
    (cherry picked from commit 8fc079ad197755ecb6191181de79fb60a6f6ae86)
    
    Signed-off-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/svtools/source/control/toolbarmenu.cxx b/svtools/source/control/toolbarmenu.cxx
index 1ac3b9d..e86644a 100644
--- a/svtools/source/control/toolbarmenu.cxx
+++ b/svtools/source/control/toolbarmenu.cxx
@@ -653,6 +653,51 @@ void ToolbarMenu::initWindow()
 
 // --------------------------------------------------------------------
 
+static long ImplGetNativeCheckAndRadioSize( Window* pWin, long& rCheckHeight, long& rRadioHeight, long &rMaxWidth )
+{
+    rMaxWidth = rCheckHeight = rRadioHeight = 0;
+
+    ImplControlValue aVal;
+    Rectangle aNativeBounds;
+    Rectangle aNativeContent;
+    Point tmp( 0, 0 );
+    Rectangle aCtrlRegion( tmp, Size( 100, 15 ) );
+    if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_CHECK_MARK ) )
+    {
+        if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP),
+                                          ControlPart(PART_MENU_ITEM_CHECK_MARK),
+                                          aCtrlRegion,
+                                          ControlState(CTRL_STATE_ENABLED),
+                                          aVal,
+                                          OUString(),
+                                          aNativeBounds,
+                                          aNativeContent )
+        )
+        {
+            rCheckHeight = aNativeBounds.GetHeight();
+            rMaxWidth = aNativeContent.GetWidth();
+        }
+    }
+    if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_RADIO_MARK ) )
+    {
+        if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP),
+                                          ControlPart(PART_MENU_ITEM_RADIO_MARK),
+                                          aCtrlRegion,
+                                          ControlState(CTRL_STATE_ENABLED),
+                                          aVal,
+                                          OUString(),
+                                          aNativeBounds,
+                                          aNativeContent )
+        )
+        {
+            rRadioHeight = aNativeBounds.GetHeight();
+            rMaxWidth = Max (rMaxWidth, aNativeContent.GetWidth());
+        }
+    }
+    return (rCheckHeight > rRadioHeight) ? rCheckHeight : rRadioHeight;
+}
+
+
 Size ToolbarMenu::implCalcSize()
 {
     const long nFontHeight = GetTextHeight();
@@ -724,6 +769,28 @@ Size ToolbarMenu::implCalcSize()
                 pEntry->maSize.Height() = aControlSize.Height() + 1;
             }
 
+            if( pEntry->HasCheck() && !pEntry->mbHasImage )
+            {
+                if( this->IsNativeControlSupported( CTRL_MENU_POPUP,
+                                                     (pEntry->mnBits & MIB_RADIOCHECK)
+                                                     ? PART_MENU_ITEM_CHECK_MARK
+                                                     : PART_MENU_ITEM_RADIO_MARK ) )
+                {
+                    long nCheckHeight = 0, nRadioHeight = 0, nMaxCheckWidth = 0;
+                    ImplGetNativeCheckAndRadioSize( this, nCheckHeight, nRadioHeight, nMaxCheckWidth );
+
+                    long nCtrlHeight = (pEntry->mnBits & MIB_RADIOCHECK) ? nCheckHeight : nRadioHeight;
+                    nMaxTextWidth += nCtrlHeight + 1;
+                }
+                else if( pEntry->mbChecked )
+                {
+                    long nSymbolWidth = (nFontHeight*25)/40;
+                    if ( pEntry->mnBits & MIB_RADIOCHECK )
+                        nSymbolWidth = nFontHeight/2;
+
+                    nMaxTextWidth += nSymbolWidth;
+                }
+            }
         }
     }
     
@@ -1330,50 +1397,6 @@ static void ImplPaintCheckBackground( Window* i_pWindow, const Rectangle& i_rRec
     }
 }
 
-static long ImplGetNativeCheckAndRadioSize( Window* pWin, long& rCheckHeight, long& rRadioHeight, long &rMaxWidth )
-{
-    rMaxWidth = rCheckHeight = rRadioHeight = 0;
-    
-    ImplControlValue aVal;
-    Rectangle aNativeBounds;
-    Rectangle aNativeContent;
-    Point tmp( 0, 0 );
-    Rectangle aCtrlRegion( tmp, Size( 100, 15 ) );
-    if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_CHECK_MARK ) )
-    {
-        if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP),
-                                          ControlPart(PART_MENU_ITEM_CHECK_MARK),
-                                          aCtrlRegion,
-                                          ControlState(CTRL_STATE_ENABLED),
-                                          aVal,
-                                          OUString(),
-                                          aNativeBounds,
-                                          aNativeContent )
-        )
-        {
-            rCheckHeight = aNativeBounds.GetHeight();
-            rMaxWidth = aNativeContent.GetWidth();
-        }
-    }
-    if( pWin->IsNativeControlSupported( CTRL_MENU_POPUP, PART_MENU_ITEM_RADIO_MARK ) )
-    {
-        if( pWin->GetNativeControlRegion( ControlType(CTRL_MENU_POPUP),
-                                          ControlPart(PART_MENU_ITEM_RADIO_MARK),
-                                          aCtrlRegion,
-                                          ControlState(CTRL_STATE_ENABLED),
-                                          aVal,
-                                          OUString(),
-                                          aNativeBounds,
-                                          aNativeContent )
-        )
-        {
-            rRadioHeight = aNativeBounds.GetHeight();
-            rMaxWidth = Max (rMaxWidth, aNativeContent.GetWidth());
-        }
-    }
-    return (rCheckHeight > rRadioHeight) ? rCheckHeight : rRadioHeight;
-}
-
 void ToolbarMenu::implPaint( ToolbarMenuEntry* pThisOnly, bool bHighlighted )
 {
     USHORT nBorder = 0; long nStartY = 0; // from Menu implementations, needed when we support native menu background & scrollable menu
commit 8dd029aa89f4e980442ddc0361c8831421190823
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Thu Feb 10 12:12:28 2011 +0100

    properly fix incorrect recent backport
    
    ACK by Kendy

diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
index d3eb7e7..925696a 100644
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -354,7 +354,9 @@ BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
     {   // reduce paint area only to the handle area
         const int width = kapp->style()->pixelMetric(QStyle::PM_ToolBarHandleExtent);
         QRect rect( 0, 0, width, widgetRect.height());
-        QRegion* clipRegion = new QRegion( widgetRect.x(), widgetRect.y(), width, widgetRect.height());
+        pTempClipRegion = XCreateRegion();
+        XRectangle xRect = { widgetRect.x(), widgetRect.y(), width, widgetRect.height() };
+        XUnionRectWithRegion( &xRect, pTempClipRegion, pTempClipRegion );
         
         QStyleOption option;
         option.state = QStyle::State_Horizontal;
commit 462b3d61e352189d3d4c71acb7f62f6919381fd1
Author: bjoern.michaelsen at canonical.com <Bjoern Michaelsen>
Date:   Mon Feb 7 17:18:02 2011 +0100

    lp#696527: enable human icon theme in LibreOffice
    (cherry picked from commit 00b43fc0d82950e2abc57cca3746d395252bc9e0)
    
    Signed-off-by: Thorsten Behrens <tbehrens at novell.com>

diff --git a/vcl/inc/vcl/settings.hxx b/vcl/inc/vcl/settings.hxx
index 30308b2..5fa547d 100644
--- a/vcl/inc/vcl/settings.hxx
+++ b/vcl/inc/vcl/settings.hxx
@@ -525,7 +525,8 @@ private:
 #define STYLE_SYMBOLS_TANGO         ((ULONG)5)
 #define STYLE_SYMBOLS_OXYGEN        ((ULONG)6)
 #define STYLE_SYMBOLS_CLASSIC		((ULONG)7)
-#define STYLE_SYMBOLS_THEMES_MAX	((ULONG)8)
+#define STYLE_SYMBOLS_HUMAN		((ULONG)8)
+#define STYLE_SYMBOLS_THEMES_MAX	((ULONG)9)
 
 #define STYLE_MENUIMAGES_OFF  ((USHORT)0)
 #define STYLE_MENUIMAGES_ON   ((USHORT)1)
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 20adcc8..ddcaf0d 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -712,6 +712,7 @@ void StyleSettings::Set3DColors( const Color& rColor )
         case STYLE_SYMBOLS_TANGO:      return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("tango"));
         case STYLE_SYMBOLS_OXYGEN:     return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("oxygen"));
         case STYLE_SYMBOLS_CLASSIC:    return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("classic"));
+        case STYLE_SYMBOLS_HUMAN:      return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("human"));
     }
 
     return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("auto"));
@@ -735,6 +736,8 @@ ULONG StyleSettings::ImplNameToSymbolsStyle( const ::rtl::OUString &rName ) cons
         return STYLE_SYMBOLS_OXYGEN;
     else if ( rName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("classic")) )
         return STYLE_SYMBOLS_CLASSIC;
+    else if ( rName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("human")) )
+        return STYLE_SYMBOLS_HUMAN;
 
     return STYLE_SYMBOLS_AUTO;
 }


More information about the Libreoffice-commits mailing list