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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/*
* Copyright (C) 2013 Canonical, Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY, 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/>.
*
* Author: Pete Woods <pete.woods@canonical.com>
*/
#include <service/Factory.h>
#include <service/WindowImpl.h>
#include <QDebug>
using namespace hud::service;
WindowTokenImpl::WindowTokenImpl(const QList<CollectorToken::Ptr> &tokens,
ItemStore::Ptr itemStore) :
m_items(itemStore), m_tokens(tokens) {
m_timer.setSingleShot(true);
connect(&m_timer, SIGNAL(timeout()), this, SIGNAL(changed()));
for (CollectorToken::Ptr token : tokens) {
connect(token.data(), SIGNAL(changed()), this, SLOT(childChanged()));
m_items->indexMenu(token->menu());
}
}
WindowTokenImpl::~WindowTokenImpl() {
}
void WindowTokenImpl::childChanged() {
m_timer.start();
}
const QList<CollectorToken::Ptr> & WindowTokenImpl::tokens() const {
return m_tokens;
}
void WindowTokenImpl::search(const QString &query,
Query::EmptyBehaviour emptyBehaviour, QList<Result> &results) {
m_items->search(query, emptyBehaviour, results);
}
void WindowTokenImpl::execute(unsigned long long commandId) {
m_items->execute(commandId);
}
QString WindowTokenImpl::executeParameterized(unsigned long long commandId,
QString &baseAction, QDBusObjectPath &actionPath,
QDBusObjectPath &modelPath) {
return m_items->executeParameterized(commandId, baseAction, actionPath,
modelPath);
}
void WindowTokenImpl::executeToolbar(const QString &item) {
m_items->executeToolbar(item);
}
QList<QStringList> WindowTokenImpl::commands() const {
return m_items->commands();
}
QStringList WindowTokenImpl::toolbarItems() const {
return m_items->toolbarItems();
}
WindowImpl::WindowImpl(unsigned int windowId, const QString &applicationId,
WindowContext::Ptr allWindowsContext, Factory &factory) :
WindowContextImpl(factory), m_applicationId(applicationId), m_allWindowsContext(
allWindowsContext) {
m_dbusMenuCollector = factory.newDBusMenuCollector(windowId, applicationId);
m_gMenuCollector = factory.newGMenuWindowCollector(windowId, applicationId);
}
WindowImpl::~WindowImpl() {
}
WindowToken::Ptr WindowImpl::activate() {
WindowToken::Ptr windowToken(m_windowToken);
QList<Collector::Ptr> collectors;
collectors << m_dbusMenuCollector << m_gMenuCollector
<< m_allWindowsContext->activeCollector() << activeCollector();
QList<CollectorToken::Ptr> tokens;
for (Collector::Ptr collector : collectors) {
if (collector && collector->isValid()) {
CollectorToken::Ptr token(collector->activate());
if (token) {
tokens << token;
}
}
}
bool newToken(false);
if (windowToken) {
// If we have an existing token
if (tokens != windowToken->tokens()) {
// If any of the sub-tokens have changed
newToken = true;
}
} else {
// We don't have an existing token
newToken = true;
}
if (newToken) {
windowToken = m_factory.newWindowToken(m_applicationId, tokens);
m_windowToken = windowToken;
connect(this, SIGNAL(contextChanged()), windowToken.data(),
SLOT(childChanged()));
connect(m_allWindowsContext.data(), SIGNAL(contextChanged()),
windowToken.data(), SLOT(childChanged()));
}
return windowToken;
}
|