Bug 326499

Summary: error when opening laptop
Product: [Plasma] KScreen Reporter: David Lang <david>
Component: kdedAssignee: Daniel Vrátil <dvratil>
Status: RESOLVED FIXED    
Severity: crash CC: cfeck, dvratil
Priority: NOR Keywords: drkonqi
Version: 1.0.1   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In: 5.2.2
Sentry Crash Report:

Description David Lang 2013-10-23 12:42:18 UTC
Application: kded4 (4.11.2)
KDE Platform Version: 4.11.2
Qt Version: 4.8.4
Operating System: Linux 3.11.0-12-generic x86_64
Distribution: Ubuntu 13.10

-- Information about the crash:
- What I was doing when the application crashed:

my laptop had been closed, but continually plugged in and running (no sleep) when the lid is opened, I get the reported error. This has been happening ever since upgrading to kubuntu 13.10 beta a few weeks ago. updating and rebooting after the final release has not solved the problem

The crash can be reproduced every time.

-- Backtrace:
Application: KDE Daemon (kded4), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7fdcec6877c0 (LWP 3833))]

Thread 6 (Thread 0x7fdcd1854700 (LWP 3858)):
#0  0x00007fdceb1f83c0 in g_main_context_iteration@plt () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#1  0x00007fdceb342a76 in QEventDispatcherGlib::processEvents (this=0x7fdccc0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#2  0x00007fdceb3145ef in QEventLoop::processEvents (this=this@entry=0x7fdcd1853db0, flags=...) at kernel/qeventloop.cpp:149
#3  0x00007fdceb3148e5 in QEventLoop::exec (this=this@entry=0x7fdcd1853db0, flags=...) at kernel/qeventloop.cpp:204
#4  0x00007fdceb21388f in QThread::exec (this=<optimized out>) at thread/qthread.cpp:542
#5  0x00007fdceb215f2f in QThreadPrivate::start (arg=0xf06db0) at thread/qthread_unix.cpp:338
#6  0x00007fdce76f2f6e in start_thread (arg=0x7fdcd1854700) at pthread_create.c:311
#7  0x00007fdce9f179cd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 5 (Thread 0x7fdcc73fb700 (LWP 3867)):
#0  0x00007fdce9f0af7d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fdce7017694 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fdce7017afa in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fdcc78f69d6 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#4  0x00007fdce703c0e5 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007fdce76f2f6e in start_thread (arg=0x7fdcc73fb700) at pthread_create.c:311
#6  0x00007fdce9f179cd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 4 (Thread 0x7fdcc69ee700 (LWP 3868)):
#0  0x00007fdce70573c1 in g_mutex_unlock () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007fdce70170d8 in g_main_context_check () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fdce701762b in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fdce701779c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007fdceb342a76 in QEventDispatcherGlib::processEvents (this=0x7fdcbc0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#5  0x00007fdceb3145ef in QEventLoop::processEvents (this=this@entry=0x7fdcc69edd70, flags=...) at kernel/qeventloop.cpp:149
#6  0x00007fdceb3148e5 in QEventLoop::exec (this=this@entry=0x7fdcc69edd70, flags=...) at kernel/qeventloop.cpp:204
#7  0x00007fdceb21388f in QThread::exec (this=<optimized out>) at thread/qthread.cpp:542
#8  0x00007fdccb377fd7 in KCupsConnection::run() () from /usr/lib/libkcupslib.so
#9  0x00007fdceb215f2f in QThreadPrivate::start (arg=0xf377e0) at thread/qthread_unix.cpp:338
#10 0x00007fdce76f2f6e in start_thread (arg=0x7fdcc69ee700) at pthread_create.c:311
#11 0x00007fdce9f179cd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 3 (Thread 0x7fdcc61ed700 (LWP 3869)):
#0  0x00007fdce76f5055 in __GI___pthread_mutex_lock (mutex=0x7fdcb8000a60) at pthread_mutex_lock.c:95
#1  0x00007fdce7057391 in g_mutex_lock () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fdce7016d49 in g_main_context_prepare () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fdce70175b3 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007fdce701779c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007fdceb342a76 in QEventDispatcherGlib::processEvents (this=0x7fdcb80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#6  0x00007fdceb3145ef in QEventLoop::processEvents (this=this@entry=0x7fdcc61ecdb0, flags=...) at kernel/qeventloop.cpp:149
#7  0x00007fdceb3148e5 in QEventLoop::exec (this=this@entry=0x7fdcc61ecdb0, flags=...) at kernel/qeventloop.cpp:204
#8  0x00007fdceb21388f in QThread::exec (this=<optimized out>) at thread/qthread.cpp:542
#9  0x00007fdceb215f2f in QThreadPrivate::start (arg=0xf2e4c0) at thread/qthread_unix.cpp:338
#10 0x00007fdce76f2f6e in start_thread (arg=0x7fdcc61ed700) at pthread_create.c:311
#11 0x00007fdce9f179cd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 2 (Thread 0x7fdcc59ec700 (LWP 3885)):
#0  0x00007fdce9f0af7d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fdce7017694 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fdce701779c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fdceb342a76 in QEventDispatcherGlib::processEvents (this=0x7fdcb00008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#4  0x00007fdceb3145ef in QEventLoop::processEvents (this=this@entry=0x7fdcc59ebd70, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007fdceb3148e5 in QEventLoop::exec (this=this@entry=0x7fdcc59ebd70, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007fdceb21388f in QThread::exec (this=this@entry=0xfd0960) at thread/qthread.cpp:542
#7  0x00007fdceb2f5d13 in QInotifyFileSystemWatcherEngine::run (this=0xfd0960) at io/qfilesystemwatcher_inotify.cpp:265
#8  0x00007fdceb215f2f in QThreadPrivate::start (arg=0xfd0960) at thread/qthread_unix.cpp:338
#9  0x00007fdce76f2f6e in start_thread (arg=0x7fdcc59ec700) at pthread_create.c:311
#10 0x00007fdce9f179cd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 1 (Thread 0x7fdcec6877c0 (LWP 3833)):
[KCrash Handler]
#6  QString (other=<error reading variable: Cannot access memory at address 0x10>, this=this@entry=0x7fff1c32b4b0) at /usr/include/qt4/QtCore/qstring.h:725
#7  KScreen::Mode::id (this=this@entry=0x0) at /build/buildd/libkscreen-1.0.1/src/mode.cpp:50
#8  0x00007fdcd0186c77 in Generator::displaySwitch (this=0xeea630, iteration=iteration@entry=1) at /build/buildd/kscreen-1.0.1/kded/generator.cpp:164
#9  0x00007fdcd01805af in KScreenDaemon::applyGenericConfig (this=<optimized out>) at /build/buildd/kscreen-1.0.1/kded/daemon.cpp:161
#10 0x00007fdceb329a58 in QMetaObject::activate (sender=0xec16b0, m=<optimized out>, local_signal_index=<optimized out>, argv=0x0) at kernel/qobject.cpp:3539
#11 0x00007fdceb32dbe1 in QObject::event (this=0xec16b0, e=<optimized out>) at kernel/qobject.cpp:1156
#12 0x00007fdcea6b2dfc in QApplicationPrivate::notify_helper (this=this@entry=0xcda1e0, receiver=receiver@entry=0xec16b0, e=e@entry=0x7fff1c32ba30) at kernel/qapplication.cpp:4567
#13 0x00007fdcea6b9470 in QApplication::notify (this=this@entry=0x7fff1c32bde0, receiver=receiver@entry=0xec16b0, e=e@entry=0x7fff1c32ba30) at kernel/qapplication.cpp:4353
#14 0x00007fdcec093a6a in KApplication::notify (this=0x7fff1c32bde0, receiver=0xec16b0, event=0x7fff1c32ba30) at ../../kdeui/kernel/kapplication.cpp:311
#15 0x00007fdceb3158bd in QCoreApplication::notifyInternal (this=0x7fff1c32bde0, receiver=0xec16b0, event=0x7fff1c32ba30) at kernel/qcoreapplication.cpp:946
#16 0x00007fdceb345403 in sendEvent (event=<optimized out>, receiver=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#17 QTimerInfoList::activateTimers (this=0xcdb8d0) at kernel/qeventdispatcher_unix.cpp:622
#18 0x00007fdceb3427d9 in timerSourceDispatch (source=<optimized out>) at kernel/qeventdispatcher_glib.cpp:186
#19 idleTimerSourceDispatch (source=<optimized out>) at kernel/qeventdispatcher_glib.cpp:233
#20 0x00007fdce70173a6 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#21 0x00007fdce70176f8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#22 0x00007fdce701779c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#23 0x00007fdceb342a55 in QEventDispatcherGlib::processEvents (this=0xc37670, flags=...) at kernel/qeventdispatcher_glib.cpp:424
#24 0x00007fdcea7549d6 in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at kernel/qguieventdispatcher_glib.cpp:204
#25 0x00007fdceb3145ef in QEventLoop::processEvents (this=this@entry=0x7fff1c32bcb0, flags=...) at kernel/qeventloop.cpp:149
#26 0x00007fdceb3148e5 in QEventLoop::exec (this=this@entry=0x7fff1c32bcb0, flags=...) at kernel/qeventloop.cpp:204
#27 0x00007fdceb319e5b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1218
#28 0x00007fdcea6b134c in QApplication::exec () at kernel/qapplication.cpp:3828
#29 0x00007fdcd71ac95b in kdemain (argc=1, argv=0xcb5cc0) at ../../kded/kded.cpp:925
#30 0x00000000004083f5 in launch (argc=argc@entry=1, _name=_name@entry=0x40b007 "kded4", args=<optimized out>, args@entry=0x0, cwd=cwd@entry=0x0, envc=envc@entry=0, envs=<optimized out>, envs@entry=0x0, reset_env=reset_env@entry=false, tty=tty@entry=0x0, avoid_loops=avoid_loops@entry=false, startup_id_str=startup_id_str@entry=0x40ae96 "0") at ../../kinit/kinit.cpp:738
#31 0x00000000004059a6 in main (argc=4, argv=<optimized out>, envp=0x7fff1c32c540) at ../../kinit/kinit.cpp:1853

