[Libreoffice-commits] core.git: Branch 'feature/gsoc-tiled-rendering' - 195 commits - accessibility/source basctl/source basegfx/source basic/inc basic/source bean/com bin/lint-ui.py bridges/source chart2/qa chart2/source comphelper/source compilerplugins/clang connectivity/source cppuhelper/source cppu/source cui/source cui/uiconfig dbaccess/qa dbaccess/source desktop/source desktop/test dictionaries editeng/source embeddedobj/source extensions/source filter/source forms/source formula/source fpicker/source framework/inc framework/qa framework/source helpcontent2 i18npool/qa i18npool/source icon-themes/breeze icon-themes/galaxy include/basic include/comphelper include/cppuhelper include/formula include/LibreOfficeKit include/rtl include/sfx2 include/svl include/svx include/uno include/unotools include/vcl jurt/com jvmfwk/plugins Library_merged.mk libreofficekit/qa libreofficekit/source linguistic/source odk/examples officecfg/registry oox/source postprocess/CustomTarget_images.mk qadevOOo/runner qadevOOo/tests readlicense_oo/license reportdesign/inc reportdesign/source sal/qa sal/rtl sal/util sax/source sc/inc sc/Library_scfilt.mk scp2/AutoInstall.mk scp2/inc scp2/source sc/source sdext/source sd/qa sd/sdi sd/source sd/uiconfig sfx2/Module_sfx2.mk sfx2/PythonTest_sfx2_python.mk sfx2/qa sfx2/source solenv/gbuild sot/source starmath/inc starmath/source svgio/source svl/source svtools/source svx/inc svx/sdi svx/source sw/inc sw/qa sw/source sw/uiconfig ucb/source unotest/source unotools/source vcl/generic vcl/headless vcl/inc vcl/Library_vcl.mk vcl/source vcl/unx vcl/win wizards/com writerfilter/documentation writerfilter/source xmlhelp/source xmloff/source xmlsecurity/source

Pranav Kant pranavk at gnome.org
Thu Jun 25 11:21:00 PDT 2015


Rebased ref, commits from common ancestor:
commit b1b1d4d1436a10d30238be4c21396e7becbd35c3
Author: Pranav Kant <pranavk at gnome.org>
Date:   Wed Jun 24 02:02:39 2015 +0530

    lokdocview: Handle DELETE key
    
    Change-Id: I58d0c36decf81c812c108458b449402416ebcc2d

diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index ca7167b..62f1e61 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -245,6 +245,9 @@ signalKey (GtkWidget* pWidget, GdkEventKey* pEvent)
     case GDK_KEY_BackSpace:
         nKeyCode = com::sun::star::awt::Key::BACKSPACE;
         break;
+    case GDK_KEY_Delete:
+        nKeyCode = com::sun::star::awt::Key::DELETE;
+        break;
     case GDK_KEY_Return:
         nKeyCode = com::sun::star::awt::Key::RETURN;
         break;
commit 36f579009678a31ebc34d2fb131bfd96060d3035
Author: Pranav Kant <pranavk at gnome.org>
Date:   Tue Jun 23 14:37:09 2015 +0530

    tilebuffer: Add timer to measure paintTile() call
    
    Change-Id: I2645863c7445e17d77e2c4e2dc24e22f8685034e

diff --git a/libreofficekit/source/gtk/tilebuffer.cxx b/libreofficekit/source/gtk/tilebuffer.cxx
index 3f22f98..60aa16f 100644
--- a/libreofficekit/source/gtk/tilebuffer.cxx
+++ b/libreofficekit/source/gtk/tilebuffer.cxx
@@ -91,7 +91,7 @@ Tile& TileBuffer::getTile(int x, int y, float aZoom)
         aTileRectangle.x = pixelToTwip(nTileSizePixels, aZoom) * y;
         aTileRectangle.y = pixelToTwip(nTileSizePixels, aZoom) * x;
 
-        g_info ("Rendering (%d, %d)", x, y);
+        g_test_timer_start();
         m_pLOKDocument->pClass->paintTile(m_pLOKDocument,
                                           pBuffer,
                                           nTileSizePixels, nTileSizePixels,
@@ -99,6 +99,9 @@ Tile& TileBuffer::getTile(int x, int y, float aZoom)
                                           pixelToTwip(nTileSizePixels, aZoom),
                                           pixelToTwip(nTileSizePixels, aZoom));
 
+        double elapsedTime = g_test_timer_elapsed();
+        g_info ("Rendered (%d, %d) in %f seconds", x, y, elapsedTime);
+
         //create a mapping for it
         m_mTiles[index].setPixbuf(pPixBuf);
         m_mTiles[index].valid = true;
commit 133289917ff62df014693e308bf3b105cdb74d6f
Author: Pranav Kant <pranavk at gnome.org>
Date:   Tue Jun 23 02:58:38 2015 +0530

    lokdocview: Remove superfluous *_post_key()
    
    Instead directly let LOKDocView handle the input.
    
    Change-Id: I260a460df23c3e2e5c78d8b363bb864ae5c63dab

diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index 3a1628b..962f9d9 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -74,10 +74,6 @@ void                           lok_doc_view_post_command           (LOKDocView*
                                                                     const char* pCommand,
                                                                     const char* pArguments);
 
-/// Posts a keyboard event to LibreOfficeKit.
-void                           lok_doc_view_post_key               (LOKDocView* pDocView,
-                                                                    GdkEvent* pEvent);
-
 float                          lok_doc_view_pixel_to_twip          (LOKDocView* pDocView,
                                                                     float fInput);
 
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index c854288..18815d6 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -191,19 +191,6 @@ static void getVisibleAreaTwips(GdkRectangle* pArea)
 #endif
 }
 
-
-/// Handles the key-press-event of the window.
-static gboolean signalKey(GtkWidget* /*pWidget*/, GdkEvent* pEvent, gpointer/* pData*/)
-{
-    LOKDocView* pLOKDocView = LOK_DOC_VIEW(pDocView);
-    if (!gtk_widget_get_visible(pFindbar) && bool(lok_doc_view_get_edit(pLOKDocView)))
-        {
-            lok_doc_view_post_key(pLOKDocView, pEvent);
-            return TRUE;
-        }
-    return FALSE;
-}
-
 /// Searches for the next or previous text of pFindbarEntry.
 static void doSearch(bool bBackwards)
 {
@@ -541,10 +528,6 @@ int main( int argc, char* argv[] )
     g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), NULL);
     g_signal_connect(pDocView, "hyperlink-clicked", G_CALLBACK(signalHyperlink), NULL);
 
-    // Input handling.
-    g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), pDocView);
-    g_signal_connect(pWindow, "key-release-event", G_CALLBACK(signalKey), pDocView);
-
     // Scrolled window for DocView
     pScrolledWindow = gtk_scrolled_window_new(0, 0);
     gtk_widget_set_hexpand (pScrolledWindow, TRUE);
@@ -568,6 +551,11 @@ int main( int argc, char* argv[] )
     g_signal_connect(G_OBJECT(pPartModeComboBox), "changed", G_CALLBACK(changePartMode), 0);
     g_signal_connect(G_OBJECT(pPartSelector), "changed", G_CALLBACK(changePart), 0);
 
+    // Make only LOKDocView widget as focussable
+    GList *focusChain = NULL;
+    focusChain = g_list_append( focusChain, pDocView );
+    gtk_container_set_focus_chain ( GTK_CONTAINER (pVBox), focusChain );
+
     gtk_main();
 
     return 0;
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 988397a..ca7167b 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -226,24 +226,21 @@ isEmptyRectangle(const GdkRectangle& rRectangle)
     return rRectangle.x == 0 && rRectangle.y == 0 && rRectangle.width == 0 && rRectangle.height == 0;
 }
 
-static void
-signalKey (LOKDocView* pDocView, const GdkEvent* pEvent)
+static gboolean
+signalKey (GtkWidget* pWidget, GdkEventKey* pEvent)
 {
+    LOKDocView* pDocView = LOK_DOC_VIEW(pWidget);
     LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     int nCharCode = 0;
     int nKeyCode = 0;
-    guint keyval;
-    GdkModifierType state;
-    gdk_event_get_keyval (pEvent, &keyval);
-    gdk_event_get_state (pEvent, &state);
 
     if (!priv->m_bEdit)
     {
         g_info("signalKey: not in edit mode, ignore");
-        return;
+        return FALSE;
     }
 
-    switch (keyval)
+    switch (pEvent->keyval)
     {
     case GDK_KEY_BackSpace:
         nKeyCode = com::sun::star::awt::Key::BACKSPACE;
@@ -270,22 +267,24 @@ signalKey (LOKDocView* pDocView, const GdkEvent* pEvent)
         nKeyCode = com::sun::star::awt::Key::RIGHT;
         break;
     default:
-        if (keyval >= GDK_KEY_F1 && keyval <= GDK_KEY_F26)
-            nKeyCode = com::sun::star::awt::Key::F1 + (keyval - GDK_KEY_F1);
+        if (pEvent->keyval >= GDK_KEY_F1 && pEvent->keyval <= GDK_KEY_F26)
+            nKeyCode = com::sun::star::awt::Key::F1 + (pEvent->keyval - GDK_KEY_F1);
         else
-            nCharCode = gdk_keyval_to_unicode(keyval);
+            nCharCode = gdk_keyval_to_unicode(pEvent->keyval);
     }
 
     // rsc is not public API, but should be good enough for debugging purposes.
     // If this is needed for real, then probably a new param of type
     // css::awt::KeyModifier is needed in postKeyEvent().
-    if (state & GDK_SHIFT_MASK)
+    if (pEvent->state & GDK_SHIFT_MASK)
         nKeyCode |= KEY_SHIFT;
 
     if (pEvent->type == GDK_KEY_RELEASE)
         priv->m_pDocument->pClass->postKeyEvent(priv->m_pDocument, LOK_KEYEVENT_KEYUP, nCharCode, nKeyCode);
     else
         priv->m_pDocument->pClass->postKeyEvent(priv->m_pDocument, LOK_KEYEVENT_KEYINPUT, nCharCode, nKeyCode);
+
+    return FALSE;
 }
 
 static gboolean
@@ -1151,6 +1150,8 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
     pWidgetClass->draw = lok_doc_view_draw;
     pWidgetClass->button_press_event = lok_doc_view_signal_button;
     pWidgetClass->button_release_event = lok_doc_view_signal_button;
+    pWidgetClass->key_press_event = signalKey;
+    pWidgetClass->key_release_event = signalKey;
     pWidgetClass->motion_notify_event = lok_doc_view_signal_motion;
 
     /**
@@ -1431,6 +1432,8 @@ lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath)
         gtk_widget_set_size_request(GTK_WIDGET(pDocView),
                                     nDocumentWidthPixels,
                                     nDocumentHeightPixels);
+        gtk_widget_set_can_focus(GTK_WIDGET(pDocView), TRUE);
+        gtk_widget_grab_focus(GTK_WIDGET(pDocView));
     }
     return TRUE;
 }
@@ -1579,19 +1582,6 @@ lok_doc_view_post_command (LOKDocView* pDocView,
 }
 
 /**
- * lok_doc_view_post_key:
- * @pDocView: the #LOKDocView instance
- * @pEvent: the #GdkEventKey containing information about the event
- *
- * This methods forwards your key events to the LO core.
-*/
-SAL_DLLPUBLIC_EXPORT void
-lok_doc_view_post_key (LOKDocView* pDocView, GdkEvent* pEvent)
-{
-    signalKey(pDocView, pEvent);
-}
-
-/**
  * lok_doc_view_pixel_to_twip:
  * @pDocView: The #LOKDocView instance
  * @fInput: The value in pixels to convert to twips
commit 1450f6b1d662dbbb335e917c221f544b76ea6b4d
Author: Pranav Kant <pranavk at gnome.org>
Date:   Tue Jun 23 01:52:44 2015 +0530

    lokdocview: Don't handle hyperlink clicks
    
    Instead emit the signal 'hyperlink-clicked', and let the
    application decide how it wants to handle the hyperlink clicks.
    
    Change-Id: Ief72bbd16727e140cacf28b852ad43952c02f7ae

diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index a583323..c854288 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -311,6 +311,17 @@ static void signalPart(LOKDocView* /*pLOKDocView*/, int nPart, gpointer /*pData*
     g_bPartSelectorBroadcast = true;
 }
 
+static void signalHyperlink(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointer /*pData*/)
+{
+    GError* pError = NULL;
+    gtk_show_uri(NULL, pPayload, GDK_CURRENT_TIME, &pError);
+    if (pError != NULL)
+    {
+        g_warning("Unable to show URI %s : %s", pPayload, pError->message);
+        g_error_free(pError);
+    }
+}
+
 /// User clicked on a cmmand button -> inform LOKDocView.
 static void toggleToolItem(GtkWidget* pWidget, gpointer /*pData*/)
 {
@@ -528,6 +539,7 @@ int main( int argc, char* argv[] )
     g_signal_connect(pDocView, "command-changed", G_CALLBACK(signalCommand), NULL);
     g_signal_connect(pDocView, "search-not-found", G_CALLBACK(signalSearch), NULL);
     g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), NULL);
+    g_signal_connect(pDocView, "hyperlink-clicked", G_CALLBACK(signalHyperlink), NULL);
 
     // Input handling.
     g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), pDocView);
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index cff02ea..988397a 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -324,6 +324,12 @@ setPart(LOKDocView* pDocView, const std::string& rString)
     g_signal_emit(pDocView, doc_view_signals[PART_CHANGED], 0, std::stoi(rString));
 }
 
