summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Griffiths <alan@octopull.co.uk>2015-03-11 14:53:34 +0000
committerAlan Griffiths <alan@octopull.co.uk>2015-03-11 14:53:34 +0000
commit1c93d2307744b7db5b03b47d4d32a0eddd22ee61 (patch)
tree3c12a601d524665fc0cb6070abb996c47b10f350 /src
parent2c5f25a0cb1cf43236e8cc77910473cd4c5a3b00 (diff)
parent80c3c0d37c18f83a70a2df5afd50b8419cda0ecb (diff)
merge lp:~kdub/qtmir/display-groups
Diffstat (limited to 'src')
-rw-r--r--src/modules/Unity/Application/application_manager.cpp3
-rw-r--r--src/platforms/mirserver/displaywindow.cpp8
-rw-r--r--src/platforms/mirserver/displaywindow.h4
-rw-r--r--src/platforms/mirserver/mirserverintegration.cpp16
4 files changed, 21 insertions, 10 deletions
diff --git a/src/modules/Unity/Application/application_manager.cpp b/src/modules/Unity/Application/application_manager.cpp
index 7d9bec0..1ae8748 100644
--- a/src/modules/Unity/Application/application_manager.cpp
+++ b/src/modules/Unity/Application/application_manager.cpp
@@ -67,9 +67,10 @@ bool forceAllAppsIntoMainStage(const QSharedPointer<MirServer> &mirServer)
const int tabletModeMinimimWithGU = 100;
// Obtain display size
+ //TODO: should use mir::graphics::Display::configuration
mir::geometry::Rectangles view_area;
mirServer->the_display()->for_each_display_sync_group(
- [&](mir::graphics::DisplaySyncGroup& group) {
+ [&view_area](mir::graphics::DisplaySyncGroup& group) {
group.for_each_display_buffer(
[&view_area](const mir::graphics::DisplayBuffer & db) {
view_area.add(db.view_area());
diff --git a/src/platforms/mirserver/displaywindow.cpp b/src/platforms/mirserver/displaywindow.cpp
index 07300ce..43cd5ab 100644
--- a/src/platforms/mirserver/displaywindow.cpp
+++ b/src/platforms/mirserver/displaywindow.cpp
@@ -36,10 +36,14 @@ static WId newWId()
return ++id;
}
-DisplayWindow::DisplayWindow(QWindow *window, mir::graphics::DisplayBuffer *displayBuffer)
+DisplayWindow::DisplayWindow(
+ QWindow *window,
+ mir::graphics::DisplaySyncGroup *displayGroup,
+ mir::graphics::DisplayBuffer *displayBuffer)
: QObject(nullptr), QPlatformWindow(window)
, m_isExposed(true)
, m_winId(newWId())
+ , m_displayGroup(displayGroup)
, m_displayBuffer(displayBuffer)
{
qDebug() << "DisplayWindow::DisplayWindow";
@@ -101,7 +105,7 @@ bool DisplayWindow::event(QEvent *event)
void DisplayWindow::swapBuffers()
{
m_displayBuffer->gl_swap_buffers();
-// m_displayBuffer->flip(); TODO check with kdub what's needed
+ m_displayGroup->post();
}
void DisplayWindow::makeCurrent()
diff --git a/src/platforms/mirserver/displaywindow.h b/src/platforms/mirserver/displaywindow.h
index 8714702..086877c 100644
--- a/src/platforms/mirserver/displaywindow.h
+++ b/src/platforms/mirserver/displaywindow.h
@@ -21,6 +21,7 @@
#include <qpa/qplatformwindow.h>
+#include <mir/graphics/display.h>
#include <mir/graphics/display_buffer.h>
#include <QObject>
@@ -32,7 +33,7 @@ class DisplayWindow : public QObject, public QPlatformWindow
{
Q_OBJECT
public:
- explicit DisplayWindow(QWindow *window, mir::graphics::DisplayBuffer*);
+ explicit DisplayWindow(QWindow *window, mir::graphics::DisplaySyncGroup*, mir::graphics::DisplayBuffer*);
QRect geometry() const override;
void setGeometry(const QRect &rect) override;
@@ -50,6 +51,7 @@ public:
private:
bool m_isExposed;
WId m_winId;
+ mir::graphics::DisplaySyncGroup *m_displayGroup;
mir::graphics::DisplayBuffer *m_displayBuffer;
};
diff --git a/src/platforms/mirserver/mirserverintegration.cpp b/src/platforms/mirserver/mirserverintegration.cpp
index 476ce94..56c03e7 100644
--- a/src/platforms/mirserver/mirserverintegration.cpp
+++ b/src/platforms/mirserver/mirserverintegration.cpp
@@ -135,15 +135,19 @@ QPlatformWindow *MirServerIntegration::createPlatformWindow(QWindow *window) con
DisplayWindow* displayWindow = nullptr;
- m_mirServer->the_display()->for_each_display_sync_group(
- [&](mg::DisplaySyncGroup& group) {
- group.for_each_display_buffer(
- [&](mg::DisplayBuffer& buffer) {
- // FIXME(gerry) this will go very bad for >1 display buffer
- displayWindow = new DisplayWindow(window, &buffer);
+ mg::DisplayBuffer* first_buffer{nullptr};
+ mg::DisplaySyncGroup* first_group{nullptr};
+ m_mirServer->the_display()->for_each_display_sync_group([&](mg::DisplaySyncGroup& group) {
+ if (!first_group) first_group = &group;
+ group.for_each_display_buffer([&](mg::DisplayBuffer& buffer) {
+ if (!first_buffer) first_buffer = &buffer;
});
});
+ // FIXME(gerry) this will go very bad for >1 display buffer
+ if (first_group && first_buffer)
+ displayWindow = new DisplayWindow(window, first_group, first_buffer);
+
if (!displayWindow)
return nullptr;