Reported using DrKonqi
Comment 1 Daniel Vrátil 2013-10-24 11:23:59 UTC
What is your version of kscreen (or libkscreen?)
Comment 2 David Lang 2013-10-24 11:57:42 UTC
/usr/lib/libkscreen.so.1.0.1

root@dlang-laptop:/home/dlang# dpkg -l |grep kscreen
ii  kscreen                                       1.0.1-0ubuntu1                                           amd64        KDE monitor hotplug and screen handling
ii  kscreen-dbg                                   1.0.1-0ubuntu1                                           amd64        KDE monitor hotplug and screen handling, debug info
ii  libkscreen-dbg                                1.0.1-0ubuntu1                                           amd64        library for screen management - debug info
rc  libkscreen0                                   0.0.92-0ubuntu0.1                                        amd64        library for screen management - shared library
ii  libkscreen1                                   1.0.1-0ubuntu1                                           amd64        library for screen management - shared library
ii  libkscreensaver5                              4:4.11.2-0ubuntu1                                        amd64        library of the KDE Screensaver system
Comment 3 Alex Fiestas 2013-11-14 15:35:49 UTC
For some reason your laptop is sending the signal "Display switch" which makes us try to re-configure your screen.

Can you reproduce the crash everytime? if so, could you attach "kscreen-console bug" ?