+static void
+hyperlinkClicked(LOKDocView* pDocView, const std::string& rString)
+{
+    g_signal_emit(pDocView, doc_view_signals[HYPERLINK_CLICKED], 0, rString.c_str());
+}
+
 /// Implementation of the global callback handler, invoked by globalCallback();
 static gboolean
 globalCallback (gpointer pData)
@@ -507,8 +513,7 @@ callback (gpointer pData)
     break;
     case LOK_CALLBACK_HYPERLINK_CLICKED:
     {
-        GError* pError = NULL;
-        gtk_show_uri(NULL, pCallback->m_aPayload.c_str(), GDK_CURRENT_TIME, &pError);
+        hyperlinkClicked(pDocView, pCallback->m_aPayload);
     }
     break;
     case LOK_CALLBACK_STATE_CHANGED:
@@ -1353,7 +1358,7 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
      * @aHyperlink: the URI which the application should handle
      */
     doc_view_signals[HYPERLINK_CLICKED] =
-        g_signal_new("hyperlinked-clicked",
+        g_signal_new("hyperlink-clicked",
                      G_TYPE_FROM_CLASS(pGObjectClass),
                      G_SIGNAL_RUN_FIRST,
                      0,
commit 54106fae68149c0b1dbb4f6ece133fefacacc322
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 17:38:24 2015 +0200

    SwTextFormatInfo::SwTextFormatInfo: use vcl::RenderContext
    
    Change-Id: I8ff1647bdf8c46d395c398c97b97066d7b128cdb

diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index 79cf3f3..c42f059 100644
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -491,7 +491,7 @@ com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > SwTextFrm::Get
     com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > tabs(1);
     ::com::sun::star::style::TabStop ts;
 
-    SwTextFormatInfo     aInf( this );
+    SwTextFormatInfo     aInf( getRootFrm()->GetCurrShell()->GetOut(), this );
     SwTextFormatter      aLine( this, &aInf );
     SwTextCursor         TextCursor( this, &aInf );
     const Point aCharPos( TextCursor.GetTopLeft() );
@@ -855,7 +855,7 @@ bool SwTextFrm::CalcPreps()
             {
                 SWAP_IF_NOT_SWAPPED swap( this );
 
-                SwTextFormatInfo aInf( this );
+                SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this );
                 SwTextFormatter aLine( this, &aInf );
 
                 WidowsAndOrphans aFrmBreak( this );
@@ -1650,7 +1650,7 @@ void SwTextFrm::_Format( SwParaPortion *pPara )
     if ( IsVertical() )
         SwapWidthAndHeight();
 
-    SwTextFormatInfo aInf( this );
+    SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this );
     SwTextFormatter  aLine( this, &aInf );
 
     HideAndShowObjects();
@@ -1877,7 +1877,7 @@ bool SwTextFrm::FormatQuick( bool bForceQuickFormat )
     SwFrmSwapper aSwapper( this, true );
 
     TextFrmLockGuard aLock(this);
-    SwTextFormatInfo aInf( this, false, true );
+    SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this, false, true );
     if( 0 != aInf.MaxHyph() )   // Respect MaxHyphen!
         return false;
 
diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 741bef7..ae679c3 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -1467,10 +1467,10 @@ void SwTextFormatInfo::Init()
     SetPaintOfst(0);
 }
 
