summaryrefslogtreecommitdiffstats
path: root/kwin/group.h
blob: 21ebb8d17e1acd48b5a9ea5808a79c2413a67e16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*****************************************************************
 KWin - the KDE window manager
 This file is part of the KDE project.

Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>

You can Freely distribute this program under the GNU General Public
License. See the file "COPYING" for the exact licensing terms.
******************************************************************/

#ifndef KWIN_GROUP_H
#define KWIN_GROUP_H

#include "utils.h"
#include <X11/X.h>
#include <netwm.h>

namespace KWinInternal
{

class Client;
class Workspace;

class Group
    {
    public:
        Group( Window leader, Workspace* workspace );
        ~Group();
        Window leader() const;
        const Client* leaderClient() const;
        Client* leaderClient();
        const ClientList& members() const;
        QPixmap icon() const;
        QPixmap miniIcon() const;
        void addMember( Client* member );
        void removeMember( Client* member );
        void gotLeader( Client* leader );
        void lostLeader();
        Workspace* workspace();
        bool groupEvent( XEvent* e );
        void updateUserTime( Time time = CurrentTime );
        Time userTime() const;
        void ref();
        void deref();
    private:
        void getIcons();
        void startupIdChanged();
        ClientList _members;
        Client* leader_client;
        Window leader_wid;
        Workspace* _workspace;
        NETWinInfo* leader_info;
        Time user_time;
        int refcount;
    };

inline Window Group::leader() const
    {
    return leader_wid;
    }

inline const Client* Group::leaderClient() const
    {
    return leader_client;
    }

inline Client* Group::leaderClient()
    {
    return leader_client;
    }

inline const ClientList& Group::members() const
    {
    return _members;
    }

inline Workspace* Group::workspace()
    {
    return _workspace;
    }

inline Time Group::userTime() const
    {
    return user_time;
    }

} // namespace

#endif