Resolves: rhbz#610103 exit quickstarter when libs deleted

f41
Caolán McNamara 14 years ago
parent 457672eb3d
commit 352fadd9d8

@ -0,0 +1,111 @@
diff --git a/sfx2/source/appl/makefile.mk b/sfx2/source/appl/makefile.mk
index 72ac94a..a583102 100644
--- a/sfx2/source/appl/makefile.mk
+++ b/sfx2/source/appl/makefile.mk
@@ -53,6 +53,10 @@ CFLAGS+=-DENABLE_QUICKSTART_APPLET
CDEFS+=-DDLL_NAME=libsfx$(DLLPOSTFIX)$(DLLPOST)
.IF "$(ENABLE_SYSTRAY_GTK)"=="TRUE"
PKGCONFIG_MODULES=gtk+-2.0
+.IF "$(ENABLE_GIO)"!=""
+ PKGCONFIG_MODULES+=gio-2.0
+ CDEFS+=-DENABLE_GIO
+.ENDIF
.INCLUDE: pkg_config.mk
CFLAGS+=$(PKGCONFIG_CFLAGS)
CFLAGS+=-DENABLE_QUICKSTART_APPLET
diff --git a/sfx2/source/appl/shutdowniconunx.cxx b/sfx2/source/appl/shutdowniconunx.cxx
index e31c32f..1b78f9b 100644
--- a/sfx2/source/appl/shutdowniconunx.cxx
+++ b/sfx2/source/appl/shutdowniconunx.cxx
@@ -19,6 +19,10 @@
#include "shutdownicon.hxx"
#endif
+#ifdef ENABLE_GIO
+#include <gio/gio.h>
+#endif
+
// Cut/paste from vcl/inc/svids.hrc
#define SV_ICON_SMALL_START 25000
@@ -39,6 +43,9 @@ static EggTrayIcon *pTrayIcon;
static GtkWidget *pExitMenuItem = NULL;
static GtkWidget *pOpenMenuItem = NULL;
static GtkWidget *pDisableMenuItem = NULL;
+#ifdef ENABLE_GIO
+GFileMonitor* pMonitor = NULL;
+#endif
static void open_url_cb( GtkWidget *, gpointer data )
{
@@ -358,6 +365,22 @@ extern "C" {
}
}
+#ifdef ENABLE_GIO
+/*
+ * See rhbz#610103. If the quickstarter is running, then LibreOffice is
+ * upgraded, then the old quickstarter is still running, but is now unreliable
+ * as the old install has been deleted. A fairly intractable problem but we
+ * can avoid much of the pain if we turn off the quickstarter if we detect
+ * that it has been physically deleted.
+*/
+static void notify_file_changed(GFileMonitor * /*gfilemonitor*/, GFile * /*arg1*/,
+ GFile * /*arg2*/, GFileMonitorEvent event_type, gpointer /*user_data*/)
+{
+ if (event_type == G_FILE_MONITOR_EVENT_DELETED)
+ exit_quickstarter_cb(GTK_WIDGET(pTrayIcon));
+}
+#endif
+
void SAL_DLLPUBLIC_EXPORT plugin_init_sys_tray()
{
::SolarMutexGuard aGuard;
@@ -403,6 +426,20 @@ void SAL_DLLPUBLIC_EXPORT plugin_init_sys_tray()
g_signal_connect(GTK_WIDGET(pTrayIcon), "destroy",
G_CALLBACK(exit_quickstarter_cb), NULL);
+
+#ifdef ENABLE_GIO
+ GFile* pFile = NULL;
+ rtl::OUString sLibraryFileUrl;
+ if (osl::Module::getUrlFromAddress(plugin_init_sys_tray, sLibraryFileUrl))
+ pFile = g_file_new_for_uri(rtl::OUStringToOString(sLibraryFileUrl, RTL_TEXTENCODING_UTF8).getStr());
+
+ if (pFile)
+ {
+ if ((pMonitor = g_file_monitor_file(pFile, G_FILE_MONITOR_NONE, NULL, NULL)))
+ g_signal_connect(pMonitor, "changed", (GCallback)notify_file_changed, NULL);
+ g_object_unref(pFile);
+ }
+#endif
}
void SAL_DLLPUBLIC_EXPORT plugin_shutdown_sys_tray()
@@ -411,6 +448,17 @@ void SAL_DLLPUBLIC_EXPORT plugin_shutdown_sys_tray()
if( !pTrayIcon )
return;
+#ifdef ENABLE_GIO
+ if (pMonitor)
+ {
+ g_signal_handlers_disconnect_by_func(pMonitor,
+ (void*)notify_file_changed, pMonitor);
+ g_file_monitor_cancel(pMonitor);
+ g_object_unref(pMonitor);
+ pMonitor = NULL;
+ }
+#endif
+
/* we have to set pTrayIcon to NULL now, because gtk_widget_destroy
* causes calling exit_quickstarter_cb (which then calls this func.)
* again -> crash.
@@ -419,7 +467,7 @@ void SAL_DLLPUBLIC_EXPORT plugin_shutdown_sys_tray()
*/
GtkWidget* const pIcon = GTK_WIDGET( pTrayIcon );
pTrayIcon = NULL;
- gtk_widget_destroy( pIcon );
+ gtk_widget_destroy( pIcon );
pExitMenuItem = NULL;
pOpenMenuItem = NULL;

@ -28,7 +28,7 @@
Summary: Free Software Productivity Suite
Name: libreoffice
Version: 3.2.99.3
Release: 1%{?dist}
Release: 2%{?dist}
License: LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and (CDDL or GPLv2) and Public Domain
Group: Applications/Productivity
URL: http://www.documentfoundation.org/develop
@ -95,6 +95,7 @@ Patch11: openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch
Patch12: turn-script-providers-into-extensions.patch
Patch13: qstart.dont-forceenabled-on-post-reg-restart.patch
Patch14: libreoffice-installfix.patch
Patch15: exit.quickstarter.when.deleted.patch
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define instdir %{_libdir}
@ -706,6 +707,7 @@ cp -p %{SOURCE20} external/unowinreg/unowinreg.dll
%patch12 -p1 -b .turn-script-providers-into-extensions.patch
%patch13 -p1 -b .qstart.dont-forceenabled-on-post-reg-restart.patch
%patch14 -p1 -b .libreoffice-installfix.patch
%patch15 -p1 -b .exit.quickstarter.when.deleted.patch
touch scripting/source/pyprov/delzip
touch scripting/util/provider/beanshell/delzip
touch scripting/util/provider/javascript/delzip
@ -1990,6 +1992,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%changelog
* Thu Nov 25 2010 Caolán McNamara <caolanm@redhat.com> 3.2.99.3-2
- Resolves: rhbz#610103 exit quickstarter when libs deleted
* Thu Nov 18 2010 Caolán McNamara <caolanm@redhat.com 3.2.99.3-1
- next Libreoffice milestone
- drop integrated openoffice.org-2.0.1.rhXXXXXX.extensions.defaulttoevo2.patch

Loading…
Cancel
Save