File indexing completed on 2024-11-03 13:42:21
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 1999, 2000 Matthias Ettrich <ettrich@kde.org> 0006 SPDX-FileCopyrightText: 2003 Lubos Lunak <l.lunak@kde.org> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #pragma once 0012 0013 #include "utils/common.h" 0014 #include <netwm.h> 0015 0016 namespace KWin 0017 { 0018 0019 class EffectWindowGroupImpl; 0020 class X11Window; 0021 0022 class Group 0023 { 0024 public: 0025 Group(xcb_window_t leader); 0026 ~Group(); 0027 xcb_window_t leader() const; 0028 const X11Window *leaderClient() const; 0029 X11Window *leaderClient(); 0030 const QList<X11Window *> &members() const; 0031 QIcon icon() const; 0032 void addMember(X11Window *member); 0033 void removeMember(X11Window *member); 0034 void gotLeader(X11Window *leader); 0035 void lostLeader(); 0036 void updateUserTime(xcb_timestamp_t time); 0037 xcb_timestamp_t userTime() const; 0038 void ref(); 0039 void deref(); 0040 EffectWindowGroupImpl *effectGroup(); 0041 0042 private: 0043 void startupIdChanged(); 0044 QList<X11Window *> _members; 0045 X11Window *leader_client; 0046 xcb_window_t leader_wid; 0047 std::unique_ptr<NETWinInfo> leader_info; 0048 xcb_timestamp_t user_time; 0049 int refcount; 0050 std::unique_ptr<EffectWindowGroupImpl> effect_group; 0051 }; 0052 0053 inline xcb_window_t Group::leader() const 0054 { 0055 return leader_wid; 0056 } 0057 0058 inline const X11Window *Group::leaderClient() const 0059 { 0060 return leader_client; 0061 } 0062 0063 inline X11Window *Group::leaderClient() 0064 { 0065 return leader_client; 0066 } 0067 0068 inline const QList<X11Window *> &Group::members() const 0069 { 0070 return _members; 0071 } 0072 0073 inline xcb_timestamp_t Group::userTime() const 0074 { 0075 return user_time; 0076 } 0077 0078 inline EffectWindowGroupImpl *Group::effectGroup() 0079 { 0080 return effect_group.get(); 0081 } 0082 0083 } // namespace