diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2014-03-10 14:57:10 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-03-22 15:02:17 +0000 |
commit | a8e64a0a017ba98fbff96862deca9b3d1970e0eb (patch) | |
tree | 960d871718e0e7346f9a38902bf232f0be3ce31e /vcl | |
parent | 6247c3ee49ff0dee676dd20589f36c71eebf06c6 (diff) |
Revert "KDE4: sleep in yield for native file picker"
This reverts commit 380f3b4b6cbbe8e82b58ddf55e95c5005307b51f.
Conflicts:
vcl/unx/kde4/KDEXLib.cxx
vcl/unx/kde4/KDEXLib.hxx
(cherry picked from commit 52a2bde753fdf62cd8bb8498ef92abcce86e6c12)
Change-Id: I8528bd881dbe1aee228d61c06ae018f3a75449b1
Reviewed-on: https://gerrit.libreoffice.org/8704
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/unx/kde4/KDE4FilePicker.cxx | 9 | ||||
-rw-r--r-- | vcl/unx/kde4/KDE4FilePicker.hxx | 5 | ||||
-rw-r--r-- | vcl/unx/kde4/KDEXLib.cxx | 17 | ||||
-rw-r--r-- | vcl/unx/kde4/KDEXLib.hxx | 2 |
4 files changed, 5 insertions, 28 deletions
diff --git a/vcl/unx/kde4/KDE4FilePicker.cxx b/vcl/unx/kde4/KDE4FilePicker.cxx index 405eafeb6573..b3fde26b90a2 100644 --- a/vcl/unx/kde4/KDE4FilePicker.cxx +++ b/vcl/unx/kde4/KDE4FilePicker.cxx @@ -38,7 +38,6 @@ #include "KDE4FilePicker.hxx" #include "FPServiceInfo.hxx" -#include "KDEXLib.hxx" /* ********* Hack, but needed because of conflicting types... */ #define Region QtXRegion @@ -114,11 +113,10 @@ QString toQString(const OUString& s) // KDE4FilePicker ////////////////////////////////////////////////////////////////////////// -KDE4FilePicker::KDE4FilePicker( const uno::Reference<uno::XComponentContext>&, KDEXLib *xlib ) +KDE4FilePicker::KDE4FilePicker( const uno::Reference<uno::XComponentContext>& ) : KDE4FilePicker_Base(_helperMutex) , _resMgr( ResMgr::CreateResMgr("fps_office") ) , allowRemoteUrls( false ) - , _mXLib( xlib ) { _extraControls = new QWidget(); _layout = new QGridLayout(_extraControls); @@ -263,11 +261,8 @@ sal_Int16 SAL_CALL KDE4FilePicker::execute() _dialog->filterWidget()->setEditable(false); // We're entering a nested loop. - // Prevent yield calls, which would crash LO. - - _mXLib->freezeYield( true ); + // Release the yield mutex to prevent deadlocks. int result = _dialog->exec(); - _mXLib->freezeYield( false ); // HACK: KFileDialog uses KConfig("kdeglobals") for saving some settings // (such as the auto-extension flag), but that doesn't update KGlobal::config() diff --git a/vcl/unx/kde4/KDE4FilePicker.hxx b/vcl/unx/kde4/KDE4FilePicker.hxx index 81acf0cd6e88..6dc97df86cc2 100644 --- a/vcl/unx/kde4/KDE4FilePicker.hxx +++ b/vcl/unx/kde4/KDE4FilePicker.hxx @@ -40,7 +40,6 @@ class KFileDialog; class QWidget; class QLayout; -class KDEXLib; class ResMgr; @@ -83,10 +82,8 @@ protected: bool allowRemoteUrls; - KDEXLib* _mXLib; - public: - KDE4FilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >&, KDEXLib* ); + KDE4FilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& ); virtual ~KDE4FilePicker(); // XFilePickerNotifier diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx index f8923c3986df..6bd6c1a61675 100644 --- a/vcl/unx/kde4/KDEXLib.cxx +++ b/vcl/unx/kde4/KDEXLib.cxx @@ -64,8 +64,7 @@ KDEXLib::KDEXLib() : SalXLib(), m_bStartupDone(false), m_pApplication(0), m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 ), - eventLoopType( LibreOfficeEventLoop ), - m_bYieldFrozen( false ), m_frameWidth( -1 ) + eventLoopType( LibreOfficeEventLoop ), m_frameWidth( -1 ) { // the timers created here means they belong to the main thread. // As the timeoutTimer runs the LO event queue, which may block on a dialog, @@ -233,7 +232,6 @@ void KDEXLib::setupEventLoop() eventLoopType = GlibEventLoop; old_gpoll = g_main_context_get_poll_func( NULL ); g_main_context_set_poll_func( NULL, gpoll_wrapper ); - m_pApplication->clipboard()->setProperty( "useEventLoopWhenWaiting", true ); return; } #endif @@ -317,17 +315,6 @@ void KDEXLib::Yield( bool bWait, bool bHandleAllCurrentEvents ) return SalXLib::Yield( bWait, bHandleAllCurrentEvents ); } - if( m_bYieldFrozen ) { - if( qApp->thread() != QThread::currentThread() ) { - QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance( qApp->thread() ); - if( dispatcher->hasPendingEvents() ) { - struct timespec delay = {0, ( 1000000 )}; - nanosleep(&delay, NULL); - } - } - return; - } - // if we are the main thread (which is where the event processing is done), // good, just do it if( qApp->thread() == QThread::currentThread()) { @@ -445,7 +432,7 @@ uno::Reference< ui::dialogs::XFilePicker2 > KDEXLib::createFilePicker( SalYieldMutexReleaser aReleaser; return Q_EMIT createFilePickerSignal( xMSF ); } - return uno::Reference< ui::dialogs::XFilePicker2 >( new KDE4FilePicker( xMSF, this ) ); + return uno::Reference< ui::dialogs::XFilePicker2 >( new KDE4FilePicker( xMSF ) ); } #define Region QtXRegion diff --git a/vcl/unx/kde4/KDEXLib.hxx b/vcl/unx/kde4/KDEXLib.hxx index dd7f83f7d18e..1d307a0a223e 100644 --- a/vcl/unx/kde4/KDEXLib.hxx +++ b/vcl/unx/kde4/KDEXLib.hxx @@ -52,7 +52,6 @@ class KDEXLib : public QObject, public SalXLib QTimer timeoutTimer; QTimer userEventTimer; enum { LibreOfficeEventLoop, GlibEventLoop, QtUnixEventLoop } eventLoopType; - bool m_bYieldFrozen; int m_frameWidth; private: @@ -87,7 +86,6 @@ class KDEXLib : public QObject, public SalXLib virtual void Wakeup(); virtual void PostUserEvent(); - void freezeYield(bool freeze) { m_bYieldFrozen = freeze; } void doStartup(); public Q_SLOTS: |