summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-04-07 06:11:33 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-04-07 06:11:33 +0000
commit39dc2df1abb736f0e4053e287a343e1a7001d1c4 (patch)
treeb84da8163252cba1ae5175f738b2fea54c2e928e
parent47a3b88d5b3fad6958e60a417cea3059b84d1bb6 (diff)
downloadtdebase-39dc2df1.tar.gz
tdebase-39dc2df1.zip
Work around glibc/libstdc/gcc/g++ nested new() object bug
Closes Bug #456 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1227273 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
-rw-r--r--kdesktop/bgmanager.cc11
-rw-r--r--kdesktop/bgmanager.h2
-rw-r--r--kdesktop/desktop.cc32
-rw-r--r--kdesktop/desktop.h3
-rw-r--r--kdesktop/krootwm.cc2
5 files changed, 28 insertions, 22 deletions
diff --git a/kdesktop/bgmanager.cc b/kdesktop/bgmanager.cc
index bbcb7bf23..19d24870c 100644
--- a/kdesktop/bgmanager.cc
+++ b/kdesktop/bgmanager.cc
@@ -59,9 +59,20 @@ extern KDesktopApp *myApp;
/**** KBackgroundManager ****/
+KBackgroundManager::KBackgroundManager()
+ : DCOPObject("KBackgroundIface")
+{
+ // Everything will be initialized later
+}
+
KBackgroundManager::KBackgroundManager(TQWidget *desktop, KWinModule* kwinModule)
: DCOPObject("KBackgroundIface")
{
+ initializeManager(desktop, kwinModule);
+}
+
+void KBackgroundManager::initializeManager(TQWidget *desktop, KWinModule* kwinModule)
+{
if( !properties_inited )
{
prop_root = XInternAtom(qt_xdisplay(), "_XROOTPMAP_ID", False);
diff --git a/kdesktop/bgmanager.h b/kdesktop/bgmanager.h
index e1a703a6d..62a23ca38 100644
--- a/kdesktop/bgmanager.h
+++ b/kdesktop/bgmanager.h
@@ -61,9 +61,11 @@ class KBackgroundManager
TQ_OBJECT
public:
+ KBackgroundManager();
KBackgroundManager(TQWidget *desktop, KWinModule* kwinModule);
~KBackgroundManager();
+ void initializeManager(TQWidget *desktop, KWinModule* kwinModule);
void configure();
void setCommon(int);
bool isCommon() { return m_bCommon; };
diff --git a/kdesktop/desktop.cc b/kdesktop/desktop.cc
index a3ddff56f..1b047bd66 100644
--- a/kdesktop/desktop.cc
+++ b/kdesktop/desktop.cc
@@ -20,7 +20,6 @@
#include "desktop.h"
#include "krootwm.h"
-#include "bgmanager.h"
#include "bgsettings.h"
#include "startupid.h"
#include "kdiconview.h"
@@ -197,7 +196,6 @@ KDesktop::KDesktop( bool x_root_hack, bool wait_for_kded ) :
m_pIconView = 0;
m_pRootWidget = 0;
- bgMgr = 0;
initRoot();
TQTimer::singleShot(0, this, TQT_SLOT( slotStart() ));
@@ -218,8 +216,6 @@ KDesktop::initRoot()
if ( !m_bDesktopEnabled && !m_pRootWidget )
{
hide();
- delete bgMgr;
- bgMgr = 0;
if ( m_pIconView )
m_pIconView->saveIconPositions();
delete m_pIconView;
@@ -243,9 +239,9 @@ KDesktop::initRoot()
// Geert Jansen: backgroundmanager belongs here
// TODO tell KBackgroundManager if we change widget()
- bgMgr = new KBackgroundManager( m_pIconView, m_pKwinmodule );
- bgMgr->setExport(1);
- connect( bgMgr, TQT_SIGNAL( initDone()), TQT_SLOT( backgroundInitDone()));
+ bgMgr.initializeManager( m_pIconView, m_pKwinmodule );
+ bgMgr.setExport(1);
+ connect( &bgMgr, TQT_SIGNAL( initDone()), TQT_SLOT( backgroundInitDone()));
if (!m_bInit)
{
delete KRootWm::self();
@@ -256,8 +252,6 @@ KDesktop::initRoot()
}
else if (m_bDesktopEnabled && !m_pIconView)
{
- delete bgMgr;
- bgMgr = 0;
delete m_pRootWidget;
m_pRootWidget = 0;
m_pIconView = new KDIconView( this, 0 );
@@ -284,9 +278,9 @@ KDesktop::initRoot()
// Geert Jansen: backgroundmanager belongs here
// TODO tell KBackgroundManager if we change widget()
- bgMgr = new KBackgroundManager( m_pIconView, m_pKwinmodule );
- bgMgr->setExport(1);
- connect( bgMgr, TQT_SIGNAL( initDone()), TQT_SLOT( backgroundInitDone()));
+ bgMgr.initializeManager( m_pIconView, m_pKwinmodule );
+ bgMgr.setExport(1);
+ connect( &bgMgr, TQT_SIGNAL( initDone()), TQT_SLOT( backgroundInitDone()));
// make sure it is initialized before we first call updateWorkArea()
m_pIconView->initConfig( m_bInit );
@@ -436,8 +430,6 @@ KDesktop::~KDesktop()
{
delete m_miniCli;
m_miniCli = 0; // see #120382
- delete bgMgr;
- bgMgr = 0;
delete startup_id;
}
@@ -937,11 +929,11 @@ void KDesktop::handleColorDropEvent(TQDropEvent * e)
TQColor c;
KColorDrag::decode(e, c);
switch (result) {
- case 1: bgMgr->setColor(c, true); break;
- case 2: bgMgr->setColor(c, false); break;
+ case 1: bgMgr.setColor(c, true); break;
+ case 2: bgMgr.setColor(c, false); break;
default: return;
}
- bgMgr->setWallpaper(0,0);
+ bgMgr.setWallpaper(0,0);
}
void KDesktop::handleImageDropEvent(TQDropEvent * e)
@@ -993,7 +985,7 @@ void KDesktop::handleImageDropEvent(TQDropEvent * e)
KTempFile tmpFile(KGlobal::dirs()->saveLocation("wallpaper"), ".png");
i.save(tmpFile.name(), "PNG");
kdDebug(1204) << "KDesktop::contentsDropEvent " << tmpFile.name() << endl;
- bgMgr->setWallpaper(tmpFile.name());
+ bgMgr.setWallpaper(tmpFile.name());
}
}
@@ -1002,7 +994,7 @@ void KDesktop::slotNewWallpaper(const KURL &url)
// This is called when a file containing an image is dropped
// (called by KonqOperations)
if ( url.isLocalFile() )
- bgMgr->setWallpaper( url.path() );
+ bgMgr.setWallpaper( url.path() );
else
{
// Figure out extension
@@ -1014,7 +1006,7 @@ void KDesktop::slotNewWallpaper(const KURL &url)
KURL localURL; localURL.setPath( tmpFile.name() );
// We pass 0 as parent window because passing the desktop is not a good idea
KIO::NetAccess::file_copy( url, localURL, -1, true /*overwrite*/ );
- bgMgr->setWallpaper( localURL.path() );
+ bgMgr.setWallpaper( localURL.path() );
}
}
diff --git a/kdesktop/desktop.h b/kdesktop/desktop.h
index be1aeb796..ceb3bf1dc 100644
--- a/kdesktop/desktop.h
+++ b/kdesktop/desktop.h
@@ -21,6 +21,7 @@
#define __desktop_h__
#include "KDesktopIface.h"
+#include "bgmanager.h"
#include <tqwidget.h>
#include <tqstringlist.h>
@@ -190,7 +191,7 @@ private:
KWinModule* m_pKwinmodule;
- KBackgroundManager* bgMgr;
+ KBackgroundManager bgMgr;
KDIconView *m_pIconView;
KRootWidget *m_pRootWidget;
diff --git a/kdesktop/krootwm.cc b/kdesktop/krootwm.cc
index 2ea6fa87c..3805e5c81 100644
--- a/kdesktop/krootwm.cc
+++ b/kdesktop/krootwm.cc
@@ -69,7 +69,7 @@ KRootWm * KRootWm::s_rootWm = 0;
extern TQCString kdesktop_name, kicker_name, kwin_name;
-KRootWm::KRootWm(KDesktop* _desktop) : TQObject(_desktop)
+KRootWm::KRootWm(KDesktop* _desktop) : TQObject(_desktop), startup(FALSE)
{
s_rootWm = this;
m_actionCollection = new KActionCollection(_desktop, this, "KRootWm::m_actionCollection");