~brandontschaefer/miral/fix-unsigned-to-long-overflow

« back to all changes in this revision

Viewing changes to miral/active_outputs.cpp

  • Committer: Tarmac
  • Author(s): Alan Griffiths
  • Date: 2017-06-16 12:22:12 UTC
  • mfrom: (553.4.4 miral2)
  • Revision ID: tarmac-20170616122212-43cstpz52tlve1g2
Remove more code that supports Mir versions before 0.26.

Approved by mir-ci-bot, Michał Sawicz.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
#include <mir/graphics/display_configuration.h>
24
24
#include <mir/server.h>
25
25
 
26
 
#if MIR_SERVER_VERSION < MIR_VERSION_NUMBER(0, 26, 0)
27
 
#include <mir/graphics/display_configuration_report.h>
28
 
#else
29
26
#include <mir/graphics/display_configuration_observer.h>
30
27
#include <mir/observer_registrar.h>
31
 
#endif
32
28
 
33
29
#include <algorithm>
34
30
#include <mutex>
40
36
void miral::ActiveOutputsListener::advise_output_update(Output const& /*updated*/, Output const& /*original*/) {}
41
37
void miral::ActiveOutputsListener::advise_output_delete(Output const& /*output*/) {}
42
38
 
43
 
#if MIR_SERVER_VERSION < MIR_VERSION_NUMBER(0, 26, 0)
44
 
struct miral::ActiveOutputsMonitor::Self : mir::graphics::DisplayConfigurationReport
45
 
{
46
 
    virtual void initial_configuration(mir::graphics::DisplayConfiguration const& configuration) override;
47
 
    virtual void new_configuration(mir::graphics::DisplayConfiguration const& configuration) override;
48
 
 
49
 
    std::mutex mutex;
50
 
    std::vector<ActiveOutputsListener*> listeners;
51
 
    std::vector<Output> outputs;
52
 
};
53
 
#else
54
39
struct miral::ActiveOutputsMonitor::Self : mir::graphics::DisplayConfigurationObserver
55
40
{
56
41
    void initial_configuration(std::shared_ptr<mir::graphics::DisplayConfiguration const> const& configuration) override;
79
64
    std::vector<ActiveOutputsListener*> listeners;
80
65
    std::vector<Output> outputs;
81
66
};
82
 
#endif
83
67
 
84
68
miral::ActiveOutputsMonitor::ActiveOutputsMonitor() :
85
69
    self{std::make_shared<Self>()}
109
93
{
110
94
    std::lock_guard<decltype(self->mutex)> lock{self->mutex};
111
95
 
112
 
#if MIR_SERVER_VERSION < MIR_VERSION_NUMBER(0, 26, 0)
113
 
    server.override_the_display_configuration_report([this]{ return self; });
114
 
#else
115
96
    server.add_pre_init_callback([this, &server]
116
97
        { server.the_display_configuration_observer_registrar()->register_interest(self); });
117
 
#endif
118
98
}
119
99
 
120
100
void miral::ActiveOutputsMonitor::process_outputs(
125
105
}
126
106
 
127
107
 
128
 
#if MIR_SERVER_VERSION < MIR_VERSION_NUMBER(0, 26, 0)
129
 
void miral::ActiveOutputsMonitor::Self::initial_configuration(mir::graphics::DisplayConfiguration const& configuration)
130
 
{
131
 
    new_configuration(configuration);
132
 
}
133
 
#else
134
108
void miral::ActiveOutputsMonitor::Self::initial_configuration(std::shared_ptr<mir::graphics::DisplayConfiguration const> const& configuration)
135
109
{
136
110
    configuration_applied(configuration);
137
111
}
138
 
#endif
139
 
 
140
 
#if MIR_SERVER_VERSION < MIR_VERSION_NUMBER(0, 26, 0)
141
 
void miral::ActiveOutputsMonitor::Self::new_configuration(mir::graphics::DisplayConfiguration const& configuration)
142
 
{
143
 
    std::lock_guard<decltype(mutex)> lock{mutex};
144
 
 
145
 
    decltype(outputs) current_outputs;
146
 
 
147
 
    for (auto const l : listeners)
148
 
        l->advise_output_begin();
149
 
 
150
 
    configuration.for_each_output([&current_outputs, this](mir::graphics::DisplayConfigurationOutput const& output)
151
 
        {
152
 
            Output o{output};
153
 
 
154
 
            if (!o.connected() || !o.valid()) return;
155
 
 
156
 
            auto op = find_if(begin(outputs), end(outputs), [&](Output const& oo) { return oo.is_same_output(o); });
157
 
 
158
 
            if (op == end(outputs))
159
 
            {
160
 
                for (auto const l : listeners)
161
 
                    l->advise_output_create(o);
162
 
            }
163
 
            else if (!equivalent_display_area(o, *op))
164
 
            {
165
 
                for (auto const l : listeners)
166
 
                    l->advise_output_update(o, *op);
167
 
            }
168
 
 
169
 
            current_outputs.push_back(o);
170
 
        });
171
 
 
172
 
    for (auto const& o : outputs)
173
 
    {
174
 
        auto op = find_if(begin(current_outputs), end(current_outputs), [&](Output const& oo)
175
 
            { return oo.is_same_output(o); });
176
 
 
177
 
        if (op == end(current_outputs))
178
 
            for (auto const l : listeners)
179
 
                l->advise_output_delete(o);
180
 
    }
181
 
 
182
 
    current_outputs.swap(outputs);
183
 
    for (auto const l : listeners)
184
 
        l->advise_output_end();
185
 
}
186
 
#else
 
112
 
187
113
void miral::ActiveOutputsMonitor::Self::configuration_applied(std::shared_ptr<mir::graphics::DisplayConfiguration const> const& config)
188
114
{
189
115
    std::lock_guard<decltype(mutex)> lock{mutex};
233
159
    for (auto const l : listeners)
234
160
        l->advise_output_end();
235
161
}
236
 
#endif