-SwTextFormatInfo::SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL,
+SwTextFormatInfo::SwTextFormatInfo(OutputDevice* pRenderContext, SwTextFrm *pFrame, const bool bInterHyphL,
                                    const bool bQuickL, const bool bTst)
 {
-    CtorInitTextFormatInfo(pFrame->getRootFrm()->GetCurrShell()->GetOut(), pFrame, bInterHyphL, bQuickL, bTst);
+    CtorInitTextFormatInfo(pRenderContext, pFrame, bInterHyphL, bQuickL, bTst);
 }
 
 /**
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index b7e33f4..107e6cb 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -563,7 +563,7 @@ class SwTextFormatInfo : public SwTextPaintInfo
 public:
     void CtorInitTextFormatInfo( OutputDevice* pRenderContext, SwTextFrm *pFrm, const bool bInterHyph = false,
         const bool bQuick = false, const bool bTst = false );
-    SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL = false,
+    SwTextFormatInfo(OutputDevice* pRenderContext, SwTextFrm *pFrame, const bool bInterHyphL = false,
             const bool bQuickL = false, const bool bTst = false);
 
     // For the formatting inside a double line in a line (multi-line portion)
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index c5fe920..18f8979 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -754,7 +754,7 @@ void SwTextFrm::CalcLineSpace()
 
     Size aNewSize( Prt().SSize() );
 
-    SwTextFormatInfo aInf( this );
+    SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this );
     SwTextFormatter aLine( this, &aInf );
     if( aLine.GetDropLines() )
     {
@@ -1876,7 +1876,7 @@ SwTestFormat::SwTestFormat( SwTextFrm* pTextFrm, const SwFrm* pPre, SwTwips nMax
     if ( pFrm->IsVertical() )
         pFrm->SwapWidthAndHeight();
 
-    SwTextFormatInfo aInf( pFrm, false, true, true );
+    SwTextFormatInfo aInf( pFrm->getRootFrm()->GetCurrShell()->GetOut(), pFrm, false, true, true );
     SwTextFormatter  aLine( pFrm, &aInf );
 
     pFrm->_Format( aLine, aInf );
@@ -2110,7 +2110,7 @@ SwTwips SwTextFrm::CalcFitToContent()
     // #i31490#
     TextFrmLockGuard aLock( this );
 
-    SwTextFormatInfo aInf( this, false, true, true );
+    SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this, false, true, true );
     aInf.SetIgnoreFly( true );
     SwTextFormatter  aLine( this, &aInf );
     SwHookOut aHook( aInf );
@@ -2170,7 +2170,7 @@ void SwTextFrm::CalcAdditionalFirstLineOffset()
             TextFrmLockGuard aLock( this );
 
             // simulate text formatting
-            SwTextFormatInfo aInf( this, false, true, true );
+            SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this, false, true, true );
             aInf.SetIgnoreFly( true );
             SwTextFormatter aLine( this, &aInf );
             SwHookOut aHook( aInf );
diff --git a/sw/source/core/text/txtftn.cxx b/sw/source/core/text/txtftn.cxx
index 2365d6b..dc1a2f7 100644
--- a/sw/source/core/text/txtftn.cxx
+++ b/sw/source/core/text/txtftn.cxx
@@ -144,7 +144,7 @@ bool SwTextFrm::CalcPrepFootnoteAdjust()
             bReArrange = false;
         if( !pCont || !pFootnote || bReArrange != (pFootnote->FindFootnoteBossFrm() == pBoss) )
         {
-            SwTextFormatInfo aInf( this );
+            SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this );
             SwTextFormatter aLine( this, &aInf );
             aLine.TruncLines();
             SetPara( 0 ); // May be deleted!
diff --git a/sw/source/core/text/txthyph.cxx b/sw/source/core/text/txthyph.cxx
index 8a410b3..5bf7d25 100644
--- a/sw/source/core/text/txthyph.cxx
+++ b/sw/source/core/text/txthyph.cxx
@@ -28,6 +28,7 @@
 #include <itrform2.hxx>
 #include <guess.hxx>
 #include <splargs.hxx>
+#include <rootfrm.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -78,7 +79,7 @@ bool SwTextFrm::Hyphenate( SwInterHyphInfo &rHyphInf )
         if ( IsVertical() )
             SwapWidthAndHeight();
 
-        SwTextFormatInfo aInf( this, true ); // true for interactive hyph!
+        SwTextFormatInfo aInf( getRootFrm()->GetCurrShell()->GetOut(), this, true ); // true for interactive hyph!
         SwTextFormatter aLine( this, &aInf );
         aLine.CharToLine( rHyphInf.nStart );
 
commit a5fe6ea091ae7e897b11b62b9b749b6194d34585
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 17:12:55 2015 +0200

    SwTextFormatInfo::CtorInitTextFormatInfo: use vcl::RenderContext
    
    Change-Id: I0f775bdfaf6a098be25d053f87b1bcf86d533297

diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index eb61728..79cf3f3 100644
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -1609,7 +1609,7 @@ void SwTextFrm::FormatOnceMore( SwTextFormatter &rLine, SwTextFormatInfo &rInf )
             // If something went wrong, we need to reformat again
             if( !bGoOn )
             {
-                rInf.CtorInitTextFormatInfo( this );
+                rInf.CtorInitTextFormatInfo( getRootFrm()->GetCurrShell()->GetOut(), this );
                 rLine.CtorInitTextFormatter( this, &rInf );
                 rLine.SetDropLines( 1 );
                 rLine.CalcDropHeight( 1 );
diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index bac9704..741bef7 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -1351,10 +1351,10 @@ bool SwTextFormatInfo::InitHyph( const bool bAutoHyphen )
     return bAuto;
 }
 
-void SwTextFormatInfo::CtorInitTextFormatInfo( SwTextFrm *pNewFrm, const bool bNewInterHyph,
+void SwTextFormatInfo::CtorInitTextFormatInfo( OutputDevice* pRenderContext, SwTextFrm *pNewFrm, const bool bNewInterHyph,
                                 const bool bNewQuick, const bool bTst )
 {
-    CtorInitTextPaintInfo( pNewFrm->getRootFrm()->GetCurrShell()->GetOut(), pNewFrm, SwRect() );
+    CtorInitTextPaintInfo( pRenderContext, pNewFrm, SwRect() );
 
     bQuick = bNewQuick;
     bInterHyph = bNewInterHyph;
@@ -1470,7 +1470,7 @@ void SwTextFormatInfo::Init()
 SwTextFormatInfo::SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL,
                                    const bool bQuickL, const bool bTst)
 {
-    CtorInitTextFormatInfo(pFrame, bInterHyphL, bQuickL, bTst);
+    CtorInitTextFormatInfo(pFrame->getRootFrm()->GetCurrShell()->GetOut(), pFrame, bInterHyphL, bQuickL, bTst);
 }
 
 /**
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index 5cb0e50..b7e33f4 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -561,7 +561,7 @@ class SwTextFormatInfo : public SwTextPaintInfo
     bool _CheckFootnotePortion( SwLineLayout* pCurr );
 
 public:
-    void CtorInitTextFormatInfo( SwTextFrm *pFrm, const bool bInterHyph = false,
+    void CtorInitTextFormatInfo( OutputDevice* pRenderContext, SwTextFrm *pFrm, const bool bInterHyph = false,
         const bool bQuick = false, const bool bTst = false );
     SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL = false,
             const bool bQuickL = false, const bool bTst = false);
commit d3456256eafa376abaad50dc980ab94032185af6
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 17:06:30 2015 +0200

    sw: outline SwTextFormatInfo ctor
    
    Change-Id: I07b3a7768def547a34cbcdd8966157065605d5fb

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 06bdcc0..bac9704 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -1467,6 +1467,12 @@ void SwTextFormatInfo::Init()
     SetPaintOfst(0);
 }
 
+SwTextFormatInfo::SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL,
+                                   const bool bQuickL, const bool bTst)
+{
+    CtorInitTextFormatInfo(pFrame, bInterHyphL, bQuickL, bTst);
+}
+
 /**
  * There are a few differences between a copy constructor
  * and the following constructor for multi-line formatting.
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index 0241824..5cb0e50 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -563,9 +563,8 @@ class SwTextFormatInfo : public SwTextPaintInfo
 public:
     void CtorInitTextFormatInfo( SwTextFrm *pFrm, const bool bInterHyph = false,
         const bool bQuick = false, const bool bTst = false );
-    inline SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL = false,
-            const bool bQuickL = false, const bool bTst = false)
-           { CtorInitTextFormatInfo( pFrame, bInterHyphL, bQuickL, bTst ); }
+    SwTextFormatInfo(SwTextFrm *pFrame, const bool bInterHyphL = false,
+            const bool bQuickL = false, const bool bTst = false);
 
     // For the formatting inside a double line in a line (multi-line portion)
     // we need a modified text-format-info:
commit 0c33e10b594aa07c4e9adadae59e5c03a4fdc29c
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 16:44:55 2015 +0200

    SwTextPaintInfo::CtorInitTextPaintInfo: use vcl::RenderContext
    
    Change-Id: I1931ec139798d2f2eb956fd0590ab98ce1a65c3c

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 2ff3518..06bdcc0 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -487,9 +487,9 @@ bool SwTextSizeInfo::_HasHint( const SwTextNode* pTextNode, sal_Int32 nPos )
     return pTextNode->GetTextAttrForCharAt(nPos);
 }
 
-void SwTextPaintInfo::CtorInitTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint )
+void SwTextPaintInfo::CtorInitTextPaintInfo( OutputDevice* pRenderContext, SwTextFrm *pFrame, const SwRect &rPaint )
 {
-    CtorInitTextSizeInfo( pFrame->getRootFrm()->GetCurrShell()->GetOut(), pFrame );
+    CtorInitTextSizeInfo( pRenderContext, pFrame );
     aTextFly.CtorInitTextFly( pFrame ),
     aPaintRect = rPaint;
     nSpaceIdx = 0;
@@ -533,7 +533,7 @@ SwTextPaintInfo::SwTextPaintInfo( const SwTextPaintInfo &rInf )
 
 SwTextPaintInfo::SwTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint )
 {
-    CtorInitTextPaintInfo( pFrame, rPaint );
+    CtorInitTextPaintInfo( pFrame->getRootFrm()->GetCurrShell()->GetOut(), pFrame, rPaint );
 }
 
 extern Color aGlobalRetoucheColor;
@@ -1354,7 +1354,7 @@ bool SwTextFormatInfo::InitHyph( const bool bAutoHyphen )
 void SwTextFormatInfo::CtorInitTextFormatInfo( SwTextFrm *pNewFrm, const bool bNewInterHyph,
                                 const bool bNewQuick, const bool bTst )
 {
-    CtorInitTextPaintInfo( pNewFrm, SwRect() );
+    CtorInitTextPaintInfo( pNewFrm->getRootFrm()->GetCurrShell()->GetOut(), pNewFrm, SwRect() );
 
     bQuick = bNewQuick;
     bInterHyph = bNewInterHyph;
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index 261392f..0241824 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -403,7 +403,7 @@ public:
     SwTextPaintInfo( const SwTextPaintInfo &rInf );
     SwTextPaintInfo( const SwTextPaintInfo &rInf, const OUString* pText );
 
-    void CtorInitTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint );
+    void CtorInitTextPaintInfo( OutputDevice* pRenderContext, SwTextFrm *pFrame, const SwRect &rPaint );
 
     void SetBack( const SvxBrushItem *pItem,
                   const SwRect &rRect ) { pBrushItem = pItem; aItemRect = rRect;}
commit 9829d6ab01e15be7e81f971eac6ba5e402ca5189
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 16:33:37 2015 +0200

    sw: outline SwTextPaintInfo ctor
    
    Change-Id: Ie57e1f5abc91286662804e7528afd062d1427fee

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 3e41ec5..2ff3518 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -531,6 +531,11 @@ SwTextPaintInfo::SwTextPaintInfo( const SwTextPaintInfo &rInf )
       nSpaceIdx( rInf.GetSpaceIdx() )
 { }
 
+SwTextPaintInfo::SwTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint )
+{
+    CtorInitTextPaintInfo( pFrame, rPaint );
+}
+
 extern Color aGlobalRetoucheColor;
 
 /// Returns if the current background color is dark.
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index 262fbb1..261392f 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -410,8 +410,7 @@ public:
     const SvxBrushItem *GetBrushItem() const { return pBrushItem; }
     const SwRect       &GetBrushRect() const { return aItemRect;  }
 
-    inline SwTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint )
-           { CtorInitTextPaintInfo( pFrame, rPaint ); }
+    SwTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint );
 
     inline SwTwips X() const { return aPos.X(); }
     inline void X( const long nNew ) { aPos.X() = nNew; }
commit 8af3974013dbae4aa83b13c6fd6c6e8fd04ac072
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 16:23:25 2015 +0200

    SwTextSizeInfo::CtorInitTextSizeInfo: use vcl::RenderContext
    
    Change-Id: I6dfceb02b57d886dd8025520e5ed21a2ad46a5b1

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 3dae3d3..3e41ec5 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -251,7 +251,7 @@ SwTextSizeInfo::SwTextSizeInfo( const SwTextSizeInfo &rNew )
 #endif
 }
 
-void SwTextSizeInfo::CtorInitTextSizeInfo( SwTextFrm *pFrame, SwFont *pNewFnt,
+void SwTextSizeInfo::CtorInitTextSizeInfo( OutputDevice* pRenderContext, SwTextFrm *pFrame, SwFont *pNewFnt,
                    const sal_Int32 nNewIdx, const sal_Int32 nNewLen )
 {
     m_pKanaComp = NULL;
@@ -264,9 +264,9 @@ void SwTextSizeInfo::CtorInitTextSizeInfo( SwTextFrm *pFrame, SwFont *pNewFnt,
     // Get the output and reference device
     if ( m_pVsh )
     {
-        m_pOut = m_pVsh->GetOut();
+        m_pOut = pRenderContext;
         m_pRef = &m_pVsh->GetRefDev();
-        m_bOnWin = m_pVsh->GetWin() || OUTDEV_WINDOW == m_pOut->GetOutDevType();
+        m_bOnWin = m_pVsh->GetWin() || OUTDEV_WINDOW == m_pOut->GetOutDevType() || m_pVsh->isOutputToWindow();
     }
     else
     {
@@ -368,7 +368,7 @@ SwTextSizeInfo::SwTextSizeInfo( SwTextFrm *pTextFrm, SwFont *pTextFnt,
                const sal_Int32 nLength )
     : m_bOnWin(false)
 {
-    CtorInitTextSizeInfo( pTextFrm, pTextFnt, nIndex, nLength );
+    CtorInitTextSizeInfo( pTextFrm->getRootFrm()->GetCurrShell()->GetOut(), pTextFrm, pTextFnt, nIndex, nLength );
 }
 
 void SwTextSizeInfo::SelectFont()
@@ -489,7 +489,7 @@ bool SwTextSizeInfo::_HasHint( const SwTextNode* pTextNode, sal_Int32 nPos )
 
 void SwTextPaintInfo::CtorInitTextPaintInfo( SwTextFrm *pFrame, const SwRect &rPaint )
 {
-    CtorInitTextSizeInfo( pFrame );
+    CtorInitTextSizeInfo( pFrame->getRootFrm()->GetCurrShell()->GetOut(), pFrame );
     aTextFly.CtorInitTextFly( pFrame ),
     aPaintRect = rPaint;
     nSpaceIdx = 0;
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index f6f1194..262fbb1 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -191,7 +191,7 @@ protected:
     sal_uInt8 m_nDirection : 2; // writing direction: 0/90/180/270 degree
 
 protected:
-    void CtorInitTextSizeInfo( SwTextFrm *pFrm, SwFont *pFnt = 0,
+    void CtorInitTextSizeInfo( OutputDevice* pRenderContext, SwTextFrm *pFrm, SwFont *pFnt = 0,
                    const sal_Int32 nIdx = 0,
                    const sal_Int32 nLen = COMPLETE_STRING );
     SwTextSizeInfo();
commit d7eacc579fb0874e9602b5c0714ac00bd520322a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 15:47:15 2015 +0200

    sw: outline SwTextSizeInfo ctors
    
    Change-Id: I8964701bf5b1ecdb11851d7cc8540175e007dd2b

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 861f412..3dae3d3 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -188,6 +188,35 @@ inline sal_Int32 GetMinLen( const SwTextSizeInfo &rInf )
     return std::min(nTextLen, nInfLen);
 }
 
+SwTextSizeInfo::SwTextSizeInfo()
+: m_pKanaComp(0)
+, m_pVsh(0)
+, m_pOut(0)
+, m_pRef(0)
+, m_pFnt(0)
+, m_pUnderFnt(0)
+, m_pFrm(0)
+, m_pOpt(0)
+, m_pText(0)
+, m_nIdx(0)
+, m_nLen(0)
+, m_nKanaIdx(0)
+, m_bOnWin    (false)
+, m_bNotEOL   (false)
+, m_bURLNotify(false)
+, m_bStopUnderflow(false)
+, m_bFootnoteInside(false)
+, m_bOtherThanFootnoteInside(false)
+, m_bMulti(false)
+, m_bFirstMulti(false)
+, m_bRuby(false)
+, m_bHanging(false)
+, m_bScriptSpace(false)
+, m_bForbiddenChars(false)
+, m_bSnapToGrid(false)
+, m_nDirection(0)
+{}
+
 SwTextSizeInfo::SwTextSizeInfo( const SwTextSizeInfo &rNew )
     : SwTextInfo( rNew ),
       m_pKanaComp(rNew.GetpKanaComp()),
@@ -334,6 +363,14 @@ SwTextSizeInfo::SwTextSizeInfo( const SwTextSizeInfo &rNew, const OUString* pTex
     SetLen( GetMinLen( *this ) );
 }
 
+SwTextSizeInfo::SwTextSizeInfo( SwTextFrm *pTextFrm, SwFont *pTextFnt,
+               const sal_Int32 nIndex,
+               const sal_Int32 nLength )
+    : m_bOnWin(false)
+{
+    CtorInitTextSizeInfo( pTextFrm, pTextFnt, nIndex, nLength );
+}
+
 void SwTextSizeInfo::SelectFont()
 {
      // The path needs to go via ChgPhysFnt or the FontMetricCache gets confused.
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index 150ef16..f6f1194 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -194,34 +194,7 @@ protected:
     void CtorInitTextSizeInfo( SwTextFrm *pFrm, SwFont *pFnt = 0,
                    const sal_Int32 nIdx = 0,
                    const sal_Int32 nLen = COMPLETE_STRING );
-    SwTextSizeInfo()
-        : m_pKanaComp(0)
-        , m_pVsh(0)
-        , m_pOut(0)
-        , m_pRef(0)
-        , m_pFnt(0)
-        , m_pUnderFnt(0)
-        , m_pFrm(0)
-        , m_pOpt(0)
-        , m_pText(0)
-        , m_nIdx(0)
-        , m_nLen(0)
-        , m_nKanaIdx(0)
-        , m_bOnWin    (false)
-        , m_bNotEOL   (false)
-        , m_bURLNotify(false)
-        , m_bStopUnderflow(false)
-        , m_bFootnoteInside(false)
-        , m_bOtherThanFootnoteInside(false)
-        , m_bMulti(false)
-        , m_bFirstMulti(false)
-        , m_bRuby(false)
-        , m_bHanging(false)
-        , m_bScriptSpace(false)
-        , m_bForbiddenChars(false)
-        , m_bSnapToGrid(false)
-        , m_nDirection(0)
-        {}
+    SwTextSizeInfo();
 public:
     SwTextSizeInfo( const SwTextSizeInfo &rInf );
     SwTextSizeInfo( const SwTextSizeInfo &rInf, const OUString* pText,
@@ -230,11 +203,7 @@ public:
 
     SwTextSizeInfo( SwTextFrm *pTextFrm, SwFont *pTextFnt = 0,
                    const sal_Int32 nIndex = 0,
-                   const sal_Int32 nLength = COMPLETE_STRING )
-        : m_bOnWin(false)
-    {
-        CtorInitTextSizeInfo( pTextFrm, pTextFnt, nIndex, nLength );
-    }
+                   const sal_Int32 nLength = COMPLETE_STRING );
 
     // GetMultiAttr returns the text attribute of the multiportion,
     // if rPos is inside any multi-line part.
commit b13fbaf697b1cbd1f8b019e3f5500b53e2a39c6c
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 14:48:09 2015 +0200

    SwLayAction::FormatLayout: use vcl::RenderContext
    
    Change-Id: I3bc993b00940732fd9ca26ccec7d025c8558516a

diff --git a/sw/source/core/inc/layact.hxx b/sw/source/core/inc/layact.hxx
index 53e3c25..1dca776 100644
--- a/sw/source/core/inc/layact.hxx
+++ b/sw/source/core/inc/layact.hxx
@@ -100,7 +100,7 @@ class SwLayAction
     inline bool _PaintContent( const SwContentFrm *, const SwPageFrm *,
                              const SwRect & );
 
-    bool FormatLayout( SwLayoutFrm *, bool bAddRect = true );
+    bool FormatLayout( OutputDevice* pRenderContext, SwLayoutFrm *, bool bAddRect = true );
     bool FormatLayoutTab( SwTabFrm *, bool bAddRect = true );
     bool FormatContent( const SwPageFrm* pPage );
     void _FormatContent( const SwContentFrm* pContent,
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index af2dcdc..f25208b 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -572,7 +572,7 @@ void SwLayAction::InternalAction(OutputDevice* pRenderContext)
                             break;
                         }
 
-                        FormatLayout( pPage );
+                        FormatLayout( pRenderContext, pPage );
                         XCHECKPAGE;
                     }
                     // #i28701# - change condition
@@ -755,7 +755,7 @@ void SwLayAction::InternalAction(OutputDevice* pRenderContext)
                         break;
                     }
 
-                    FormatLayout( pPg );
+                    FormatLayout( pRenderContext, pPg );
                     XCHECKPAGE;
                 }
 
@@ -1026,7 +1026,7 @@ bool SwLayAction::IsShortCut( SwPageFrm *&prPage )
             }
         }
         else
-            FormatLayout( prPage );
+            FormatLayout( pSh->GetOut(), prPage );
         if ( IsAgain() )
             return false;
     }
@@ -1216,7 +1216,7 @@ bool SwLayAction::IsShortCut( SwPageFrm *&prPage )
 }
 
 // OD 15.11.2002 #105155# - introduce support for vertical layout
-bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
+bool SwLayAction::FormatLayout( OutputDevice *pRenderContext, SwLayoutFrm *pLay, bool bAddRect )
 {
     OSL_ENSURE( !IsAgain(), "Attention to the invalid page." );
     if ( IsAgain() )
@@ -1236,7 +1236,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
         SwRect aOldRect( aOldFrame );
         if( pLay->IsPageFrm() )
         {
-            aOldRect = static_cast<SwPageFrm*>(pLay)->GetBoundRect(pLay->getRootFrm()->GetCurrShell()->GetOut());
+            aOldRect = static_cast<SwPageFrm*>(pLay)->GetBoundRect(pRenderContext);
         }
 
         pLay->Calc();
@@ -1264,7 +1264,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
             if ( pLay->IsPageFrm() )
             {
                 SwPageFrm* pPageFrm = static_cast<SwPageFrm*>(pLay);
-                aPaint = pPageFrm->GetBoundRect(pPageFrm->getRootFrm()->GetCurrShell()->GetOut());
+                aPaint = pPageFrm->GetBoundRect(pRenderContext);
             }
 
             bool bPageInBrowseMode = pLay->IsPageFrm();
@@ -1320,7 +1320,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
                 if(pSh)
                 {
                     SwPageFrm::GetBorderAndShadowBoundRect(aPageRect, pSh,
-                        pSh->GetOut(),
+                        pRenderContext,
                         aPageRect, pPageFrm->IsLeftShadowNeeded(), pPageFrm->IsRightShadowNeeded(),
                         pPageFrm->SidebarPosition() == sw::sidebarwindows::SidebarPosition::RIGHT);
                 }
@@ -1335,7 +1335,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
                         pImp->GetShell()->AddPaintRect( aSpaceToPrevPage );
 
                     if (pSh)
-                        pSh->GetOut()->DrawRect( aSpaceToPrevPage.SVRect() );
+                        pRenderContext->DrawRect( aSpaceToPrevPage.SVRect() );
 
                     // left
                     aSpaceToPrevPage = aPageRect;
@@ -1400,7 +1400,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
                 bTabChanged |= FormatLayoutTab( static_cast<SwTabFrm*>(pLow), bAddRect );
             // Skip the ones already registered for deletion
             else if( !pLow->IsSctFrm() || static_cast<SwSectionFrm*>(pLow)->GetSection() )
-                bChanged |= FormatLayout( static_cast<SwLayoutFrm*>(pLow), bAddRect );
+                bChanged |= FormatLayout( pRenderContext, static_cast<SwLayoutFrm*>(pLow), bAddRect );
         }
         else if ( pImp->GetShell()->IsPaintLocked() )
             // Shortcut to minimize the cycles. With Lock, the
@@ -1414,7 +1414,7 @@ bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, bool bAddRect )
     // OD 11.11.2002 #104414# - add complete frame area as paint area, if frame
     // area has been already added and after formatting its lowers the frame area
     // is enlarged.
-    SwRect aBoundRect(pLay->IsPageFrm() ? static_cast<SwPageFrm*>(pLay)->GetBoundRect(pLay->getRootFrm()->GetCurrShell()->GetOut()) : pLay->Frm() );
+    SwRect aBoundRect(pLay->IsPageFrm() ? static_cast<SwPageFrm*>(pLay)->GetBoundRect(pRenderContext) : pLay->Frm() );
 
     if ( bAlreadyPainted &&
          ( aBoundRect.Width() > aFrmAtCompletePaint.Width() ||
@@ -1468,7 +1468,7 @@ bool SwLayAction::FormatLayoutFly( SwFlyFrm* pFly )
             if ( pLow->IsTabFrm() )
                 bTabChanged |= FormatLayoutTab( static_cast<SwTabFrm*>(pLow), bAddRect );
             else
-                bChanged |= FormatLayout( static_cast<SwLayoutFrm*>(pLow), bAddRect );
+                bChanged |= FormatLayout( pImp->GetShell()->GetOut(), static_cast<SwLayoutFrm*>(pLow), bAddRect );
         }
         pLow = pLow->GetNext();
     }
@@ -1615,7 +1615,7 @@ bool SwLayAction::FormatLayoutTab( SwTabFrm *pTab, bool bAddRect )
         SwLayoutFrm *pLow = static_cast<SwLayoutFrm*>(pTab->Lower());
         while ( pLow )
         {
-            bChanged |= FormatLayout( pLow, bAddRect );
+            bChanged |= FormatLayout( pImp->GetShell()->GetOut(), pLow, bAddRect );
             if ( IsAgain() )
                 return false;
             pLow = static_cast<SwLayoutFrm*>(pLow->GetNext());
commit f1761903cdafd12d4b33d4e8733971a3d9ad8a10
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 25 16:50:00 2015 +0100

    try harder to hide this from android tinderbox
    
    Change-Id: I586fea9f1570b68ed789da8b10a3b46216c42969

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index d29a956..b111b08 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -138,16 +138,16 @@ void SvpSalGraphics::clipRegion(cairo_t* cr)
 
 bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency)
 {
-#if !ENABLE_CAIRO_CANVAS
+    bool bRet = false;
     (void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
-    return false;
-#elif defined(CAIRO_VERSION) && defined(CAIRO_VERSION_ENCODE) && CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
+#if ENABLE_CAIRO_CANVAS
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
     if (m_bUseLineColor || !m_bUseFillColor)
-        return false;
+        return bRet;
 
     cairo_t* cr = createCairoContext(m_aDevice);
     if (!cr)
-        return false;
+        return bRet;
 
     if (!m_aDevice->isTopDown())
     {
@@ -193,11 +193,10 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight,
         xDamageTracker->damaged(basegfx::B2IBox(extents.x, extents.y, extents.x + extents.width,
                                                 extents.y + extents.height));
     }
-    return true;
-#else
-    (void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
-    return false;
+    bRet = true;
+#endif
 #endif
+    return bRet;
 }
 
 SvpSalGraphics::SvpSalGraphics() :
commit f47bff9d153b4f0dcbca1cca9ba6df6491805a62
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 25 16:36:25 2015 +0100

    implement GtkSalFrame::GetKeyName with some code lying around handy
    
    Change-Id: I6a41ae2b8056737008add98c35d06f3859e71171

diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index e566081..f759bf6 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -461,6 +461,9 @@ public:
     static GtkSalFrame         *getFromWindow( GtkWindow *pWindow );
 
     virtual Window              GetX11Window() SAL_OVERRIDE;
+
+    static void                 KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode,
+        guint* pGdkKeyCode, GdkModifierType *pGdkModifiers);
 };
 
 #define OOO_TYPE_FIXED ooo_fixed_get_type()
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 88b0bd0..8edaedc 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -2875,14 +2875,102 @@ void GtkSalFrame::Sync()
     gdk_display_sync( getGdkDisplay() );
 }
 
+void GtkSalFrame::KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode,
+    guint* pGdkKeyCode, GdkModifierType *pGdkModifiers)
+{
+    if ( pGdkKeyCode == NULL || pGdkModifiers == NULL )
+        return;
+
+    // Get GDK key modifiers
+    GdkModifierType nModifiers = (GdkModifierType) 0;
+
+    if ( rKeyCode.IsShift() )
+        nModifiers = (GdkModifierType) ( nModifiers | GDK_SHIFT_MASK );
+
+    if ( rKeyCode.IsMod1() )
+        nModifiers = (GdkModifierType) ( nModifiers | GDK_CONTROL_MASK );
+
+    if ( rKeyCode.IsMod2() )
+        nModifiers = (GdkModifierType) ( nModifiers | GDK_MOD1_MASK );
+
+    *pGdkModifiers = nModifiers;
+
+    // Get GDK keycode.
+    guint nKeyCode = 0;
+
+    guint nCode = rKeyCode.GetCode();
+
+    if ( nCode >= KEY_0 && nCode <= KEY_9 )
+        nKeyCode = ( nCode - KEY_0 ) + GDK_0;
+    else if ( nCode >= KEY_A && nCode <= KEY_Z )
+        nKeyCode = ( nCode - KEY_A ) + GDK_A;
+    else if ( nCode >= KEY_F1 && nCode <= KEY_F26 )
+        nKeyCode = ( nCode - KEY_F1 ) + GDK_F1;
+    else
+    {
+        switch( nCode )
+        {
+        case KEY_DOWN:          nKeyCode = GDK_Down;            break;
+        case KEY_UP:            nKeyCode = GDK_Up;              break;
+        case KEY_LEFT:          nKeyCode = GDK_Left;            break;
+        case KEY_RIGHT:         nKeyCode = GDK_Right;           break;
+        case KEY_HOME:          nKeyCode = GDK_Home;            break;
+        case KEY_END:           nKeyCode = GDK_End;             break;
+        case KEY_PAGEUP:        nKeyCode = GDK_Page_Up;         break;
+        case KEY_PAGEDOWN:      nKeyCode = GDK_Page_Down;       break;
+        case KEY_RETURN:        nKeyCode = GDK_Return;          break;
+        case KEY_ESCAPE:        nKeyCode = GDK_Escape;          break;
+        case KEY_TAB:           nKeyCode = GDK_Tab;             break;
+        case KEY_BACKSPACE:     nKeyCode = GDK_BackSpace;       break;
+        case KEY_SPACE:         nKeyCode = GDK_space;           break;
+        case KEY_INSERT:        nKeyCode = GDK_Insert;          break;
+        case KEY_DELETE:        nKeyCode = GDK_Delete;          break;
+        case KEY_ADD:           nKeyCode = GDK_plus;            break;
+        case KEY_SUBTRACT:      nKeyCode = GDK_minus;           break;
+        case KEY_MULTIPLY:      nKeyCode = GDK_asterisk;        break;
+        case KEY_DIVIDE:        nKeyCode = GDK_slash;           break;
+        case KEY_POINT:         nKeyCode = GDK_period;          break;
+        case KEY_COMMA:         nKeyCode = GDK_comma;           break;
+        case KEY_LESS:          nKeyCode = GDK_less;            break;
+        case KEY_GREATER:       nKeyCode = GDK_greater;         break;
+        case KEY_EQUAL:         nKeyCode = GDK_equal;           break;
+        case KEY_FIND:          nKeyCode = GDK_Find;            break;
+        case KEY_CONTEXTMENU:   nKeyCode = GDK_Menu;            break;
+        case KEY_HELP:          nKeyCode = GDK_Help;            break;
+        case KEY_UNDO:          nKeyCode = GDK_Undo;            break;
+        case KEY_REPEAT:        nKeyCode = GDK_Redo;            break;
+        case KEY_DECIMAL:       nKeyCode = GDK_KP_Decimal;      break;
+        case KEY_TILDE:         nKeyCode = GDK_asciitilde;      break;
+        case KEY_QUOTELEFT:     nKeyCode = GDK_quoteleft;       break;
+        case KEY_BRACKETLEFT:   nKeyCode = GDK_bracketleft;     break;
+        case KEY_BRACKETRIGHT:  nKeyCode = GDK_bracketright;    break;
+        case KEY_SEMICOLON:     nKeyCode = GDK_semicolon;       break;
+        case KEY_QUOTERIGHT:    nKeyCode = GDK_quoteright;      break;
+
+        // Special cases
+        case KEY_COPY:          nKeyCode = GDK_Copy;            break;
+        case KEY_CUT:           nKeyCode = GDK_Cut;             break;
+        case KEY_PASTE:         nKeyCode = GDK_Paste;           break;
+        case KEY_OPEN:          nKeyCode = GDK_Open;            break;
+        }
+    }
+
+    *pGdkKeyCode = nKeyCode;
+}
+
 OUString GtkSalFrame::GetKeyName( sal_uInt16 nKeyCode )
 {
 #if !GTK_CHECK_VERSION(3,0,0)
     return getDisplay()->GetKeyName( nKeyCode );
 #else
-    (void)nKeyCode;
-    //FIXME: key names
-    return OUString();
+    guint nGtkKeyCode;
+    GdkModifierType nGtkModifiers;
+    KeyCodeToGdkKey(nKeyCode, &nGtkKeyCode, &nGtkModifiers );
+
+    gchar* pName = gtk_accelerator_get_label(nGtkKeyCode, nGtkModifiers);
+    OUString aRet(pName, rtl_str_getLength(pName), RTL_TEXTENCODING_UTF8);
+    g_free(pName);
+    return aRet;
 #endif
 }
 
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index c8bd5b0..0dce1c4 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -72,88 +72,6 @@ static gchar* GetCommandForItem( GtkSalMenuItem* pSalMenuItem, gchar* aCurrentCo
     return aCommand;
 }
 
-static void KeyCodeToGdkKey ( const vcl::KeyCode& rKeyCode, guint* pGdkKeyCode, GdkModifierType *pGdkModifiers )
-{
-    if ( pGdkKeyCode == NULL || pGdkModifiers == NULL )
-        return;
-
-    // Get GDK key modifiers
-    GdkModifierType nModifiers = (GdkModifierType) 0;
-
-    if ( rKeyCode.IsShift() )
-        nModifiers = (GdkModifierType) ( nModifiers | GDK_SHIFT_MASK );
-
-    if ( rKeyCode.IsMod1() )
-        nModifiers = (GdkModifierType) ( nModifiers | GDK_CONTROL_MASK );
-
-    if ( rKeyCode.IsMod2() )
-        nModifiers = (GdkModifierType) ( nModifiers | GDK_MOD1_MASK );
-
-    *pGdkModifiers = nModifiers;
-
-    // Get GDK keycode.
-    guint nKeyCode = 0;
-
-    guint nCode = rKeyCode.GetCode();
-
-    if ( nCode >= KEY_0 && nCode <= KEY_9 )
-        nKeyCode = ( nCode - KEY_0 ) + GDK_0;
-    else if ( nCode >= KEY_A && nCode <= KEY_Z )
-        nKeyCode = ( nCode - KEY_A ) + GDK_A;
-    else if ( nCode >= KEY_F1 && nCode <= KEY_F26 )
-        nKeyCode = ( nCode - KEY_F1 ) + GDK_F1;
-    else
-    {
-        switch( nCode )
-        {
-        case KEY_DOWN:          nKeyCode = GDK_Down;            break;
-        case KEY_UP:            nKeyCode = GDK_Up;              break;
-        case KEY_LEFT:          nKeyCode = GDK_Left;            break;
-        case KEY_RIGHT:         nKeyCode = GDK_Right;           break;
-        case KEY_HOME:          nKeyCode = GDK_Home;            break;
-        case KEY_END:           nKeyCode = GDK_End;             break;
-        case KEY_PAGEUP:        nKeyCode = GDK_Page_Up;         break;
-        case KEY_PAGEDOWN:      nKeyCode = GDK_Page_Down;       break;
-        case KEY_RETURN:        nKeyCode = GDK_Return;          break;
-        case KEY_ESCAPE:        nKeyCode = GDK_Escape;          break;
-        case KEY_TAB:           nKeyCode = GDK_Tab;             break;
-        case KEY_BACKSPACE:     nKeyCode = GDK_BackSpace;       break;
-        case KEY_SPACE:         nKeyCode = GDK_space;           break;
-        case KEY_INSERT:        nKeyCode = GDK_Insert;          break;
-        case KEY_DELETE:        nKeyCode = GDK_Delete;          break;
-        case KEY_ADD:           nKeyCode = GDK_plus;            break;
-        case KEY_SUBTRACT:      nKeyCode = GDK_minus;           break;
-        case KEY_MULTIPLY:      nKeyCode = GDK_asterisk;        break;
-        case KEY_DIVIDE:        nKeyCode = GDK_slash;           break;
-        case KEY_POINT:         nKeyCode = GDK_period;          break;
-        case KEY_COMMA:         nKeyCode = GDK_comma;           break;
-        case KEY_LESS:          nKeyCode = GDK_less;            break;
-        case KEY_GREATER:       nKeyCode = GDK_greater;         break;
-        case KEY_EQUAL:         nKeyCode = GDK_equal;           break;
-        case KEY_FIND:          nKeyCode = GDK_Find;            break;
-        case KEY_CONTEXTMENU:   nKeyCode = GDK_Menu;            break;
-        case KEY_HELP:          nKeyCode = GDK_Help;            break;
-        case KEY_UNDO:          nKeyCode = GDK_Undo;            break;
-        case KEY_REPEAT:        nKeyCode = GDK_Redo;            break;
-        case KEY_DECIMAL:       nKeyCode = GDK_KP_Decimal;      break;
-        case KEY_TILDE:         nKeyCode = GDK_asciitilde;      break;
-        case KEY_QUOTELEFT:     nKeyCode = GDK_quoteleft;       break;
-        case KEY_BRACKETLEFT:   nKeyCode = GDK_bracketleft;     break;
-        case KEY_BRACKETRIGHT:  nKeyCode = GDK_bracketright;    break;
-        case KEY_SEMICOLON:     nKeyCode = GDK_semicolon;       break;
-        case KEY_QUOTERIGHT:    nKeyCode = GDK_quoteright;      break;
-
-        // Special cases
-        case KEY_COPY:          nKeyCode = GDK_Copy;            break;
-        case KEY_CUT:           nKeyCode = GDK_Cut;             break;
-        case KEY_PASTE:         nKeyCode = GDK_Paste;           break;
-        case KEY_OPEN:          nKeyCode = GDK_Open;            break;
-        }
-    }
-
-    *pGdkKeyCode = nKeyCode;
-}
-
 bool GtkSalMenu::PrepUpdate()
 {
     const GtkSalFrame* pFrame = GetFrame();
@@ -628,8 +546,7 @@ void GtkSalMenu::NativeSetAccelerator( unsigned nSection, unsigned nItemPos, con
 
     guint nKeyCode;
     GdkModifierType nModifiers;
-
-    KeyCodeToGdkKey( rKeyCode, &nKeyCode, &nModifiers );
+    GtkSalFrame::KeyCodeToGdkKey(rKeyCode, &nKeyCode, &nModifiers);
 
     gchar* aAccelerator = gtk_accelerator_name( nKeyCode, nModifiers );
 
commit 8d5e97a7e54cde43d8f8f73d5729ab5e5bad1c34
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Jun 25 17:02:50 2015 +0200

    += does not make any sense here
    
    ...although it was like that ever since its inception in
    4718eab5490fd470945890d90427f87894952d5f "INTEGRATION: CWS keyconfig01," but
    perhaps impl_st_normPath never actually gets called with a path with leading
    slash, anyway.
    
    Change-Id: Ia3cf4f4020b3a9ca7152777bfa0378c28948fb8f

diff --git a/framework/source/accelerators/storageholder.cxx b/framework/source/accelerators/storageholder.cxx
index e22d9e6..e315ef0 100644
--- a/framework/source/accelerators/storageholder.cxx
+++ b/framework/source/accelerators/storageholder.cxx
@@ -494,8 +494,7 @@ OUString StorageHolder::impl_st_normPath(const OUString& sPath)
     OUString sNormedPath = sPath;
 
     // "/bla" => "bla" && "/" => "" (!)
-    if (sNormedPath.startsWith(PATH_SEPARATOR_ASCII))
-        sNormedPath += sNormedPath.copy(1);
+    sNormedPath.startsWith(PATH_SEPARATOR_ASCII, &sNormedPath);
 
     // "/" => "" || "" => "" ?
     if (sNormedPath.isEmpty())
commit 5fbe0fa0dbd823b201e92e65b08742b3853ce4d1
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jun 25 16:37:13 2015 +0200

    bail out early if maTableColumnNames.empty()
    
    Change-Id: Icda700e80aa3a48ea77b2bc90d73c37b67b62ba8

diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index 113fa5f..e51da5d 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -624,6 +624,9 @@ private:
 
 sal_Int32 ScDBData::GetColumnNameOffset( const OUString& rName ) const
 {
+    if (maTableColumnNames.empty())
+        return -1;
+
     ::std::vector<OUString>::const_iterator it(
             ::std::find_if( maTableColumnNames.begin(), maTableColumnNames.end(), TableColumnNameSearch( rName)));
     if (it != maTableColumnNames.end())
commit b51fe01f7c8853c353401001bdd417b9ed27fb87
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 25 15:10:37 2015 +0100

    WaE: error: 'CAIRO_VERSION' is not defined
    
    Change-Id: I9e4f0d0af541226089a6295962a91ca09debb418

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index f5dbaf4..d29a956 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -141,7 +141,7 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight,
 #if !ENABLE_CAIRO_CANVAS
     (void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
     return false;
-#elif CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
+#elif defined(CAIRO_VERSION) && defined(CAIRO_VERSION_ENCODE) && CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
     if (m_bUseLineColor || !m_bUseFillColor)
         return false;
 
commit a0ded09c55f944f57201651032eed5dcf7e22e48
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 25 10:33:06 2015 +0100

    implement equalize width and height for impress/draw
    
    Equalize width/height adjusts width/height of selected objects to the
    width/height of the last selected object.
    
    Change-Id: I7c222a6591112cb674322d310ebd87f04a9198bd

diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index cdc2308..b109e0c 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -272,6 +272,11 @@ public:
     // for distribution dialog function
     void DistributeMarkedObjects();
 
+    // for setting either the width or height of all selected
+    // objects to the width/height of the last selected object
+    // of the selection
+    void EqualizeMarkedObjects(bool bWidth);
+
     // Decompose marked polypolygon objects into polygons.
     // Grouped objects are searched and decomposed, if all member objects are PathObjs.
     // bMakeLines=TRUE:  all polygones are decomposed into single lines resp. bezier segments
diff --git a/include/svx/svdstr.hrc b/include/svx/svdstr.hrc
index 90ef697..36e8719 100644
--- a/include/svx/svdstr.hrc
+++ b/include/svx/svdstr.hrc
@@ -241,7 +241,9 @@
 #define STR_EditMergeSubstractPoly   (STR_EditBegin  + 55)
 #define STR_EditMergeIntersectPoly   (STR_EditBegin  + 56)
 #define STR_DistributeMarkedObjects  (STR_EditBegin  + 57)
-#define STR_EditEnd                  (STR_DistributeMarkedObjects)
+#define STR_EqualizeWidthMarkedObjects  (STR_EditBegin  + 58)
+#define STR_EqualizeHeightMarkedObjects (STR_EditBegin  + 59)
+#define STR_EditEnd                  (STR_EqualizeHeightMarkedObjects)
 
 #define STR_ExchangeBegin            (STR_EditEnd+1)
 #define STR_ExchangePaste            (STR_ExchangeBegin +0)
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index 5b8efbc..67ee3da 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -113,6 +113,8 @@
 #define SID_POLY_INTERSECT                  (SID_SFX_START + 681)
 #define SID_POLY_FORMEN                     (SID_SFX_START + 682)
 #define SID_DISTRIBUTE_DLG                  (SID_SFX_START + 683)
+#define SID_EQUALIZEWIDTH                   (SID_SFX_START + 684)
+#define SID_EQUALIZEHEIGHT                  (SID_SFX_START + 685)
 
 // Basic IDE-Id's
 
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index 1c679bd..d221d56 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -3472,6 +3472,16 @@
           <value xml:lang="en-US">~Subtract</value>
         </prop>
       </node>
+      <node oor:name=".uno:EqualizeWidth" oor:op="replace">
+        <prop oor:name="Label" oor:type="xs:string">
+          <value xml:lang="en-US">Equalize ~Width</value>
+        </prop>
+      </node>
+      <node oor:name=".uno:EqualizeHeight" oor:op="replace">
+        <prop oor:name="Label" oor:type="xs:string">
+          <value xml:lang="en-US">Equalize ~Height</value>
+        </prop>
+      </node>
       <node oor:name=".uno:SuperScript" oor:op="replace">
         <prop oor:name="Label" oor:type="xs:string">
           <value xml:lang="en-US">Superscript</value>
diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi
index 0b5469bf..6b2f17c 100644
--- a/sd/sdi/_drvwsh.sdi
+++ b/sd/sdi/_drvwsh.sdi
@@ -507,6 +507,16 @@ interface DrawView
         ExecMethod = FuTemporary ;
         StateMethod = GetMenuState ;
     ]
+    SID_EQUALIZEWIDTH // ole : no, status : ?
+    [
+        ExecMethod = FuTemporary ;
+        StateMethod = GetMenuState ;
+    ]
+    SID_EQUALIZEHEIGHT // ole : no, status : ?
+    [
+        ExecMethod = FuTemporary ;
+        StateMethod = GetMenuState ;
+    ]
     SID_CONNECT // ole : no, status : ?
     [
         ExecMethod = FuTemporary ;
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index ffbb503..90c3d59 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -2272,6 +2272,19 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         }
         break;
 
+        case SID_EQUALIZEWIDTH:
+        case SID_EQUALIZEHEIGHT:
+        {
+            // End text edit to avoid conflicts
+            if(mpDrawView->IsTextEdit())
+                mpDrawView->SdrEndTextEdit();
+
+            mpDrawView->EqualizeMarkedObjects(nSId == SID_EQUALIZEWIDTH);
+            Cancel();
+            rReq.Done ();
+        }
+        break;
+
         case SID_DISMANTLE:  // BASIC
         {
             if ( mpDrawView->IsDismantlePossible(false) )
diff --git a/sd/source/ui/view/drviewsj.cxx b/sd/source/ui/view/drviewsj.cxx
index 857601f..10a3f5a 100644
--- a/sd/source/ui/view/drviewsj.cxx
+++ b/sd/source/ui/view/drviewsj.cxx
@@ -284,13 +284,15 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
             rSet.Put(SfxBoolItem(SID_OUTLINE_TEXT_AUTOFIT, bSet));
         }
 
-        rSet.DisableItem( SID_GROUP );
-        rSet.DisableItem( SID_COMBINE );
+        rSet.DisableItem(SID_GROUP);
+        rSet.DisableItem(SID_COMBINE);
         rSet.DisableItem(SID_DISTRIBUTE_DLG);
         rSet.DisableItem(SID_POLY_MERGE);
         rSet.DisableItem(SID_POLY_SUBSTRACT);
         rSet.DisableItem(SID_POLY_INTERSECT);
-        rSet.DisableItem( SID_CONNECT );
+        rSet.DisableItem(SID_EQUALIZEWIDTH);
+        rSet.DisableItem(SID_EQUALIZEHEIGHT);
+        rSet.DisableItem(SID_CONNECT);
     }
     // multi-selection
     else if( nMarkCount > 1 )
@@ -377,6 +379,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
                 rSet.DisableItem(SID_POLY_MERGE);
                 rSet.DisableItem(SID_POLY_SUBSTRACT);
                 rSet.DisableItem(SID_POLY_INTERSECT);
+                rSet.DisableItem(SID_EQUALIZEWIDTH);
+                rSet.DisableItem(SID_EQUALIZEHEIGHT);
             }
 
             if (b3dObj                                        ||
@@ -438,10 +442,12 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
         }
         if ( !mpDrawView->IsCombinePossible(false) )
         {
-            rSet.DisableItem( SID_COMBINE );
+            rSet.DisableItem(SID_COMBINE);
             rSet.DisableItem(SID_POLY_MERGE);
             rSet.DisableItem(SID_POLY_SUBSTRACT);
             rSet.DisableItem(SID_POLY_INTERSECT);
+            rSet.DisableItem(SID_EQUALIZEWIDTH);
+            rSet.DisableItem(SID_EQUALIZEHEIGHT);
         }
         if ( !mpDrawView->IsCombinePossible(true) )
         {
@@ -501,6 +507,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
         rSet.DisableItem(SID_POLY_MERGE);
         rSet.DisableItem(SID_POLY_SUBSTRACT);
         rSet.DisableItem(SID_POLY_INTERSECT);
+        rSet.DisableItem(SID_EQUALIZEWIDTH);
+        rSet.DisableItem(SID_EQUALIZEHEIGHT);
         rSet.DisableItem( SID_CONNECT );
         rSet.DisableItem( SID_ANIMATION_EFFECTS );
         rSet.DisableItem( SID_MODIFY_FIELD );
diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml
index f12287b..bc8cfee 100644
--- a/sd/uiconfig/sdraw/menubar/menubar.xml
+++ b/sd/uiconfig/sdraw/menubar/menubar.xml
@@ -346,6 +346,9 @@
           <menu:menuitem menu:id=".uno:Merge"/>
           <menu:menuitem menu:id=".uno:Substract"/>
           <menu:menuitem menu:id=".uno:Intersect"/>
+          <menu:menuseparator/>
+          <menu:menuitem menu:id=".uno:EqualizeWidth"/>
+          <menu:menuitem menu:id=".uno:EqualizeHeight"/>
         </menu:menupopup>
       </menu:menu>
       <menu:menuseparator/>
diff --git a/svx/inc/globlmn_tmpl.hrc b/svx/inc/globlmn_tmpl.hrc
index 9d511c8..8d82489 100644
--- a/svx/inc/globlmn_tmpl.hrc
+++ b/svx/inc/globlmn_tmpl.hrc
@@ -306,6 +306,20 @@
         Command = ".uno:Intersect" ; \
         Text [ en-US ] = "I~ntersect" ; \
             };
+#define ITEM_EQUALIZEWIDTH \
+    MenuItem\
+    {\
+        Identifier = SID_EQUALIZEWIDTH ; \
+        Command = ".uno:EqualizeWidth" ; \
+        Text [ en-US ] = "Equalize ~Width" ; \
+            };
+#define ITEM_EQUALIZEHEIGHT \
+    MenuItem\
+    {\
+        Identifier = SID_EQUALIZEHEIGHT ; \
+        Command = ".uno:EqualizeHeight" ; \
+        Text [ en-US ] = "Equalize ~Height" ; \
+            };
 
 #define MNSUB_FORMEN \
     MenuItem \
@@ -320,6 +334,12 @@
                 ITEM_POLY_MERGE \
                 ITEM_POLY_SUBSTRACT \
                 ITEM_POLY_INTERSECT \
+                MenuItem \
+                { \
+                    Separator = TRUE; \
+                }; \
+                ITEM_EQUALIZEWIDTH \
+                ITEM_EQUALIZEHEIGHT \
             };\
         };\
     };
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index 941f3e8..b301c58 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -11100,6 +11100,53 @@ SfxVoidItem Substract SID_POLY_SUBSTRACT
     GroupId = GID_MODIFY;
 ]
 
+SfxVoidItem EqualizeWidth SID_EQUALIZEWIDTH
+()
+[
+    /* flags: */
+    AutoUpdate = FALSE,
+    Cachable = Cachable,
+    FastCall = FALSE,
+    HasCoreId = FALSE,
+    HasDialog = FALSE,
+    ReadOnlyDoc = FALSE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+    Synchron;
+
+    /* config: */
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    StatusBarConfig = FALSE,
+    ToolBoxConfig = TRUE,
+    GroupId = GID_MODIFY;
+]
+
+SfxVoidItem EqualizeHeight SID_EQUALIZEHEIGHT
+()
+[
+    /* flags: */
+    AutoUpdate = FALSE,
+    Cachable = Cachable,
+    FastCall = FALSE,
+    HasCoreId = FALSE,
+    HasDialog = FALSE,
+    ReadOnlyDoc = FALSE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+    Synchron;
+
+    /* config: */
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    StatusBarConfig = FALSE,
+    ToolBoxConfig = TRUE,
+    GroupId = GID_MODIFY;
+]
 
 SfxBoolItem SuperScript SID_SET_SUPER_SCRIPT
 
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx
index 0a60082..ad7dd3f 100644
--- a/svx/source/svdraw/svdedtv2.cxx
+++ b/svx/source/svdraw/svdedtv2.cxx
@@ -1173,6 +1173,44 @@ void SdrEditView::MergeMarkedObjects(SdrMergeMode eMode)
     }
 }
 
