[Libreoffice-commits] core.git: Branch 'feature/lok_sofficemain' - 4 commits - desktop/source libreofficekit/Module_libreofficekit.mk libreofficekit/qa libreofficekit/source
Andrzej Hunt
andrzej.hunt at collabora.com
Mon Jul 28 07:30:21 PDT 2014
desktop/source/lib/init.cxx | 12 ++++++++----
libreofficekit/Module_libreofficekit.mk | 6 +++---
libreofficekit/qa/unit/tiledrendering.cxx | 2 +-
libreofficekit/source/gtk/lokdocview.c | 22 ++++++++++++++++++----
4 files changed, 30 insertions(+), 12 deletions(-)
New commits:
commit 51868fb309ceaf9d03949b0e33ad09e70bb72f02
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Mon Jul 28 09:02:25 2014 +0200
DO NOT MERGE: reenable LOK tiled rendering test (BRANCH ONLY).
Change-Id: Ica4e570cafa25f4c642016608d8d510e668ed701
diff --git a/libreofficekit/Module_libreofficekit.mk b/libreofficekit/Module_libreofficekit.mk
index 8523b1a..071ea93 100644
--- a/libreofficekit/Module_libreofficekit.mk
+++ b/libreofficekit/Module_libreofficekit.mk
@@ -16,9 +16,9 @@ $(eval $(call gb_Module_add_targets,libreofficekit,\
Executable_lokconf_init \
))
-# $(eval $(call gb_Module_add_check_targets,libreofficekit,\
-# CppunitTest_libreofficekit_tiledrendering \
-# ))
+$(eval $(call gb_Module_add_check_targets,libreofficekit,\
+ CppunitTest_libreofficekit_tiledrendering \
+))
ifneq ($(ENABLE_GTK),)
$(eval $(call gb_Module_add_targets,libreofficekit,\
commit a08d6ab6f0cfc00b578e39d7b107857af21d50e6
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Mon Jul 28 16:29:43 2014 +0200
Prevent LOK DocView crash if document too large.
There seems to be a maximum size that gdk's pixbuf
can handle, however I have been unable to find any
documentatation. Seeing as the current implementation
isn't realistically useable anyway, we might as well
set a hard limit here (in practice we'd have much smaller
tiles + compositing).
Specifically extras/source/shellnew/soffice.ods will fail
without this patch.
Change-Id: I6ac495adca8e15878989375ef8b2de472788279a
diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c
index cdc2339..e8fe526 100644
--- a/libreofficekit/source/gtk/lokdocview.c
+++ b/libreofficekit/source/gtk/lokdocview.c
@@ -108,12 +108,26 @@ void renderDocument( LOKDocView* pDocView )
pDocView->pDocument->pClass->getDocumentSize( pDocView->pDocument, &nWidth, &nHeight );
- // Draw the whole document at once (for now)
-
// TODO: we really should scale by screen DPI here -- 10 seems to be a vaguely
// correct factor for my screen at least.
- nRenderWidth = nWidth * pDocView->fZoom / 10;
- nRenderHeight = nHeight * pDocView->fZoom / 10;
+ const float fScaleFactor = 0.1;
+
+ // Various things blow up if we try to draw too large a tile,
+ // this size seems to be safe. (Very rare/unlikely that
+ const int nMaxWidth = 100000;
+ if ( nWidth * fScaleFactor > nMaxWidth )
+ {
+ nWidth = nMaxWidth;
+ }
+ if ( nHeight * fScaleFactor > nMaxWidth )
+ {
+ nHeight = nMaxWidth;
+ }
+
+ // Draw the whole document at once (for now)
+
+ nRenderWidth = nWidth * pDocView->fZoom * fScaleFactor;
+ nRenderHeight = nHeight * pDocView->fZoom * fScaleFactor;
pDocView->pPixBuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB,
TRUE, 8,
commit d88283829375fb920cb7f4e8d6b68b3461cd6256
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Mon Jul 28 16:22:47 2014 +0200
Use CPPUNIT_ASSERT instead of assert.
Change-Id: I24e7934002ebdde208db74ae3308b26875a3155b
diff --git a/libreofficekit/qa/unit/tiledrendering.cxx b/libreofficekit/qa/unit/tiledrendering.cxx
index b231eb0..9c035b4 100644
--- a/libreofficekit/qa/unit/tiledrendering.cxx
+++ b/libreofficekit/qa/unit/tiledrendering.cxx
@@ -77,7 +77,7 @@ void TiledRenderingTest::testOverlay()
scoped_ptr< Office > pOffice( lok_cpp_init(
sLOPath.c_str() ) );
- assert( pOffice.get() );
+ CPPUNIT_ASSERT( pOffice.get() );
scoped_ptr< Document> pDocument( pOffice->documentLoad(
sDocPath.c_str() ) );
commit 6ee107e0ab3686977d299b47f5e44bbffde070dc
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Mon Jul 28 16:18:57 2014 +0200
LOK: do clean main thread shutdown cleanly.
Change-Id: If44971f67a489f6b50dee6c1683707c47e695de4
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index b73e4e2..b17516c 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -248,6 +248,7 @@ struct LibLibreOffice_Impl : public _LibreOfficeKit
{
OUString maLastExceptionMsg;
shared_ptr< LibreOfficeKitClass > m_pOfficeClass;
+ pthread_t maThread;
LibLibreOffice_Impl()
{
@@ -600,7 +601,7 @@ static void* lo_startmain(void*)
static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath)
{
- (void) pThis;
+ LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
static bool bInitialized = false;
if (bInitialized)
@@ -668,8 +669,7 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath)
// then use it to wait until we're definitely ready to continue.
OfficeIPCThread::EnableOfficeIPCThread();
- pthread_t thread;
- pthread_create(&thread, 0, lo_startmain, NULL);
+ pthread_create(&(pLib->maThread), 0, lo_startmain, NULL);
OfficeIPCThread::WaitForReady();
// If the Thread has been disabled again that indicates that a
@@ -713,8 +713,12 @@ SAL_DLLPUBLIC_EXPORT LibreOfficeKit *libreofficekit_hook(const char* install_pat
static void lo_destroy(LibreOfficeKit *pThis)
{
LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
- delete pLib;
gImpl = NULL;
+
+ Application::Quit();
+ pthread_join(pLib->maThread, NULL);
+
+ delete pLib;
}
}
More information about the Libreoffice-commits
mailing list