Sophie

Sophie

distrib > * > 2008.0 > x86_64 > by-pkgid > b2e3ac505bd14bf924e2c9becacc2082 > files > 12

kpowersave-0.7.2-16mdv2008.0.src.rpm

--- kpowersave-0.7.2/src/screen.h--	2007-03-26 18:15:18.000000000 +0200
+++ kpowersave-0.7.2/src/screen.h	2007-03-26 18:15:48.000000000 +0200
@@ -119,6 +119,8 @@
 	//! to get the return value of gnomescreensaver-command
 	void getGSExited(KProcess *);
 
+	void cleanProcess(KProcess *);
+
 public slots:
 	
 	//! to fake a keyevent for the login dialog after suspend with lock screen
--- kpowersave-0.7.2/src/screen.cpp--	2007-03-26 18:21:19.000000000 +0200
+++ kpowersave-0.7.2/src/screen.cpp	2007-03-26 18:19:54.000000000 +0200
@@ -256,15 +256,19 @@
 	
 	// check for gnome-screen-saver
 	if (check == 10) {
-		if (gnomeScreensaverCheck != NULL)
-			delete gnomeScreensaverCheck;
+		delete gnomeScreensaverCheck;
 
 		gnomeScreensaverCheck = new KProcess;
 		*gnomeScreensaverCheck << "gnome-screensaver-command" << "--query";
 
 		connect( gnomeScreensaverCheck , SIGNAL(processExited(KProcess *)),SLOT(getGSExited(KProcess *)));
 		
-		if(!gnomeScreensaverCheck->start(KProcess::NotifyOnExit)) return 10;
+		if(!gnomeScreensaverCheck->start(KProcess::NotifyOnExit)) 
+		{
+			delete gnomeScreensaverCheck;
+			gnomeScreensaverCheck = NULL;
+			return 10;
+		}
 		else return 99;	
 	}
 
@@ -283,7 +287,8 @@
 	}
 	else
 		SCREENSAVER_STATUS = 10;
-	
+	delete gnomecheckcommand;
+	gnomecheckcommand=NULL;	
 	return;
 } 
  
@@ -397,35 +402,55 @@
 	// set lock for XScreensaver
 	else if(SCREENSAVER_STATUS == 11){
 xscreensaver:
-		if (xscreensaver_lock != NULL)
-			delete xscreensaver_lock;		
+		delete xscreensaver_lock;		
 
 		xscreensaver_lock = new KProcess;
 		*xscreensaver_lock << "xscreensaver-command" << "-lock";
-		
-		return xscreensaver_lock->start(KProcess::DontCare);
+	        connect(xscreensaver_lock, SIGNAL(processExited(KProcess*)),
+	                this, SLOT(cleanProcess(KProcess*)));
+
+		bool status = xscreensaver_lock->start(KProcess::DontCare);
+		if(!status)
+		{
+			delete xscreensaver_lock;
+			xscreensaver_lock = NULL;
+		}
+		return status;
 	}
 	// lock with gnome-screen-saver
 	else if(SCREENSAVER_STATUS == 20){
-		if (gnomescreensaver_lock != NULL)
-			delete gnomescreensaver_lock;
+		delete gnomescreensaver_lock;
 
 		gnomescreensaver_lock = new KProcess;
 		*gnomescreensaver_lock << "gnome-screensaver-command" << "--lock";
-		
-		return gnomescreensaver_lock->start(KProcess::DontCare);
+	
+	        connect(gnomescreensaver_lock, SIGNAL(processExited(KProcess*)),
+	                this, SLOT(cleanProcess(KProcess*)));	
+		bool status = gnomescreensaver_lock->start(KProcess::DontCare);
+		if(!status)
+		{
+			delete gnomescreensaver_lock;
+			gnomescreensaver_lock=NULL;
+		}
+		return status;
 	}
 	// set lock for xlock --> no kscreensaver, no xscreensaver present and
 	// the check for gnome screensaver is not finished. This should normaly
 	// not happen, but in this case we use xlock
 	else if(SCREENSAVER_STATUS == 10 || SCREENSAVER_STATUS == 99){
-		if (xlock != NULL)
-			delete xlock;
+		delete xlock;
 		
 		xlock = new KProcess;
 		*xlock << "xlock"; //<< "-mode" << "blank";
-
-		return xlock->start(KProcess::DontCare);
+                connect(xlock, SIGNAL(processExited(KProcess*)),
+                           this, SLOT(cleanProcess(KProcess*)));
+		bool status = xlock->start(KProcess::DontCare);
+		if(!status)
+		{
+			delete xlock;
+			xlock = NULL;
+		}
+		return status;
 	}
 	else return false;
 }
@@ -445,18 +470,35 @@
 		return true;
 	}
 	else if (lock_withMethod == "xlock") {
-		if (xlock != NULL)
-			delete xlock;
+		delete xlock;
 		
 		xlock = new KProcess;
 		*xlock << "xlock";
+                connect(xlock, SIGNAL(processExited(KProcess*)),
+                           this, SLOT(cleanProcess(KProcess*)));
 
-		return xlock->start(KProcess::DontCare);
+                bool status = xlock->start(KProcess::DontCare);
+		if(!status)
+		{
+			delete xlock;
+			xlock=NULL;
+		}
+
+		return status;
 	}
 	else if (lock_withMethod == "gnomescreensaver") {
 		gnomescreensaver_lock = new KProcess;
 		*gnomescreensaver_lock << "gnome-screensaver-command" << "--lock";
-		return gnomescreensaver_lock->start(KProcess::DontCare);
+                connect(gnomescreensaver_lock, SIGNAL(processExited(KProcess*)),
+                                                this, SLOT(cleanProcess(KProcess*)));
+
+		bool status = gnomescreensaver_lock->start(KProcess::DontCare);
+		if(!status)
+		{
+			delete gnomescreensaver_lock;
+			gnomescreensaver_lock = NULL;
+		}
+		return status;
 	}
 	else {
 		// screensaver status known?
@@ -478,13 +520,20 @@
 		else if (lock_withMethod == "xscreensaver") {
 			if(SCREENSAVER_STATUS == 11){
 xscreensaver:
-				if (xscreensaver_lock != NULL)
-					delete xscreensaver_lock; 
+				delete xscreensaver_lock; 
 				
 				xscreensaver_lock = new KProcess;
 				*xscreensaver_lock << "xscreensaver-command" << "-lock";
-			
-				return xscreensaver_lock->start(KProcess::DontCare);
+		                connect(xscreensaver_lock, SIGNAL(processExited(KProcess*)),
+                                                this, SLOT(cleanProcess(KProcess*)));
+
+				bool status = xscreensaver_lock->start(KProcess::DontCare);
+				if(!status)
+				{
+					delete xscreensaver_lock;
+					xscreensaver_lock = NULL;
+				}
+				return status;
 			}
 			else return false;
 		}
@@ -543,7 +592,18 @@
 	
 	KProcess *xset = new KProcess;
 	*xset << "xset" << "dpms" << "force" << "off";
-	xset->start();
+        connect(xset, SIGNAL(processExited(KProcess*)),
+                this, SLOT(cleanProcess(KProcess*)));
+	if(!xset->start())
+	{
+		delete xset;
+	}
+}
+
+void screen::cleanProcess(KProcess* proc)
+{
+	delete proc;
+	proc = NULL;
 }
 
 /*!