Version: 3.5.5 (using KDE 3.5.5, compiled sources)
Compiler: Target: x86_64-mandriva-linux-gnu
OS: Linux (x86_64) release 2.6.17-5mdv
I have created a panel and set it as tiny in wich i put it in the upper right corner of the screen, and activated the options:
"Allow other windows to cover the panel"
"Show panel when changing screen"
"Raise when mouse cursor reaches Upper Right Corner of the Screen"
and all was working fine.
Now i have updated kdebase branch_3.5 and this panel isnt working anymore as supposed, since is only hidden when clicking in the titlebar window and not just in the window like used to work.
But if a windows isnt active and clicking the window it hides the panel, its only needed to click in the titlebar window when the window is activated and i remember that was never needed to click in a titlebar window (active or not) to hide the panel.
So i entered websvn and saw that there where changes in kdebase/kwin/layers.cpp and are these changes that are causing the incorrect hide behaviour of the panel.
In kdebase svn release 601090 the panel was working fine, so i created a patch so that some one can commit to put back the panel correct hide behaviour.
Created attachment 18483 [details]
Give correct hode behaviour to panel
SVN commit 605394 by lunakl:
Fix finding the most recently raised window when updating mouse
grab for click raise.
M +1 -1 events.cpp
M +3 -0 kcmkwin/kwinoptions/windows.cpp [POSSIBLY UNSAFE: system]
M +8 -4 layers.cpp
M +1 -1 workspace.h
--- branches/KDE/3.5/kdebase/kwin/events.cpp #605393:605394
@@ -1012,7 +1012,7 @@
// is unobscured or if the user doesn't want click raise
// (it is unobscured if it the topmost in the unconstrained stacking order, i.e. it is
// the most recently raised window)
- bool not_obscured = workspace()->topClientOnDesktop( workspace()->currentDesktop(), true ) == this;
+ bool not_obscured = workspace()->topClientOnDesktop( workspace()->currentDesktop(), true, false ) == this;
if( !options->clickRaise || not_obscured )
ungrabButton( None );
--- branches/KDE/3.5/kdebase/kwin/kcmkwin/kwinoptions/windows.cpp #605393:605394
@@ -46,6 +46,7 @@
@@ -1473,6 +1474,8 @@
+ if( !QFile::exists( QDir::homeDirPath() + "/.xcompmgrrc" ))
+ system( "/bin/cp /etc/opt/kde3/share/config/xcompmgrrc $HOME/.xcompmgrrc" );
KConfig conf_(QDir::homeDirPath() + "/.xcompmgrrc");
--- branches/KDE/3.5/kdebase/kwin/layers.cpp #605393:605394
@@ -194,7 +194,7 @@
doesn't accept focus it's excluded.
// TODO misleading name for this method
-Client* Workspace::topClientOnDesktop( int desktop, bool unconstrained ) const
+Client* Workspace::topClientOnDesktop( int desktop, bool unconstrained, bool only_normal ) const
// TODO Q_ASSERT( block_stacking_updates == 0 );
ClientList::ConstIterator begin, end;
@@ -212,9 +212,13 @@
it != end;
- if ( (*it)->isOnDesktop( desktop ) && !(*it)->isSpecialWindow()
- && (*it)->isShown( false ) && (*it)->wantsTabFocus())
- return *it;
+ if( (*it)->isOnDesktop( desktop ) && (*it)->isShown( false ))
+ if( !only_normal )
+ return *it;
+ if( (*it)->wantsTabFocus() && !(*it)->isSpecialWindow())
+ return *it;
--- branches/KDE/3.5/kdebase/kwin/workspace.h #605393:605394
@@ -181,7 +181,7 @@
ClientList ensureStackingOrder( const ClientList& clients ) const;
- Client* topClientOnDesktop( int desktop, bool unconstrained = false ) const;
+ Client* topClientOnDesktop( int desktop, bool unconstrained = false, bool only_normal = true ) const;
Client* findDesktop( bool topmost, int desktop ) const;
void sendClientToDesktop( Client* c, int desktop, bool dont_activate );
void windowToPreviousDesktop( Client* c );
This is not fixed, i do continue having to click in window titlebar to hide panel.
The panel is only hidden when is the regular window when that window isnt the active window, when the window is active you still have to click in titlebar, so continues happening preciselly what was happening before.
its fixed, i did last comments because i forgot to remove the patch that was reverting changes, sorry :)