+void SdrEditView::EqualizeMarkedObjects(bool bWidth)
+{
+    const SdrMarkList& rMarkList = GetMarkedObjectList();
+    size_t nMarked = rMarkList.GetMarkCount();
+
+    if (nMarked < 2)
+        return;
+
+    SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj();
+    Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize());
+
+    const bool bUndo = IsUndoEnabled();
+
+    if (bUndo)
+        BegUndo();
+
+    for (size_t a = 0; a < nMarked-1; ++a)
+    {
+        SdrMark* pM = rMarkList.GetMark(a);
+        SdrObject* pObj = pM->GetMarkedSdrObj();
+        Rectangle aLogicRect(pObj->GetLogicRect());
+        Size aLogicRectSize(aLogicRect.GetSize());
+        if (bWidth)
+            aLogicRectSize.Width() = aLastRectSize.Width();
+        else
+            aLogicRectSize.Height() = aLastRectSize.Height();
+        aLogicRect.SetSize(aLogicRectSize);
+        pObj->SetLogicRect(aLogicRect);
+    }
+
+    SetUndoComment(
+        ImpGetResStr(bWidth ? STR_EqualizeWidthMarkedObjects : STR_EqualizeHeightMarkedObjects),
+        rMarkList.GetMarkDescription());
+
+    if (bUndo)
+        EndUndo();
+}
+
 void SdrEditView::CombineMarkedObjects(bool bNoPolyPoly)
 {
     // #105899# Start of Combine-Undo put to front, else ConvertMarkedToPolyObj would
diff --git a/svx/source/svdraw/svdstr.src b/svx/source/svdraw/svdstr.src
index 364749a..6dc4420 100644
--- a/svx/source/svdraw/svdstr.src
+++ b/svx/source/svdraw/svdstr.src
@@ -823,6 +823,14 @@ String STR_DistributeMarkedObjects
 {
     Text [ en-US ] = "Distribute selected objects";
 };
+String STR_EqualizeWidthMarkedObjects
+{
+    Text [ en-US ] = "Equalize Width %1";
+};
+String STR_EqualizeHeightMarkedObjects
+{
+    Text [ en-US ] = "Equalize Height %1";
+};
 String STR_EditCombine_OnePoly
 {
     Text [ en-US ] = "Combine %1" ;
commit df7595a5f5871f8343e4ee3869ad153e3ae4a7f3
Author: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
Date:   Thu Jun 25 16:09:35 2015 +0200

    tdf#91485 fix cursors not displayed on Windows with mergedlibs
    
    Change-Id: I502d3d2490be5307364dee59c7ee36c0fb7ef55f

diff --git a/Library_merged.mk b/Library_merged.mk
index fa2f24d..2e482e8 100644
--- a/Library_merged.mk
+++ b/Library_merged.mk
@@ -36,6 +36,8 @@ $(eval $(call gb_Library_add_ldflags,merged,\
 	/ignore:4049 \
 	/ignore:4217 \
 ))
+# cursors
+$(eval $(call gb_Library_add_nativeres,merged,vcl/salsrc))
 endif
 
 ifeq ($(OS),MACOSX)
commit d4ad86dac6e8971a4f21168051876a0d68f48649
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Jun 25 15:59:01 2015 +0200

    ...in case this ever gets used with an unsigned APSInt of bitwidth < 7
    
    Change-Id: Ic9436529321e523edd25d0f83ac09a0e22a44013

diff --git a/compilerplugins/clang/stringconstant.cxx b/compilerplugins/clang/stringconstant.cxx
index 20ff2a9..1280ce1 100644
--- a/compilerplugins/clang/stringconstant.cxx
+++ b/compilerplugins/clang/stringconstant.cxx
@@ -1191,7 +1191,7 @@ void StringConstant::handleOUStringCtor(
         && e3->getArg(0)->IgnoreParenImpCasts()->isIntegerConstantExpr(
             res, compiler.getASTContext()))
     {
-        if (res.getSExtValue() > 0 && res.getSExtValue() <= 127) {
+        if (res.getZExtValue() > 0 && res.getZExtValue() <= 127) {
             report(
                 DiagnosticsEngine::Warning,
                 ("in call of %0, replace OUString constructed from a (non-NUL)"
commit a8cd99685abf879c56e04a95a5b2881d2adddcb9
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Jun 25 15:51:05 2015 +0200

    Remove spurious negation operator again
    
    ...which had been introduced with 3f4978f8c660c595773c92b99d45d0631cac04b0
    "loplugin:implicitboolconversion" when changing
    
      return name.second == sal_True;
    
    to
    
      return !name.second;
    
    Change-Id: I3d4cfb613efcc72cf01176556c678a97e5817528

diff --git a/dbaccess/source/ui/control/tabletree.cxx b/dbaccess/source/ui/control/tabletree.cxx
index 85ce260..feb00aa 100644
--- a/dbaccess/source/ui/control/tabletree.cxx
+++ b/dbaccess/source/ui/control/tabletree.cxx
@@ -265,7 +265,7 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
                                 [&_rTables] (TNames::value_type name) { return !name.second; }) )
                 sRootEntryText  = ModuleRes(STR_ALL_TABLES);
             else if ( ::std::none_of(_rTables.begin(),_rTables.end(),
-                                     [&_rTables] (TNames::value_type name) { return !name.second; }) )
+                                     [&_rTables] (TNames::value_type name) { return name.second; }) )
                 sRootEntryText  = ModuleRes(STR_ALL_VIEWS);
             else
                 sRootEntryText  = ModuleRes(STR_ALL_TABLES_AND_VIEWS);
commit 420ed9cb1d7f164be88ee2a01f79372744ed5f03
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jun 25 15:37:08 2015 +0200

    TableRef: compile named expression into RPN once to populate information
    
    Change-Id: Id41ca0bd6adc8152c29be4d89e9361d8fb2ffe4e

diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx
index a24c96a..fa2a0cf 100644
--- a/sc/source/filter/oox/defnamesbuffer.cxx
+++ b/sc/source/filter/oox/defnamesbuffer.cxx
@@ -387,6 +387,13 @@ std::unique_ptr<ScTokenArray> DefinedName::getScTokens()
     ScCompiler aCompiler(&getScDocument(), ScAddress(0, 0, mnCalcSheet));
     aCompiler.SetGrammar(formula::FormulaGrammar::GRAM_OOXML);
     std::unique_ptr<ScTokenArray> pArray(aCompiler.CompileString(maModel.maFormula));
+    // Compile the tokens into RPN once to populate information into tokens
+    // where necessary, e.g. for TableRef inner reference. RPN can be discarded
+    // after, a resulting error must be reset.
+    sal_uInt16 nErr = pArray->GetCodeError();
+    aCompiler.CompileTokenArray();
+    pArray->DelRPN();
+    pArray->SetCodeError(nErr);
 
     return pArray;
 }
commit 16e8ffbd5ec1fe7b81835ea6584547669d55d751
Author: Heena Gupta <heena.h.gupta at ericsson.com>
Date:   Fri May 29 16:42:34 2015 +0530

    tdf#91378-Empty Custom Properties are lost while saving in .pptx format
    
    Conflicts:
    	sd/qa/unit/export-tests.cxx
    Reviewed on:
    	https://gerrit.libreoffice.org/15966
    
    Change-Id: Ibc24ab9633b51fe41ad483121646cc391319fe6f

diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index 4ef16d0..f1c80df 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -539,8 +539,6 @@ OUString XmlFilterBase::addRelation( const Reference< XOutputStream >& rOutputSt
 static void
 writeElement( FSHelperPtr pDoc, sal_Int32 nXmlElement, const OUString& sValue )
 {
-    if( sValue.isEmpty() )
-        return;
     pDoc->startElement( nXmlElement, FSEND );
     pDoc->writeEscaped( sValue );
     pDoc->endElement( nXmlElement );
@@ -745,10 +743,6 @@ writeCustomProperties( XmlFilterBase& rSelf, Reference< XDocumentProperties > xP
     {
         if ( !aprop[n].Name.isEmpty() )
         {
-            // Ignore empty string property as well.
-            if (aprop[n].Value.has<OUString>() && aprop[n].Value.get<OUString>().isEmpty())
-                continue;
-
             OString aName = OUStringToOString( aprop[n].Name, RTL_TEXTENCODING_ASCII_US );
             // pid starts from 2 not from 1 as MS supports pid from 2
             pAppProps->startElement( XML_property ,
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index f118a5d..79ab899 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -1037,8 +1037,7 @@ void FastSaxParserImpl::parse()
 void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xmlChar* prefix, const xmlChar* URI,
     int numNamespaces, const xmlChar** namespaces, int numAttributes, int /*defaultedAttributes*/, const xmlChar **attributes)
 {
-    if( !pendingCharacters.isEmpty())
-        sendPendingCharacters();
+    sendPendingCharacters();
     Entity& rEntity = getEntity();
     if( rEntity.maNamespaceCount.empty() )
     {
@@ -1145,8 +1144,7 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm
 
 void FastSaxParserImpl::callbackEndElement( const xmlChar*, const xmlChar*, const xmlChar* )
 {
-    if( !pendingCharacters.isEmpty())
-        sendPendingCharacters();
+    sendPendingCharacters();
     Entity& rEntity = getEntity();
     SAL_WARN_IF(rEntity.maNamespaceCount.empty(), "sax", "Empty NamespaceCount");
     if( !rEntity.maNamespaceCount.empty() )
diff --git a/sd/qa/unit/data/pptx/tdf91378.pptx b/sd/qa/unit/data/pptx/tdf91378.pptx
new file mode 100644
index 0000000..361be2c
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf91378.pptx differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index d8cd85f..3c72207 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -122,6 +122,7 @@ public:
     void testTransparentBackground();
 
     void testFdo90607();
+    void testTdf91378();
 #if !defined WNT
     void testBnc822341();
 #endif
@@ -155,6 +156,7 @@ public:
     CPPUNIT_TEST(testBulletMarginAndIndentation);
     CPPUNIT_TEST(testParaMarginAndindentation);
     CPPUNIT_TEST(testTransparentBackground);
+    CPPUNIT_TEST(testTdf91378);
 
 #if !defined WNT
     CPPUNIT_TEST(testBnc822341);
@@ -951,6 +953,26 @@ void SdExportTest::testBulletColor()
     CPPUNIT_ASSERT_EQUAL_MESSAGE( "Bullet's color is wrong!", sal_uInt32(0xff0000),pNumFmt->GetNumRule()->GetLevel(0).GetBulletColor().GetColor());
 }
 
+void SdExportTest::testTdf91378()
+{
+
+    //Check For Import and Export Both
+    ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/tdf91378.pptx"), PPTX);
+    for( sal_uInt32 i=0;i<2;i++)
+    {
+      SdDrawDocument *pDoc = xDocShRef->GetDoc();
+      CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
+      uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier( xDocShRef->GetModel(), uno::UNO_QUERY );
+      uno::Reference<document::XDocumentProperties> xProps( xDocumentPropertiesSupplier->getDocumentProperties(), uno::UNO_QUERY );
+      uno::Reference<beans::XPropertySet> xUDProps( xProps->getUserDefinedProperties(), uno::UNO_QUERY );
+      OUString propValue;
+      xUDProps->getPropertyValue(OUString("Testing")) >>= propValue;
+      CPPUNIT_ASSERT(propValue.isEmpty());
+      xDocShRef = saveAndReload( xDocShRef, PPTX );
+    }
+    xDocShRef->DoClose();
+}
+
 #if !defined WNT
 
 void SdExportTest::testBnc822341()
commit b4a224d1a91232a16b70be4531a3e6fd2d9bc9ae
Author: Rosemary <rosemaryseb8 at gmail.com>
Date:   Tue Jun 23 14:34:06 2015 +0530

    tdf#80387 Extended lint-ui.py to check for UI title labels
    
    Change-Id: I47ab882b0d54711050da4fc8fa288b195949eb60
    Reviewed-on: https://gerrit.libreoffice.org/16425
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/bin/lint-ui.py b/bin/lint-ui.py
index 54e1d27..2ed80c2 100755
--- a/bin/lint-ui.py
+++ b/bin/lint-ui.py
@@ -11,6 +11,7 @@
 
 import sys
 import xml.etree.ElementTree as ET
+import re
 
 DEFAULT_WARNING_STR = 'Lint assertion failed'
 
@@ -23,6 +24,8 @@ ALIGNMENT_TOP_PADDING = '6'
 MESSAGE_BOX_SPACING = '24'
 MESSAGE_BORDER_WIDTH = '12'
 
+IGNORED_WORDS = ['the', 'of', 'to', 'for', 'a', 'and', 'as', 'from', 'on', 'into', 'by', 'at', 'or', 'do', 'in', 'when']
+
 def lint_assert(predicate, warning=DEFAULT_WARNING_STR):
     if not predicate:
         print("    * " + warning)
@@ -77,6 +80,19 @@ def check_alignment_top_padding(alignment):
         lint_assert(top_padding.text == ALIGNMENT_TOP_PADDING,
                     "GtkAlignment 'top_padding' should be " + ALIGNMENT_TOP_PADDING)
 
+def check_title_labels(root):
+    labels = root.findall(".//child[@type='label']")
+    titles = [label.find(".//property[@name='label']") for label in labels]
+    for title in titles:
+        if title is None:
+            continue
+        words = re.split(r'[^a-zA-Z0-9_-]', title.text)
+        first = True
+        for word in words:
+            if word[0].islower() and (word not in IGNORED_WORDS or first):
+                lint_assert(False, "The word '" + word + "' should be capitalized")
+            first = False
+
 def main():
     print(" == " + sys.argv[1] + " ==")
     tree = ET.parse(sys.argv[1])
@@ -102,5 +118,7 @@ def main():
 
     check_frames(root)
 
+    check_title_labels(root)
+
 if __name__ == "__main__":
     main()
commit 3f4978f8c660c595773c92b99d45d0631cac04b0
Author: Noel Grandin <noel at peralex.com>
Date:   Thu Jun 25 15:04:59 2015 +0200

    loplugin:implicitboolconversion
    
    Change-Id: Ib266bc70a99d84d4e3d845573f39e612dc6595f8

diff --git a/dbaccess/source/ui/control/tabletree.cxx b/dbaccess/source/ui/control/tabletree.cxx
index 789f774..85ce260 100644
--- a/dbaccess/source/ui/control/tabletree.cxx
+++ b/dbaccess/source/ui/control/tabletree.cxx
@@ -262,10 +262,10 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
         {
             OUString sRootEntryText;
             if ( ::std::none_of(_rTables.begin(),_rTables.end(),
-                                [&_rTables] (TNames::value_type name) { return name.second == sal_False; }) )
+                                [&_rTables] (TNames::value_type name) { return !name.second; }) )
                 sRootEntryText  = ModuleRes(STR_ALL_TABLES);
             else if ( ::std::none_of(_rTables.begin(),_rTables.end(),
-                                     [&_rTables] (TNames::value_type name) { return name.second == sal_True; }) )
+                                     [&_rTables] (TNames::value_type name) { return !name.second; }) )
                 sRootEntryText  = ModuleRes(STR_ALL_VIEWS);
             else
                 sRootEntryText  = ModuleRes(STR_ALL_TABLES_AND_VIEWS);
commit 8bd2333e3636bc1e196fb7fccd73a0dc8518fa76
Author: Noel Grandin <noel at peralex.com>
Date:   Thu Jun 25 15:03:31 2015 +0200

    remove custom RTTI from SdrObjPlusData
    
    not used anywhere
    
    Change-Id: I72e8f1862dd9075c548d178f93cd72fa32a56809

diff --git a/svx/source/inc/svdobjplusdata.hxx b/svx/source/inc/svdobjplusdata.hxx
index 7920df3..8f7c1a7 100644
--- a/svx/source/inc/svdobjplusdata.hxx
+++ b/svx/source/inc/svdobjplusdata.hxx
@@ -10,7 +10,6 @@
 #ifndef INCLUDED_SVX_SVDOBJPLUSDATA_HXX
 #define INCLUDED_SVX_SVDOBJPLUSDATA_HXX
 
-#include <tools/rtti.hxx>
 #include <rtl/ustring.hxx>
 
 class SdrObject;
@@ -34,7 +33,6 @@ class SdrObjPlusData
     OUString aObjDescription;
 
 public:
-    TYPEINFO();
     SdrObjPlusData();
     virtual ~SdrObjPlusData();
     SdrObjPlusData* Clone(SdrObject* pObj1) const;
diff --git a/svx/source/svdraw/svdobjplusdata.cxx b/svx/source/svdraw/svdobjplusdata.cxx
index cc8fd35..e9d0696 100644
--- a/svx/source/svdraw/svdobjplusdata.cxx
+++ b/svx/source/svdraw/svdobjplusdata.cxx
@@ -14,8 +14,6 @@
 
 #include <svl/SfxBroadcaster.hxx>
 
-TYPEINIT0(SdrObjPlusData);
-
 SdrObjPlusData::SdrObjPlusData():
     pBroadcast(NULL),
     pUserDataList(NULL),
commit 4fc13975ad83fd2e95d2383ab0e9af688c47710d
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jun 25 14:46:55 2015 +0200

    TableRef: ScCompiler::IsTableRefColumn() lookup column name in ScDBData
    
    ... as a fallback for named expressions during document import when cell
    content isn't available yet.
    
    Change-Id: I134ac2aaeb5f336703edbadfd6664d916d2c5885

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 11aa239..3594f0e 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -3495,6 +3495,22 @@ bool ScCompiler::IsTableRefColumn( const OUString& rName ) const
             }
         }
     }
+
+    // And now a fallback for named expressions during document load time when
+    // cell content isn't available yet. This could be the preferred method IF
+    // the ScDBData column names were maintained and refreshed on ALL sheet
+    // operations, including cell content changes.
+    sal_Int32 nOffset = pDBData->GetColumnNameOffset( aName);
+    if (nOffset >= 0)
+    {
+        ScSingleRefData aRef;
+        ScAddress aAdr( aRange.aStart);
+        aAdr.IncCol( nOffset);
+        aRef.InitAddress( aAdr);
+        maRawToken.SetSingleReference( aRef );
+        return true;
+    }
+
     return false;
 }
 
commit cd3486798496545271baa2cb5d7beb6f0a99dcca
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jun 25 14:45:37 2015 +0200

    TableRef: search table column names case insensitive
    
    Change-Id: I753a4511aa2c1e37b83094189902ce7031d68c04

diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index ef39e8b..113fa5f 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -603,10 +603,29 @@ void ScDBData::AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx,
     aNewNames.swap( maTableColumnNames);
 }
 
+namespace {
+class TableColumnNameSearch : public unary_function<ScDBData, bool>
+{
+public:
+    explicit TableColumnNameSearch( const OUString& rSearchName ) :
+        maSearchName( rSearchName )
+    {
+    }
+
+    bool operator()( const OUString& rName ) const
+    {
+        return ScGlobal::GetpTransliteration()->isEqual( maSearchName, rName);
+    }
+
+private:
+    OUString maSearchName;
+};
+}
+
 sal_Int32 ScDBData::GetColumnNameOffset( const OUString& rName ) const
 {
     ::std::vector<OUString>::const_iterator it(
-            ::std::find( maTableColumnNames.begin(), maTableColumnNames.end(), rName));
+            ::std::find_if( maTableColumnNames.begin(), maTableColumnNames.end(), TableColumnNameSearch( rName)));
     if (it != maTableColumnNames.end())
         return it - maTableColumnNames.begin();
 
commit 58b0c0cf0c1429ec2f7f5ef8fc9ebc4840ace92d
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jun 25 14:43:18 2015 +0200

    TableRef: move getTables().applyTableColumns() to the correct position
    
    ... in import sequence.
    
    Change-Id: Ib5601af281f0378d283ecd61fa71c41e6c1be254

diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index 342be2b..4b37d0f 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -461,6 +461,7 @@ void WorkbookFragment::finalizeImport()
 
     // create all database ranges and defined names, in that order
     getTables().finalizeImport();
+    getTables().applyTableColumns();
     getDefinedNames().finalizeImport();
     // open the VBA project storage
     OUString aVbaFragmentPath = getFragmentPathFromFirstType( CREATE_MSOFFICE_RELATION_TYPE( "vbaProject" ) );
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 9875f0e..d74f344 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -943,7 +943,6 @@ void WorksheetGlobals::finalizeWorksheetImport()
     // assumes getTables().finalizeImport ( which creates the DatabaseRanges )
     // has been called already
     getTables().applyAutoFilters();
-    getTables().applyTableColumns();
 
     getCondFormats().finalizeImport();
     lclUpdateProgressBar( mxFinalProgress, 0.25 );
commit 3928a1514c9202a52d698570022c197ecc8703eb
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 25 13:41:58 2015 +0100

    error: missing binary operator before token '('
    
    Change-Id: Ieafb13245a11347cbda8a33e49ad618bf85d8a89

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 957463b..f5dbaf4 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -138,7 +138,10 @@ void SvpSalGraphics::clipRegion(cairo_t* cr)
 
 bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency)
 {
-#if ENABLE_CAIRO_CANVAS && CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
+#if !ENABLE_CAIRO_CANVAS
+    (void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
+    return false;
+#elif CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
     if (m_bUseLineColor || !m_bUseFillColor)
         return false;
 
@@ -192,11 +195,7 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight,
     }
     return true;
 #else
-    (void)nX;
-    (void)nY;
-    (void)nWidth;
-    (void)nHeight;
-    (void)nTransparency;
+    (void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
     return false;
 #endif
 }
commit 08b3b6ed6c4d8599c9bb75719974c710462f2764
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 14:13:44 2015 +0200

    SwLayAction::Action: use vcl::RenderContext
    
    Change-Id: I4fb6c42da0c5defa1d5da4cf6f3a13d11388c88d

diff --git a/sw/source/core/inc/layact.hxx b/sw/source/core/inc/layact.hxx
index e85ff36..53e3c25 100644
--- a/sw/source/core/inc/layact.hxx
+++ b/sw/source/core/inc/layact.hxx
@@ -154,7 +154,7 @@ public:
     inline void SetCheckPageNum( sal_uInt16 nNew );
     inline void SetCheckPageNumDirect( sal_uInt16 nNew ) { nCheckPageNum = nNew; }
 
-    void Action();  // here it begins
+    void Action(OutputDevice* pRenderContext); // here it begins
     void Reset();   // back to CTor-defaults
 
     bool IsAgain()      const { return bAgain; }
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index f140b71..af2dcdc 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -341,7 +341,7 @@ bool SwLayAction::RemoveEmptyBrowserPages()
     return bRet;
 }
 