Thanks !
Comment 4 David Lang 2013-11-17 02:58:56 UTC
with one of the updates, this has stopped happening. 

here is the output of kscreen-console bug

START 
This backend is only for XRandR 1.1, your version is:  1 . 3 
Config::current() took 9 milliseconds 

========================xrandr --verbose========================== 

Screen 0: minimum 8 x 8, current 1680 x 1050, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
	Identifier: 0x249
	Timestamp:  31199
	Subpixel:   unknown
	Clones:    
	CRTCs:      0 1
	Transform:  1.000000 0.000000 0.000000
	            0.000000 1.000000 0.000000
	            0.000000 0.000000 1.000000
	           filter: 
	BorderDimensions: 4 
		supported: 4
	Border: 0 0 0 0 
		range: (0, 65535)
	SignalFormat: VGA 
		supported: VGA
	ConnectorType: VGA 
	ConnectorNumber: 1 
	_ConnectorLocation: 1 
LVDS-0 connected primary 1680x1050+0+0 (0x24b) normal (normal left inverted right x axis y axis) 331mm x 207mm
	Identifier: 0x24a
	Timestamp:  31199
	Subpixel:   unknown
	Gamma:      1.0:1.0:1.0
	Brightness: 1.0
	Clones:    
	CRTC:       0
	CRTCs:      0 1
	Transform:  1.000000 0.000000 0.000000
	            0.000000 1.000000 0.000000
	            0.000000 0.000000 1.000000
	           filter: 
	Backlight: 100 
		range: (0, 100)
	EDID: 
		00ffffffffffff00244d872800000000
		000f0103802115780acd7591554f8b26
		21505400000001010101010101010101
		010101010101a82f90e0601a10402040
		13004bcf10000019b72790e0601a1040
		204013004bcf100000190000000f00b3
		0a32b30a281401004ca35833000000fe
		004c544e31353450322d4c30350a00a7
	BorderDimensions: 4 
		supported: 4
	Border: 0 0 0 0 
		range: (0, 65535)
	SignalFormat: LVDS 
		supported: LVDS
	ConnectorType: Panel 
	ConnectorNumber: 0 
	_ConnectorLocation: 0 
  1680x1050 (0x24b)  122.0MHz -HSync -VSync *current +preferred
        h: width  1680 start 1712 end 1776 total 1904 skew    0 clock   64.1KHz
        v: height 1050 start 1051 end 1054 total 1066           clock   60.1Hz
  1680x1050 (0x24c)  101.7MHz -HSync -VSync
        h: width  1680 start 1712 end 1776 total 1904 skew    0 clock   53.4KHz
        v: height 1050 start 1051 end 1054 total 1066           clock   50.1Hz
