2015-03-04 08:21:10 +00:00
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project .
Copyright ( C ) 2015 Martin Gräßlin < mgraesslin @ 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_SHELL_CLIENT_H
# define KWIN_SHELL_CLIENT_H
2015-03-16 08:14:04 +00:00
# include "abstract_client.h"
2015-03-04 08:21:10 +00:00
namespace KWayland
{
namespace Server
{
class ShellSurfaceInterface ;
}
}
namespace KWin
{
2015-03-16 08:14:04 +00:00
class ShellClient : public AbstractClient
2015-03-04 08:21:10 +00:00
{
Q_OBJECT
public :
ShellClient ( KWayland : : Server : : ShellSurfaceInterface * surface ) ;
virtual ~ ShellClient ( ) ;
QStringList activities ( ) const override ;
QPoint clientPos ( ) const override ;
QSize clientSize ( ) const override ;
Layer layer ( ) const override ;
QRect transparentRect ( ) const override ;
bool shouldUnredirect ( ) const override ;
NET : : WindowType windowType ( bool direct = false , int supported_types = 0 ) const override ;
void debug ( QDebug & stream ) const override ;
double opacity ( ) const override ;
2015-03-16 08:13:19 +00:00
void setOpacity ( double opacity ) override ;
2015-03-04 08:21:10 +00:00
QByteArray windowRole ( ) const override ;
KWayland : : Server : : ShellSurfaceInterface * shellSurface ( ) const {
return m_shellSurface ;
}
2015-03-16 08:14:04 +00:00
void blockActivityUpdates ( bool b = true ) override ;
QString caption ( bool full = true , bool stripped = false ) const override ;
void checkWorkspacePosition ( QRect oldGeometry = QRect ( ) , int oldDesktop = - 2 ) override ;
void closeWindow ( ) override ;
AbstractClient * findModal ( bool allow_itself = false ) override ;
bool isCloseable ( ) const override ;
2015-05-21 13:59:27 +00:00
bool isFullScreenable ( ) const override ;
2015-03-16 08:14:04 +00:00
bool isFullScreen ( ) const override ;
bool isMaximizable ( ) const override ;
bool isMinimizable ( ) const override ;
bool isMovable ( ) const override ;
bool isMovableAcrossScreens ( ) const override ;
bool isResizable ( ) const override ;
bool isShown ( bool shaded_is_shown ) const override ;
void maximize ( MaximizeMode ) override ;
MaximizeMode maximizeMode ( ) const override ;
bool noBorder ( ) const override ;
const WindowRules * rules ( ) const override ;
bool performMouseCommand ( Options : : MouseCommand cmd , const QPoint & globalPos ) override ;
void sendToScreen ( int screen ) override ;
void setFullScreen ( bool set , bool user = true ) override ;
void setNoBorder ( bool set ) override ;
void setOnAllActivities ( bool set ) override ;
void setQuickTileMode ( QuickTileMode mode , bool keyboard = false ) override ;
void setShortcut ( const QString & cut ) override ;
const QKeySequence & shortcut ( ) const override ;
void takeFocus ( ) override ;
void updateWindowRules ( Rules : : Types selection ) override ;
bool userCanSetFullScreen ( ) const override ;
bool userCanSetNoBorder ( ) const override ;
bool wantsInput ( ) const override ;
2015-05-21 08:46:12 +00:00
xcb_window_t window ( ) const override ;
2015-05-27 08:16:46 +00:00
using AbstractClient : : move ;
void move ( int x , int y , ForceGeometry_t force = NormalGeometrySet ) override ;
2015-05-27 09:48:33 +00:00
using AbstractClient : : resizeWithChecks ;
void resizeWithChecks ( int w , int h , ForceGeometry_t force = NormalGeometrySet ) override ;
2015-03-16 08:14:04 +00:00
2015-05-18 12:51:40 +00:00
quint32 windowId ( ) const {
return m_windowId ;
}
2015-05-21 08:31:19 +00:00
bool isInternal ( ) const ;
2015-05-18 12:51:40 +00:00
2015-03-04 08:21:10 +00:00
protected :
void addDamage ( const QRegion & damage ) override ;
2015-03-16 08:14:04 +00:00
bool belongsToSameApplication ( const AbstractClient * other , bool active_hack ) const override ;
2015-03-04 08:21:10 +00:00
2015-05-19 10:03:53 +00:00
private Q_SLOTS :
void clientFullScreenChanged ( bool fullScreen ) ;
2015-03-04 08:21:10 +00:00
private :
2015-05-19 10:03:53 +00:00
void requestGeometry ( const QRect & rect ) ;
2015-03-04 08:21:10 +00:00
void setGeometry ( const QRect & rect ) ;
void destroyClient ( ) ;
2015-06-03 19:19:00 +00:00
void unmap ( ) ;
2015-05-18 12:51:40 +00:00
void createWindowId ( ) ;
void findInternalWindow ( ) ;
2015-05-20 06:27:48 +00:00
void updateInternalWindowGeometry ( ) ;
2015-03-04 08:21:10 +00:00
static void deleteClient ( ShellClient * c ) ;
KWayland : : Server : : ShellSurfaceInterface * m_shellSurface ;
QSize m_clientSize ;
2015-05-19 10:03:53 +00:00
ClearablePoint m_positionAfterResize ; // co-ordinates saved from a requestGeometry call, real geometry will be updated after the next damage event when the client has resized
QRect m_geomFsRestore ; //size and position of the window before it was set to fullscreen
2015-04-30 11:48:59 +00:00
bool m_closing = false ;
2015-05-18 12:51:40 +00:00
quint32 m_windowId = 0 ;
QWindow * m_internalWindow = nullptr ;
2015-06-03 19:19:00 +00:00
bool m_unmapped = true ;
2015-03-04 08:21:10 +00:00
} ;
}
# endif