-void SwLayAction::Action()
+void SwLayAction::Action(OutputDevice* pRenderContext)
 {
     bActionInProgress = true;
 
@@ -366,12 +366,12 @@ void SwLayAction::Action()
     if ( IsCalcLayout() )
         SetCheckPages( false );
 
-    InternalAction(pImp->GetShell()->GetOut());
+    InternalAction(pRenderContext);
     bAgain |= RemoveEmptyBrowserPages();
     while ( IsAgain() )
     {
         bAgain = bNextCycle = false;
-        InternalAction(pImp->GetShell()->GetOut());
+        InternalAction(pRenderContext);
         bAgain |= RemoveEmptyBrowserPages();
     }
     pRoot->DeleteEmptySct();
@@ -2166,7 +2166,7 @@ SwLayIdle::SwLayIdle( SwRootFrm *pRt, SwViewShellImp *pI ) :
             aAction.SetInputType( VCL_INPUT_ANY );
             aAction.SetIdle( true );
             aAction.SetWaitAllowed( false );
-            aAction.Action();
+            aAction.Action(pImp->GetShell()->GetOut());
             bInterrupt = aAction.IsInterrupt();
         }
 
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 6587b90..017389b 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -3237,7 +3237,7 @@ void SwRootFrm::Paint(vcl::RenderContext& rRenderContext, SwRect const& rRect, S
         aAction.SetPaint( false );
         aAction.SetComplete( false );
         aAction.SetReschedule( gProp.pSProgress != nullptr );
-        aAction.Action();
+        aAction.Action(&rRenderContext);
         ResetTurboFlag();
         if ( !pSh->ActionPend() )
             pSh->Imp()->DelRegion();
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index c9ad763..4ace932 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -283,7 +283,7 @@ void SwViewShell::ImplEndAction( const bool bIdleEnd )
         if ( mnLockPaint )
             aAction.SetPaint( false );
         aAction.SetInputType( VclInputFlags::KEYBOARD );
-        aAction.Action();
+        aAction.Action(GetWin());
     }
 
     if ( bIsShellForCheckViewLayout )