DVI-D-0 disconnected (normal left inverted right x axis y axis)
	Identifier: 0x24d
	Timestamp:  31199
	Subpixel:   unknown
	Clones:    
	CRTCs:      0 1
	Transform:  1.000000 0.000000 0.000000
	            0.000000 1.000000 0.000000
	            0.000000 0.000000 1.000000
	           filter: 
	BorderDimensions: 4 
		supported: 4
	Border: 0 0 0 0 
		range: (0, 65535)
	SignalFormat: TMDS 
		supported: TMDS
	ConnectorType: DVI-D 
	ConnectorNumber: 2 
	_ConnectorLocation: 2 
 

========================Outputs=================================== 

KScreen version:  1.0.1 
Screen: 
	maxSize: QSize(8192, 8192) 
	minSize: QSize(8, 8) 
	currentSize: QSize(1680, 1050) 

-----------------------------------------------------
 
Id:  585 
Name:  "VGA-0" 
Type:  "VGA" 
Connected:  false 

-----------------------------------------------------
 
Id:  586 
Name:  "LVDS-0" 
Type:  "Panel (Laptop)" 
Connected:  true 
Enabled:  true 
Primary:  true 
Rotation:  1 
Pos:  QPoint(0,0) 
Size:  QSize(1680, 1050) 
Clones:  None 
Mode:  "587" 
Preferred Mode:  "587" 
Preferred modes:  ("587") 
Modes:  
	 "587"    "1680x1050"   QSize(1680, 1050)   60.1085 
	 "588"    "1680x1050"   QSize(1680, 1050)   50.092 
EDID Info:  
	Device ID:  "xrandr-IBM Brasil" 
	Name:  "" 
	Vendor:  "IBM Brasil" 
	Serial:  "" 
	EISA ID:  "LTN154P2-L05" 
	Hash:  "e1865128c7cd5e5ed49ecfc8102f6f9c" 
	Width:  33 
	Height:  21 
	Gamma:  2 
	Red:  QQuaternion(scalar:1, vector:(0.569336, 0.332031, 0)) 
	Green:  QQuaternion(scalar:1, vector:(0.311523, 0.543945, 0)) 
	Blue:  QQuaternion(scalar:1, vector:(0.149414, 0.131836, 0)) 
	White:  QQuaternion(scalar:1, vector:(0.313477, 0.329102, 0)) 

-----------------------------------------------------
 
Id:  589 
Name:  "DVI-D-0" 
Type:  "Invalid Type" 
Connected:  false 

========================Configurations============================ 

Configs in:  "/home/dlang/.kde/share/apps/kscreen/" 
Number of files:  5 

"0dfbb19cd0d48c5ec26951d21d477f13" 
"[
 {
  "enabled" : true,
  "id" : "7004fa53d6644e9a21281d529d445e35",
  "metadata" :   {
   "fullname" : "xrandr-Tandberg-C60",
   "name" : "VGA-0"
  },
  "mode" :   {
   "refresh" : 60.0,
   "size" :    {
    "height" : 1080,
    "width" : 1920
   }
  },
  "pos" :   {
   "x" : 1680,
   "y" : 0
  },
  "primary" : false,
  "rotation" : 1
 },
 {
  "enabled" : true,
  "id" : "e1865128c7cd5e5ed49ecfc8102f6f9c",
  "metadata" :   {
   "fullname" : "xrandr-IBM Brasil",
   "name" : "LVDS-0"
  },
  "mode" :   {
   "refresh" : 60.1085,
   "size" :    {
    "height" : 1050,
    "width" : 1680
   }
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : true,
  "rotation" : 1
 }
]" 

