solution for #48194, BUT...

Michael Brade brade at
Fri Jun 27 15:29:35 BST 2003


I have a problem accurately explaining #48194 although I've got a patch that 
fixes it. I need someone with deep Qt/QEventLoop knowledge...

What usually happens is this: KWinModule emits currentDesktopChanged() after 
switching desktops. That causes the minipagerapplet to change the pressed 
button. But if Kicker is in auto-hide mode with "Show panel when switching 
desktop" on, only one KWinModule emits the signal. Here's part of the code:

bool KWinModulePrivate::x11Event( XEvent * ev )
    if ( ev->xany.window == qt_xrootwin() ) {
	int m = NETRootInfo::event( ev );

	if ( m & CurrentDesktop )
	    for ( module = modules.first(); module; module = )
		emit module->currentDesktopChanged( currentDesktop() );

The loop is not fully executed, it "breaks" after the first "emit". The first 
emit causes Kicker to show because PanelContainer connects to 
currentDesktopChanged(). To show Kicker PanelContainer::autoHide(false) is 
called which in turn calls qApp->processEvents(). And that is apparently the 
reason the loop above is not fully executed.

Any explanation why? I had a look at qeventloop.cpp but didn't really 
understand all of it... :-} I first thought that KWinModulePrivate being 
static might be part of the reason, but I dropped that idea.

The fix is to comment out all three qApp->processEvents() in 
PanelContainer::autoHide() in container_panel.cpp but I guess they are there 
for a reason.

Michael Brade;                 KDE Developer, Student of Computer Science
  |-mail: echo brade !#|tr -d "c oh"|s\e\d 's/e/\@/2;s/$/.org/;s/bra/k/2'

KDE 3: The Next Generation in Desktop Experience
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: signature
URL: <>

More information about the kde-core-devel mailing list