@@ -948,7 +948,7 @@ void SwViewShell::CalcLayout()
     aAction.SetCalcLayout( true );
     aAction.SetReschedule( true );
     GetDoc()->getIDocumentFieldsAccess().LockExpFields();
-    aAction.Action();
+    aAction.Action(GetOut());
     GetDoc()->getIDocumentFieldsAccess().UnlockExpFields();
 
     //the SetNewFieldLst() on the Doc was cut off and must be fetched again
@@ -964,7 +964,7 @@ void SwViewShell::CalcLayout()
         GetDoc()->getIDocumentFieldsAccess().UpdatePageFields( &aMsgHint );
         GetDoc()->getIDocumentFieldsAccess().UpdateExpFields(NULL, true);
 
-        aAction.Action();
+        aAction.Action(GetOut());
     }
 
     if ( VisArea().HasArea() )
@@ -1596,7 +1596,7 @@ bool SwViewShell::CheckInvalidForPaint( const SwRect &rRect )
         // can't format frames which are locked by the outer action. This may
         // cause and endless loop.
         ++mnStartAction;
-        aAction.Action();
+        aAction.Action(GetWin());
         --mnStartAction;
 
         SwRegionRects *pRegion = Imp()->GetRegion();
diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx
index 631f69a..4bec7c6 100644
--- a/sw/source/core/view/vprint.cxx
+++ b/sw/source/core/view/vprint.cxx
@@ -312,7 +312,7 @@ void SwViewShell::CalcPagesForPrint( sal_uInt16 nMax )
         aAction.SetWaitAllowed( false );
         aAction.SetReschedule( true );
 
