62d5e8124c
The method windowType needs actually two implementations: * one for Clients * one for Unmanaged as for Clients also the window rules are checked and hacks are applied which is both not needed for Unmanaged windows. To have the Client specific behavior in windowType the function used to perform two dynamic_casts which made this method one of the most expensive during compositing, e.g. for ~1000 frames * called ~43000 times * ~85000 dynamic casts * incl. cost of method: 0.24 * self cost of method: 0.05 * incl. cost of the casts: 0.12 After the change to remove the dynamic casts we have for ~1500 frames in Client::windowType: * called ~31000 times * incl. cost of 0.06 * self cost of 0.02 Calls on Unmanaged and Deleted are so low that we do not need to consider them. BUG: 306384 FIXED-IN: 4.10 REVIEW: 106349
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2006 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
|
|
#ifndef KWIN_UNMANAGED_H
|
|
#define KWIN_UNMANAGED_H
|
|
|
|
#include <netwm.h>
|
|
|
|
#include "toplevel.h"
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class Unmanaged
|
|
: public Toplevel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Unmanaged(Workspace *ws);
|
|
bool windowEvent(XEvent* e);
|
|
void release(bool on_shutdown = false);
|
|
bool track(Window w);
|
|
static void deleteUnmanaged(Unmanaged* c, allowed_t);
|
|
virtual int desktop() const;
|
|
virtual QStringList activities() const;
|
|
virtual QPoint clientPos() const;
|
|
virtual QSize clientSize() const;
|
|
virtual QRect transparentRect() const;
|
|
virtual Layer layer() const {
|
|
return UnmanagedLayer;
|
|
}
|
|
NET::WindowType windowType(bool direct = false, int supported_types = 0) const;
|
|
protected:
|
|
virtual void damageNotifyEvent(XDamageNotifyEvent* e);
|
|
virtual void debug(QDebug& stream) const;
|
|
virtual bool shouldUnredirect() const;
|
|
private:
|
|
virtual ~Unmanaged(); // use release()
|
|
// handlers for X11 events
|
|
void mapNotifyEvent(XMapEvent* e);
|
|
void unmapNotifyEvent(XUnmapEvent*e);
|
|
void configureNotifyEvent(XConfigureEvent* e);
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#endif
|