summaryrefslogtreecommitdiff
path: root/extensions/source
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/source')
-rw-r--r--extensions/source/plugin/base/plcom.cxx5
-rw-r--r--extensions/source/plugin/inc/plugin/plcom.hxx2
-rw-r--r--extensions/source/plugin/unx/npwrap.cxx14
-rw-r--r--extensions/source/plugin/unx/sysplug.cxx2
4 files changed, 19 insertions, 4 deletions
diff --git a/extensions/source/plugin/base/plcom.cxx b/extensions/source/plugin/base/plcom.cxx
index 1d3566bd2873..b19a7e58d249 100644
--- a/extensions/source/plugin/base/plcom.cxx
+++ b/extensions/source/plugin/base/plcom.cxx
@@ -42,11 +42,12 @@
#include <tools/fsys.hxx>
#include <plugin/impl.hxx>
-PluginComm::PluginComm( const ::rtl::OString& rLibName ) :
+PluginComm::PluginComm( const ::rtl::OString& rLibName, bool bReusable ) :
m_nRefCount( 0 ),
m_aLibName( rLibName )
{
- PluginManager::get().getPluginComms().push_back( this );
+ if( bReusable )
+ PluginManager::get().getPluginComms().push_back( this );
}
PluginComm::~PluginComm()
diff --git a/extensions/source/plugin/inc/plugin/plcom.hxx b/extensions/source/plugin/inc/plugin/plcom.hxx
index 1ea42d933467..0c5845667887 100644
--- a/extensions/source/plugin/inc/plugin/plcom.hxx
+++ b/extensions/source/plugin/inc/plugin/plcom.hxx
@@ -42,7 +42,7 @@ protected:
::rtl::OString m_aLibName;
std::list< String > m_aFilesToDelete;
public:
- PluginComm( const ::rtl::OString& rLibName );
+ PluginComm( const ::rtl::OString& rLibName, bool bReusable = true );
virtual ~PluginComm();
int getRefCount() { return m_nRefCount; }
diff --git a/extensions/source/plugin/unx/npwrap.cxx b/extensions/source/plugin/unx/npwrap.cxx
index f9a333c77dda..f121342874d8 100644
--- a/extensions/source/plugin/unx/npwrap.cxx
+++ b/extensions/source/plugin/unx/npwrap.cxx
@@ -262,6 +262,17 @@ static GSourceFuncs aXtEventFuncs =
NULL
};
+static gboolean pollXtTimerCallback(gpointer)
+{
+ for(int i = 0; i < 5; i++)
+ {
+ if( (XtAppPending(app_context) & (XtIMAll & ~XtIMXEvent)) == 0 )
+ break;
+ XtAppProcessEvent(app_context, XtIMAll & ~XtIMXEvent);
+ }
+ return TRUE;
+}
+
static gboolean prepareWakeupEvent( GSource*, gint* )
{
struct pollfd aPoll = { wakeup_fd[0], POLLIN, 0 };
@@ -411,6 +422,7 @@ int main( int argc, char **argv)
aXtPollDesc.revents = 0;
g_source_add_poll( pXTSource, &aXtPollDesc );
+ gint xt_polling_timer_id = g_timeout_add( 25, pollXtTimerCallback, NULL);
// Initialize wakeup events listener
GSource *pWakeupSource = g_source_new( &aWakeupEventFuncs, sizeof(GSource) );
if ( pWakeupSource == NULL )
@@ -473,6 +485,8 @@ int main( int argc, char **argv)
medDebug( 1, "left plugin app main loop\n" );
+ g_source_remove(xt_polling_timer_id);
+
pNP_Shutdown();
medDebug( 1, "NP_Shutdown done\n" );
osl_unloadModule( pPluginLib );
diff --git a/extensions/source/plugin/unx/sysplug.cxx b/extensions/source/plugin/unx/sysplug.cxx
index 4b8e0454c893..573e79d22cb2 100644
--- a/extensions/source/plugin/unx/sysplug.cxx
+++ b/extensions/source/plugin/unx/sysplug.cxx
@@ -50,7 +50,7 @@ UnxPluginComm::UnxPluginComm(
int nDescriptor1,
int nDescriptor2
) :
- PluginComm( ::rtl::OUStringToOString( library, osl_getThreadTextEncoding() ) ),
+ PluginComm( ::rtl::OUStringToOString( library, osl_getThreadTextEncoding() ), false ),
PluginConnector( nDescriptor2 )
{
char pDesc[32];