summaryrefslogtreecommitdiffstats
path: root/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch')
-rw-r--r--source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch240
1 files changed, 0 insertions, 240 deletions
diff --git a/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch b/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch
deleted file mode 100644
index b0e5e7136..000000000
--- a/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-From 7eb0390bf70fc7fb5a39bd501ffcc327a07c328a Mon Sep 17 00:00:00 2001
-From: Ilya Pominov <ipominov@astralinux.ru>
-Date: Thu, 23 Sep 2021 14:24:16 +0300
-Subject: [PATCH] XrandR: Fix impossibilty to change resolution in VirtualBox
-
-In VirtualBox KDE runs at low resolution,
-and when you try to change the resolution through the "Screen Settings"
-it returns to the original one again.
-How to check:
-- run KDE neon on VirtualBox
-- change the resolution
-
-VirtualBox sets the hotplug_mode_update property, but its preferred mode
-is always 800x600, and KScreen returns the resolution to 800x600.
-
-Now XRandRCrtc stores the timestamp of the last resolution change
-request from backend, and the timestamp of the last config update from
-X11.
-If the changes were initiated by XRandR backend (i.e. 'timestamp of the
-last config update from X11' less or equal 'last resolution change
-request'), then the followPreferedMode flag in KScreenConfig is set to
-false.
-
-BUG: 407058
----
- backends/xcbeventlistener.cpp | 7 ++++++-
- backends/xcbeventlistener.h | 2 +-
- backends/xrandr/xrandr.cpp | 4 +++-
- backends/xrandr/xrandr.h | 2 +-
- backends/xrandr/xrandrconfig.cpp | 9 +++++++--
- backends/xrandr/xrandrcrtc.cpp | 23 +++++++++++++++++++++++
- backends/xrandr/xrandrcrtc.h | 7 +++++++
- backends/xrandr/xrandroutput.cpp | 2 +-
- 8 files changed, 49 insertions(+), 7 deletions(-)
-
-diff --git a/backends/xcbeventlistener.cpp b/backends/xcbeventlistener.cpp
-index dba81dc..4c3a527 100644
---- a/backends/xcbeventlistener.cpp
-+++ b/backends/xcbeventlistener.cpp
-@@ -139,6 +139,8 @@ void XCBEventListener::handleScreenChange(xcb_generic_event_t *e)
- }
-
- qCDebug(KSCREEN_XCB_HELPER) << "RRScreenChangeNotify";
-+ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << e2->timestamp;
-+ qCDebug(KSCREEN_XCB_HELPER) << "\tConfig_timestamp: " << e2->config_timestamp;
- qCDebug(KSCREEN_XCB_HELPER) << "\tWindow:" << e2->request_window;
- qCDebug(KSCREEN_XCB_HELPER) << "\tRoot:" << e2->root;
- qCDebug(KSCREEN_XCB_HELPER) << "\tRotation: " << rotationToString((xcb_randr_rotation_t)e2->rotation);
-@@ -157,15 +159,17 @@ void XCBEventListener::handleXRandRNotify(xcb_generic_event_t *e)
- if (randrEvent->subCode == XCB_RANDR_NOTIFY_CRTC_CHANGE) {
- xcb_randr_crtc_change_t crtc = randrEvent->u.cc;
- qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_CrtcChange";
-+ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << crtc.timestamp;
- qCDebug(KSCREEN_XCB_HELPER) << "\tCRTC: " << crtc.crtc;
- qCDebug(KSCREEN_XCB_HELPER) << "\tMode: " << crtc.mode;
- qCDebug(KSCREEN_XCB_HELPER) << "\tRotation: " << rotationToString((xcb_randr_rotation_t)crtc.rotation);
- qCDebug(KSCREEN_XCB_HELPER) << "\tGeometry: " << crtc.x << crtc.y << crtc.width << crtc.height;
-- Q_EMIT crtcChanged(crtc.crtc, crtc.mode, (xcb_randr_rotation_t)crtc.rotation, QRect(crtc.x, crtc.y, crtc.width, crtc.height));
-+ Q_EMIT crtcChanged(crtc.crtc, crtc.mode, (xcb_randr_rotation_t)crtc.rotation, QRect(crtc.x, crtc.y, crtc.width, crtc.height), crtc.timestamp);
-
- } else if (randrEvent->subCode == XCB_RANDR_NOTIFY_OUTPUT_CHANGE) {
- xcb_randr_output_change_t output = randrEvent->u.oc;
- qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_OutputChange";
-+ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << output.timestamp;
- qCDebug(KSCREEN_XCB_HELPER) << "\tOutput: " << output.output;
- qCDebug(KSCREEN_XCB_HELPER) << "\tCRTC: " << output.crtc;
- qCDebug(KSCREEN_XCB_HELPER) << "\tMode: " << output.mode;
-@@ -181,6 +185,7 @@ void XCBEventListener::handleXRandRNotify(xcb_generic_event_t *e)
- xcb_get_atom_name_reply(QX11Info::connection(), xcb_get_atom_name(QX11Info::connection(), property.atom), nullptr));
-
- qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_OutputProperty (ignored)";
-+ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << property.timestamp;
- qCDebug(KSCREEN_XCB_HELPER) << "\tOutput: " << property.output;
- qCDebug(KSCREEN_XCB_HELPER) << "\tProperty: " << xcb_get_atom_name_name(reply.data());
- qCDebug(KSCREEN_XCB_HELPER) << "\tState (newValue, Deleted): " << property.status;
-diff --git a/backends/xcbeventlistener.h b/backends/xcbeventlistener.h
-index 35577d9..68136d8 100644
---- a/backends/xcbeventlistener.h
-+++ b/backends/xcbeventlistener.h
-@@ -30,7 +30,7 @@ Q_SIGNALS:
- void outputsChanged();
-
- /* Emitted only when XRandR 1.2 or newer is available */
-- void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom);
-+ void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp);
- void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection);
- void outputPropertyChanged(xcb_randr_output_t output);
-
-diff --git a/backends/xrandr/xrandr.cpp b/backends/xrandr/xrandr.cpp
-index 71cbd77..115f268 100644
---- a/backends/xrandr/xrandr.cpp
-+++ b/backends/xrandr/xrandr.cpp
-@@ -45,6 +45,7 @@ XRandR::XRandR()
- qRegisterMetaType<xcb_randr_mode_t>("xcb_randr_mode_t");
- qRegisterMetaType<xcb_randr_connection_t>("xcb_randr_connection_t");
- qRegisterMetaType<xcb_randr_rotation_t>("xcb_randr_rotation_t");
-+ qRegisterMetaType<xcb_timestamp_t>("xcb_timestamp_t");
-
- // Use our own connection to make sure that we won't mess up Qt's connection
- // if something goes wrong on our side.
-@@ -143,7 +144,7 @@ void XRandR::outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb
- qCDebug(KSCREEN_XRANDR) << "Output" << xOutput->id() << ": connected =" << xOutput->isConnected() << ", enabled =" << xOutput->isEnabled();
- }
-
--void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom)
-+void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp)
- {
- XRandRCrtc *xCrtc = s_internalConfig->crtc(crtc);
- if (!xCrtc) {
-@@ -152,6 +153,7 @@ void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr
- xCrtc->update(mode, rotation, geom);
- }
-
-+ xCrtc->updateConfigTimestamp(timestamp);
- m_configChangeCompressor->start();
- }
-
-diff --git a/backends/xrandr/xrandr.h b/backends/xrandr/xrandr.h
-index 91dd7aa..6b998c8 100644
---- a/backends/xrandr/xrandr.h
-+++ b/backends/xrandr/xrandr.h
-@@ -44,7 +44,7 @@ public:
-
- private:
- void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection);
-- void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom);
-+ void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp);
- void screenChanged(xcb_randr_rotation_t rotation, const QSize &sizePx, const QSize &sizeMm);
-
- static quint8 *getXProperty(xcb_randr_output_t output, xcb_atom_t atom, size_t &len);
-diff --git a/backends/xrandr/xrandrconfig.cpp b/backends/xrandr/xrandrconfig.cpp
-index fa0929c..5cbf4c7 100644
---- a/backends/xrandr/xrandrconfig.cpp
-+++ b/backends/xrandr/xrandrconfig.cpp
-@@ -504,6 +504,8 @@ bool XRandRConfig::disableOutput(const OutputPtr &kscreenOutput) const
- XCB_NONE,
- xOutput->isConnected() ? XCB_RANDR_CONNECTION_CONNECTED : XCB_RANDR_CONNECTION_DISCONNECTED,
- kscreenOutput->isPrimary());
-+ if (xOutput->crtc())
-+ xOutput->crtc()->updateTimestamp(reply->timestamp);
- }
- return (reply->status == XCB_RANDR_SET_CONFIG_SUCCESS);
- }
-@@ -573,7 +575,7 @@ bool XRandRConfig::changeOutput(const KScreen::OutputPtr &kscreenOutput) const
- << "\n"
- << "\tCRTC:" << xOutput->crtc()->crtc() << "\n"
- << "\tPos:" << kscreenOutput->pos() << "\n"
-- << "\tMode:" << modeId << kscreenOutput->currentMode() << "\n"
-+ << "\tMode:" << kscreenOutput->currentMode() << "Preferred:" << kscreenOutput->preferredModeId() << "\n"
- << "\tRotation:" << kscreenOutput->rotation();
-
- if (!sendConfig(kscreenOutput, xOutput->crtc())) {
-@@ -605,6 +607,9 @@ bool XRandRConfig::sendConfig(const KScreen::OutputPtr &kscreenOutput, XRandRCrt
- qCDebug(KSCREEN_XRANDR) << "\tResult: unknown (error)";
- return false;
- }
-- qCDebug(KSCREEN_XRANDR) << "\tResult: " << reply->status;
-+
-+ crtc->updateTimestamp(reply->timestamp);
-+
-+ qCDebug(KSCREEN_XRANDR) << "\tResult: " << reply->status << " timestamp: " << reply->timestamp;
- return (reply->status == XCB_RANDR_SET_CONFIG_SUCCESS);
- }
-diff --git a/backends/xrandr/xrandrcrtc.cpp b/backends/xrandr/xrandrcrtc.cpp
-index c3cd291..9209501 100644
---- a/backends/xrandr/xrandrcrtc.cpp
-+++ b/backends/xrandr/xrandrcrtc.cpp
-@@ -16,6 +16,8 @@ XRandRCrtc::XRandRCrtc(xcb_randr_crtc_t crtc, XRandRConfig *config)
- , m_crtc(crtc)
- , m_mode(0)
- , m_rotation(XCB_RANDR_ROTATION_ROTATE_0)
-+ , m_timestamp(XCB_CURRENT_TIME)
-+ , m_configTimestamp(XCB_CURRENT_TIME)
- {
- update();
- }
-@@ -111,3 +113,24 @@ void XRandRCrtc::update(xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, co
- m_geometry = geom;
- m_rotation = rotation;
- }
-+
-+void XRandRCrtc::updateTimestamp(const xcb_timestamp_t tmstamp)
-+{
-+ if (tmstamp > m_timestamp) {
-+ qCDebug(KSCREEN_XRANDR) << "XRandRCrtc " << m_crtc << " m_timestamp update " << m_timestamp << " => " << tmstamp;
-+ m_timestamp = tmstamp;
-+ }
-+}
-+
-+void XRandRCrtc::updateConfigTimestamp(const xcb_timestamp_t tmstamp)
-+{
-+ if (tmstamp > m_configTimestamp) {
-+ qCDebug(KSCREEN_XRANDR) << "XRandRCrtc " << m_crtc << " m_configTimestamp update" << m_configTimestamp << " => " << tmstamp;
-+ m_configTimestamp = tmstamp;
-+ }
-+}
-+
-+bool XRandRCrtc::isChangedFromOutside() const
-+{
-+ return m_configTimestamp > m_timestamp;
-+}
-diff --git a/backends/xrandr/xrandrcrtc.h b/backends/xrandr/xrandrcrtc.h
-index 4de4a09..8be23d2 100644
---- a/backends/xrandr/xrandrcrtc.h
-+++ b/backends/xrandr/xrandrcrtc.h
-@@ -41,6 +41,10 @@ public:
- void update();
- void update(xcb_randr_crtc_t mode, xcb_randr_rotation_t rotation, const QRect &geom);
-
-+ void updateTimestamp(const xcb_timestamp_t tmstamp);
-+ void updateConfigTimestamp(const xcb_timestamp_t tmstamp);
-+ bool isChangedFromOutside() const;
-+
- private:
- xcb_randr_crtc_t m_crtc;
- xcb_randr_mode_t m_mode;
-@@ -50,4 +54,7 @@ private:
-
- QVector<xcb_randr_output_t> m_possibleOutputs;
- QVector<xcb_randr_output_t> m_outputs;
-+
-+ xcb_timestamp_t m_timestamp;
-+ xcb_timestamp_t m_configTimestamp;
- };
-diff --git a/backends/xrandr/xrandroutput.cpp b/backends/xrandr/xrandroutput.cpp
-index 92a39cf..4aa2290 100644
---- a/backends/xrandr/xrandroutput.cpp
-+++ b/backends/xrandr/xrandroutput.cpp
-@@ -403,7 +403,7 @@ KScreen::OutputPtr XRandROutput::toKScreenOutput() const
-
- // See https://bugzilla.redhat.com/show_bug.cgi?id=1290586
- // QXL will be creating a new mode we need to jump to every time the display is resized
-- kscreenOutput->setFollowPreferredMode(m_hotplugModeUpdate);
-+ kscreenOutput->setFollowPreferredMode(m_hotplugModeUpdate && m_crtc && m_crtc->isChangedFromOutside());
-
- kscreenOutput->setConnected(isConnected());
- if (isConnected()) {
---
-GitLab
-