19
20
#include "PanelController.h"
21
#include "NuxCore/Logger.h"
23
#include <NuxCore/Logger.h>
24
#include <Nux/BaseWindow.h>
23
26
#include "UScreen.h"
25
#include "unitya11y.h"
26
#include "unity-util-accessible.h"
28
using namespace unity;
27
#include "PanelView.h"
32
36
nux::logging::Logger logger("unity.panel");
35
PanelController::PanelController()
38
_open_menu_start_received(false)
39
class Controller::Impl : public sigc::trackable
45
void StartFirstMenuShow();
46
void EndFirstMenuShow();
49
unsigned int GetTrayXid();
50
std::list <nux::Geometry> GetGeometries();
52
// NOTE: nux::Property maybe?
53
void SetOpacity(float opacity);
54
void SetOpacityMaximizedToggle(bool enabled);
56
float opacity() const;
58
void SetMenuShowTimings(int fadein, int fadeout, int discovery,
59
int discovery_fadein, int discovery_fadeout);
62
unity::PanelView* ViewForWindow(nux::BaseWindow* window);
63
void OnScreenChanged(int primary_monitor, std::vector<nux::Geometry>& monitors);
65
static void WindowConfigureCallback(int window_width,
70
std::vector<nux::BaseWindow*> windows_;
72
bool opacity_maximized_toggle_;
73
bool open_menu_start_received_;
77
int menus_discovery_fadein_;
78
int menus_discovery_fadeout_;
82
Controller::Impl::Impl()
84
, opacity_maximized_toggle_(false)
85
, open_menu_start_received_(false)
40
87
UScreen* screen = UScreen::GetDefault();
41
screen->changed.connect(sigc::mem_fun(this, &PanelController::OnScreenChanged));
88
screen->changed.connect(sigc::mem_fun(this, &Impl::OnScreenChanged));
42
89
OnScreenChanged(screen->GetPrimaryMonitor(), screen->GetMonitors());
45
PanelController::~PanelController()
92
Controller::Impl::~Impl()
47
std::vector<nux::BaseWindow*>::iterator it, eit = _windows.end();
49
for (it = _windows.begin(); it != eit; ++it)
94
for (auto window : windows_)
96
window->UnReference();
55
unsigned int PanelController::GetTrayXid ()
100
unsigned int Controller::Impl::GetTrayXid()
57
if (!_windows.empty ())
58
return ViewForWindow (_windows.front ())->GetTrayXid ();
102
if (!windows_.empty())
103
return ViewForWindow(windows_.front())->GetTrayXid();
64
PanelController::StartFirstMenuShow()
66
std::vector<nux::BaseWindow*>::iterator it, eit = _windows.end();
68
for (it = _windows.begin(); it != eit; ++it)
70
PanelView* view = ViewForWindow(*it);
108
std::list<nux::Geometry> Controller::Impl::GetGeometries()
110
std::list<nux::Geometry> geometries;
112
for (auto window : windows_)
114
geometries.push_back(window->GetAbsoluteGeometry());
120
void Controller::Impl::StartFirstMenuShow()
122
for (auto window: windows_)
124
PanelView* view = ViewForWindow(window);
72
125
view->StartFirstMenuShow();
75
_open_menu_start_received = true;
128
open_menu_start_received_ = true;
79
PanelController::EndFirstMenuShow()
131
void Controller::Impl::EndFirstMenuShow()
81
std::vector<nux::BaseWindow*>::iterator it, eit = _windows.end();
83
if (!_open_menu_start_received)
133
if (!open_menu_start_received_)
85
_open_menu_start_received = false;
135
open_menu_start_received_ = false;
87
for (it = _windows.begin(); it != eit; ++it)
137
for (auto window: windows_)
89
PanelView* view = ViewForWindow(*it);
139
PanelView* view = ViewForWindow(window);
90
140
view->EndFirstMenuShow();
95
PanelController::SetOpacity(float opacity)
97
std::vector<nux::BaseWindow*>::iterator it, eit = _windows.end();
101
for (it = _windows.begin(); it != eit; ++it)
103
ViewForWindow(*it)->SetOpacity(_opacity);
107
void PanelController::QueueRedraw()
109
std::vector<nux::BaseWindow*>::iterator it, eit = _windows.end();
110
for (it = _windows.begin(); it != eit; ++it)
117
PanelController::ViewForWindow(nux::BaseWindow* window)
144
void Controller::Impl::SetOpacity(float opacity)
148
for (auto window: windows_)
150
ViewForWindow(window)->SetOpacity(opacity_);
154
void Controller::Impl::SetOpacityMaximizedToggle(bool enabled)
156
opacity_maximized_toggle_ = enabled;
158
for (auto window: windows_)
160
ViewForWindow(window)->SetOpacityMaximizedToggle(opacity_maximized_toggle_);
164
void Controller::Impl::SetMenuShowTimings(int fadein, int fadeout, int discovery,
165
int discovery_fadein, int discovery_fadeout)
167
menus_fadein_ = fadein;
168
menus_fadeout_ = fadeout;
169
menus_discovery_ = discovery;
170
menus_discovery_fadein_ = discovery_fadein;
171
menus_discovery_fadeout_ = discovery_fadeout;
173
for (auto window: windows_)
175
ViewForWindow(window)->SetMenuShowTimings(fadein, fadeout, discovery,
176
discovery_fadein, discovery_fadeout);
180
void Controller::Impl::QueueRedraw()
182
for (auto window: windows_)
188
PanelView* Controller::Impl::ViewForWindow(nux::BaseWindow* window)
119
190
nux::Layout* layout = window->GetLayout();
120
191
std::list<nux::Area*>::iterator it = layout->GetChildren().begin();
164
235
for (i = i; i < n_monitors; i++)
166
nux::BaseWindow* window;
168
nux::HLayout* layout;
170
// FIXME(loicm): Several objects created here are leaked.
172
layout = new nux::HLayout(NUX_TRACKER_LOCATION);
174
view = new PanelView();
237
nux::HLayout* layout = new nux::HLayout(NUX_TRACKER_LOCATION);
239
PanelView* view = new PanelView();
175
240
view->SetMaximumHeight(24);
176
view->SetOpacity(_opacity);
241
view->SetOpacity(opacity_);
242
view->SetOpacityMaximizedToggle(opacity_maximized_toggle_);
243
view->SetMenuShowTimings(menus_fadein_, menus_fadeout_, menus_discovery_,
244
menus_discovery_fadein_, menus_discovery_fadeout_);
177
245
view->SetPrimary(i == primary_monitor);
178
246
view->SetMonitor(i);
181
248
layout->AddView(view, 1);
182
249
layout->SetContentDistribution(nux::eStackLeft);
183
250
layout->SetVerticalExternalMargin(0);
184
251
layout->SetHorizontalExternalMargin(0);
186
window = new nux::BaseWindow("");
253
nux::BaseWindow* window = new nux::BaseWindow("");
187
254
window->SinkReference();
188
window->SetConfigureNotifyCallback(&PanelController::WindowConfigureCallback, window);
255
window->SetConfigureNotifyCallback(&Impl::WindowConfigureCallback, window);
189
256
window->SetLayout(layout);
190
window->SetBackgroundColor(nux::Color(0x00000000));
257
window->SetBackgroundColor(nux::Color(0.0f, 0.0f, 0.0f, 0.0f));
191
258
window->ShowWindow(true);
192
259
window->EnableInputWindow(true, "panel", false, false);
193
260
window->InputWindowEnableStruts(true);
216
278
LOG_DEBUG(logger) << "Removed extra Panel";
219
_windows.erase(it, _windows.end());
281
windows_.erase(it, windows_.end());
224
PanelController::WindowConfigureCallback(int window_width,
285
void Controller::Impl::WindowConfigureCallback(int window_width,
229
290
nux::BaseWindow* window = static_cast<nux::BaseWindow*>(user_data);
230
291
geo = window->GetGeometry();
234
PanelController::GetName()
236
return "PanelController";
240
PanelController::AddProperties(GVariantBuilder* builder)
294
float Controller::Impl::opacity() const
300
Controller::Controller()
305
Controller::~Controller()
310
void Controller::StartFirstMenuShow()
312
pimpl->StartFirstMenuShow();
315
void Controller::EndFirstMenuShow()
317
pimpl->EndFirstMenuShow();
320
void Controller::SetOpacity(float opacity)
322
pimpl->SetOpacity(opacity);
325
void Controller::SetOpacityMaximizedToggle(bool enabled)
327
pimpl->SetOpacityMaximizedToggle(enabled);
330
void Controller::SetMenuShowTimings(int fadein, int fadeout, int discovery,
331
int discovery_fadein, int discovery_fadeout)
333
pimpl->SetMenuShowTimings(fadein, fadeout, discovery, discovery_fadein, discovery_fadeout);
336
void Controller::QueueRedraw()
338
pimpl->QueueRedraw();
341
unsigned int Controller::GetTrayXid()
343
return pimpl->GetTrayXid();
346
std::list<nux::Geometry> Controller::GetGeometries()
348
return pimpl->GetGeometries();
351
float Controller::opacity() const
353
return pimpl->opacity();