-        aAction.Action();
+        aAction.Action(GetOut());
 
         maVisArea = aOldVis; //reset due to the paints
         Imp()->SetFirstVisPageInvalid();
commit 1a2705d16c945cdd85dd75c803039c05af0c853c
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 12:27:54 2015 +0200

    SwLayAction::InternalAction: use vcl::RenderContext
    
    Change-Id: Icbc5e9a42cc7e7693c6584461505a3233046272c

diff --git a/sw/source/core/inc/layact.hxx b/sw/source/core/inc/layact.hxx
index 6977627..e85ff36 100644
--- a/sw/source/core/inc/layact.hxx
+++ b/sw/source/core/inc/layact.hxx
@@ -109,7 +109,7 @@ class SwLayAction
 
     bool TurboAction();
     bool _TurboAction( const SwContentFrm * );
-    void InternalAction();
+    void InternalAction(OutputDevice* pRenderContext);
 
     static SwPageFrm *CheckFirstVisPage( SwPageFrm *pPage );
 
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index 737c4ec..f140b71 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -366,12 +366,12 @@ void SwLayAction::Action()
     if ( IsCalcLayout() )
         SetCheckPages( false );
 
-    InternalAction();
+    InternalAction(pImp->GetShell()->GetOut());
     bAgain |= RemoveEmptyBrowserPages();
     while ( IsAgain() )
     {
         bAgain = bNextCycle = false;
-        InternalAction();
+        InternalAction(pImp->GetShell()->GetOut());
         bAgain |= RemoveEmptyBrowserPages();
     }
     pRoot->DeleteEmptySct();
