Accepting request 611689 from KDE:Qt5
Qt 5.11.0 (forwarded request 611399 from Vogtinator) OBS-URL: https://build.opensuse.org/request/show/611689 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtwayland?expand=0&rev=20
This commit is contained in:
parent
2f42fa56a8
commit
54e4b55544
145
0001-Handle-maximize-minimize-fullscreen-xdgshellv6.patch
Normal file
145
0001-Handle-maximize-minimize-fullscreen-xdgshellv6.patch
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
From da43d51dcbafc5fa1db245efd6737aa54c245afb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Giulio Camuffo <giulio.camuffo@kdab.com>
|
||||||
|
Date: Sat, 1 Jul 2017 09:53:07 +0200
|
||||||
|
Subject: [PATCH] Handle maximize/minimize/fullscreen in xdg_shell_v6
|
||||||
|
|
||||||
|
Change-Id: I385eb3279d91f1c38d2f5d46bc63b324f0456ca4
|
||||||
|
---
|
||||||
|
src/client/qwaylandwindow.cpp | 6 +++-
|
||||||
|
src/client/qwaylandxdgshellv6.cpp | 61 ++++++++++++++++++++++++++++++++++++---
|
||||||
|
src/client/qwaylandxdgshellv6_p.h | 8 ++++-
|
||||||
|
3 files changed, 69 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
Index: qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandwindow.cpp
|
||||||
|
===================================================================
|
||||||
|
--- qtwayland-everywhere-src-5.11.0-beta2.orig/src/client/qwaylandwindow.cpp
|
||||||
|
+++ qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandwindow.cpp
|
||||||
|
@@ -980,7 +980,11 @@ bool QWaylandWindow::setWindowStateInter
|
||||||
|
// As of february 2013 QWindow::setWindowState sets the new state value after
|
||||||
|
// QPlatformWindow::setWindowState returns, so we cannot rely on QWindow::windowState
|
||||||
|
// here. We use then this mState variable.
|
||||||
|
- mState = state;
|
||||||
|
+ // NOTE: The compositor does not tell us when the window is not minimized anymore,
|
||||||
|
+ // so we store the state except for the WindowMinimized value, to make sure that
|
||||||
|
+ // the equality check above does not return true when setWindowState(Qt::WindowMinimized)
|
||||||
|
+ // is called, even though the window is actually not minimized anymore.
|
||||||
|
+ mState = state & ~Qt::WindowMinimized;
|
||||||
|
|
||||||
|
if (mShellSurface) {
|
||||||
|
createDecoration();
|
||||||
|
Index: qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandxdgshellv6.cpp
|
||||||
|
===================================================================
|
||||||
|
--- qtwayland-everywhere-src-5.11.0-beta2.orig/src/client/qwaylandxdgshellv6.cpp
|
||||||
|
+++ qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandxdgshellv6.cpp
|
||||||
|
@@ -56,6 +56,8 @@ QWaylandXdgSurfaceV6::Toplevel::Toplevel
|
||||||
|
: QtWayland::zxdg_toplevel_v6(xdgSurface->get_toplevel())
|
||||||
|
, m_xdgSurface(xdgSurface)
|
||||||
|
{
|
||||||
|
+ m_configureState.fullscreen = false;
|
||||||
|
+ m_configureState.maximized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWaylandXdgSurfaceV6::Toplevel::~Toplevel()
|
||||||
|
@@ -75,13 +77,35 @@ void QWaylandXdgSurfaceV6::Toplevel::zxd
|
||||||
|
m_configureState.width = width;
|
||||||
|
m_configureState.height = height;
|
||||||
|
|
||||||
|
+ bool wasMaximized = m_configureState.maximized;
|
||||||
|
+ bool wasFullscreen = m_configureState.fullscreen;
|
||||||
|
+
|
||||||
|
uint32_t *state = reinterpret_cast<uint32_t *>(states->data);
|
||||||
|
size_t numStates = states->size / sizeof(uint32_t);
|
||||||
|
- m_configureState.states.reserve(numStates);
|
||||||
|
- m_configureState.states.clear();
|
||||||
|
|
||||||
|
- for (size_t i = 0; i < numStates; i++)
|
||||||
|
- m_configureState.states << state[i];
|
||||||
|
+ m_configureState.fullscreen = false;
|
||||||
|
+ m_configureState.maximized = false;
|
||||||
|
+
|
||||||
|
+ for (size_t i = 0; i < numStates; i++) {
|
||||||
|
+ switch (state[i]) {
|
||||||
|
+ case ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED:
|
||||||
|
+ m_configureState.maximized = true;
|
||||||
|
+ break;
|
||||||
|
+ case ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN:
|
||||||
|
+ m_configureState.fullscreen = true;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((!wasMaximized && m_configureState.maximized) || (!wasFullscreen && m_configureState.fullscreen))
|
||||||
|
+ m_normalSize = m_xdgSurface->m_window->window()->frameGeometry().size();
|
||||||
|
+
|
||||||
|
+ if ((width == 0 || height == 0) && !m_normalSize.isEmpty()) {
|
||||||
|
+ m_configureState.width = m_normalSize.width();
|
||||||
|
+ m_configureState.height = m_normalSize.height();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
void QWaylandXdgSurfaceV6::Toplevel::zxdg_toplevel_v6_close()
|
||||||
|
@@ -232,6 +256,35 @@ void QWaylandXdgSurfaceV6::zxdg_surface_
|
||||||
|
ack_configure(serial);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void QWaylandXdgSurfaceV6::setMaximized()
|
||||||
|
+{
|
||||||
|
+ if (m_toplevel)
|
||||||
|
+ m_toplevel->set_maximized();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QWaylandXdgSurfaceV6::setFullscreen()
|
||||||
|
+{
|
||||||
|
+ if (m_toplevel)
|
||||||
|
+ m_toplevel->set_fullscreen(nullptr);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QWaylandXdgSurfaceV6::setNormal()
|
||||||
|
+{
|
||||||
|
+ if (!m_toplevel)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (m_toplevel->m_configureState.maximized)
|
||||||
|
+ m_toplevel->unset_maximized();
|
||||||
|
+ if (m_toplevel->m_configureState.fullscreen)
|
||||||
|
+ m_toplevel->unset_fullscreen();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QWaylandXdgSurfaceV6::setMinimized()
|
||||||
|
+{
|
||||||
|
+ if (m_toplevel)
|
||||||
|
+ m_toplevel->set_minimized();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
|
||||||
|
QWaylandXdgShellV6::QWaylandXdgShellV6(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion)
|
||||||
|
Index: qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandxdgshellv6_p.h
|
||||||
|
===================================================================
|
||||||
|
--- qtwayland-everywhere-src-5.11.0-beta2.orig/src/client/qwaylandxdgshellv6_p.h
|
||||||
|
+++ qtwayland-everywhere-src-5.11.0-beta2/src/client/qwaylandxdgshellv6_p.h
|
||||||
|
@@ -88,6 +88,10 @@ public:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void zxdg_surface_v6_configure(uint32_t serial) override;
|
||||||
|
+ void setMaximized() override;
|
||||||
|
+ void setFullscreen() override;
|
||||||
|
+ void setNormal() override;
|
||||||
|
+ void setMinimized() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Toplevel: public QtWayland::zxdg_toplevel_v6
|
||||||
|
@@ -103,8 +107,10 @@ private:
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int32_t width, height;
|
||||||
|
- QVarLengthArray<uint32_t> states;
|
||||||
|
+ bool maximized;
|
||||||
|
+ bool fullscreen;
|
||||||
|
} m_configureState;
|
||||||
|
+ QSize m_normalSize;
|
||||||
|
|
||||||
|
QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr;
|
||||||
|
};
|
@ -1,176 +0,0 @@
|
|||||||
From 867cf6e37a657fea1bd847494d80b9b65678f5d8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|
||||||
Date: Fri, 1 May 2015 17:12:22 +0300
|
|
||||||
Subject: [PATCH 1/2] Implement basic key composition support
|
|
||||||
|
|
||||||
Use xkbcommon-compose to handle basic compose key support. We should expand on
|
|
||||||
it in the future to handle things like resetting the compose state on text
|
|
||||||
field switching.
|
|
||||||
|
|
||||||
Task-number: QTBUG-54792
|
|
||||||
Task-number: QTBUG-64572
|
|
||||||
Change-Id: I9d1d5ca4c9991928e12979f69eaa477e0cb28ada
|
|
||||||
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
||||||
---
|
|
||||||
src/client/qwaylandinputdevice.cpp | 65 +++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/client/qwaylandinputdevice_p.h | 9 ++++++
|
|
||||||
2 files changed, 73 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
|
|
||||||
index 4def0de8..90b27769 100644
|
|
||||||
--- a/src/client/qwaylandinputdevice.cpp
|
|
||||||
+++ b/src/client/qwaylandinputdevice.cpp
|
|
||||||
@@ -70,6 +70,10 @@
|
|
||||||
|
|
||||||
#include <QtGui/QGuiApplication>
|
|
||||||
|
|
||||||
+#if QT_CONFIG(xkbcommon_evdev)
|
|
||||||
+#include <xkbcommon/xkbcommon-compose.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
namespace QtWaylandClient {
|
|
||||||
@@ -113,6 +117,7 @@ bool QWaylandInputDevice::Keyboard::createDefaultKeyMap()
|
|
||||||
qWarning() << "xkb_map_new_from_names failed, no key input";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+ createComposeState();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -125,11 +130,41 @@ void QWaylandInputDevice::Keyboard::releaseKeyMap()
|
|
||||||
if (mXkbContext)
|
|
||||||
xkb_context_unref(mXkbContext);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+void QWaylandInputDevice::Keyboard::createComposeState()
|
|
||||||
+{
|
|
||||||
+ static const char *locale = nullptr;
|
|
||||||
+ if (!locale) {
|
|
||||||
+ locale = getenv("LC_ALL");
|
|
||||||
+ if (!locale)
|
|
||||||
+ locale = getenv("LC_CTYPE");
|
|
||||||
+ if (!locale)
|
|
||||||
+ locale = getenv("LANG");
|
|
||||||
+ if (!locale)
|
|
||||||
+ locale = "C";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ mXkbComposeTable = xkb_compose_table_new_from_locale(mXkbContext, locale, XKB_COMPOSE_COMPILE_NO_FLAGS);
|
|
||||||
+ if (mXkbComposeTable)
|
|
||||||
+ mXkbComposeState = xkb_compose_state_new(mXkbComposeTable, XKB_COMPOSE_STATE_NO_FLAGS);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void QWaylandInputDevice::Keyboard::releaseComposeState()
|
|
||||||
+{
|
|
||||||
+ if (mXkbComposeState)
|
|
||||||
+ xkb_compose_state_unref(mXkbComposeState);
|
|
||||||
+ if (mXkbComposeTable)
|
|
||||||
+ xkb_compose_table_unref(mXkbComposeTable);
|
|
||||||
+ mXkbComposeState = nullptr;
|
|
||||||
+ mXkbComposeTable = nullptr;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QWaylandInputDevice::Keyboard::~Keyboard()
|
|
||||||
{
|
|
||||||
#if QT_CONFIG(xkbcommon_evdev)
|
|
||||||
+ releaseComposeState();
|
|
||||||
releaseKeyMap();
|
|
||||||
#endif
|
|
||||||
if (mFocus)
|
|
||||||
@@ -632,6 +667,7 @@ void QWaylandInputDevice::Keyboard::keyboard_keymap(uint32_t format, int32_t fd,
|
|
||||||
|
|
||||||
// Release the old keymap resources in the case they were already created in
|
|
||||||
// the key event or when the compositor issues a new map
|
|
||||||
+ releaseComposeState();
|
|
||||||
releaseKeyMap();
|
|
||||||
|
|
||||||
mXkbContext = xkb_context_new(xkb_context_flags(0));
|
|
||||||
@@ -640,6 +676,8 @@ void QWaylandInputDevice::Keyboard::keyboard_keymap(uint32_t format, int32_t fd,
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
mXkbState = xkb_state_new(mXkbMap);
|
|
||||||
+ createComposeState();
|
|
||||||
+
|
|
||||||
#else
|
|
||||||
Q_UNUSED(format);
|
|
||||||
Q_UNUSED(fd);
|
|
||||||
@@ -723,12 +761,37 @@ void QWaylandInputDevice::Keyboard::keyboard_key(uint32_t serial, uint32_t time,
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- const xkb_keysym_t sym = xkb_state_key_get_one_sym(mXkbState, code);
|
|
||||||
+ QString composedText;
|
|
||||||
+ xkb_keysym_t sym = xkb_state_key_get_one_sym(mXkbState, code);
|
|
||||||
+ if (mXkbComposeState) {
|
|
||||||
+ if (isDown)
|
|
||||||
+ xkb_compose_state_feed(mXkbComposeState, sym);
|
|
||||||
+ xkb_compose_status status = xkb_compose_state_get_status(mXkbComposeState);
|
|
||||||
+
|
|
||||||
+ switch (status) {
|
|
||||||
+ case XKB_COMPOSE_COMPOSED: {
|
|
||||||
+ int size = xkb_compose_state_get_utf8(mXkbComposeState, nullptr, 0);
|
|
||||||
+ QVarLengthArray<char, 32> buffer(size + 1);
|
|
||||||
+ xkb_compose_state_get_utf8(mXkbComposeState, buffer.data(), buffer.size());
|
|
||||||
+ composedText = QString::fromUtf8(buffer.constData());
|
|
||||||
+ sym = xkb_compose_state_get_one_sym(mXkbComposeState);
|
|
||||||
+ xkb_compose_state_reset(mXkbComposeState);
|
|
||||||
+ } break;
|
|
||||||
+ case XKB_COMPOSE_COMPOSING:
|
|
||||||
+ case XKB_COMPOSE_CANCELLED:
|
|
||||||
+ return;
|
|
||||||
+ case XKB_COMPOSE_NOTHING:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
Qt::KeyboardModifiers modifiers = mParent->modifiers();
|
|
||||||
|
|
||||||
std::tie(qtkey, text) = QWaylandXkb::keysymToQtKey(sym, modifiers);
|
|
||||||
|
|
||||||
+ if (!composedText.isNull())
|
|
||||||
+ text = composedText;
|
|
||||||
+
|
|
||||||
sendKey(window->window(), time, type, qtkey, modifiers, code, sym, mNativeModifiers, text);
|
|
||||||
#else
|
|
||||||
// Generic fallback for single hard keys: Assume 'key' is a Qt key code.
|
|
||||||
diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h
|
|
||||||
index 9e3d1d1f..b1424981 100644
|
|
||||||
--- a/src/client/qwaylandinputdevice_p.h
|
|
||||||
+++ b/src/client/qwaylandinputdevice_p.h
|
|
||||||
@@ -76,6 +76,11 @@
|
|
||||||
struct wl_cursor_image;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if QT_CONFIG(xkbcommon_evdev)
|
|
||||||
+struct xkb_compose_state;
|
|
||||||
+struct xkb_compose_table;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
namespace QtWaylandClient {
|
|
||||||
@@ -207,6 +212,8 @@ public:
|
|
||||||
xkb_context *mXkbContext;
|
|
||||||
xkb_keymap *mXkbMap;
|
|
||||||
xkb_state *mXkbState;
|
|
||||||
+ xkb_compose_table *mXkbComposeTable = nullptr;
|
|
||||||
+ xkb_compose_state *mXkbComposeState = nullptr;
|
|
||||||
#endif
|
|
||||||
uint32_t mNativeModifiers;
|
|
||||||
|
|
||||||
@@ -228,6 +235,8 @@ private:
|
|
||||||
#if QT_CONFIG(xkbcommon_evdev)
|
|
||||||
bool createDefaultKeyMap();
|
|
||||||
void releaseKeyMap();
|
|
||||||
+ void createComposeState();
|
|
||||||
+ void releaseComposeState();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
};
|
|
||||||
--
|
|
||||||
2.15.0
|
|
||||||
|
|
@ -1,139 +0,0 @@
|
|||||||
From ae858fe3d5a81b8ce5ab1d6ce7e2e6a65a11cc14 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
|
|
||||||
Date: Fri, 18 Aug 2017 13:08:50 +0200
|
|
||||||
Subject: [PATCH 2/2] Automatically change scale when entering a new output
|
|
||||||
|
|
||||||
Change-Id: I99198d47eac5b2091fe2bfd8fc24646be9c9890a
|
|
||||||
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
|
||||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
|
||||||
---
|
|
||||||
src/client/qwaylandwindow.cpp | 27 ++++++++++++++++++----
|
|
||||||
src/client/qwaylandwindow_p.h | 2 ++
|
|
||||||
.../client/wayland-egl/qwaylandeglwindow.cpp | 5 ++++
|
|
||||||
.../client/wayland-egl/qwaylandeglwindow.h | 1 +
|
|
||||||
4 files changed, 31 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
|
||||||
index 6d7c0885..c7490532 100644
|
|
||||||
--- a/src/client/qwaylandwindow.cpp
|
|
||||||
+++ b/src/client/qwaylandwindow.cpp
|
|
||||||
@@ -128,6 +128,12 @@ QWaylandWindow::~QWaylandWindow()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+void QWaylandWindow::ensureSize()
|
|
||||||
+{
|
|
||||||
+ if (mBackingStore)
|
|
||||||
+ mBackingStore->ensureSize();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void QWaylandWindow::initWindow()
|
|
||||||
{
|
|
||||||
if (window()->type() == Qt::Desktop)
|
|
||||||
@@ -196,7 +202,6 @@ void QWaylandWindow::initWindow()
|
|
||||||
// Enable high-dpi rendering. Scale() returns the screen scale factor and will
|
|
||||||
// typically be integer 1 (normal-dpi) or 2 (high-dpi). Call set_buffer_scale()
|
|
||||||
// to inform the compositor that high-resolution buffers will be provided.
|
|
||||||
- //FIXME this needs to be changed when the screen changes along with a resized backing store
|
|
||||||
if (mDisplay->compositorVersion() >= 3)
|
|
||||||
set_buffer_scale(scale());
|
|
||||||
|
|
||||||
@@ -516,7 +521,7 @@ void QWaylandWindow::surface_enter(wl_output *output)
|
|
||||||
|
|
||||||
QWaylandScreen *newScreen = calculateScreenFromSurfaceEvents();
|
|
||||||
if (oldScreen != newScreen) //currently this will only happen if the first wl_surface.enter is for a non-primary screen
|
|
||||||
- QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
|
|
||||||
+ handleScreenChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QWaylandWindow::surface_leave(wl_output *output)
|
|
||||||
@@ -533,7 +538,7 @@ void QWaylandWindow::surface_leave(wl_output *output)
|
|
||||||
|
|
||||||
QWaylandScreen *newScreen = calculateScreenFromSurfaceEvents();
|
|
||||||
if (oldScreen != newScreen)
|
|
||||||
- QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
|
|
||||||
+ handleScreenChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QWaylandWindow::handleScreenRemoved(QScreen *qScreen)
|
|
||||||
@@ -543,7 +548,7 @@ void QWaylandWindow::handleScreenRemoved(QScreen *qScreen)
|
|
||||||
if (wasRemoved) {
|
|
||||||
QWaylandScreen *newScreen = calculateScreenFromSurfaceEvents();
|
|
||||||
if (oldScreen != newScreen)
|
|
||||||
- QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
|
|
||||||
+ handleScreenChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -906,6 +911,20 @@ void QWaylandWindow::handleMouseEventWithDecoration(QWaylandInputDevice *inputDe
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+void QWaylandWindow::handleScreenChanged()
|
|
||||||
+{
|
|
||||||
+ QWaylandScreen *newScreen = calculateScreenFromSurfaceEvents();
|
|
||||||
+ QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
|
|
||||||
+
|
|
||||||
+ int scale = newScreen->scale();
|
|
||||||
+ if (scale != mScale) {
|
|
||||||
+ mScale = scale;
|
|
||||||
+ if (isInitialized() && mDisplay->compositorVersion() >= 3)
|
|
||||||
+ set_buffer_scale(mScale);
|
|
||||||
+ ensureSize();
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#if QT_CONFIG(cursor)
|
|
||||||
void QWaylandWindow::setMouseCursor(QWaylandInputDevice *device, const QCursor &cursor)
|
|
||||||
{
|
|
||||||
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
|
|
||||||
index bd4a3590..5457d655 100644
|
|
||||||
--- a/src/client/qwaylandwindow_p.h
|
|
||||||
+++ b/src/client/qwaylandwindow_p.h
|
|
||||||
@@ -110,6 +110,7 @@ public:
|
|
||||||
~QWaylandWindow();
|
|
||||||
|
|
||||||
virtual WindowType windowType() const = 0;
|
|
||||||
+ virtual void ensureSize();
|
|
||||||
WId winId() const override;
|
|
||||||
void setVisible(bool visible) override;
|
|
||||||
void setParent(const QPlatformWindow *parent) override;
|
|
||||||
@@ -263,6 +264,7 @@ private:
|
|
||||||
QWaylandScreen *calculateScreenFromSurfaceEvents() const;
|
|
||||||
|
|
||||||
void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice, const QWaylandPointerEvent &e);
|
|
||||||
+ void handleScreenChanged();
|
|
||||||
|
|
||||||
bool mUpdateRequested;
|
|
||||||
|
|
||||||
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
|
||||||
index 6b5c5326..87f3e2d4 100644
|
|
||||||
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
|
||||||
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
|
||||||
@@ -92,6 +92,11 @@ QWaylandWindow::WindowType QWaylandEglWindow::windowType() const
|
|
||||||
return QWaylandWindow::Egl;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void QWaylandEglWindow::ensureSize()
|
|
||||||
+{
|
|
||||||
+ updateSurface(false);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void QWaylandEglWindow::setGeometry(const QRect &rect)
|
|
||||||
{
|
|
||||||
QWaylandWindow::setGeometry(rect);
|
|
||||||
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
|
||||||
index e471a8f7..77aee56d 100644
|
|
||||||
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
|
||||||
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
|
||||||
@@ -59,6 +59,7 @@ public:
|
|
||||||
QWaylandEglWindow(QWindow *window);
|
|
||||||
~QWaylandEglWindow();
|
|
||||||
WindowType windowType() const override;
|
|
||||||
+ void ensureSize() override;
|
|
||||||
|
|
||||||
void updateSurface(bool create);
|
|
||||||
virtual void setGeometry(const QRect &rect) override;
|
|
||||||
--
|
|
||||||
2.15.0
|
|
||||||
|
|
@ -1,103 +0,0 @@
|
|||||||
From a343c589a966d0342fcc75e0d6ce24e1f5157540 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Edmundson <davidedmundson@kde.org>
|
|
||||||
Date: Wed, 3 Jan 2018 19:18:42 +0000
|
|
||||||
Subject: [PATCH] Don't recreate hidden egl surfaces
|
|
||||||
|
|
||||||
QWaylandEglWindow deletes surfaces when a window changes from hidden to
|
|
||||||
visible, presumably as a result of us not having a valid wl_surface
|
|
||||||
object. By extension it doesn't make sense to create a surface whilst a
|
|
||||||
window is still hidden.
|
|
||||||
|
|
||||||
This fixes a crash where a QQuickWindow hides and then is destroyed. In
|
|
||||||
QQuickWindow destruction we have to create a valid context in order to
|
|
||||||
delete any textures/assets owned by the scene graph; as the wl_surface
|
|
||||||
has gone this causes an error in the EGL libs when we create an EGL
|
|
||||||
surface.
|
|
||||||
|
|
||||||
Task-number: QTBUG-65553
|
|
||||||
Change-Id: I9b37a86326bf2cd7737c4e839c1aa8c74cf08116
|
|
||||||
---
|
|
||||||
.../client/wayland-egl/qwaylandglcontext.cpp | 2 +-
|
|
||||||
tests/auto/client/client/tst_client.cpp | 35 ++++++++++++++++++++++
|
|
||||||
2 files changed, 36 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: qtwayland-everywhere-src-5.10.0/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
|
||||||
===================================================================
|
|
||||||
--- qtwayland-everywhere-src-5.10.0.orig/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
|
||||||
+++ qtwayland-everywhere-src-5.10.0/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
|
||||||
@@ -407,7 +407,7 @@ bool QWaylandGLContext::makeCurrent(QPla
|
|
||||||
window->createDecoration();
|
|
||||||
|
|
||||||
if (eglSurface == EGL_NO_SURFACE) {
|
|
||||||
- window->updateSurface(true);
|
|
||||||
+ window->updateSurface(window->isExposed());
|
|
||||||
eglSurface = window->eglSurface();
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: qtwayland-everywhere-src-5.10.0/tests/auto/client/client/tst_client.cpp
|
|
||||||
===================================================================
|
|
||||||
--- qtwayland-everywhere-src-5.10.0.orig/tests/auto/client/client/tst_client.cpp
|
|
||||||
+++ qtwayland-everywhere-src-5.10.0/tests/auto/client/client/tst_client.cpp
|
|
||||||
@@ -35,6 +35,8 @@
|
|
||||||
#include <QMimeData>
|
|
||||||
#include <QPixmap>
|
|
||||||
#include <QDrag>
|
|
||||||
+#include <QWindow>
|
|
||||||
+#include <QOpenGLWindow>
|
|
||||||
|
|
||||||
#include <QtTest/QtTest>
|
|
||||||
|
|
||||||
@@ -108,6 +110,25 @@ public:
|
|
||||||
QPoint mousePressPos;
|
|
||||||
};
|
|
||||||
|
|
||||||
+class TestGlWindow : public QOpenGLWindow
|
|
||||||
+{
|
|
||||||
+ Q_OBJECT
|
|
||||||
+
|
|
||||||
+public:
|
|
||||||
+ TestGlWindow();
|
|
||||||
+
|
|
||||||
+protected:
|
|
||||||
+ void paintGL() override;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+TestGlWindow::TestGlWindow()
|
|
||||||
+{}
|
|
||||||
+
|
|
||||||
+void TestGlWindow::paintGL()
|
|
||||||
+{
|
|
||||||
+ glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
class tst_WaylandClient : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
@@ -145,6 +166,7 @@ private slots:
|
|
||||||
void dontCrashOnMultipleCommits();
|
|
||||||
void hiddenTransientParent();
|
|
||||||
void hiddenPopupParent();
|
|
||||||
+ void glWindow();
|
|
||||||
|
|
||||||
private:
|
|
||||||
MockCompositor *compositor;
|
|
||||||
@@ -404,6 +426,19 @@ void tst_WaylandClient::hiddenPopupParen
|
|
||||||
QTRY_VERIFY(compositor->surface());
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_WaylandClient::glWindow()
|
|
||||||
+{
|
|
||||||
+ QScopedPointer<TestGlWindow> testWindow(new TestGlWindow);
|
|
||||||
+ testWindow->show();
|
|
||||||
+ QSharedPointer<MockSurface> surface;
|
|
||||||
+ QTRY_VERIFY(surface = compositor->surface());
|
|
||||||
+
|
|
||||||
+ //confirm we don't crash when we delete an already hidden GL window
|
|
||||||
+ //QTBUG-65553
|
|
||||||
+ testWindow->setVisible(false);
|
|
||||||
+ QTRY_VERIFY(!compositor->surface());
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
setenv("XDG_RUNTIME_DIR", ".", 1);
|
|
@ -1,3 +1,81 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 22 16:16:49 CEST 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0
|
||||||
|
* New bugfix release
|
||||||
|
* For more details please see:
|
||||||
|
* http://code.qt.io/cgit/qt/qtwayland.git/plain/dist/changes-5.11.0/?h=v5.11.0
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 8 11:01:44 CEST 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-rc
|
||||||
|
* New bugfix release
|
||||||
|
* No changelog available
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 23 08:58:08 CEST 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-beta4
|
||||||
|
* New bugfix release
|
||||||
|
* No changelog available
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Apr 11 09:15:05 CEST 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-beta3
|
||||||
|
* New bugfix release
|
||||||
|
* No changelog available
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 28 09:17:53 CEST 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-beta2
|
||||||
|
* New bugfix release
|
||||||
|
* No changelog available
|
||||||
|
- Refresh 0001-Handle-maximize-minimize-fullscreen-xdgshellv6.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 13 13:40:51 UTC 2018 - christophe@krop.fr
|
||||||
|
|
||||||
|
- Fix the license tag.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 1 09:55:54 CET 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-beta1
|
||||||
|
* New feature release
|
||||||
|
* For more details please see:
|
||||||
|
* http://code.qt.io/cgit/qt/qtwayland.git/plain/dist/changes-5.11.0-beta1/?h=v5.11.0-beta1
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 20 14:29:57 CET 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.11.0-alpha
|
||||||
|
* New feature release
|
||||||
|
* For more details please see:
|
||||||
|
* https://wiki.qt.io/New_Features_in_Qt_5.11
|
||||||
|
- Remove patches, now upstream:
|
||||||
|
* 0001-Implement-basic-key-composition-support.patch
|
||||||
|
* 0002-Automatically-change-scale-when-entering-a-new-outpu.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 14 15:47:14 CET 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Update to 5.10.1
|
||||||
|
* New bugfix release
|
||||||
|
* For more details please see:
|
||||||
|
* http://code.qt.io/cgit/qt/qtwayland.git/plain/dist/changes-5.10.1/?h=v5.10.1
|
||||||
|
- Drop patches, now upstream:
|
||||||
|
* Dont-recreate-hidden-egl-surfaces.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Feb 10 21:11:54 UTC 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
- Add patch (pending upstream) to implement fullscreen windows for
|
||||||
|
xdg-shell v6 (boo#1080447):
|
||||||
|
* 0001-Handle-maximize-minimize-fullscreen-xdgshellv6.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jan 9 14:39:26 UTC 2018 - fabian@ritter-vogt.de
|
Tue Jan 9 14:39:26 UTC 2018 - fabian@ritter-vogt.de
|
||||||
|
|
||||||
|
@ -19,29 +19,30 @@
|
|||||||
%define qt5_snapshot 0
|
%define qt5_snapshot 0
|
||||||
%define libname libQt5WaylandCompositor5
|
%define libname libQt5WaylandCompositor5
|
||||||
%define base_name libqt5
|
%define base_name libqt5
|
||||||
%define real_version 5.10.0
|
%define real_version 5.11.0
|
||||||
%define so_version 5.10.0
|
%define so_version 5.11.0
|
||||||
%define tar_version qtwayland-everywhere-src-5.10.0
|
%define tar_version qtwayland-everywhere-src-5.11.0
|
||||||
Name: libqt5-qtwayland
|
Name: libqt5-qtwayland
|
||||||
Version: 5.10.0
|
Version: 5.11.0
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Qt 5 Wayland Addon
|
Summary: Qt 5 Wayland Addon
|
||||||
License: LGPL-2.1-with-Qt-Company-Qt-exception-1.1 or LGPL-3.0-with-Qt-Company-Qt-exception-1.1
|
License: LGPL-2.1-with-Qt-Company-Qt-exception-1.1 or LGPL-3.0-only
|
||||||
Group: Development/Libraries/X11
|
Group: Development/Libraries/X11
|
||||||
Url: https://www.qt.io
|
Url: https://www.qt.io
|
||||||
Source: https://download.qt.io/official_releases/qt/5.10/%{real_version}/submodules/%{tar_version}.tar.xz
|
Source: https://download.qt.io/official_releases/qt/5.11/%{real_version}/submodules/%{tar_version}.tar.xz
|
||||||
Source1: baselibs.conf
|
Source1: baselibs.conf
|
||||||
# PATCH-FIX-OPENSUSE
|
# PATCH-FIX-OPENSUSE
|
||||||
Patch1: workaround-null-object.patch
|
Patch1: workaround-null-object.patch
|
||||||
# Pending for upstream 5.9 (https://codereview.qt-project.org/#/c/210552/)
|
# Pending for upstream 5.9 (https://codereview.qt-project.org/#/c/199123/)
|
||||||
Patch1500: Dont-recreate-hidden-egl-surfaces.patch
|
Patch1501: 0001-Handle-maximize-minimize-fullscreen-xdgshellv6.patch
|
||||||
# Patches from upstream dev branch
|
|
||||||
Patch2000: 0001-Implement-basic-key-composition-support.patch
|
|
||||||
Patch2001: 0002-Automatically-change-scale-when-entering-a-new-outpu.patch
|
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: libqt5-qtbase-private-headers-devel >= %{version}
|
BuildRequires: libqt5-qtbase-private-headers-devel >= %{version}
|
||||||
BuildRequires: libqt5-qtdeclarative-private-headers-devel >= %{version}
|
BuildRequires: libqt5-qtdeclarative-private-headers-devel >= %{version}
|
||||||
BuildRequires: xz
|
BuildRequires: xz
|
||||||
|
%if 0%{?suse_version} < 1330
|
||||||
|
# It does not build with the default compiler (GCC 4.8) on Leap 42.x
|
||||||
|
BuildRequires: gcc7-c++
|
||||||
|
%endif
|
||||||
BuildRequires: pkgconfig(egl)
|
BuildRequires: pkgconfig(egl)
|
||||||
BuildRequires: pkgconfig(wayland-client) >= 1.1.0
|
BuildRequires: pkgconfig(wayland-client) >= 1.1.0
|
||||||
BuildRequires: pkgconfig(wayland-egl)
|
BuildRequires: pkgconfig(wayland-egl)
|
||||||
@ -108,10 +109,7 @@ Examples for libqt5-qtwayland module.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{tar_version}
|
%setup -q -n %{tar_version}
|
||||||
%patch1 -p1
|
%autopatch -p1
|
||||||
%patch1500 -p1
|
|
||||||
%patch2000 -p1
|
|
||||||
%patch2001 -p1
|
|
||||||
|
|
||||||
%post -n libQt5WaylandCompositor5 -p /sbin/ldconfig
|
%post -n libQt5WaylandCompositor5 -p /sbin/ldconfig
|
||||||
|
|
||||||
@ -130,7 +128,17 @@ Examples for libqt5-qtwayland module.
|
|||||||
#force the configure script to generate the forwarding headers (it checks whether .git directory exists)
|
#force the configure script to generate the forwarding headers (it checks whether .git directory exists)
|
||||||
mkdir .git
|
mkdir .git
|
||||||
%endif
|
%endif
|
||||||
%{_libqt5_qmake} CONFIG+=wayland-compositor
|
%{_libqt5_qmake} \
|
||||||
|
%if 0%{?suse_version} < 1330
|
||||||
|
QMAKE_CC=gcc-7 QMAKE_CXX=g++-7 CONFIG+=c++14 \
|
||||||
|
%endif
|
||||||
|
CONFIG+=wayland-compositor
|
||||||
|
|
||||||
|
%if 0%{?suse_version} < 1330
|
||||||
|
export CC=gcc-7
|
||||||
|
export CXX=g++-7
|
||||||
|
%endif
|
||||||
|
|
||||||
%{make_jobs}
|
%{make_jobs}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:5657f9656c95f83880f92e7697a1c13c9739bf4d0bfd867e711fff7c84004b93
|
|
||||||
size 378276
|
|
3
qtwayland-everywhere-src-5.11.0.tar.xz
Normal file
3
qtwayland-everywhere-src-5.11.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:68814e8f207f3a90cae29ae49ce2c1f4bf9d06709a7a7962adf23120f1644127
|
||||||
|
size 391212
|
Loading…
x
Reference in New Issue
Block a user