Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package xdg-desktop-portal-hyprland for
openSUSE:Factory checked in at 2023-10-17 20:25:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-hyprland (Old)
and /work/SRC/openSUSE:Factory/.xdg-desktop-portal-hyprland.new.20540
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdg-desktop-portal-hyprland"
Tue Oct 17 20:25:30 2023 rev:7 rq:1118309 version:unknown
Changes:
--------
---
/work/SRC/openSUSE:Factory/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.changes
2023-09-26 22:15:48.067044881 +0200
+++
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-hyprland.new.20540/xdg-desktop-portal-hyprland.changes
2023-10-17 20:25:50.201042874 +0200
@@ -1,0 +2,14 @@
+Sun Oct 15 12:44:00 UTC 2023 - Nicolas Lorin <[email protected]>
+
+- Update to version 1.2.2:
+ * Unbreak build on FreeBSD
+ * Fix build when using clang
+ * specify flag for manual installation
+ * fixes the picker starting at windows and not monitors
+ * performance improvements
+ * fix for high CPU usage after exit
+ * hotfix to 1.2.0 to fix crashes after a few seconds
+ * fix some issues with screensharing on non-linear dmabuf GPUs
+ * fix xdph not exiting on terminate
+
+-------------------------------------------------------------------
Old:
----
xdg-desktop-portal-hyprland-1.1.0.tar.gz
New:
----
xdg-desktop-portal-hyprland-1.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xdg-desktop-portal-hyprland.spec ++++++
--- /var/tmp/diff_new_pack.96qbPp/_old 2023-10-17 20:25:51.205078023 +0200
+++ /var/tmp/diff_new_pack.96qbPp/_new 2023-10-17 20:25:51.205078023 +0200
@@ -18,7 +18,7 @@
%define _protocol_version 0.2
Name: xdg-desktop-portal-hyprland
-Version: 1.1.0
+Version: 1.2.2
Release: 0
Summary: Extended xdg-desktop-portal backend for Hyprland
License: MIT
++++++ xdg-desktop-portal-hyprland-1.1.0.tar.gz ->
xdg-desktop-portal-hyprland-1.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/CMakeLists.txt
new/xdg-desktop-portal-hyprland-1.2.2/CMakeLists.txt
--- old/xdg-desktop-portal-hyprland-1.1.0/CMakeLists.txt 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/CMakeLists.txt 2023-10-10
21:52:22.000000000 +0200
@@ -31,12 +31,14 @@
add_subdirectory(subprojects/sdbus-cpp)
add_subdirectory(hyprland-share-picker)
+find_package(Threads REQUIRED)
+
find_package(PkgConfig REQUIRED)
pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-client
wayland-protocols libpipewire-0.3 libspa-0.2 libdrm gbm)
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp")
add_executable(xdg-desktop-portal-hyprland ${SRCFILES})
-target_link_libraries(xdg-desktop-portal-hyprland PRIVATE rt sdbus-c++
PkgConfig::deps)
+target_link_libraries(xdg-desktop-portal-hyprland PRIVATE rt sdbus-c++
Threads::Threads PkgConfig::deps)
# protocols
find_program(WaylandScanner NAMES wayland-scanner)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/Makefile
new/xdg-desktop-portal-hyprland-1.2.2/Makefile
--- old/xdg-desktop-portal-hyprland-1.1.0/Makefile 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/Makefile 2023-10-10
21:52:22.000000000 +0200
@@ -20,3 +20,4 @@
cp -f ./hyprland.portal ${SHARE}/xdg-desktop-portal/portals/
sed "s|@libexecdir@|${LIBEXEC}|g"
./org.freedesktop.impl.portal.desktop.hyprland.service.in >
${SHARE}/dbus-1/services/org.freedesktop.impl.portal.desktop.hyprland
sed "s|@libexecdir@|${LIBEXEC}|g"
./contrib/systemd/xdg-desktop-portal-hyprland.service.in >
${LIBEXEC}/systemd/user/xdg-desktop-portal-hyprland.service
+ chmod 755 ${LIBEXEC}/xdg-desktop-portal-hyprland
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/README.md
new/xdg-desktop-portal-hyprland-1.2.2/README.md
--- old/xdg-desktop-portal-hyprland-1.1.0/README.md 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/README.md 2023-10-10
21:52:22.000000000 +0200
@@ -1,13 +1,11 @@
# xdg-desktop-portal-hyprland
An [XDG Desktop Portal](https://github.com/flatpak/xdg-desktop-portal) backend
for Hyprland.
-## Building
-```sh
-make all
-```
-
## Installing
```sh
+git clone --recursive https://github.com/hyprwm/xdg-desktop-portal-hyprland
+cd xdg-desktop-portal-hyprland/
+make all
sudo make install
```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/VERSION
new/xdg-desktop-portal-hyprland-1.2.2/VERSION
--- old/xdg-desktop-portal-hyprland-1.1.0/VERSION 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/VERSION 2023-10-10
21:52:22.000000000 +0200
@@ -1 +1 @@
-1.1.0
+1.2.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/hyprland-share-picker/mainpicker.ui
new/xdg-desktop-portal-hyprland-1.2.2/hyprland-share-picker/mainpicker.ui
--- old/xdg-desktop-portal-hyprland-1.1.0/hyprland-share-picker/mainpicker.ui
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/hyprland-share-picker/mainpicker.ui
2023-10-10 21:52:22.000000000 +0200
@@ -66,7 +66,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
- <number>1</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="screens">
<attribute name="title">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/meson.build
new/xdg-desktop-portal-hyprland-1.2.2/meson.build
--- old/xdg-desktop-portal-hyprland-1.1.0/meson.build 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/meson.build 2023-10-10
21:52:22.000000000 +0200
@@ -25,10 +25,11 @@
add_project_arguments(cpp_compiler.get_supported_arguments([
'-Wno-missing-field-initializers',
'-Wno-narrowing',
- '-Wno-pointer-arith',
+ '-Wno-pointer-arith',
'-Wno-unused-parameter',
'-Wno-unused-value',
- '-fpermissive'
+ '-fpermissive',
+ '-Wno-address-of-temporary'
]), language: 'cpp')
conf_data = configuration_data()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/src/core/PortalManager.cpp
new/xdg-desktop-portal-hyprland-1.2.2/src/core/PortalManager.cpp
--- old/xdg-desktop-portal-hyprland-1.1.0/src/core/PortalManager.cpp
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/core/PortalManager.cpp
2023-10-10 21:52:22.000000000 +0200
@@ -11,6 +11,7 @@
#include <sys/poll.h>
#include <sys/mman.h>
#include <fcntl.h>
+#include <unistd.h>
#include <thread>
@@ -169,7 +170,8 @@
uint32_t n_modifiers =
g_pPortalManager->m_sWaylandConnection.dma.formatTableSize / sizeof(struct
fm_entry);
fm_entry* fm_entry = (struct
fm_entry*)g_pPortalManager->m_sWaylandConnection.dma.formatTable;
uint16_t* idx;
- wl_array_for_each(idx, indices) {
+
+ for (idx = (uint16_t*)indices->data; (const char*)idx < (const
char*)indices->data + indices->size; idx++) {
if (*idx >= n_modifiers)
continue;
@@ -241,6 +243,8 @@
}
void CPortalManager::init() {
+ m_iPID = getpid();
+
try {
m_pConnection =
sdbus::createDefaultBusConnection("org.freedesktop.impl.portal.desktop.hyprland");
} catch (std::exception& e) {
@@ -312,20 +316,23 @@
std::thread pollThr([this, &pollfds]() {
while (1) {
- int ret = poll(pollfds, 3, -1);
+ int ret = poll(pollfds, 3, 5 /* 5 seconds, reasonable. It's
because we might need to terminate */);
if (ret < 0) {
Debug::log(CRIT, "[core] Polling fds failed with {}",
strerror(errno));
- exit(1);
+ g_pPortalManager->terminate();
}
for (size_t i = 0; i < 3; ++i) {
if (pollfds[0].revents & POLLHUP) {
Debug::log(CRIT, "[core] Disconnected from pollfd id {}",
i);
- exit(1);
+ g_pPortalManager->terminate();
}
}
- {
+ if (m_bTerminate)
+ break;
+
+ if (ret != 0) {
Debug::log(TRACE, "[core] got poll event");
std::lock_guard<std::mutex>
lg(m_sEventLoopInternals.loopRequestMutex);
m_sEventLoopInternals.shouldProcess = true;
@@ -351,6 +358,9 @@
m_sTimersThread.loopSignal.wait_for(lk,
std::chrono::milliseconds((int)nearest), [this] { return
m_sTimersThread.shouldProcess; });
m_sTimersThread.shouldProcess = false;
+ if (m_bTerminate)
+ break;
+
// awakened. Check if any timers passed
m_mEventLock.lock();
bool notify = false;
@@ -381,6 +391,9 @@
m_sEventLoopInternals.loopRequestMutex.lock(); // lock incoming events
+ if (m_bTerminate)
+ break;
+
m_sEventLoopInternals.shouldProcess = false;
m_mEventLock.lock();
@@ -430,7 +443,17 @@
m_mEventLock.unlock();
}
+ Debug::log(ERR, "[core] Terminated");
+
+ m_sPortals.globalShortcuts.reset();
+ m_sPortals.screencopy.reset();
+
+ m_pConnection.reset();
+ pw_loop_destroy(m_sPipewire.loop);
+ wl_display_disconnect(m_sWaylandConnection.display);
+
m_sTimersThread.thread.release();
+ pollThr.join(); // wait for poll to exit
}
sdbus::IConnection* CPortalManager::getConnection() {
@@ -493,3 +516,20 @@
m_sTimersThread.shouldProcess = true;
m_sTimersThread.loopSignal.notify_all();
}
+
+void CPortalManager::terminate() {
+ m_bTerminate = true;
+
+ // if we don't exit in 5s, we'll kill by force. Nuclear option. PIDs are
not reused in linux until a wrap-around,
+ // and I doubt anyone will make 4.2M PIDs within 5s.
+ if (fork() == 0)
+ execl("/bin/sh", "/bin/sh", "-c", std::format("sleep 5 && kill -9 {}",
m_iPID).c_str(), nullptr);
+
+ {
+ m_sEventLoopInternals.shouldProcess = true;
+ m_sEventLoopInternals.loopSignal.notify_all();
+ }
+
+ m_sTimersThread.shouldProcess = true;
+ m_sTimersThread.loopSignal.notify_all();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/src/core/PortalManager.hpp
new/xdg-desktop-portal-hyprland-1.2.2/src/core/PortalManager.hpp
--- old/xdg-desktop-portal-hyprland-1.1.0/src/core/PortalManager.hpp
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/core/PortalManager.hpp
2023-10-10 21:52:22.000000000 +0200
@@ -71,8 +71,14 @@
gbm_device* createGBMDevice(drmDevice* dev);
+ // terminate after the event loop has been created. Before we can exit()
+ void terminate();
+
private:
- void startEventLoop();
+ void startEventLoop();
+
+ bool m_bTerminate = false;
+ pid_t m_iPID = 0;
struct {
std::condition_variable loopSignal;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/src/helpers/MiscFunctions.cpp
new/xdg-desktop-portal-hyprland-1.2.2/src/helpers/MiscFunctions.cpp
--- old/xdg-desktop-portal-hyprland-1.1.0/src/helpers/MiscFunctions.cpp
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/helpers/MiscFunctions.cpp
2023-10-10 21:52:22.000000000 +0200
@@ -1,5 +1,6 @@
#include "MiscFunctions.hpp"
#include <memory>
+#include <unistd.h>
#include "../helpers/Log.hpp"
std::string execAndGet(const char* cmd) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.1.0/src/meson.build
new/xdg-desktop-portal-hyprland-1.2.2/src/meson.build
--- old/xdg-desktop-portal-hyprland-1.1.0/src/meson.build 2023-09-18
19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/meson.build 2023-10-10
21:52:22.000000000 +0200
@@ -8,6 +8,7 @@
dependency('libdrm'),
dependency('libpipewire-0.3'),
dependency('sdbus-c++'),
+ dependency('threads'),
dependency('wayland-client'),
],
include_directories: inc,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/src/portals/Screencopy.cpp
new/xdg-desktop-portal-hyprland-1.2.2/src/portals/Screencopy.cpp
--- old/xdg-desktop-portal-hyprland-1.1.0/src/portals/Screencopy.cpp
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/portals/Screencopy.cpp
2023-10-10 21:52:22.000000000 +0200
@@ -102,6 +102,7 @@
Debug::log(TRACE, "[sc] pw format {} size {}x{}",
(int)PSTREAM->pwVideoInfo.format, PSTREAM->pwVideoInfo.size.width,
PSTREAM->pwVideoInfo.size.height);
Debug::log(TRACE, "[sc] wlr format {} size {}x{}",
(int)PSESSION->sharingData.frameInfoSHM.fmt,
PSESSION->sharingData.frameInfoSHM.w, PSESSION->sharingData.frameInfoSHM.h);
+ Debug::log(TRACE, "[sc] wlr format dma {} size {}x{}",
(int)PSESSION->sharingData.frameInfoDMA.fmt,
PSESSION->sharingData.frameInfoDMA.w, PSESSION->sharingData.frameInfoDMA.h);
const auto FMT = PSTREAM->isDMA ? PSESSION->sharingData.frameInfoDMA.fmt :
PSESSION->sharingData.frameInfoSHM.fmt;
if ((PSTREAM->pwVideoInfo.format != pwFromDrmFourcc(FMT) &&
PSTREAM->pwVideoInfo.format != pwStripAlpha(pwFromDrmFourcc(FMT))) ||
@@ -781,7 +782,7 @@
const spa_pod* pod_modifier = &prop_modifier->value;
uint32_t n_modifiers = SPA_POD_CHOICE_N_VALUES(pod_modifier)
- 1;
- uint64_t* modifiers = SPA_POD_CHOICE_VALUES(pod_modifier);
+ uint64_t* modifiers =
(uint64_t*)SPA_POD_CHOICE_VALUES(pod_modifier);
modifiers++;
uint32_t flags = GBM_BO_USE_RENDERING;
uint64_t modifier;
@@ -853,14 +854,15 @@
params[0] = build_buffer(&dynBuilder[0].b, blocks,
PSTREAM->pSession->sharingData.frameInfoSHM.size,
PSTREAM->pSession->sharingData.frameInfoSHM.stride, data_type);
- params[1] = spa_pod_builder_add_object(&dynBuilder[1].b,
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type,
SPA_POD_Id(SPA_META_Header), SPA_PARAM_META_size,
- SPA_POD_Int(sizeof(struct
spa_meta_header)));
+ params[1] = (const spa_pod*)spa_pod_builder_add_object(&dynBuilder[1].b,
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type,
SPA_POD_Id(SPA_META_Header),
+
SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header)));
- params[2] = spa_pod_builder_add_object(&dynBuilder[1].b,
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type,
SPA_POD_Id(SPA_META_VideoTransform),
- SPA_PARAM_META_size,
SPA_POD_Int(sizeof(struct spa_meta_videotransform)));
+ params[2] = (const spa_pod*)spa_pod_builder_add_object(&dynBuilder[1].b,
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type,
SPA_POD_Id(SPA_META_VideoTransform),
+
SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_videotransform)));
- params[3] = spa_pod_builder_add_object(&dynBuilder[2].b,
SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type,
SPA_POD_Id(SPA_META_VideoDamage), SPA_PARAM_META_size,
-
SPA_POD_CHOICE_RANGE_Int(sizeof(struct spa_meta_region) * 4, sizeof(struct
spa_meta_region) * 1, sizeof(struct spa_meta_region) * 4));
+ params[3] = (const spa_pod*)spa_pod_builder_add_object(
+ &dynBuilder[2].b, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
SPA_PARAM_META_type, SPA_POD_Id(SPA_META_VideoDamage), SPA_PARAM_META_size,
+ SPA_POD_CHOICE_RANGE_Int(sizeof(struct spa_meta_region) * 4,
sizeof(struct spa_meta_region) * 1, sizeof(struct spa_meta_region) * 4));
pw_stream_update_params(PSTREAM->stream, params, 4);
spa_pod_dynamic_builder_clean(&dynBuilder[0]);
@@ -965,7 +967,8 @@
if (!PSTREAM->stream) {
Debug::log(ERR, "[pipewire] refused to create stream");
- exit(1);
+ g_pPortalManager->terminate();
+ return;
}
spa_pod_builder* builder[2] = {&dynBuilder[0].b, &dynBuilder[1].b};
@@ -1019,15 +1022,16 @@
return true;
}
- for (size_t i = 0; i < g_pPortalManager->m_vDMABUFMods.size(); ++i) {
+ size_t i = 0;
+ for (const auto& mod : g_pPortalManager->m_vDMABUFMods) {
if (i >= num_modifiers)
break;
- const auto& mod = g_pPortalManager->m_vDMABUFMods[i];
-
if (mod.fourcc == drm_format &&
- (mod.mod == DRM_FORMAT_MOD_INVALID ||
gbm_device_get_format_modifier_plane_count(g_pPortalManager->m_sWaylandConnection.gbmDevice,
mod.fourcc, mod.mod) > 0))
+ (mod.mod == DRM_FORMAT_MOD_INVALID ||
gbm_device_get_format_modifier_plane_count(g_pPortalManager->m_sWaylandConnection.gbmDevice,
mod.fourcc, mod.mod) > 0)) {
modifiers[i] = mod.mod;
+ ++i;
+ }
}
*max_modifiers = num_modifiers;
@@ -1074,6 +1078,9 @@
stream->pSession->sharingData.frameInfoSHM.h,
stream->pSession->sharingData.framerate, NULL, 0);
}
+ if (modifiers)
+ free(modifiers);
+
return paramCount;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-hyprland-1.1.0/src/shared/ScreencopyShared.cpp
new/xdg-desktop-portal-hyprland-1.2.2/src/shared/ScreencopyShared.cpp
--- old/xdg-desktop-portal-hyprland-1.1.0/src/shared/ScreencopyShared.cpp
2023-09-18 19:10:57.000000000 +0200
+++ new/xdg-desktop-portal-hyprland-1.2.2/src/shared/ScreencopyShared.cpp
2023-10-10 21:52:22.000000000 +0200
@@ -132,7 +132,7 @@
case DRM_FORMAT_ABGR2101010:
case DRM_FORMAT_RGBA1010102:
case DRM_FORMAT_BGRA1010102: return (wl_shm_format)format;
- default: Debug::log(ERR, "[screencopy] Unknown format {}", format);
exit(1);
+ default: Debug::log(ERR, "[screencopy] Unknown format {}", format);
abort();
}
}
@@ -155,7 +155,7 @@
case WL_SHM_FORMAT_ABGR2101010:
case WL_SHM_FORMAT_RGBA1010102:
case WL_SHM_FORMAT_BGRA1010102: return (uint32_t)format;
- default: Debug::log(ERR, "[screencopy] Unknown format {}",
(int)format); exit(1);
+ default: Debug::log(ERR, "[screencopy] Unknown format {}",
(int)format); abort();
}
}
@@ -178,7 +178,7 @@
case DRM_FORMAT_ABGR2101010: return SPA_VIDEO_FORMAT_ABGR_210LE;
case DRM_FORMAT_RGBA1010102: return SPA_VIDEO_FORMAT_RGBA_102LE;
case DRM_FORMAT_BGRA1010102: return SPA_VIDEO_FORMAT_BGRA_102LE;
- default: Debug::log(ERR, "[screencopy] Unknown format {}",
(int)format); exit(1);
+ default: Debug::log(ERR, "[screencopy] Unknown format {}",
(int)format); abort();
}
}