"2ef03ac65640009d076c964043031d1f" 
"[
 {
  "enabled" : true,
  "id" : "e1865128c7cd5e5ed49ecfc8102f6f9c",
  "metadata" :   {
   "fullname" : "xrandr-IBM Brasil",
   "name" : "LVDS-0"
  },
  "mode" :   {
   "refresh" : 60.1085,
   "size" :    {
    "height" : 1050,
    "width" : 1680
   }
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : true,
  "rotation" : 1
 }
]" 

"54ab43ff0185eed8ebfb6e684291bf48" 
"[
 {
  "enabled" : true,
  "id" : "VGA-0",
  "metadata" :   {
   "name" : "VGA-0"
  },
  "mode" :   {
   "refresh" : 60.0,
   "size" :    {
    "height" : 1080,
    "width" : 1920
   }
  },
  "pos" :   {
   "x" : 1680,
   "y" : 0
  },
  "primary" : false,
  "rotation" : 1
 },
 {
  "enabled" : true,
  "id" : "e1865128c7cd5e5ed49ecfc8102f6f9c",
  "metadata" :   {
   "fullname" : "xrandr-IBM Brasil",
   "name" : "LVDS-0"
  },
  "mode" :   {
   "refresh" : 60.1085,
   "size" :    {
    "height" : 1050,
    "width" : 1680
   }
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : true,
  "rotation" : 1
 }
]" 

"617e89b9947db45509ea33bb671d25af" 
"[
 {
  "enabled" : true,
  "id" : "e1865128c7cd5e5ed49ecfc8102f6f9c",
  "metadata" :   {
   "fullname" : "xrandr-IBM Brasil",
   "name" : "LVDS-0"
  },
  "mode" :   {
   "refresh" : 60.1085,
   "size" :    {
    "height" : 1050,
    "width" : 1680
   }
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : true,
  "rotation" : 1
 },
 {
  "enabled" : false,
  "id" : "bd0f657fc93d058cd463fa124cf83488",
  "metadata" :   {
   "fullname" : "xrandr-E3D420VX-UKLWAM010000",
   "name" : "VGA-0"
  },
  "pos" :   {
   "x" : 1680,
   "y" : 0
  },
  "primary" : false,
  "rotation" : 1
 }
]" 

"da112c7bf6c1efc440d4a20f7ee7989c" 
"[
 {
  "enabled" : false,
  "id" : "023907d071906348dc641916a3ad1af5",
  "metadata" :   {
   "fullname" : "xrandr-Lenovo Group Limited-LEN D221 Wid-V1C2889",
   "name" : "VGA-0"
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : false,
  "rotation" : 1
 },
 {
  "enabled" : true,
  "id" : "e1865128c7cd5e5ed49ecfc8102f6f9c",
  "metadata" :   {
   "fullname" : "xrandr-IBM Brasil",
   "name" : "LVDS-0"
  },
  "mode" :   {
   "refresh" : 60.1085,
   "size" :    {
    "height" : 1050,
    "width" : 1680
   }
  },
  "pos" :   {
   "x" : 0,
   "y" : 0
  },
  "primary" : true,
  "rotation" : 1
 }
]"
Comment 5 Christoph Feck 2013-11-30 00:55:29 UTC
Alex, does comment #4 provide the requested information? Please set the bug status.
Comment 6 Christoph Feck 2013-12-14 21:50:50 UTC
No reply, changing status.
Comment 7 Daniel Vrátil 2015-03-06 15:17:41 UTC
Git commit 9a4f36f6973d6f9d712b6b3b1ff30f868d9910b9 by Dan Vrátil.
Committed on 06/03/2015 at 13:30.
Pushed by dvratil into branch 'Plasma/5.2'.

KDED: Make Generator maximally fool-proof

This change adds lots of checks (and asserts for devs) on validity of
the configs, outputs and modes and makes sure that we never try to
dereference a null pointer from outputs or modes.

Also renames some variables to make the code cleaner and easier to
understand.
Related: bug 326120, bug 327075, bug 33716
FIXED-IN: 5.2.2

M  +183  -84   kded/generator.cpp
M  +9    -7    kded/generator.h

http://commits.kde.org/kscreen/9a4f36f6973d6f9d712b6b3b1ff30f868d9910b9