[ooo-build-commit] patches/dev300

René Engelhard rene at kemper.freedesktop.org
Mon Nov 30 02:37:41 PST 2009


 patches/dev300/apply               |    3 
 patches/dev300/cws-qstartfix2.diff |  164 +++++++++++++++++++++++++++++++++++++
 2 files changed, 167 insertions(+)

New commits:
commit 9a68719269dd3d3f7169b952ae5db9c9aec73a43
Author: Rene Engelhard <rene at debian.org>
Date:   Mon Nov 30 11:35:21 2009 +0100

    backport cws qstartfix2
    
    * patches/dev300/cws-qstartfix2.diff: add
    * patches/dev300/apply: add cws-qstartfix2.diff to CWSBackports

diff --git a/patches/dev300/apply b/patches/dev300/apply
index 52b03ff..72de12a 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -206,6 +206,9 @@ cws-koheichart02-xmloff.diff, kohei
 cws-koheicopyborder-sc.diff,  kohei
 cws-koheicopyborder-svx.diff, kohei
 
+# fix QuickStarter crash on exit
+cws-qstartfix2.diff, i#101245, mmeeks
+
 [ LinuxOnly ]
 # Don't stat tons of config files we don't need to read on startup
 speed-configmgr.diff, i#56783, michael
diff --git a/patches/dev300/cws-qstartfix2.diff b/patches/dev300/cws-qstartfix2.diff
new file mode 100644
index 0000000..2920ded
--- /dev/null
+++ b/patches/dev300/cws-qstartfix2.diff
@@ -0,0 +1,164 @@
+--- sfx2/source/appl/shutdownicon.cxx
++++ sfx2/source/appl/shutdownicon.cxx
+@@ -69,6 +69,7 @@
+ #include <unistd.h>
+ #include <errno.h>
+ #endif
++#include <vcl/timer.hxx>
+ 
+ #include "sfxresid.hxx"
+ 
+@@ -186,6 +187,23 @@
+     return true;
+ }
+ 
++class IdleUnloader : Timer
++{
++    ::osl::Module *m_pModule;
++public:
++    IdleUnloader (::osl::Module **pModule) :
++        m_pModule (*pModule)
++    {
++        *pModule = NULL;
++        Start();
++    }
++    virtual void Timeout()
++    {
++        delete m_pModule;
++        delete this;
++    }
++};
++
+ void ShutdownIcon::initSystray()
+ {
+     if (m_bInitialized)
+@@ -201,15 +221,15 @@
+ {
+     if (!m_bInitialized)
+         return;
++
+     if (m_pDeInitSystray)
+         m_pDeInitSystray();
+ 
+     m_bVeto = false;
+     m_pInitSystray = 0;
+     m_pDeInitSystray = 0;
+-    if (m_pPlugin)
+-        delete m_pPlugin;
+-    m_pPlugin = 0;
++    new IdleUnloader (&m_pPlugin);
++
+     delete m_pFileDlg;
+     m_pFileDlg = NULL;
+     m_bInitialized = false;
+@@ -228,6 +249,7 @@
+ ShutdownIcon::~ShutdownIcon()
+ {
+     deInitSystray();
++    new IdleUnloader (&m_pPlugin);
+ }
+ 
+ // ---------------------------------------------------------------------------
+@@ -853,9 +884,11 @@
+         ::osl::File::getFileURLFromSystemPath( aShortcut, aShortcutUrl );
+         ::osl::File::remove( aShortcutUrl );
+ #ifdef UNX
+-        ShutdownIcon *pIcon = getInstance();
+-        if( pIcon )
+-            pIcon->deInitSystray();
++		if (pShutdownIcon)
++		{
++		    ShutdownIcon *pIcon = getInstance();
++			pIcon->deInitSystray();
++		}
+ #endif
+     }
+ #elif defined OS2
+
+--- libegg/source/eggtrayicon.c
++++ libegg/source/eggtrayicon.c
+@@ -76,6 +76,14 @@
+ static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon);
+ #endif
+ 
++/*
++ * This is made somewhat more 'interesting' by the facts that:
++ * a) GTypePlugin is a foul & tangled mess
++ * b) We may have been unloaded, and left an invalid
++ *    EggTrayIcon class lying around in the GType database,
++ *    we could use GTypePlugin to fix this, but see a) -
++ *    this is far easier and simpler.
++ */
+ GType
+ egg_tray_icon_get_type (void)
+ {
+@@ -88,18 +96,23 @@
+     sizeof (EggTrayIconClass),
+     (GBaseInitFunc) NULL,
+     (GBaseFinalizeFunc) NULL,
+-    (GClassInitFunc) egg_tray_icon_class_init,
++    (GClassInitFunc) NULL, /* class_init */
+     NULL, /* class_finalize */
+     NULL, /* class_data */
+     sizeof (EggTrayIcon),
+     0,    /* n_preallocs */
+-    (GInstanceInitFunc) egg_tray_icon_init,
++    (GInstanceInitFunc) NULL, /* instance_init */
+     NULL
+       };
+ 
+-      our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
++      our_type = g_type_from_name ("EggTrayIcon");
++      if (!our_type)
++	 our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
+     }
+ 
++  /* always overwrite the function pointers */
++  egg_tray_icon_class_init (g_type_class_ref (our_type));
++
+   return our_type;
+ }
+ 
+@@ -128,22 +141,15 @@
+ 
+   container_class->add = egg_tray_icon_add;
+ 
+-  g_object_class_install_property (gobject_class,
+-                   PROP_ORIENTATION,
+-                   g_param_spec_enum ("orientation",
+-                              _("Orientation"),
+-                              _("The orientation of the tray."),
+-                              GTK_TYPE_ORIENTATION,
+-                              GTK_ORIENTATION_HORIZONTAL,
+-                              G_PARAM_READABLE));
+-
+-#if defined (GDK_WINDOWING_X11)
+-  /* Nothing */
+-#elif defined (GDK_WINDOWING_WIN32)
+-  g_warning ("Port eggtrayicon to Win32");
+-#else
+-  g_warning ("Port eggtrayicon to this GTK+ backend");
+-#endif
++  if (!g_object_class_find_property (gobject_class, "orientation"))
++    g_object_class_install_property (gobject_class,
++				     PROP_ORIENTATION,
++				     g_param_spec_enum ("orientation",
++							"Orientation",
++							"The orientation of the tray.",
++							GTK_TYPE_ORIENTATION,
++							GTK_ORIENTATION_HORIZONTAL,
++							G_PARAM_READABLE));
+ }
+ 
+ static void
+@@ -471,7 +477,9 @@
+ EggTrayIcon*
+ egg_tray_icon_new (const gchar *name)
+ {
+-  return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
++  EggTrayIcon *icon = g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
++  egg_tray_icon_init (icon);
++  return icon;
+ }
+ 
+ guint


More information about the ooo-build-commit mailing list