@@ -442,7 +442,7 @@ static void unlockPositionOfObjects( SwPageFrm *pPageFrm )
     }
 }
 
-void SwLayAction::InternalAction()
+void SwLayAction::InternalAction(OutputDevice* pRenderContext)
 {
     OSL_ENSURE( pRoot->Lower()->IsPageFrm(), ":-( No page below the root.");
 
@@ -454,7 +454,7 @@ void SwLayAction::InternalAction()
     // number 1.  If we're doing a fake formatting, the number of the first
     // page is the number of the first visible page.
     SwPageFrm *pPage = IsComplete() ? static_cast<SwPageFrm*>(pRoot->Lower()) :
-                pImp->GetFirstVisPage(pImp->GetShell()->GetOut());
+                pImp->GetFirstVisPage(pRenderContext);
     if ( !pPage )
         pPage = static_cast<SwPageFrm*>(pRoot->Lower());
 
@@ -621,7 +621,7 @@ void SwLayAction::InternalAction()
                     if( !IsComplete() && nPreInvaPage + 2 < nFirstPageNum )
                     {
                         pImp->SetFirstVisPageInvalid();
-                        SwPageFrm *pTmpPage = pImp->GetFirstVisPage(pImp->GetShell()->GetOut());
+                        SwPageFrm *pTmpPage = pImp->GetFirstVisPage(pRenderContext);
                         nFirstPageNum = pTmpPage->GetPhyPageNum();
                         if( nPreInvaPage < nFirstPageNum )
                         {
commit c369f8644c45869cb1d80e5e243e445f5cb8b778
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 12:15:41 2015 +0200

    SwPageFrm::GetHorizontalShadowRect: use vcl::RenderContext
    
    Change-Id: Ife6c7404079aa1ae10d5c2bdbe77629e0689b167

diff --git a/sw/source/core/inc/pagefrm.hxx b/sw/source/core/inc/pagefrm.hxx
index 5b4f87d..99097a9 100644
--- a/sw/source/core/inc/pagefrm.hxx
+++ b/sw/source/core/inc/pagefrm.hxx
@@ -96,6 +96,7 @@ class SwPageFrm: public SwFootnoteBossFrm
 
     static void GetHorizontalShadowRect( const SwRect& _rPageRect,
                                      const SwViewShell*    _pViewShell,
+                                     OutputDevice* pRenderContext,
                                      SwRect&       _orBottomShadowRect,
                                      bool bPaintLeftShadow,
                                      bool bPaintRightShadow,
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 6984d8c..6587b90 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -6029,6 +6029,7 @@ bool SwPageFrm::IsLeftShadowNeeded() const
  */
 /*static*/ void SwPageFrm::GetHorizontalShadowRect( const SwRect& _rPageRect,
                                                 const SwViewShell*    _pViewShell,
+                                                OutputDevice* pRenderContext,
                                                 SwRect&       _orHorizontalShadowRect,
                                                 bool bPaintLeftShadow,
                                                 bool bPaintRightShadow,
@@ -6036,9 +6037,8 @@ bool SwPageFrm::IsLeftShadowNeeded() const
 {
     const SwPostItMgr *pMgr = _pViewShell->GetPostItMgr();
     SwRect aAlignedPageRect( _rPageRect );
-    ::SwAlignRect( aAlignedPageRect, _pViewShell, _pViewShell->GetOut() );
-    SwRect aPagePxRect =
-            _pViewShell->GetOut()->LogicToPixel( aAlignedPageRect.SVRect() );
+    ::SwAlignRect( aAlignedPageRect, _pViewShell, pRenderContext );
+    SwRect aPagePxRect = pRenderContext->LogicToPixel( aAlignedPageRect.SVRect() );
 
     long lShadowAdjustment = mnShadowPxWidth - 1; // TODO: extract this
 
@@ -6177,7 +6177,7 @@ static void lcl_paintBitmapExToRect(vcl::RenderContext *pOut, const Point& aPoin
     SwRect aPaintRect;
     OutputDevice *pOut = _pViewShell->GetOut();
 
-    SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, aPaintRect, bPaintLeftShadow, bPaintRightShadow, bRightSidebar );
+    SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, pOut, aPaintRect, bPaintLeftShadow, bPaintRightShadow, bRightSidebar );
 
     // Right shadow & corners
     if ( bPaintRightShadow )
@@ -6386,7 +6386,7 @@ static void lcl_paintBitmapExToRect(vcl::RenderContext *pOut, const Point& aPoin
 
     // Always ask for full shadow since we want a bounding rect
     // including at least the page frame
-    SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, aTmpRect, false, false, bRightSidebar );
+    SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, pRenderContext, aTmpRect, false, false, bRightSidebar );
 
     if(bLeftShadow) aPagePxRect.Left( aTmpRect.Left() - mnShadowPxWidth - 1);
     if(bRightShadow) aPagePxRect.Right( aTmpRect.Right() + mnShadowPxWidth + 1);
commit cec17a4659389c5fe3a97c144d541c6aedc64d3f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jun 25 12:04:26 2015 +0200

    SwViewShellImp::GetFirstVisPage: use vcl::RenderContext
    
    Change-Id: I7acd380d2e199f042dca61d95596c3bc63c6a206

diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index c01966b..131b1da 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -1144,7 +1144,7 @@ void SwCrsrShell::GetPageNum( sal_uInt16 &rnPhyNum, sal_uInt16 &rnVirtNum,
     if( !bAtCrsrPos || 0 == (pCFrm = GetCurrFrm( bCalcFrm )) ||
                        0 == (pPg   = pCFrm->FindPageFrm()) )
     {
-        pPg = Imp()->GetFirstVisPage();
+        pPg = Imp()->GetFirstVisPage(GetOut());
         while( pPg && pPg->IsEmptyPage() )
             pPg = static_cast<const SwPageFrm *>(pPg->GetNext());
     }
@@ -1157,7 +1157,7 @@ sal_uInt16 SwCrsrShell::GetNextPrevPageNum( bool bNext )
 {
     SET_CURR_SHELL( this );
     // page number: first visible page or the one at the cursor
-    const SwPageFrm *pPg = Imp()->GetFirstVisPage();
+    const SwPageFrm *pPg = Imp()->GetFirstVisPage(GetOut());
     if( pPg )
     {
         const SwTwips nPageTop = pPg->Frm().Top();
diff --git a/sw/source/core/draw/dpage.cxx b/sw/source/core/draw/dpage.cxx
index fe774a1..db5707c 100644
--- a/sw/source/core/draw/dpage.cxx
+++ b/sw/source/core/draw/dpage.cxx
@@ -158,7 +158,7 @@ const SdrPageGridFrameList*  SwDPage::GetGridFrameList(
         else
         {
             //The drawing demands all visible pages
-            const SwFrm *pPg = pSh->Imp()->GetFirstVisPage();
+            const SwFrm *pPg = pSh->Imp()->GetFirstVisPage(pSh->GetOut());
             if ( pPg )
                 do
                 {   ::InsertGridFrame( const_cast<SwDPage*>(this)->pGridLst, pPg );
diff --git a/sw/source/core/frmedt/fews.cxx b/sw/source/core/frmedt/fews.cxx
index 44dd490..0c46506 100644
--- a/sw/source/core/frmedt/fews.cxx
+++ b/sw/source/core/frmedt/fews.cxx
@@ -186,7 +186,7 @@ bool SwFEShell::GetPageNumber( long nYPos, bool bAtCrsrPos, sal_uInt16& rPhyNum,
     }
     else                                // first visible page
     {
-        pPage = Imp()->GetFirstVisPage();
+        pPage = Imp()->GetFirstVisPage(GetOut());
         if ( pPage && static_cast<const SwPageFrm*>(pPage)->IsEmptyPage() )
             pPage = pPage->GetNext();
     }
diff --git a/sw/source/core/inc/viewimp.hxx b/sw/source/core/inc/viewimp.hxx
index ecfd426..3146ec3 100644
--- a/sw/source/core/inc/viewimp.hxx
+++ b/sw/source/core/inc/viewimp.hxx
@@ -146,8 +146,8 @@ public:
     Color GetRetoucheColor() const;
 
     /// Management of the first visible Page
-    const SwPageFrm *GetFirstVisPage() const;
-          SwPageFrm *GetFirstVisPage();
+    const SwPageFrm *GetFirstVisPage(OutputDevice* pRenderContext) const;
+          SwPageFrm *GetFirstVisPage(OutputDevice* pRenderContext);
     void SetFirstVisPageInvalid() { bFirstPageInvalid = true; }
 
     bool AddPaintRect( const SwRect &rRect );
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index 8eb237a..737c4ec 100644

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list