From 2a0729f842638c61ac7a58d95fcc15c2441782ba Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Wed, 31 Jul 2024 08:28:40 -0700 Subject: [PATCH 01/58] chore: Add missing logo file --- repo_content/logo.png | Bin 0 -> 54981 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 repo_content/logo.png diff --git a/repo_content/logo.png b/repo_content/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d76d0d7e56b85165868839e23761e68f2bea8b54 GIT binary patch literal 54981 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 K<@|e=Z~i|m05xs^ literal 0 HcmV?d00001 From 1bee53417e0dff70fc8ccea06512867008a2d91b Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:35:23 -0700 Subject: [PATCH 02/58] chore: Update Mangohud spec --- spec_files/mangohud/mangohud.spec | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/spec_files/mangohud/mangohud.spec b/spec_files/mangohud/mangohud.spec index 21f8533a2c..ec080d170c 100644 --- a/spec_files/mangohud/mangohud.spec +++ b/spec_files/mangohud/mangohud.spec @@ -24,11 +24,6 @@ %bcond_without tests %endif -# Disable unpackaged files check for 32-bit builds shipping with conflicting files -%if %{__isa_bits} != 64 - %define _unpackaged_files_terminate_build 0 -%endif - Name: mangohud Version: 100.0.7.2 Release: %autorelease @@ -157,19 +152,18 @@ sed -i "s@#!/usr/bin/env python@#!/usr/bin/python3@" \ %files %license LICENSE %doc README.md -%if %{__isa_bits} == 64 %{_bindir}/%{name}* %{_bindir}/mangoapp %{_bindir}/mangoplot %{_datadir}/icons/hicolor/scalable/*/*.svg +%{_datadir}/vulkan/implicit_layer.d/*Mango*.json %{_docdir}/%{name}/%{appname}.conf.example %{_docdir}/%{name}/presets.conf.example +%{_libdir}/%{name}/ %{_mandir}/man1/%{name}.1* %{_mandir}/man1/mangoapp.1* %{_metainfodir}/*.metainfo.xml -%endif -%{_datadir}/vulkan/implicit_layer.d/*Mango*.json -%{_libdir}/%{name}/ + %changelog * Mon Oct 02 2023 Artem Polishchuk - 0.7.0-6 @@ -325,4 +319,3 @@ sed -i "s@#!/usr/bin/env python@#!/usr/bin/python3@" \ gasinvein Vitaly Zaitsev - From 3354b6658de128086d7b91a9242c0599e1592d65 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:40:01 -0700 Subject: [PATCH 03/58] chore: Update to gamescope 3.14.26 --- spec_files/gamescope/1231.patch | 239 --------------------------- spec_files/gamescope/chimeraos.patch | 27 --- spec_files/gamescope/gamescope.spec | 10 +- 3 files changed, 2 insertions(+), 274 deletions(-) delete mode 100644 spec_files/gamescope/1231.patch diff --git a/spec_files/gamescope/1231.patch b/spec_files/gamescope/1231.patch deleted file mode 100644 index e21cb0a8ea..0000000000 --- a/spec_files/gamescope/1231.patch +++ /dev/null @@ -1,239 +0,0 @@ -From ab115896be1a448bde0eb7673c26300ea4ca5040 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Sun, 19 May 2024 20:15:36 -0400 -Subject: [PATCH 1/2] QueuePresent: canBypassXWayland(): fetch multiple xcb - cookies initially before waiting on any of them - ---- - layer/VkLayer_FROG_gamescope_wsi.cpp | 1 + - layer/xcb_helpers.hpp | 105 +++++++++++++++++++++++---- - 2 files changed, 93 insertions(+), 13 deletions(-) - -diff --git a/layer/VkLayer_FROG_gamescope_wsi.cpp b/layer/VkLayer_FROG_gamescope_wsi.cpp -index 5844c2a63..ca44849f2 100644 ---- a/layer/VkLayer_FROG_gamescope_wsi.cpp -+++ b/layer/VkLayer_FROG_gamescope_wsi.cpp -@@ -975,6 +975,7 @@ namespace GamescopeWSILayer { - continue; - } - -+ xcb::Prefetcher prefetcher(gamescopeSurface->connection, gamescopeSurface->window); - const bool canBypass = gamescopeSurface->canBypassXWayland(); - if (canBypass != gamescopeSwapchain->isBypassingXWayland) - UpdateSwapchainResult(canBypass ? VK_SUBOPTIMAL_KHR : VK_ERROR_OUT_OF_DATE_KHR); -diff --git a/layer/xcb_helpers.hpp b/layer/xcb_helpers.hpp -index 8fac5635b..72d0ec092 100644 ---- a/layer/xcb_helpers.hpp -+++ b/layer/xcb_helpers.hpp -@@ -4,22 +4,106 @@ - #include - #include - #include -+#include - - namespace xcb { -+ inline static constinit pthread_t g_cache_tid; //incase g_cache could otherwise be accessed by one thread, while it is being deleted by another thread -+ inline static constinit struct cookie_cache_t { -+ xcb_window_t window; -+ std::tuple cached_cookies; -+ std::tuple cached_replies; -+ } g_cache = {}; -+ -+ //Note: this class is currently only meant to be used within GamescopeWSILayer::VkDeviceOverrides::QueuePresentKHR: -+ struct Prefetcher { -+ explicit Prefetcher(xcb_connection_t* connection, const xcb_window_t window) { -+ g_cache = { -+ .window = window, -+ .cached_cookies = { -+ xcb_get_geometry(connection, window), -+ xcb_query_tree(connection, window) -+ } -+ }; -+ g_cache_tid = pthread_self(); -+ } - -+ ~Prefetcher() { -+ g_cache_tid = {}; -+ free(std::get<0>(g_cache.cached_replies)); -+ free(std::get<1>(g_cache.cached_replies)); -+ g_cache.cached_replies = {nullptr,nullptr}; -+ } -+ }; -+ - struct ReplyDeleter { -+ const bool m_bOwning = true; -+ consteval ReplyDeleter(bool bOwning = true) : m_bOwning{bOwning} {} - template - void operator()(T* ptr) const { -- free(const_cast*>(ptr)); -+ if (m_bOwning) -+ free(const_cast*>(ptr)); - } - }; - - template - using Reply = std::unique_ptr; -+ -+ template -+ class XcbFetch { -+ using cookie_f_ptr_t = Cookie_RetType (*)(XcbConn, Args...); -+ using reply_f_ptr_t = Reply_RetType* (*)(XcbConn, Cookie_RetType, xcb_generic_error_t**); -+ -+ const cookie_f_ptr_t m_cookieFunc; -+ const reply_f_ptr_t m_replyFunc; -+ -+ public: -+ consteval XcbFetch(cookie_f_ptr_t cookieFunc, reply_f_ptr_t replyFunc) : m_cookieFunc{cookieFunc}, m_replyFunc{replyFunc} {} -+ -+ inline Reply operator()(XcbConn conn, auto... args) { //have to use auto for argsTwo, since otherwise there'd be a type deduction conflict -+ return Reply { m_replyFunc(conn, m_cookieFunc(conn, args...), nullptr) }; -+ } -+ }; -+ -+ template -+ concept CacheableCookie = std::is_same::value -+ || std::is_same::value; -+ -+ template -+ class XcbFetch { -+ using cookie_f_ptr_t = Cookie_RetType (*)(xcb_connection_t*, xcb_window_t); -+ using reply_f_ptr_t = Reply_RetType* (*)(xcb_connection_t*, Cookie_RetType, xcb_generic_error_t**); -+ -+ const cookie_f_ptr_t m_cookieFunc; -+ const reply_f_ptr_t m_replyFunc; -+ -+ inline Reply getCachedReply(xcb_connection_t* connection) { -+ if (std::get(g_cache.cached_replies) == nullptr) { -+ std::get(g_cache.cached_replies) = m_replyFunc(connection, std::get(g_cache.cached_cookies), nullptr); -+ } - -+ return Reply{std::get(g_cache.cached_replies), ReplyDeleter{false}}; // return 'non-owning' unique_ptr -+ } -+ -+ public: -+ consteval XcbFetch(cookie_f_ptr_t cookieFunc, reply_f_ptr_t replyFunc) : m_cookieFunc{cookieFunc}, m_replyFunc{replyFunc} {} -+ -+ inline Reply operator()(xcb_connection_t* conn, xcb_window_t window) { -+ const bool tryCached = pthread_equal(g_cache_tid, pthread_self()) -+ && g_cache.window == window; -+ if (!tryCached) [[unlikely]] -+ return Reply { m_replyFunc(conn, m_cookieFunc(conn, window), nullptr) }; -+ -+ auto ret = getCachedReply(conn); -+ #if !defined(NDEBUG) || NDEBUG == 0 -+ if (!ret) -+ fprintf(stderr, "[Gamescope WSI] getCachedReply() failed.\n"); -+ #endif -+ return ret; -+ } -+ }; -+ - static std::optional getAtom(xcb_connection_t* connection, std::string_view name) { -- xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, false, name.length(), name.data()); -- auto reply = Reply{ xcb_intern_atom_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_intern_atom, xcb_intern_atom_reply}(connection, false, name.length(), name.data()); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] Failed to get xcb atom.\n"); - return std::nullopt; -@@ -34,8 +118,7 @@ namespace xcb { - - xcb_screen_t* screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data; - -- xcb_get_property_cookie_t cookie = xcb_get_property(connection, false, screen->root, atom, XCB_ATOM_CARDINAL, 0, sizeof(T) / sizeof(uint32_t)); -- auto reply = Reply{ xcb_get_property_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_get_property, xcb_get_property_reply}(connection, false, screen->root, atom, XCB_ATOM_CARDINAL, 0, sizeof(T) / sizeof(uint32_t)); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] Failed to read T root window property.\n"); - return std::nullopt; -@@ -61,8 +144,7 @@ namespace xcb { - - static std::optional getToplevelWindow(xcb_connection_t* connection, xcb_window_t window) { - for (;;) { -- xcb_query_tree_cookie_t cookie = xcb_query_tree(connection, window); -- auto reply = Reply{ xcb_query_tree_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_query_tree, xcb_query_tree_reply}(connection, window); - - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getToplevelWindow: xcb_query_tree failed for window 0x%x.\n", window); -@@ -77,8 +159,7 @@ namespace xcb { - } - - static std::optional getWindowRect(xcb_connection_t* connection, xcb_window_t window) { -- xcb_get_geometry_cookie_t cookie = xcb_get_geometry(connection, window); -- auto reply = Reply{ xcb_get_geometry_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_get_geometry, xcb_get_geometry_reply}(connection, window); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getWindowRect: xcb_get_geometry failed for window 0x%x.\n", window); - return std::nullopt; -@@ -112,8 +193,7 @@ namespace xcb { - static std::optional getLargestObscuringChildWindowSize(xcb_connection_t* connection, xcb_window_t window) { - VkExtent2D largestExtent = {}; - -- xcb_query_tree_cookie_t cookie = xcb_query_tree(connection, window); -- auto reply = Reply{ xcb_query_tree_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_query_tree, xcb_query_tree_reply}(connection, window); - - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getLargestObscuringWindowSize: xcb_query_tree failed for window 0x%x.\n", window); -@@ -130,8 +210,7 @@ namespace xcb { - for (uint32_t i = 0; i < reply->children_len; i++) { - xcb_window_t child = children[i]; - -- xcb_get_window_attributes_cookie_t attributeCookie = xcb_get_window_attributes(connection, child); -- auto attributeReply = Reply{ xcb_get_window_attributes_reply(connection, attributeCookie, nullptr) }; -+ auto attributeReply = XcbFetch{xcb_get_window_attributes, xcb_get_window_attributes_reply}(connection, child); - - const bool obscuring = - attributeReply && - -From 1b59621f4de5c05096d1f279cba2e04264124154 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Tue, 18 Jun 2024 22:21:23 -0400 -Subject: [PATCH 2/2] WSI: prefetcher: fix issue w/ attempting to prefetch xcb - stuff for pure wayland surfaces - ---- - layer/VkLayer_FROG_gamescope_wsi.cpp | 2 +- - layer/xcb_helpers.hpp | 9 ++++++++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/layer/VkLayer_FROG_gamescope_wsi.cpp b/layer/VkLayer_FROG_gamescope_wsi.cpp -index f26819a60..ce011dcd7 100644 ---- a/layer/VkLayer_FROG_gamescope_wsi.cpp -+++ b/layer/VkLayer_FROG_gamescope_wsi.cpp -@@ -1234,7 +1234,7 @@ namespace GamescopeWSILayer { - continue; - } - -- xcb::Prefetcher prefetcher(gamescopeSurface->connection, gamescopeSurface->window); -+ auto prefetcher = xcb::Prefetcher::GetPrefetcherIf(!gamescopeSurface->isWayland(), gamescopeSurface->connection, gamescopeSurface->window); - const bool canBypass = gamescopeSurface->canBypassXWayland(); - if (canBypass != gamescopeSwapchain->isBypassingXWayland) - UpdateSwapchainResult(canBypass ? VK_SUBOPTIMAL_KHR : VK_ERROR_OUT_OF_DATE_KHR); -diff --git a/layer/xcb_helpers.hpp b/layer/xcb_helpers.hpp -index 72d0ec092..f26aef38b 100644 ---- a/layer/xcb_helpers.hpp -+++ b/layer/xcb_helpers.hpp -@@ -16,6 +16,13 @@ namespace xcb { - - //Note: this class is currently only meant to be used within GamescopeWSILayer::VkDeviceOverrides::QueuePresentKHR: - struct Prefetcher { -+ static std::optional GetPrefetcherIf(bool bCond, xcb_connection_t* connection, const xcb_window_t window) { -+ if (bCond) -+ return std::optional(std::in_place_t{}, connection, window); -+ -+ return std::nullopt; -+ } -+ - explicit Prefetcher(xcb_connection_t* connection, const xcb_window_t window) { - g_cache = { - .window = window, -@@ -90,7 +97,7 @@ namespace xcb { - inline Reply operator()(xcb_connection_t* conn, xcb_window_t window) { - const bool tryCached = pthread_equal(g_cache_tid, pthread_self()) - && g_cache.window == window; -- if (!tryCached) [[unlikely]] -+ if (!tryCached) - return Reply { m_replyFunc(conn, m_cookieFunc(conn, window), nullptr) }; - - auto ret = getCachedReply(conn); diff --git a/spec_files/gamescope/chimeraos.patch b/spec_files/gamescope/chimeraos.patch index 80cc642b3d..9a6b2ecdd5 100644 --- a/spec_files/gamescope/chimeraos.patch +++ b/spec_files/gamescope/chimeraos.patch @@ -1944,33 +1944,6 @@ index 10c0a75..1bc9008 100644 2.45.2 -From 7865b34c5cd61fa5cc5428ace614e4551fabb6ec Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Joaqu=C3=ADn=20Ignacio=20Aramend=C3=ADa?= - -Date: Tue, 9 Jul 2024 18:29:16 -0300 -Subject: [PATCH 20/22] disable explicit sync to avoid graphical artifacts - ---- - src/Backends/DRMBackend.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 9df20ae..ff1858b 100644 ---- a/src/Backends/DRMBackend.cpp -+++ b/src/Backends/DRMBackend.cpp -@@ -68,7 +68,7 @@ gamescope::ConVar cv_drm_debug_disable_blend_tf( "drm_debug_disable_blend_ - gamescope::ConVar cv_drm_debug_disable_ctm( "drm_debug_disable_ctm", false, "CTM chicken bit. (Forces CTM off, does not affect other logic)" ); - gamescope::ConVar cv_drm_debug_disable_color_encoding( "drm_debug_disable_color_encoding", false, "YUV Color Encoding chicken bit. (Forces COLOR_ENCODING to DEFAULT, does not affect other logic)" ); - gamescope::ConVar cv_drm_debug_disable_color_range( "drm_debug_disable_color_range", false, "YUV Color Range chicken bit. (Forces COLOR_RANGE to DEFAULT, does not affect other logic)" ); --gamescope::ConVar cv_drm_debug_disable_explicit_sync( "drm_debug_disable_explicit_sync", false, "Force disable explicit sync on the DRM backend." ); -+gamescope::ConVar cv_drm_debug_disable_explicit_sync( "drm_debug_disable_explicit_sync", true, "Force disable explicit sync on the DRM backend." ); - gamescope::ConVar cv_drm_debug_disable_in_fence_fd( "drm_debug_disable_in_fence_fd", false, "Force disable IN_FENCE_FD being set to avoid over-synchronization on the DRM backend." ); - - // HACK: --- -2.45.2 - - From 1dbcfed76f4b80d8a9f6570819b5af7917c786fc Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Tue, 2 Jul 2024 14:12:47 -0700 diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 68a4c0f15d..d1693bbd39 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -2,7 +2,7 @@ %global _default_patch_fuzz 2 %global build_timestamp %(date +"%Y%m%d") -%global gamescope_tag 3.14.24 +%global gamescope_tag 3.14.26 Name: gamescope Version: 100.%{gamescope_tag} @@ -22,14 +22,8 @@ Patch1: chimeraos.patch # https://hhd.dev/ Patch2: disable-steam-touch-click-atom.patch Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch -# https://github.com/ValveSoftware/gamescope/pull/1281 -Patch4: deckhd.patch # https://github.com/ValveSoftware/gamescope/issues/1398 -Patch5: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch -# https://github.com/ValveSoftware/gamescope/issues/1369 -Patch6: revert-299bc34.patch -# https://github.com/ValveSoftware/gamescope/pull/1231 -Patch7: 1231.patch +Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch # Temporary until newer tag than 3.14.24 Patch8: upstream.patch From 6f78a4c67eadf3c59e107cc2a25ddd2032ff3269 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:40:12 -0700 Subject: [PATCH 04/58] chore: Remove unneeded patch file --- spec_files/gamescope/revert-299bc34.patch | 65 ----------------------- 1 file changed, 65 deletions(-) delete mode 100644 spec_files/gamescope/revert-299bc34.patch diff --git a/spec_files/gamescope/revert-299bc34.patch b/spec_files/gamescope/revert-299bc34.patch deleted file mode 100644 index 550870fe82..0000000000 --- a/spec_files/gamescope/revert-299bc34.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index d7498e5..d1800a8 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -3271,7 +3271,7 @@ found:; - if ( window_has_commits( focus ) ) - out->focusWindow = focus; - else -- focus->outdatedInteractiveFocus = true; -+ out->outdatedInteractiveFocus = true; - - // Always update X's idea of focus, but still dirty - // the it being outdated so we can resolve that globally later. -@@ -5995,28 +5995,37 @@ bool handle_done_commit( steamcompmgr_win_t *w, xwayland_ctx_t *ctx, uint64_t co - // Window just got a new available commit, determine if that's worth a repaint - - // If this is an overlay that we're presenting, repaint -- if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT ) -+ if ( gameFocused ) - { -- hasRepaintNonBasePlane = true; -- } -+ if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } - -- if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT ) -- { -- hasRepaintNonBasePlane = true; -+ if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } - } -- -- // If this is an external overlay, repaint -- if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT ) -+ if ( ctx ) - { -- hasRepaintNonBasePlane = true; -+ if ( ctx->focus.outdatedInteractiveFocus ) -+ { -+ MakeFocusDirty(); -+ ctx->focus.outdatedInteractiveFocus = false; -+ } - } -- -- if ( w->outdatedInteractiveFocus ) -+ if ( global_focus.outdatedInteractiveFocus ) - { - MakeFocusDirty(); -- w->outdatedInteractiveFocus = false; -- } -+ global_focus.outdatedInteractiveFocus = false; - -+ // If this is an external overlay, repaint -+ if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } -+ } - // If this is the main plane, repaint - if ( w == global_focus.focusWindow && !w->isSteamStreamingClient ) - { From 8dbce041105f4df5280d9b32d57eec9289215572 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:50:36 -0700 Subject: [PATCH 05/58] chore: Drop upstream patch for gamescope --- spec_files/gamescope/gamescope.spec | 3 - spec_files/gamescope/upstream.patch | 3602 --------------------------- 2 files changed, 3605 deletions(-) delete mode 100644 spec_files/gamescope/upstream.patch diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index d1693bbd39..32d173aecd 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -25,9 +25,6 @@ Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch -# Temporary until newer tag than 3.14.24 -Patch8: upstream.patch - BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build BuildRequires: cmake diff --git a/spec_files/gamescope/upstream.patch b/spec_files/gamescope/upstream.patch deleted file mode 100644 index 3b77c8d019..0000000000 --- a/spec_files/gamescope/upstream.patch +++ /dev/null @@ -1,3602 +0,0 @@ -From 261dc46d54aa1c7f5a7363807c39ae1f26b3ab49 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 14:51:16 +0100 -Subject: [PATCH 01/19] Utils: Add small Algorithm helper file - ---- - src/Utils/Algorithm.h | 173 ++++++++++++++++++++++++++++++++++++++++++ - src/color_bench.cpp | 137 +++++++++++++++++++++++++++++++++ - 2 files changed, 310 insertions(+) - create mode 100644 src/Utils/Algorithm.h - -diff --git a/src/Utils/Algorithm.h b/src/Utils/Algorithm.h -new file mode 100644 -index 0000000..7290367 ---- /dev/null -+++ b/src/Utils/Algorithm.h -@@ -0,0 +1,173 @@ -+#pragma once -+ -+#include -+#include -+ -+namespace gamescope::Algorithm -+{ -+ template -+ constexpr TObj *Begin( std::span span ) -+ { -+ return span.data(); -+ } -+ -+ template -+ constexpr TObj *End( std::span span ) -+ { -+ return Begin( span ) + span.size(); -+ } -+ -+ template -+ constexpr TIter FindSimple( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ while ( pFirst != pEnd && *pFirst != obj ) -+ ++pFirst; -+ -+ return pFirst; -+ } -+ -+ template -+ constexpr TIter FindByFour( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ typename std::iterator_traits< TIter >::difference_type ulTripCount = ( pEnd - pFirst ) >> 2; -+ -+ while ( ulTripCount-- > 0 ) -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ if ( pFirst[2] == obj ) -+ return &pFirst[2]; -+ -+ if ( pFirst[3] == obj ) -+ return &pFirst[3]; -+ -+ pFirst += 4; -+ } -+ -+ switch ( pEnd - pFirst ) -+ { -+ case 3: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ if ( pFirst[2] == obj ) -+ return &pFirst[2]; -+ -+ return pEnd; -+ } -+ case 2: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ return pEnd; -+ } -+ case 1: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ return pEnd; -+ } -+ case 0: -+ { -+ return pEnd; -+ } -+ default: -+ { -+ __builtin_unreachable(); -+ } -+ } -+ } -+ -+ template -+ constexpr TIter Find( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return FindSimple( pFirst, pEnd, obj ); -+ } -+ -+ template -+ constexpr TIter Find( std::span span, const TObj &obj ) -+ { -+ return Find( Begin( span ), End( span ), obj ); -+ } -+ -+ template -+ constexpr bool ContainsShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return Find( pFirst, pEnd, obj ) != pEnd; -+ } -+ -+ template -+ constexpr bool ContainsNoShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ bool bFound = false; -+ -+ typename std::iterator_traits< TIter >::difference_type ulTripCount = ( pEnd - pFirst ) >> 2; -+ -+ while ( ulTripCount-- > 0 ) -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj || -+ pFirst[2] == obj || -+ pFirst[3] == obj; -+ -+ pFirst += 4; -+ } -+ -+ switch ( pEnd - pFirst ) -+ { -+ case 3: -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj || -+ pFirst[2] == obj; -+ break; -+ } -+ case 2: -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj; -+ break; -+ } -+ case 1: -+ { -+ bFound |= pFirst[0] == obj; -+ break; -+ } -+ case 0: -+ { -+ break; -+ } -+ default: -+ { -+ __builtin_unreachable(); -+ } -+ } -+ -+ return bFound; -+ } -+ -+ template -+ constexpr bool Contains( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return ContainsNoShortcut( pFirst, pEnd, obj ); -+ } -+ -+ template -+ constexpr bool Contains( std::span span, const TObj &obj ) -+ { -+ return Contains( Begin( span ), End( span ), obj ); -+ } -+} -diff --git a/src/color_bench.cpp b/src/color_bench.cpp -index 33dff78..9c9d986 100644 ---- a/src/color_bench.cpp -+++ b/src/color_bench.cpp -@@ -1,5 +1,9 @@ -+#include - #include - -+#include -+#include "Utils/Algorithm.h" -+ - #include "color_helpers.h" - - const uint32_t nLutSize1d = 4096; -@@ -74,4 +78,137 @@ static void BenchmarkCalcColorTransforms(benchmark::State &state) - } - BENCHMARK(BenchmarkCalcColorTransforms); - -+static constexpr uint32_t k_uFindTestValueCountLarge = 524288; -+static constexpr uint32_t k_uFindTestValueCountMedium = 16; -+static constexpr uint32_t k_uFindTestValueCountSmall = 5; -+ -+template -+static __attribute__((noinline)) std::array GetFindTestValues() -+{ -+ static std::array s_Values = []() -+ { -+ std::array values; -+ for ( uint32_t i = 0; i < uSize; i++ ) -+ values[i] = rand() % 255; -+ -+ return values; -+ }(); -+ -+ return s_Values; -+} -+ -+// Large -+ -+static void Benchmark_Find_Large_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Large_Gamescope); -+ -+static void Benchmark_Find_Large_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Large_Std); -+ -+static void Benchmark_Contains_Large_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Large_Gamescope); -+ -+// -+ -+static void Benchmark_Find_Medium_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Medium_Gamescope); -+ -+static void Benchmark_Find_Medium_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Medium_Std); -+ -+static void Benchmark_Contains_Medium_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Medium_Gamescope); -+ -+// -+ -+static void Benchmark_Find_Small_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Small_Gamescope); -+ -+static void Benchmark_Find_Small_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Small_Std); -+ -+static void Benchmark_Contains_Small_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Small_Gamescope); -+ - BENCHMARK_MAIN(); --- -2.45.2 - - -From 74a020865906414f9d4374fa5568fffce71e4027 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 14:52:02 +0100 -Subject: [PATCH 02/19] Utils: Use Contains in CloseAllFds - ---- - src/Utils/Process.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Utils/Process.cpp b/src/Utils/Process.cpp -index 5688fb1..32c52f1 100644 ---- a/src/Utils/Process.cpp -+++ b/src/Utils/Process.cpp -@@ -1,4 +1,5 @@ - #include "Process.h" -+#include "../Utils/Algorithm.h" - #include "../convar.h" - #include "../log.hpp" - #include "../Utils/Defer.h" -@@ -268,7 +269,7 @@ namespace gamescope::Process - - int nFd = *onFd; - -- bool bExcluded = std::find( nExcludedFds.begin(), nExcludedFds.end(), nFd ) != nExcludedFds.end(); -+ bool bExcluded = Algorithm::Contains( nExcludedFds, nFd ); - if ( bExcluded ) - continue; - --- -2.45.2 - - -From 3c5a232269ef8adef56423bf9b2bb48cb5c0cd1d Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 15:52:33 +0100 -Subject: [PATCH 03/19] steamcompmgr: Only forward relative mouse mode if we - have a cursor constraint - ---- - src/steamcompmgr.cpp | 13 ++++++------- - src/wlserver.cpp | 32 +++++++++++++++++++------------- - src/wlserver.hpp | 26 +++++++++++++++++++++++++- - 3 files changed, 50 insertions(+), 21 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 9ee265d..f051463 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -682,7 +682,6 @@ constexpr const T& clamp( const T& x, const T& min, const T& max ) - } - - extern bool g_bForceRelativeMouse; --bool bSteamCompMgrGrab = false; - - CommitDoneList_t g_steamcompmgr_xdg_done_commits; - -@@ -7116,8 +7115,6 @@ steamcompmgr_main(int argc, char **argv) - // Reset getopt() state - optind = 1; - -- bSteamCompMgrGrab = GetBackend()->GetNestedHints() && g_bForceRelativeMouse; -- - int o; - int opt_index = -1; - bool bForceWindowsFullscreen = false; -@@ -7574,13 +7571,15 @@ steamcompmgr_main(int argc, char **argv) - - if ( GetBackend()->GetNestedHints() && !g_bForceRelativeMouse ) - { -- bool bImageEmpty = -+ const bool bImageEmpty = - ( global_focus.cursor && global_focus.cursor->imageEmpty() ) && - ( !window_is_steam( global_focus.inputFocusWindow ) ); - -- if ( GetBackend()->GetNestedHints() ) -- GetBackend()->GetNestedHints()->SetRelativeMouseMode( bImageEmpty ); -- bSteamCompMgrGrab = GetBackend()->GetNestedHints() && bImageEmpty; -+ const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed -+ -+ const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint; -+ -+ GetBackend()->GetNestedHints()->SetRelativeMouseMode( bRelativeMouseMode ); - } - - static int nIgnoredOverlayRepaints = 0; -diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index ee6891d..1852be9 100644 ---- a/src/wlserver.cpp -+++ b/src/wlserver.cpp -@@ -225,7 +225,8 @@ std::optional PrepareCommit( struct wlr_surface *surf, struct wl - - struct wlr_surface *pConstraintSurface = wlserver_surface_to_main_surface( surf ); - -- if ( wlserver.mouse_constraint && wlserver.mouse_constraint->surface == pConstraintSurface ) -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ if ( pConstraint && pConstraint->surface == pConstraintSurface ) - wlserver_update_cursor_constraint(); - - return oNewEntry; -@@ -2235,7 +2236,7 @@ struct GamescopePointerConstraint - - static void wlserver_warp_to_constraint_hint() - { -- struct wlr_pointer_constraint_v1 *pConstraint = wlserver.mouse_constraint; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); - - if (pConstraint->current.cursor_hint.enabled) - { -@@ -2248,7 +2249,7 @@ static void wlserver_warp_to_constraint_hint() - - static void wlserver_update_cursor_constraint() - { -- struct wlr_pointer_constraint_v1 *pConstraint = wlserver.mouse_constraint; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); - pixman_region32_t *pRegion = &pConstraint->region; - - if ( wlserver.mouse_constraint_requires_warp && pConstraint->surface ) -@@ -2278,27 +2279,29 @@ static void wlserver_update_cursor_constraint() - - static void wlserver_constrain_cursor( struct wlr_pointer_constraint_v1 *pNewConstraint ) - { -- if ( wlserver.mouse_constraint == pNewConstraint ) -+ struct wlr_pointer_constraint_v1 *pOldConstraint = wlserver.GetCursorConstraint(); -+ -+ if ( pOldConstraint == pNewConstraint ) - return; - -- if ( wlserver.mouse_constraint ) -+ if ( pOldConstraint ) - { - if ( !pNewConstraint ) - wlserver_warp_to_constraint_hint(); - -- wlr_pointer_constraint_v1_send_deactivated(wlserver.mouse_constraint); -+ wlr_pointer_constraint_v1_send_deactivated( pOldConstraint ); - } - -- wlserver.mouse_constraint = pNewConstraint; -+ wlserver.SetMouseConstraint( pNewConstraint ); - -- if ( !wlserver.mouse_constraint ) -+ if ( !pNewConstraint ) - return; - - wlserver.mouse_constraint_requires_warp = true; - - wlserver_update_cursor_constraint(); - -- wlr_pointer_constraint_v1_send_activated( wlserver.mouse_constraint ); -+ wlr_pointer_constraint_v1_send_activated( pNewConstraint ); - } - - static void handle_pointer_constraint_set_region(struct wl_listener *listener, void *data) -@@ -2316,11 +2319,12 @@ void handle_constraint_destroy(struct wl_listener *listener, void *data) - wl_list_remove(&pGamescopeConstraint->set_region.link); - wl_list_remove(&pGamescopeConstraint->destroy.link); - -- if (wlserver.mouse_constraint == pGamescopeConstraint->pConstraint) -+ struct wlr_pointer_constraint_v1 *pCurrentConstraint = wlserver.GetCursorConstraint(); -+ if ( pCurrentConstraint == pGamescopeConstraint->pConstraint ) - { - wlserver_warp_to_constraint_hint(); - -- wlserver.mouse_constraint = nullptr; -+ wlserver.SetMouseConstraint( nullptr ); - } - - delete pGamescopeConstraint; -@@ -2345,9 +2349,11 @@ static void handle_pointer_constraint(struct wl_listener *listener, void *data) - - static bool wlserver_apply_constraint( double *dx, double *dy ) - { -- if ( wlserver.mouse_constraint ) -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ -+ if ( pConstraint ) - { -- if ( wlserver.mouse_constraint->type == WLR_POINTER_CONSTRAINT_V1_LOCKED ) -+ if ( pConstraint->type == WLR_POINTER_CONSTRAINT_V1_LOCKED ) - return false; - - double sx = wlserver.mouse_surface_cursorx; -diff --git a/src/wlserver.hpp b/src/wlserver.hpp -index db7d491..467c54d 100644 ---- a/src/wlserver.hpp -+++ b/src/wlserver.hpp -@@ -70,6 +70,8 @@ struct ResListEntry_t { - - struct wlserver_content_override; - -+bool wlserver_is_lock_held(void); -+ - class gamescope_xwayland_server_t - { - public: -@@ -149,7 +151,29 @@ struct wlserver_t { - double mouse_surface_cursory = 0.0f; - bool mouse_constraint_requires_warp = false; - pixman_region32_t confine; -- struct wlr_pointer_constraint_v1 *mouse_constraint = nullptr; -+ std::atomic mouse_constraint = { nullptr }; -+ -+ void SetMouseConstraint( struct wlr_pointer_constraint_v1 *pConstraint ) -+ { -+ assert( wlserver_is_lock_held() ); -+ // Set by wlserver only. Read by both wlserver + steamcompmgr with no -+ // need to actually be sequentially consistent. -+ mouse_constraint.store( pConstraint, std::memory_order_relaxed ); -+ } -+ -+ struct wlr_pointer_constraint_v1 *GetCursorConstraint() const -+ { -+ assert( wlserver_is_lock_held() ); -+ return mouse_constraint.load( std::memory_order_relaxed ); -+ } -+ -+ bool HasMouseConstraint() const -+ { -+ // Does not need to be sequentially consistent. -+ // Used by the steamcompmgr thread to check if there is currently a mouse constraint. -+ return mouse_constraint.load( std::memory_order_relaxed ) != nullptr; -+ } -+ - uint64_t ulLastMovedCursorTime = 0; - bool bCursorHidden = true; - bool bCursorHasImage = true; --- -2.45.2 - - -From 745d0d6a09e53a8481bc94c67e3a3ae5c86c8796 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:21:16 +0100 -Subject: [PATCH 04/19] convar: Add some helpers for std::string convars and - callbacks - ---- - src/convar.h | 34 ++++++++++++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) - -diff --git a/src/convar.h b/src/convar.h -index c08dccb..f2a0485 100644 ---- a/src/convar.h -+++ b/src/convar.h -@@ -20,6 +20,24 @@ namespace gamescope - { - class ConCommand; - -+ template -+ inline std::string ToString( const T &thing ) -+ { -+ return std::to_string( thing ); -+ } -+ -+ template <> -+ inline std::string ToString( const std::string &sThing ) -+ { -+ return sThing; -+ } -+ -+ template <> -+ inline std::string ToString( const std::string_view &svThing ) -+ { -+ return std::string( svThing ); -+ } -+ - template - inline std::optional Parse( std::string_view chars ) - { -@@ -113,11 +131,15 @@ namespace gamescope - { - using ConVarCallbackFunc = std::function; - public: -- ConVar( std::string_view pszName, T defaultValue = T{}, std::string_view pszDescription = "", ConVarCallbackFunc func = nullptr ) -+ ConVar( std::string_view pszName, T defaultValue = T{}, std::string_view pszDescription = "", ConVarCallbackFunc func = nullptr, bool bRunCallbackAtStartup = false ) - : ConCommand( pszName, pszDescription, [this]( std::span pArgs ){ this->InvokeFunc( pArgs ); } ) - , m_Value{ defaultValue } - , m_Callback{ func } - { -+ if ( bRunCallbackAtStartup ) -+ { -+ RunCallback(); -+ } - } - - const T& Get() const -@@ -130,6 +152,11 @@ namespace gamescope - { - m_Value = T{ newValue }; - -+ RunCallback(); -+ } -+ -+ void RunCallback() -+ { - if ( !m_bInCallback && m_Callback ) - { - m_bInCallback = true; -@@ -143,6 +170,9 @@ namespace gamescope - - operator T() const { return m_Value; } - -+ // SFINAE for std::string... -+ operator std::string_view() const { return m_Value; } -+ - template bool operator == ( const J &other ) const { return m_Value == other; } - template bool operator != ( const J &other ) const { return m_Value != other; } - template auto operator <=>( const J &other ) const { return m_Value <=> other; } -@@ -158,7 +188,7 @@ namespace gamescope - { - // We should move to std format for logging and stuff. - // This is kinda gross and grody! -- std::string sValue = std::to_string( m_Value ); -+ std::string sValue = ToString( m_Value ); - console_log.infof( "%.*s: %.*s\n%.*s", - (int)m_pszName.length(), m_pszName.data(), - (int)sValue.length(), sValue.data(), --- -2.45.2 - - -From 69f94d99082f4b0c5e06c384d65705739608ca2f Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:21:30 +0100 -Subject: [PATCH 05/19] Utils: Add helpers for std::vector in our Algorithm - helpers - ---- - src/Utils/Algorithm.h | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/Utils/Algorithm.h b/src/Utils/Algorithm.h -index 7290367..eb51a79 100644 ---- a/src/Utils/Algorithm.h -+++ b/src/Utils/Algorithm.h -@@ -2,6 +2,7 @@ - - #include - #include -+#include - - namespace gamescope::Algorithm - { -@@ -17,6 +18,18 @@ namespace gamescope::Algorithm - return Begin( span ) + span.size(); - } - -+ template -+ constexpr const TObj *Begin( const std::vector &vec ) -+ { -+ return vec.data(); -+ } -+ -+ template -+ constexpr const TObj *End( const std::vector &vec ) -+ { -+ return Begin( vec ) + vec.size(); -+ } -+ - template - constexpr TIter FindSimple( TIter pFirst, TIter pEnd, const TObj &obj ) - { -@@ -103,6 +116,12 @@ namespace gamescope::Algorithm - return Find( Begin( span ), End( span ), obj ); - } - -+ template -+ constexpr TIter Find( const std::vector &vec, const TObj &obj ) -+ { -+ return Find( Begin( vec ), End( vec ), obj ); -+ } -+ - template - constexpr bool ContainsShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) - { -@@ -170,4 +189,10 @@ namespace gamescope::Algorithm - { - return Contains( Begin( span ), End( span ), obj ); - } -+ -+ template -+ constexpr bool Contains( const std::vector &vec, const TObj &obj ) -+ { -+ return Contains( Begin( vec ), End( vec ), obj ); -+ } - } --- -2.45.2 - - -From dade66318d852387bf8f1e91427dc7e2b5511826 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:28:05 +0100 -Subject: [PATCH 06/19] steamcompmgr: Add filter appids for relative mouse mode - ---- - src/steamcompmgr.cpp | 27 ++++++++++++++++++++++++++- - 1 file changed, 26 insertions(+), 1 deletion(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index f051463..b955a0c 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -92,6 +92,7 @@ - #include "commit.h" - #include "BufferMemo.h" - #include "Utils/Process.h" -+#include "Utils/Algorithm.h" - - #if HAVE_AVIF - #include "avif/avif.h" -@@ -7022,6 +7023,24 @@ static gamescope::ConCommand cc_launch( "launch", "Launch an application with th - gamescope::ConVar cv_shutdown_on_primary_child_death( "shutdown_on_primary_child_death", true, "Should gamescope shutdown when the primary application launched in it was shut down?" ); - static LogScope s_LaunchLogScope( "launch" ); - -+static std::vector s_uRelativeMouseFilteredAppids; -+static gamescope::ConVar cv_mouse_relative_filter_appids( "mouse_relative_filter_appids", -+"8400" /* Geometry Wars: Retro Evolved */, -+"Comma separated appids to filter out using relative mouse mode for.", -+[]() -+{ -+ std::vector sFilterAppids = gamescope::Split( cv_mouse_relative_filter_appids, "," ); -+ std::vector uFilterAppids; -+ uFilterAppids.reserve( sFilterAppids.size() ); -+ for ( auto &sFilterAppid : sFilterAppids ) -+ { -+ std::optional ouFilterAppid = gamescope::Parse( sFilterAppid ); -+ uFilterAppids.push_back( *ouFilterAppid ); -+ } -+ -+ s_uRelativeMouseFilteredAppids = std::move( uFilterAppids ); -+}, true); -+ - void LaunchNestedChildren( char **ppPrimaryChildArgv ) - { - std::string sNewPreload; -@@ -7577,7 +7596,13 @@ steamcompmgr_main(int argc, char **argv) - - const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed - -- const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint; -+ uint32_t uAppId = global_focus.inputFocusWindow -+ ? global_focus.inputFocusWindow->appID -+ : 0; -+ -+ const bool bExcludedAppId = uAppId && gamescope::Algorithm::Contains( s_uRelativeMouseFilteredAppids, uAppId ); -+ -+ const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint && !bExcludedAppId; - - GetBackend()->GetNestedHints()->SetRelativeMouseMode( bRelativeMouseMode ); - } --- -2.45.2 - - -From 6c187b7f69d5f7e7d1a01728c1c22e055a1683f6 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 00:53:44 +0100 -Subject: [PATCH 07/19] steamcompmgr: Add adaptive sync convar - ---- - src/Backends/OpenVRBackend.cpp | 1 - - src/Backends/WaylandBackend.cpp | 4 ++-- - src/main.cpp | 4 ++-- - src/steamcompmgr.cpp | 8 ++++---- - 4 files changed, 8 insertions(+), 9 deletions(-) - -diff --git a/src/Backends/OpenVRBackend.cpp b/src/Backends/OpenVRBackend.cpp -index acc84ed..79b05d1 100644 ---- a/src/Backends/OpenVRBackend.cpp -+++ b/src/Backends/OpenVRBackend.cpp -@@ -38,7 +38,6 @@ extern int g_nPreferredOutputWidth; - extern int g_nPreferredOutputHeight; - extern bool g_bForceHDR10OutputDebug; - extern bool g_bBorderlessOutputWindow; --extern bool g_bAllowVRR; - - extern gamescope::ConVar cv_composite_force; - extern bool g_bColorSliderInUse; -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 6f578a2..3603be7 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -40,7 +40,7 @@ extern int g_nPreferredOutputWidth; - extern int g_nPreferredOutputHeight; - extern bool g_bForceHDR10OutputDebug; - extern bool g_bBorderlessOutputWindow; --extern bool g_bAllowVRR; -+extern gamescope::ConVar cv_adaptive_sync; - - extern gamescope::ConVar cv_composite_force; - extern bool g_bColorSliderInUse; -@@ -1531,7 +1531,7 @@ namespace gamescope - } - bool CWaylandBackend::IsVRRActive() const - { -- return g_bAllowVRR && m_bHostCompositorIsCurrentlyVRR; -+ return cv_adaptive_sync && m_bHostCompositorIsCurrentlyVRR; - } - - bool CWaylandBackend::SupportsPlaneHardwareCursor() const -diff --git a/src/main.cpp b/src/main.cpp -index cd4aeca..da1b516 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -42,7 +42,7 @@ - using namespace std::literals; - - EStreamColorspace g_ForcedNV12ColorSpace = k_EStreamColorspace_Unknown; --extern bool g_bAllowVRR; -+extern gamescope::ConVar cv_adaptive_sync; - - const char *gamescope_optstring = nullptr; - const char *g_pOriginalDisplay = nullptr; -@@ -765,7 +765,7 @@ int main(int argc, char **argv) - } else if (strcmp(opt_name, "display-index") == 0) { - g_nNestedDisplayIndex = atoi( optarg ); - } else if (strcmp(opt_name, "adaptive-sync") == 0) { -- g_bAllowVRR = true; -+ cv_adaptive_sync = true; - } else if (strcmp(opt_name, "expose-wayland") == 0) { - g_bExposeWayland = true; - } else if (strcmp(opt_name, "backend") == 0) { -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index b955a0c..b8102eb 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -187,7 +187,7 @@ timespec nanos_to_timespec( uint64_t ulNanos ) - static void - update_runtime_info(); - --bool g_bAllowVRR = false; -+gamescope::ConVar cv_adaptive_sync( "adaptive_sync", false, "Whether or not adaptive sync is enabled if available." ); - - uint64_t g_SteamCompMgrLimitedAppRefreshCycle = 16'666'666; - uint64_t g_SteamCompMgrAppRefreshCycle = 16'666'666; -@@ -2229,7 +2229,7 @@ paint_all(bool async) - struct FrameInfo_t frameInfo = {}; - frameInfo.applyOutputColorMgmt = g_ColorMgmt.pending.enabled; - frameInfo.outputEncodingEOTF = g_ColorMgmt.pending.outputEncodingEOTF; -- frameInfo.allowVRR = g_bAllowVRR; -+ frameInfo.allowVRR = cv_adaptive_sync; - frameInfo.bFadingOut = fadingOut; - - // If the window we'd paint as the base layer is the streaming client, -@@ -5410,7 +5410,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) - if ( ev->atom == ctx->atoms.gamescopeVRREnabled ) - { - bool enabled = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeVRREnabled, 0 ); -- g_bAllowVRR = enabled; -+ cv_adaptive_sync = enabled; - } - if ( ev->atom == ctx->atoms.gamescopeDisplayForceInternal ) - { -@@ -6886,7 +6886,7 @@ void update_vrr_atoms(xwayland_ctx_t *root_ctx, bool force, bool* needs_flush = - // Keep this as a preference, starting with off. - if ( force ) - { -- bool wants_vrr = g_bAllowVRR; -+ bool wants_vrr = cv_adaptive_sync; - uint32_t enabled_value = wants_vrr ? 1 : 0; - XChangeProperty(root_ctx->dpy, root_ctx->root, root_ctx->atoms.gamescopeVRREnabled, XA_CARDINAL, 32, PropModeReplace, - (unsigned char *)&enabled_value, 1 ); --- -2.45.2 - - -From 1ebfacbb7477437ef295eb821a972ff3cfe992df Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 01:14:19 +0100 -Subject: [PATCH 08/19] WaylandBackend: Fix picking output refresh for VRR - displays. - ---- - src/Backends/WaylandBackend.cpp | 69 ++++++++++++++++++++++++++++++++- - 1 file changed, 68 insertions(+), 1 deletion(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 3603be7..b7f275e 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -5,6 +5,7 @@ - #include "steamcompmgr.hpp" - #include "edid.h" - #include "Utils/Defer.h" -+#include "Utils/Algorithm.h" - #include "convar.h" - #include "refresh_rate.h" - #include "waitable.h" -@@ -186,8 +187,14 @@ namespace gamescope - - std::optional GetCurrentState() { std::unique_lock lock( m_PlaneStateLock ); return m_oCurrentPlaneState; } - -+ void UpdateVRRRefreshRate(); -+ - private: - -+ void Wayland_Surface_Enter( wl_surface *pSurface, wl_output *pOutput ); -+ void Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ); -+ static const wl_surface_listener s_SurfaceListener; -+ - void LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ); - void LibDecor_Frame_Close( libdecor_frame *pFrame ); - void LibDecor_Frame_Commit( libdecor_frame *pFrame ); -@@ -228,12 +235,20 @@ namespace gamescope - frog_color_managed_surface *m_pFrogColorManagedSurface = nullptr; - wp_fractional_scale_v1 *m_pFractionalScale = nullptr; - libdecor_window_state m_eWindowState = LIBDECOR_WINDOW_STATE_NONE; -+ std::vector m_pOutputs; - bool m_bNeedsDecorCommit = false; - uint32_t m_uFractionalScale = 120; - - std::mutex m_PlaneStateLock; - std::optional m_oCurrentPlaneState; - }; -+ const wl_surface_listener CWaylandPlane::s_SurfaceListener = -+ { -+ .enter = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_Surface_Enter ), -+ .leave = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_Surface_Leave ), -+ .preferred_buffer_scale = WAYLAND_NULL(), -+ .preferred_buffer_transform = WAYLAND_NULL(), -+ }; - // Can't be const, libdecor api bad... - libdecor_frame_interface CWaylandPlane::s_LibDecorFrameInterface = - { -@@ -540,9 +555,19 @@ namespace gamescope - - bool SupportsFormat( uint32_t uDRMFormat ) const; - -+ bool HostCompositorIsCurrentlyVRR() const { return m_bHostCompositorIsCurrentlyVRR; } - void SetHostCompositorIsCurrentlyVRR( bool bActive ) { m_bHostCompositorIsCurrentlyVRR = bActive; } - -- bool CurrentDisplaySupportsVRR() const { return m_bHostCompositorIsCurrentlyVRR; } -+ WaylandOutputInfo *GetOutputInfo( wl_output *pOutput ) -+ { -+ auto iter = m_pOutputs.find( pOutput ); -+ if ( iter == m_pOutputs.end() ) -+ return nullptr; -+ -+ return &iter->second; -+ } -+ -+ bool CurrentDisplaySupportsVRR() const { return HostCompositorIsCurrentlyVRR(); } - wl_region *GetFullRegion() const { return m_pFullRegion; } - - private: -@@ -819,6 +844,7 @@ namespace gamescope - m_pParent = pParent; - m_pSurface = wl_compositor_create_surface( m_pBackend->GetCompositor() ); - wl_surface_set_user_data( m_pSurface, this ); -+ wl_surface_add_listener( m_pSurface, &s_SurfaceListener, this ); - - m_pViewport = wp_viewporter_get_viewport( m_pBackend->GetViewporter(), m_pSurface ); - -@@ -1005,6 +1031,45 @@ namespace gamescope - } - } - -+ void CWaylandPlane::UpdateVRRRefreshRate() -+ { -+ if ( m_pParent ) -+ return; -+ -+ if ( !m_pBackend->HostCompositorIsCurrentlyVRR() ) -+ return; -+ -+ if ( m_pOutputs.empty() ) -+ return; -+ -+ int32_t nLargestRefreshRateMhz = 0; -+ for ( wl_output *pOutput : m_pOutputs ) -+ { -+ WaylandOutputInfo *pOutputInfo = m_pBackend->GetOutputInfo( pOutput ); -+ if ( !pOutputInfo ) -+ continue; -+ -+ nLargestRefreshRateMhz = std::max( nLargestRefreshRateMhz, pOutputInfo->nRefresh ); -+ } -+ -+ if ( nLargestRefreshRateMhz && nLargestRefreshRateMhz != g_nOutputRefresh ) -+ { -+ xdg_log.infof( "Changed refresh to: %.3fhz", ConvertmHzToHz( (float) nLargestRefreshRateMhz ) ); -+ g_nOutputRefresh = nLargestRefreshRateMhz; -+ } -+ } -+ -+ void CWaylandPlane::Wayland_Surface_Enter( wl_surface *pSurface, wl_output *pOutput ) -+ { -+ m_pOutputs.emplace_back( pOutput ); -+ -+ UpdateVRRRefreshRate(); -+ } -+ void CWaylandPlane::Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ) -+ { -+ std::erase( m_pOutputs, pOutput ); -+ } -+ - void CWaylandPlane::LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ) - { - if ( !libdecor_configuration_get_window_state( pConfiguration, &m_eWindowState ) ) -@@ -1060,6 +1125,8 @@ namespace gamescope - else - { - m_pBackend->SetHostCompositorIsCurrentlyVRR( true ); -+ -+ UpdateVRRRefreshRate(); - } - - GetVBlankTimer().MarkVBlank( ulTime, true ); --- -2.45.2 - - -From 37cc4d368b3804215b9b4bb2719a3ac2b64cf2e6 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 01:18:17 +0100 -Subject: [PATCH 09/19] WaylandBackend: Run UpdateVRRRefreshRate on - Wayland_Surface_Leave - ---- - src/Backends/WaylandBackend.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index b7f275e..3aac004 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1068,6 +1068,8 @@ namespace gamescope - void CWaylandPlane::Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ) - { - std::erase( m_pOutputs, pOutput ); -+ -+ UpdateVRRRefreshRate(); - } - - void CWaylandPlane::LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ) --- -2.45.2 - - -From 853cb9879505efea832ddc05517f57e06d410739 Mon Sep 17 00:00:00 2001 -From: CakeKing64 -Date: Sat, 20 Jul 2024 17:39:35 +1000 -Subject: [PATCH 10/19] WaylandBackend: Restore fullscreen state if returning - from not being visible - ---- - src/Backends/WaylandBackend.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 3aac004..8c98689 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1863,7 +1863,10 @@ namespace gamescope - - void CWaylandBackend::UpdateFullscreenState() - { -- if ( m_bDesiredFullscreenState != g_bFullscreen ) -+ if ( !m_bVisible ) -+ g_bFullscreen = false; -+ -+ if ( m_bDesiredFullscreenState != g_bFullscreen && m_bVisible ) - { - if ( m_bDesiredFullscreenState ) - libdecor_frame_set_fullscreen( m_Planes[0].GetFrame(), nullptr ); --- -2.45.2 - - -From 96f141d8b8453f9c28872e8ffc94a29d81d0758d Mon Sep 17 00:00:00 2001 -From: flightlessmango -Date: Mon, 22 Jul 2024 17:47:30 +0200 -Subject: [PATCH 11/19] mangoapp: only set env in steammode - -MANGOHUD_CONFIGFILE should only be set by gamescope if we're in steamMode. -This is causing confusion for regular users as it prevents usage of -the standard mangohud config paths ---- - src/main.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/main.cpp b/src/main.cpp -index da1b516..96484dc 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -613,7 +613,7 @@ static void UpdateCompatEnvVars() - setenv( "GAMESCOPE_NV12_COLORSPACE", "k_EStreamColorspace_BT601", 0 ); - - const char *pszMangoConfigPath = getenv( "MANGOHUD_CONFIGFILE" ); -- if ( g_bLaunchMangoapp && ( !pszMangoConfigPath || !*pszMangoConfigPath ) ) -+ if ( (g_bLaunchMangoapp && steamMode) && ( !pszMangoConfigPath || !*pszMangoConfigPath ) ) - { - char szMangoConfigPath[ PATH_MAX ]; - FILE *pMangoConfigFile = gamescope::MakeTempFile( szMangoConfigPath, gamescope::k_szGamescopeTempMangoappTemplate, "w", true ); --- -2.45.2 - - -From 634d739ac609c6550d30a759fb2bc2fa616e0997 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:00:13 +0100 -Subject: [PATCH 12/19] backend: Add dump debug info command - ---- - src/backend.cpp | 27 +++++++++++++++++++++++++++ - src/backend.h | 4 ++++ - src/steamcompmgr.cpp | 19 +++++++++++++++++++ - 3 files changed, 50 insertions(+) - -diff --git a/src/backend.cpp b/src/backend.cpp -index d11fcca..91ad0ef 100644 ---- a/src/backend.cpp -+++ b/src/backend.cpp -@@ -120,4 +120,31 @@ namespace gamescope - - return cv_touch_click_mode; - } -+ -+ void CBaseBackend::DumpDebugInfo() -+ { -+ console_log.infof( "Uses Modifiers: %s", this->UsesModifiers() ? "true" : "false" ); -+ console_log.infof( "VRR Active: %s", this->IsVRRActive() ? "true" : "false" ); -+ console_log.infof( "Supports Plane Hardware Cursor: %s (not relevant for nested backends)", this->SupportsPlaneHardwareCursor() ? "true" : "false" ); -+ console_log.infof( "Supports Tearing: %s", this->SupportsTearing() ? "true" : "false" ); -+ console_log.infof( "Uses Vulkan Swapchain: %s", this->UsesVulkanSwapchain() ? "true" : "false" ); -+ console_log.infof( "Is Session Based: %s", this->IsSessionBased() ? "true" : "false" ); -+ console_log.infof( "Supports Explicit Sync: %s", this->SupportsExplicitSync() ? "true" : "false" ); -+ console_log.infof( "Current Screen Type: %s", this->GetScreenType() == GAMESCOPE_SCREEN_TYPE_INTERNAL ? "Internal" : "External" ); -+ console_log.infof( "Is Visible: %s", this->IsVisible() ? "true" : "false" ); -+ console_log.infof( "Is Nested: %s", this->GetNestedHints() != nullptr ? "true" : "false" ); -+ console_log.infof( "Needs Frame Sync: %s", this->NeedsFrameSync() ? "true" : "false" ); -+ console_log.infof( "Total Presents Queued: %lu", this->PresentationFeedback().TotalPresentsQueued() ); -+ console_log.infof( "Total Presents Completed: %lu", this->PresentationFeedback().TotalPresentsCompleted() ); -+ console_log.infof( "Current Presents In Flight: %lu", this->PresentationFeedback().CurrentPresentsInFlight() ); -+ } -+ -+ ConCommand cc_backend_info( "backend_info", "Dump debug info about the backend state", -+ []( std::span svArgs ) -+ { -+ if ( !GetBackend() ) -+ return; -+ -+ GetBackend()->DumpDebugInfo(); -+ }); - } -diff --git a/src/backend.h b/src/backend.h -index 9c2db15..4f91fe7 100644 ---- a/src/backend.h -+++ b/src/backend.h -@@ -236,6 +236,8 @@ namespace gamescope - - virtual TouchClickMode GetTouchClickMode() = 0; - -+ virtual void DumpDebugInfo() = 0; -+ - static IBackend *Get(); - template - static bool Set(); -@@ -263,6 +265,8 @@ namespace gamescope - virtual BackendPresentFeedback& PresentationFeedback() override { return m_PresentFeedback; } - - virtual TouchClickMode GetTouchClickMode() override; -+ -+ virtual void DumpDebugInfo() override; - protected: - BackendPresentFeedback m_PresentFeedback{}; - }; -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index b8102eb..60ddbbe 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -856,6 +856,25 @@ void steamcompmgr_set_app_refresh_cycle_override( gamescope::GamescopeScreenType - update_app_target_refresh_cycle(); - } - -+gamescope::ConCommand cc_debug_set_fps_limit( "debug_set_fps_limit", "Set refresh cycle (debug)", -+[](std::span svArgs) -+{ -+ if ( svArgs.size() < 2 ) -+ return; -+ -+ // TODO: Expose all facets as args. -+ std::optional onFps = gamescope::Parse( svArgs[1] ); -+ if ( !onFps ) -+ { -+ console_log.errorf( "Failed to parse FPS." ); -+ return; -+ } -+ -+ int32_t nFps = *onFps; -+ -+ steamcompmgr_set_app_refresh_cycle_override( GetBackend()->GetScreenType(), nFps, true, true ); -+}); -+ - static int g_nRuntimeInfoFd = -1; - - bool g_bFSRActive = false; --- -2.45.2 - - -From e2a277e15b7f6b7075e0433a5b9605168faf91b5 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:00:35 +0100 -Subject: [PATCH 13/19] WaylandBackend: Beginnings of support for - xx-color-management-v3 - ---- - protocol/meson.build | 3 + - protocol/xx-color-management-v3.xml | 1421 +++++++++++++++++++++++++++ - src/Backends/WaylandBackend.cpp | 229 ++++- - src/backend.h | 3 +- - 4 files changed, 1645 insertions(+), 11 deletions(-) - create mode 100644 protocol/xx-color-management-v3.xml - -diff --git a/protocol/meson.build b/protocol/meson.build -index 9af3607..5eb681e 100644 ---- a/protocol/meson.build -+++ b/protocol/meson.build -@@ -37,6 +37,9 @@ protocols = [ - - # wlroots protocols - 'wlr-layer-shell-unstable-v1.xml', -+ -+ # WIP protocols -+ 'xx-color-management-v3.xml', - ] - - protocols_client_src = [] -diff --git a/protocol/xx-color-management-v3.xml b/protocol/xx-color-management-v3.xml -new file mode 100644 -index 0000000..e637a25 ---- /dev/null -+++ b/protocol/xx-color-management-v3.xml -@@ -0,0 +1,1421 @@ -+ -+ -+ -+ Copyright 2019 Sebastian Wick -+ Copyright 2019 Erwin Burema -+ Copyright 2020 AMD -+ Copyright 2020-2024 Collabora, Ltd. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ The aim of the color management extension is to allow clients to know -+ the color properties of outputs, and to tell the compositor about the color -+ properties of their content on surfaces. Doing this enables a compositor -+ to perform automatic color management of content for different outputs -+ according to how content is intended to look like. -+ -+ The color properties are represented as an image description object which -+ is immutable after it has been created. A wl_output always has an -+ associated image description that clients can observe. A wl_surface -+ always has an associated preferred image description as a hint chosen by -+ the compositor that clients can also observe. Clients can set an image -+ description on a wl_surface to denote the color characteristics of the -+ surface contents. -+ -+ An image description includes SDR and HDR colorimetry and encoding, HDR -+ metadata, and viewing environment parameters. An image description does -+ not include the properties set through color-representation extension. -+ It is expected that the color-representation extension is used in -+ conjunction with the color management extension when necessary, -+ particularly with the YUV family of pixel formats. -+ -+ Recommendation ITU-T H.273 -+ "Coding-independent code points for video signal type identification" -+ shall be referred to as simply H.273 here. -+ -+ The color-and-hdr repository -+ (https://gitlab.freedesktop.org/pq/color-and-hdr) contains -+ background information on the protocol design and legacy color management. -+ It also contains a glossary, learning resources for digital color, tools, -+ samples and more. -+ -+ The terminology used in this protocol is based on common color science and -+ color encoding terminology where possible. The glossary in the color-and-hdr -+ repository shall be the authority on the definition of terms in this -+ protocol. -+ -+ -+ -+ -+ A global interface used for getting color management extensions for -+ wl_surface and wl_output objects, and for creating client defined image -+ description objects. The extension interfaces allow -+ getting the image description of outputs and setting the image -+ description of surfaces. -+ -+ -+ -+ -+ Destroy the xx_color_manager_v3 object. This does not affect any other -+ objects in any way. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ See the ICC.1:2022 specification from the International Color Consortium -+ for more details about rendering intents. -+ -+ The principles of ICC defined rendering intents apply with all types of -+ image descriptions, not only those with ICC file profiles. -+ -+ Compositors must support the perceptual rendering intent. Other -+ rendering intents are optional. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ The compositor supports set_mastering_display_primaries request with a -+ target color volume fully contained inside the primary color volume. -+ -+ -+ -+ -+ The compositor additionally supports target color volumes that -+ extend outside of the primary color volume. -+ -+ This can only be advertised if feature set_mastering_display_primaries -+ is supported as well. -+ -+ -+ -+ -+ -+ -+ Named color primaries used to encode well-known sets of primaries. H.273 -+ is the authority, when it comes to the exact values of primaries and -+ authoritative specifications, where an equivalent code point exists. -+ -+ Descriptions do list the specifications for convenience. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.709-6 -+ - Rec. ITU-R BT.1361-0 conventional colour gamut system and extended -+ colour gamut system (historical) -+ - IEC 61966-2-1 sRGB or sYCC -+ - IEC 61966-2-4 -+ - Society of Motion Picture and Television Engineers (SMPTE) RP 177 -+ (1993) Annex B -+ Equivalent to H.273 ColourPrimaries code point 1. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.470-6 System M (historical) -+ - United States National Television System Committee 1953 -+ Recommendation for transmission standards for color television -+ - United States Federal Communications Commission (2003) Title 47 Code -+ of Federal Regulations 73.682 (a)(20) -+ Equivalent to H.273 ColourPrimaries code point 4. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.470-6 System B, G (historical) -+ - Rec. ITU-R BT.601-7 625 -+ - Rec. ITU-R BT.1358-0 625 (historical) -+ - Rec. ITU-R BT.1700-0 625 PAL and 625 SECAM -+ Equivalent to H.273 ColourPrimaries code point 5. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.601-7 525 -+ - Rec. ITU-R BT.1358-1 525 or 625 (historical) -+ - Rec. ITU-R BT.1700-0 NTSC -+ - SMPTE 170M (2004) -+ - SMPTE 240M (1999) (historical) -+ Equivalent to H.273 ColourPrimaries code point 6 and 7. -+ -+ -+ -+ -+ Color primaries as defined by H.273 for generic film. -+ Equivalent to H.273 ColourPrimaries code point 8. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.2020-2 -+ - Rec. ITU-R BT.2100-0 -+ Equivalent to H.273 ColourPrimaries code point 9. -+ -+ -+ -+ -+ Color primaries as defined as the maximum of the CIE 1931 XYZ color -+ space by -+ - SMPTE ST 428-1 -+ - (CIE 1931 XYZ as in ISO 11664-1) -+ Equivalent to H.273 ColourPrimaries code point 10. -+ -+ -+ -+ -+ Color primaries as defined by Digital Cinema System and published in -+ SMPTE RP 431-2 (2011). Equivalent to H.273 ColourPrimaries code point -+ 11. -+ -+ -+ -+ -+ Color primaries as defined by Digital Cinema System and published in -+ SMPTE EG 432-1 (2010). -+ Equivalent to H.273 ColourPrimaries code point 12. -+ -+ -+ -+ -+ Color primaries as defined by Adobe as "Adobe RGB" and later published -+ by ISO 12640-4 (2011). -+ -+ -+ -+ -+ -+ -+ Named transfer functions used to encode well-known transfer -+ characteristics. H.273 is the authority, when it comes to the exact -+ formulas and authoritative specifications, where an equivalent code -+ point exists. -+ -+ Descriptions do list the specifications for convenience. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.709-6 -+ - Rec. ITU-R BT.1361-0 conventional colour gamut system (historical) -+ Equivalent to H.273 TransferCharacteristics code point 1, 6, 14, 15. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.470-6 System M (historical) -+ - United States National Television System Committee 1953 -+ Recommendation for transmission standards for color television -+ - United States Federal Communications Commission (2003) Title 47 Code -+ of Federal Regulations 73.682 (a) (20) -+ - Rec. ITU-R BT.1700-0 625 PAL and 625 SECAM -+ Equivalent to H.273 TransferCharacteristics code point 4. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.470-6 System B, G (historical) -+ Equivalent to H.273 TransferCharacteristics code point 5. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 240 (1999) -+ Equivalent to H.273 TransferCharacteristics code point 7. -+ -+ -+ -+ -+ Linear transfer characteristics. -+ Equivalent to H.273 TransferCharacteristics code point 8. -+ -+ -+ -+ -+ Logarithmic transfer characteristic (100:1 range). -+ Equivalent to H.273 TransferCharacteristics code point 9. -+ -+ -+ -+ -+ Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range). -+ Equivalent to H.273 TransferCharacteristics code point 10. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-4 -+ Equivalent to H.273 TransferCharacteristics code point 11. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.1361-0 extended colour gamut system (historical) -+ Equivalent to H.273 TransferCharacteristics code point 12. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-1 sRGB -+ Equivalent to H.273 TransferCharacteristics code point 13 with -+ MatrixCoefficients set to 0. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-1 sYCC -+ Equivalent to H.273 TransferCharacteristics code point 13 with -+ MatrixCoefficients set to anything but 0. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 2084 (2014) for 10-, 12-, 14- and 16-bit systems -+ - Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system -+ Equivalent to H.273 TransferCharacteristics code point 16. -+ -+ This TF implies these default luminances -+ - primary color volume minimum: 0.005 cd/m² -+ - primary color volume maximum: 10000 cd/m² -+ - reference white: 203 cd/m² -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 428-1 (2019) -+ Equivalent to H.273 TransferCharacteristics code point 17. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - ARIB STD-B67 (2015) -+ - Rec. ITU-R BT.2100-2 hybrid log-gamma (HLG) system -+ Equivalent to H.273 TransferCharacteristics code point 18. -+ -+ This TF implies these default luminances -+ - primary color volume minimum: 0.005 cd/m² -+ - primary color volume maximum: 1000 cd/m² -+ - reference white: 203 cd/m² -+ Note: HLG is a scene referred signal. All absolute luminance values -+ used here for HLG assume a 1000 cd/m² display. -+ -+ -+ -+ -+ -+ -+ This creates a new xx_color_management_output_v3 object for the -+ given wl_output. -+ -+ See the xx_color_management_output_v3 interface for more details. -+ -+ -+ -+ -+ -+ -+ -+ -+ If a xx_color_management_surface_v3 object already exists for the given -+ wl_surface, the protocol error surface_exists is raised. -+ -+ This creates a new color xx_color_management_surface_v3 object for the -+ given wl_surface. -+ -+ See the xx_color_management_surface_v3 interface for more details. -+ -+ -+ -+ -+ -+ -+ -+ -+ Makes a new ICC-based image description creator object with all -+ properties initially unset. The client can then use the object's -+ interface to define all the required properties for an image description -+ and finally create a xx_image_description_v3 object. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.icc_v2_v4. -+ Otherwise this request raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ Makes a new parametric image description creator object with all -+ properties initially unset. The client can then use the object's -+ interface to define all the required properties for an image description -+ and finally create a xx_image_description_v3 object. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.parametric. -+ Otherwise this request raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each rendering intent the compositor supports. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each compositor supported feature listed in the enumeration. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each named transfer function the compositor supports with the -+ parametric image description creator. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each named set of primaries the compositor supports with the -+ parametric image description creator. -+ -+ -+ -+ -+ -+ -+ -+ -+ A xx_color_management_output_v3 describes the color properties of an -+ output. -+ -+ The xx_color_management_output_v3 is associated with the wl_output global -+ underlying the wl_output object. Therefore the client destroying the -+ wl_output object has no impact, but the compositor removing the output -+ global makes the xx_color_management_output_v3 object inert. -+ -+ -+ -+ -+ Destroy the color xx_color_management_output_v3 object. This does not -+ affect any remaining protocol objects. -+ -+ -+ -+ -+ -+ This event is sent whenever the image description of the output changed, -+ followed by one wl_output.done event common to output events across all -+ extensions. -+ -+ If the client wants to use the updated image description, it needs to do -+ get_image_description again, because image description objects are -+ immutable. -+ -+ -+ -+ -+ -+ This creates a new xx_image_description_v3 object for the current image -+ description of the output. There always is exactly one image description -+ active for an output so the client should destroy the image description -+ created by earlier invocations of this request. This request is usually -+ sent as a reaction to the image_description_changed event or when -+ creating a xx_color_management_output_v3 object. -+ -+ The image description of an output represents the color encoding the -+ output expects. There might be performance and power advantages, as well -+ as improved color reproduction, if a content update matches the image -+ description of the output it is being shown on. If a content update is -+ shown on any other output than the one it matches the image description -+ of, then the color reproduction on those outputs might be considerably -+ worse. -+ -+ The created xx_image_description_v3 object preserves the image -+ description of the output from the time the object was created. -+ -+ The resulting image description object allows get_information request. -+ -+ If this protocol object is inert, the resulting image description object -+ shall immediately deliver the xx_image_description_v3.failed event with -+ the no_output cause. -+ -+ If the interface version is inadequate for the output's image -+ description, meaning that the client does not support all the events -+ needed to deliver the crucial information, the resulting image -+ description object shall immediately deliver the -+ xx_image_description_v3.failed event with the low_version cause. -+ -+ Otherwise the object shall immediately deliver the ready event. -+ -+ -+ -+ -+ -+ -+ -+ -+ A xx_color_management_surface_v3 allows the client to set the color -+ space and HDR properties of a surface. -+ -+ If the wl_surface associated with the xx_color_management_surface_v3 is -+ destroyed, the xx_color_management_surface_v3 object becomes inert. -+ -+ -+ -+ -+ Destroy the xx_color_management_surface_v3 object and do the same as -+ unset_image_description. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the image description of the underlying surface. The image -+ description and rendering intent are double-buffered state, see -+ wl_surface.commit. -+ -+ It is the client's responsibility to understand the image description -+ it sets on a surface, and to provide content that matches that image -+ description. Compositors might convert images to match their own or any -+ other image descriptions. -+ -+ Image description whose creation gracefully failed (received -+ xx_image_description_v3.failed) are forbidden in this request, and in -+ such case the protocol error image_description is raised. -+ -+ All image descriptions whose creation succeeded (received -+ xx_image_description_v3.ready) are allowed and must always be accepted -+ by the compositor. -+ -+ A rendering intent provides the client's preference on how content -+ colors should be mapped to each output. The render_intent value must -+ be one advertised by the compositor with -+ xx_color_manager_v3.render_intent event, otherwise the protocol error -+ render_intent is raised. -+ -+ By default, a surface does not have an associated image description -+ nor a rendering intent. The handling of color on such surfaces is -+ compositor implementation defined. Compositors should handle such -+ surfaces as sRGB but may handle them differently if they have specific -+ requirements. -+ -+ -+ -+ -+ -+ -+ -+ -+ This request removes any image description from the surface. See -+ set_image_description for how a compositor handles a surface without -+ an image description. This is double-buffered state, see -+ wl_surface.commit. -+ -+ -+ -+ -+ -+ The preferred image description is the one which likely has the most -+ performance and/or quality benefits for the compositor if used by the -+ client for its wl_surface contents. This event is sent whenever the -+ compositor changes the wl_surface's preferred image description. -+ -+ This is not an initial event. -+ -+ This event is merely a notification. When the client wants to know -+ what the preferred image description is, it shall use the get_preferred -+ request. -+ -+ The preferred image description is not automatically used for anything. -+ It is only a hint, and clients may set any valid image description with -+ set_image_description but there might be performance and color accuracy -+ improvements by providing the wl_surface contents in the preferred -+ image description. Therefore clients that can, should render according -+ to the preferred image description -+ -+ -+ -+ -+ -+ If this protocol object is inert, the protocol error inert is raised. -+ -+ The preferred image description represents the compositor's preferred -+ color encoding for this wl_surface at the current time. There might be -+ performance and power advantages, as well as improved color -+ reproduction, if the image description of a content update matches the -+ preferred image description. -+ -+ This creates a new xx_image_description_v3 object for the currently -+ preferred image description for the wl_surface. The client should -+ stop using and destroy the image descriptions created by earlier -+ invocations of this request for the associated wl_surface. -+ This request is usually sent as a reaction to the preferred_changed -+ event or when creating a xx_color_management_surface_v3 object if -+ the client is capable of adapting to image descriptions. -+ -+ The created xx_image_description_v3 object preserves the preferred image -+ description of the wl_surface from the time the object was created. -+ -+ The resulting image description object allows get_information request. -+ -+ If the interface version is inadequate for the preferred image -+ description, meaning that the client does not support all the -+ events needed to deliver the crucial information, the resulting image -+ description object shall immediately deliver the -+ xx_image_description_v3.failed event with the low_version cause, -+ otherwise the object shall immediately deliver the ready event. -+ -+ -+ -+ -+ -+ -+ -+ -+ This type of object is used for collecting all the information required -+ to create a xx_image_description_v3 object from an ICC file. A complete -+ set of required parameters consists of these properties: -+ - ICC file -+ -+ Each required property must be set exactly once if the client is to create -+ an image description. The set requests verify that a property was not -+ already set. The create request verifies that all required properties are -+ set. There may be several alternative requests for setting each property, -+ and in that case the client must choose one of them. -+ -+ Once all properties have been set, the create request must be used to -+ create the image description object, destroying the creator in the -+ process. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Create an image description object based on the ICC information -+ previously set on this object. A compositor must parse the ICC data in -+ some undefined but finite amount of time. -+ -+ The completeness of the parameter set is verified. If the set is not -+ complete, the protocol error incomplete_set is raised. For the -+ definition of a complete set, see the description of this interface. -+ -+ If the particular combination of the information is not supported -+ by the compositor, the resulting image description object shall -+ immediately deliver the xx_image_description_v3.failed event with the -+ 'unsupported' cause. If a valid image description was created from the -+ information, the xx_image_description_v3.ready event will eventually -+ be sent instead. -+ -+ This request destroys the xx_image_description_creator_icc_v3 object. -+ -+ The resulting image description object does not allow get_information -+ request. -+ -+ -+ -+ -+ -+ -+ -+ Sets the ICC profile file to be used as the basis of the image -+ description. -+ -+ The data shall be found through the given fd at the given offset, having -+ the given length. The fd must seekable and readable. Violating these -+ requirements raises the bad_fd protocol error. -+ -+ If reading the data fails due to an error independent of the client, the -+ compositor shall send the xx_image_description_v3.failed event on the -+ created xx_image_description_v3 with the 'operating_system' cause. -+ -+ The maximum size of the ICC profile is 4 MB. If length is greater than -+ that or zero, the protocol error bad_size is raised. If offset + length -+ exceeds the file size, the protocol error out_of_file is raised. -+ -+ A compositor may read the file at any time starting from this request -+ and only until whichever happens first: -+ - If create request was issued, the xx_image_description_v3 object -+ delivers either failed or ready event; or -+ - if create request was not issued, this -+ xx_image_description_creator_icc_v3 object is destroyed. -+ -+ A compositor shall not modify the contents of the file, and the fd may -+ be sealed for writes and size changes. The client must ensure to its -+ best ability that the data does not change while the compositor is -+ reading it. -+ -+ The data must represent a valid ICC profile. The ICC profile version -+ must be 2 or 4, it must be a 3 channel profile and the class must be -+ Display or ColorSpace. Violating these requirements will not result in a -+ protocol error but will eventually send the -+ xx_image_description_v3.failed event on the created -+ xx_image_description_v3 with the 'unsupported' cause. -+ -+ See the International Color Consortium specification ICC.1:2022 for more -+ details about ICC profiles. -+ -+ If ICC file has already been set on this object, the protocol error -+ already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ This type of object is used for collecting all the parameters required -+ to create a xx_image_description_v3 object. A complete set of required -+ parameters consists of these properties: -+ - transfer characteristic function (tf) -+ - chromaticities of primaries and white point (primary color volume) -+ -+ The following properties are optional and have a well-defined default -+ if not explicitly set: -+ - primary color volume luminance range -+ - reference white luminance level -+ - mastering display primaries and white point (target color volume) -+ - mastering luminance range -+ - maximum content light level -+ - maximum frame-average light level -+ -+ Each required property must be set exactly once if the client is to create -+ an image description. The set requests verify that a property was not -+ already set. The create request verifies that all required properties are -+ set. There may be several alternative requests for setting each property, -+ and in that case the client must choose one of them. -+ -+ Once all properties have been set, the create request must be used to -+ create the image description object, destroying the creator in the -+ process. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Create an image description object based on the parameters previously -+ set on this object. -+ -+ The completeness of the parameter set is verified. If the set is not -+ complete, the protocol error incomplete_set is raised. For the -+ definition of a complete set, see the description of this interface. -+ -+ Also, the combination of the parameter set is verified. If the set is -+ not consistent, the protocol error inconsistent_set is raised. -+ -+ If the particular combination of the parameter set is not supported -+ by the compositor, the resulting image description object shall -+ immediately deliver the xx_image_description_v3.failed event with the -+ 'unsupported' cause. If a valid image description was created from the -+ parameter set, the xx_image_description_v3.ready event will eventually -+ be sent instead. -+ -+ This request destroys the xx_image_description_creator_params_v3 -+ object. -+ -+ The resulting image description object does not allow get_information -+ request. -+ -+ -+ -+ -+ -+ -+ -+ Sets the transfer characteristic using explicitly enumerated named -+ functions. -+ -+ When the resulting image description is attached to an image, the -+ content should be encoded and decoded according to the industry standard -+ practices for the transfer characteristic. -+ -+ Only names advertised with xx_color_manager_v3 event supported_tf_named -+ are allowed. Other values shall raise the protocol error invalid_tf. -+ -+ If transfer characteristic has already been set on this object, the -+ protocol error already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color component transfer characteristic to a power curve with -+ the given exponent. This curve represents the conversion from electrical -+ to optical pixel or color values. -+ -+ When the resulting image description is attached to an image, the -+ content should be encoded with the inverse of the power curve. -+ -+ The curve exponent shall be multiplied by 10000 to get the argument eexp -+ value to carry the precision of 4 decimals. -+ -+ The curve exponent must be at least 1.0 and at most 10.0. Otherwise the -+ protocol error invalid_tf is raised. -+ -+ If transfer characteristic has already been set on this object, the -+ protocol error already_set is raised. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.set_tf_power. Otherwise this request raises -+ the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color primaries and white point using explicitly named sets. -+ This describes the primary color volume which is the basis for color -+ value encoding. -+ -+ Only names advertised with xx_color_manager_v3 event -+ supported_primaries_named are allowed. Other values shall raise the -+ protocol error invalid_primaries. -+ -+ If primaries have already been set on this object, the protocol error -+ already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color primaries and white point using CIE 1931 xy chromaticity -+ coordinates. This describes the primary color volume which is the basis -+ for color value encoding. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ If primaries have already been set on this object, the protocol error -+ already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_primaries. Otherwise this request raises -+ the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the primary color volume luminance range and the reference white -+ luminance level. -+ -+ The default luminances are -+ - primary color volume minimum: 0.2 cd/m² -+ - primary color volume maximum: 80 cd/m² -+ - reference white: 80 cd/m² -+ -+ Setting a named transfer characteristic can imply other default -+ luminances. -+ -+ The default luminances get overwritten when this request is used. -+ -+ 'min_lum' and 'max_lum' specify the minimum and maximum luminances of -+ the primary color volume as reproduced by the targeted display. -+ -+ 'reference_lum' specifies the luminance of the reference white as -+ reproduced by the targeted display, and reflects the targeted viewing -+ environment. -+ -+ Compositors should make sure that all content is anchored, meaning that -+ an input signal level of 'reference_lum' on one image description and -+ another input signal level of 'reference_lum' on another image -+ description should produce the same output level, even though the -+ 'reference_lum' on both image representations can be different. -+ -+ If 'max_lum' is less than the 'reference_lum', or 'reference_lum' is -+ less than or equal to 'min_lum', the protocol error invalid_luminance is -+ raised. -+ -+ The minimum luminance is multiplied by 10000 to get the argument -+ 'min_lum' value and carries precision of 4 decimals. The maximum -+ luminance and reference white luminance values are unscaled. -+ -+ If the primary color volume luminance range and the reference white -+ luminance level have already been set on this object, the protocol error -+ already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_luminances. Otherwise this request -+ raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the color primaries and white point of the mastering display -+ using CIE 1931 xy chromaticity coordinates. This is compatible with the -+ SMPTE ST 2086 definition of HDR static metadata. -+ -+ The mastering display primaries define the target color volume. -+ -+ If mastering display primaries are not explicitly set, the target color -+ volume is assumed to be equal to the primary color volume. -+ -+ The target color volume is defined by all tristimulus values between 0.0 -+ and 1.0 (inclusive) of the color space defined by the given mastering -+ display primaries and white point. The colorimetry is identical between -+ the container color space and the mastering display color space, -+ including that no chromatic adaptation is applied even if the white -+ points differ. -+ -+ The target color volume can exceed the primary color volume to allow for -+ a greater color volume with an existing color space definition (for -+ example scRGB). It can be smaller than the primary color volume to -+ minimize gamut and tone mapping distances for big color spaces (HDR -+ metadata). -+ -+ To make use of the entire target color volume a suitable pixel format -+ has to be chosen (e.g. floating point to exceed the primary color -+ volume, or abusing limited quantization range as with xvYCC). -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ If mastering display primaries have already been set on this object, the -+ protocol error already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_mastering_display_primaries. Otherwise -+ this request raises the protocol error unsupported_feature. The -+ advertisement implies support only for target color volumes fully -+ contained within the primary color volume. -+ -+ If a compositor additionally supports target color volume exceeding the -+ primary color volume, it must advertise -+ xx_color_manager_v3.feature.extended_target_volume. If a client uses -+ target color volume exceeding the primary color volume and the -+ compositor does not support it, the result is implementation defined. -+ Compositors are recommended to detect this case and fail the image -+ description gracefully, but it may as well result in color artifacts. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the luminance range that was used during the content mastering -+ process as the minimum and maximum absolute luminance L. This is -+ compatible with the SMPTE ST 2086 definition of HDR static metadata. -+ -+ The mastering luminance range is undefined by default. -+ -+ If max L is less than or equal to min L, the protocol error -+ invalid_luminance is raised. -+ -+ Min L value is multiplied by 10000 to get the argument min_lum value -+ and carry precision of 4 decimals. Max L value is unscaled for max_lum. -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the maximum content light level (max_cll) as defined by CTA-861-H. -+ -+ This can only be set when set_tf_cicp is used to set the transfer -+ characteristic to Rec. ITU-R BT.2100-2 perceptual quantization system. -+ Otherwise, 'create' request shall raise inconsistent_set protocol -+ error. -+ -+ max_cll is undefined by default. -+ -+ -+ -+ -+ -+ -+ -+ Sets the maximum frame-average light level (max_fall) as defined by -+ CTA-861-H. -+ -+ This can only be set when set_tf_cicp is used to set the transfer -+ characteristic to Rec. ITU-R BT.2100-2 perceptual quantization system. -+ Otherwise, 'create' request shall raise inconsistent_set protocol error. -+ -+ max_fall is undefined by default. -+ -+ -+ -+ -+ -+ -+ -+ -+ An image description carries information about the color encoding used on -+ a surface when attached to a wl_surface via -+ xx_color_management_surface_v3.set_image_description. A compositor can use -+ this information to decode pixel values into colorimetrically meaningful -+ quantities. -+ -+ Note, that the xx_image_description_v3 object is not ready to be used -+ immediately after creation. The object eventually delivers either the -+ 'ready' or the 'failed' event, specified in all requests creating it. The -+ object is deemed "ready" after receiving the 'ready' event. -+ -+ An object which is not ready is illegal to use, it can only be destroyed. -+ Any other request in this interface shall result in the 'not_ready' -+ protocol error. Attempts to use an object which is not ready through other -+ interfaces shall raise protocol errors defined there. -+ -+ Once created and regardless of how it was created, a -+ xx_image_description_v3 object always refers to one fixed image -+ description. It cannot change after creation. -+ -+ -+ -+ -+ Destroy this object. It is safe to destroy an object which is not ready. -+ -+ Destroying a xx_image_description_v3 object has no side-effects, not -+ even if a xx_color_management_surface_v3.set_image_description has not -+ yet been followed by a wl_surface.commit. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ If creating a xx_image_description_v3 object fails for a reason that is -+ not defined as a protocol error, this event is sent. -+ -+ The requests that create image description objects define whether and -+ when this can occur. Only such creation requests can trigger this event. -+ This event cannot be triggered after the image description was -+ successfully formed. -+ -+ Once this event has been sent, the xx_image_description_v3 object will -+ never become ready and it can only be destroyed. -+ -+ -+ -+ -+ -+ -+ -+ -+ Once this event has been sent, the xx_image_description_v3 object is -+ deemed "ready". Ready objects can be used to send requests and can be -+ used through other interfaces. -+ -+ Every ready xx_image_description_v3 protocol object refers to an -+ underlying image description record in the compositor. Multiple protocol -+ objects may end up referring to the same record. Clients may identify -+ these "copies" by comparing their id numbers: if the numbers from two -+ protocol objects are identical, the protocol objects refer to the same -+ image description record. Two different image description records -+ cannot have the same id number simultaneously. The id number does not -+ change during the lifetime of the image description record. -+ -+ The id number is valid only as long as the protocol object is alive. If -+ all protocol objects referring to the same image description record are -+ destroyed, the id number may be recycled for a different image -+ description record. -+ -+ Image description id number is not a protocol object id. Zero is -+ reserved as an invalid id number. It shall not be possible for a client -+ to refer to an image description by its id number in protocol. The id -+ numbers might not be portable between Wayland connections. -+ -+ This identity allows clients to de-duplicate image description records -+ and avoid get_information request if they already have the image -+ description information. -+ -+ -+ -+ -+ -+ -+ -+ Creates a xx_image_description_info_v3 object which delivers the -+ information that makes up the image description. -+ -+ Not all image description protocol objects allow get_information -+ request. Whether it is allowed or not is defined by the request that -+ created the object. If get_information is not allowed, the protocol -+ error no_information is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ Sends all matching events describing an image description object exactly -+ once and finally sends the 'done' event. -+ -+ Once a xx_image_description_info_v3 object has delivered a 'done' event it -+ is automatically destroyed. -+ -+ Every xx_image_description_info_v3 created from the same -+ xx_image_description_v3 shall always return the exact same data. -+ -+ -+ -+ -+ Signals the end of information events and destroys the object. -+ -+ -+ -+ -+ -+ The icc argument provides a file descriptor to the client which may be -+ memory-mapped to provide the ICC profile matching the image description. -+ The fd is read-only, and if mapped then it must be mapped with -+ MAP_PRIVATE by the client. -+ -+ The ICC profile version and other details are determined by the -+ compositor. There is no provision for a client to ask for a specific -+ kind of a profile. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume primaries and white point using CIE -+ 1931 xy chromaticity coordinates. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume primaries and white point using an -+ explicitly enumerated named set. -+ -+ -+ -+ -+ -+ -+ -+ The color component transfer characteristic of this image description is -+ a pure power curve. This event provides the exponent of the power -+ function. This curve represents the conversion from electrical to -+ optical pixel or color values. -+ -+ The curve exponent has been multiplied by 10000 to get the argument eexp -+ value to carry the precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ Delivers the transfer characteristic using an explicitly enumerated -+ named function. -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume luminance range and the reference -+ white luminance level. -+ -+ The minimum luminance is multiplied by 10000 to get the argument -+ 'min_lum' value and carries precision of 4 decimals. The maximum -+ luminance and reference white luminance values are unscaled. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the color primaries and white point of the target color volume -+ using CIE 1931 xy chromaticity coordinates. This is compatible with the -+ SMPTE ST 2086 definition of HDR static metadata for mastering displays. -+ -+ While primary color volume is about how color is encoded, the target -+ color volume is the actually displayable color volume. If target color -+ volume is equal to the primary color volume, then this event is not -+ sent. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the luminance range that the image description is targeting as -+ the minimum and maximum absolute luminance L. This is compatible with -+ the SMPTE ST 2086 definition of HDR static metadata. -+ -+ This luminance range is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ Min L value is multiplied by 10000 to get the argument min_lum value and -+ carry precision of 4 decimals. Max L value is unscaled for max_lum. -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the targeted max_cll of the image description. max_cll is -+ defined by CTA-861-H. -+ -+ This luminance is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ -+ -+ -+ -+ -+ -+ Provides the targeted max_fall of the image description. max_fall is -+ defined by CTA-861-H. -+ -+ This luminance is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ -+ -+ -+ -+ -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 8c98689..1a09acc 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -129,6 +130,7 @@ namespace gamescope - friend CWaylandPlane; - - BackendConnectorHDRInfo m_HDRInfo{}; -+ displaycolorimetry_t m_DisplayColorimetry = displaycolorimetry_709; - std::vector m_FakeEdid; - - CWaylandBackend *m_pBackend = nullptr; -@@ -222,6 +224,22 @@ namespace gamescope - uint32_t uMaxFullFrameLuminance ); - static const frog_color_managed_surface_listener s_FrogColorManagedSurfaceListener; - -+ void Wayland_XXColorManagementSurface_PreferredChanged( xx_color_management_surface_v3 *pColorManagementSurface ); -+ static const xx_color_management_surface_v3_listener s_XXColorManagementSurfaceListener; -+ void UpdateXXPreferredColorManagement(); -+ -+ void Wayland_XXImageDescriptionInfo_Done( xx_image_description_info_v3 *pImageDescInfo ); -+ void Wayland_XXImageDescriptionInfo_ICCFile( xx_image_description_info_v3 *pImageDescInfo, int32_t nICCFd, uint32_t uICCSize ); -+ void Wayland_XXImageDescriptionInfo_Primaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ); -+ void Wayland_XXImageDescriptionInfo_PrimariesNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uPrimaries ); -+ void Wayland_XXImageDescriptionInfo_TFPower( xx_image_description_info_v3 *pImageDescInfo, uint32_t uExp); -+ void Wayland_XXImageDescriptionInfo_TFNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uTF); -+ void Wayland_XXImageDescriptionInfo_Luminances( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum, uint32_t uRefLum ); -+ void Wayland_XXImageDescriptionInfo_TargetPrimaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ); -+ void Wayland_XXImageDescriptionInfo_TargetLuminance( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum ); -+ void Wayland_XXImageDescriptionInfo_Target_MaxCLL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxCLL ); -+ void Wayland_XXImageDescriptionInfo_Target_MaxFALL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxFALL ); -+ - void Wayland_FractionalScale_PreferredScale( wp_fractional_scale_v1 *pFractionalScale, uint32_t uScale ); - static const wp_fractional_scale_v1_listener s_FractionalScaleListener; - -@@ -233,6 +251,7 @@ namespace gamescope - libdecor_frame *m_pFrame = nullptr; - wl_subsurface *m_pSubsurface = nullptr; - frog_color_managed_surface *m_pFrogColorManagedSurface = nullptr; -+ xx_color_management_surface_v3 *m_pXXColorManagedSurface = nullptr; - wp_fractional_scale_v1 *m_pFractionalScale = nullptr; - libdecor_window_state m_eWindowState = LIBDECOR_WINDOW_STATE_NONE; - std::vector m_pOutputs; -@@ -267,6 +286,10 @@ namespace gamescope - { - .preferred_metadata = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_FrogColorManagedSurface_PreferredMetadata ), - }; -+ const xx_color_management_surface_v3_listener CWaylandPlane::s_XXColorManagementSurfaceListener = -+ { -+ .preferred_changed = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_XXColorManagementSurface_PreferredChanged ), -+ }; - const wp_fractional_scale_v1_listener CWaylandPlane::s_FractionalScaleListener = - { - .preferred_scale = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_FractionalScale_PreferredScale ), -@@ -546,6 +569,7 @@ namespace gamescope - wp_viewporter *GetViewporter() const { return m_pViewporter; } - wp_presentation *GetPresentation() const { return m_pPresentation; } - frog_color_management_factory_v1 *GetFrogColorManagementFactory() const { return m_pFrogColorMgmtFactory; } -+ xx_color_manager_v3 *GetXXColorManager() const { return m_pXXColorManager; } - wp_fractional_scale_manager_v1 *GetFractionalScaleManager() const { return m_pFractionalScaleManager; } - xdg_toplevel_icon_manager_v1 *GetToplevelIconManager() const { return m_pToplevelIconManager; } - libdecor *GetLibDecor() const { return m_pLibDecor; } -@@ -596,6 +620,12 @@ namespace gamescope - void Wayland_Keyboard_Leave( wl_keyboard *pKeyboard, uint32_t uSerial, wl_surface *pSurface ); - static const wl_keyboard_listener s_KeyboardListener; - -+ void Wayland_XXColorManager_SupportedIntent( xx_color_manager_v3 *pXXColorManager, uint32_t uRenderIntent ); -+ void Wayland_XXColorManager_SupportedFeature( xx_color_manager_v3 *pXXColorManager, uint32_t uFeature ); -+ void Wayland_XXColorManager_SupportedTFNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uTF ); -+ void Wayland_XXColorManager_SupportedPrimariesNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uPrimaries ); -+ static const xx_color_manager_v3_listener s_XXColorManagerListener; -+ - CWaylandInputThread m_InputThread; - - CWaylandConnector m_Connector; -@@ -615,11 +645,22 @@ namespace gamescope - OwningRc m_pBlackTexture; - wp_presentation *m_pPresentation = nullptr; - frog_color_management_factory_v1 *m_pFrogColorMgmtFactory = nullptr; -+ xx_color_manager_v3 *m_pXXColorManager = nullptr; - zwp_pointer_constraints_v1 *m_pPointerConstraints = nullptr; - zwp_relative_pointer_manager_v1 *m_pRelativePointerManager = nullptr; - wp_fractional_scale_manager_v1 *m_pFractionalScaleManager = nullptr; - xdg_toplevel_icon_manager_v1 *m_pToplevelIconManager = nullptr; - -+ struct -+ { -+ std::vector ePrimaries; -+ std::vector eTransferFunctions; -+ std::vector eRenderIntents; -+ std::vector eFeatures; -+ -+ bool bSupportsGamescopeColorManagement = false; // Has everything we want and need? -+ } m_XXColorManagerFeatures; -+ - std::unordered_map m_pOutputs; - - libdecor *m_pLibDecor = nullptr; -@@ -690,6 +731,13 @@ namespace gamescope - .modifiers = WAYLAND_NULL(), - .repeat_info = WAYLAND_NULL(), - }; -+ const xx_color_manager_v3_listener CWaylandBackend::s_XXColorManagerListener -+ { -+ .supported_intent = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedIntent ), -+ .supported_feature = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedFeature ), -+ .supported_tf_named = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedTFNamed ), -+ .supported_primaries_named = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedPrimariesNamed ), -+ }; - - ////////////////// - // CWaylandFb -@@ -752,6 +800,7 @@ namespace gamescope - CWaylandConnector::CWaylandConnector( CWaylandBackend *pBackend ) - : m_pBackend( pBackend ) - { -+ m_HDRInfo.bAlwaysPatchEdid = true; - } - - CWaylandConnector::~CWaylandConnector() -@@ -810,18 +859,20 @@ namespace gamescope - displaycolorimetry_t *displayColorimetry, EOTF *displayEOTF, - displaycolorimetry_t *outputEncodingColorimetry, EOTF *outputEncodingEOTF ) const - { -- if ( g_bForceHDR10OutputDebug ) -+ *displayColorimetry = m_DisplayColorimetry; -+ *displayEOTF = EOTF_Gamma22; -+ -+ if ( bHDR10 && GetHDRInfo().IsHDR10() ) - { -- *displayColorimetry = displaycolorimetry_2020; -- *displayEOTF = EOTF_PQ; -+ // For HDR10 output, expected content colorspace != native colorspace. - *outputEncodingColorimetry = displaycolorimetry_2020; -- *outputEncodingEOTF = EOTF_PQ; -+ *outputEncodingEOTF = GetHDRInfo().eOutputEncodingEOTF; - } - else - { -- *displayColorimetry = displaycolorimetry_709; -- *displayEOTF = EOTF_Gamma22; -- *outputEncodingColorimetry = displaycolorimetry_709; -+ // We always use default 'perceptual' intent, so -+ // this should be correct for SDR content. -+ *outputEncodingColorimetry = m_DisplayColorimetry; - *outputEncodingEOTF = EOTF_Gamma22; - } - } -@@ -848,7 +899,17 @@ namespace gamescope - - m_pViewport = wp_viewporter_get_viewport( m_pBackend->GetViewporter(), m_pSurface ); - -- if ( m_pBackend->GetFrogColorManagementFactory() ) -+ if ( m_pBackend->GetXXColorManager() ) -+ { -+ m_pXXColorManagedSurface = xx_color_manager_v3_get_surface( m_pBackend->GetXXColorManager(), m_pSurface ); -+ -+ // Only add the listener for the toplevel to avoid useless spam. -+ if ( !pParent ) -+ xx_color_management_surface_v3_add_listener( m_pXXColorManagedSurface, &s_XXColorManagementSurfaceListener, this ); -+ -+ UpdateXXPreferredColorManagement(); -+ } -+ else if ( m_pBackend->GetFrogColorManagementFactory() ) - { - m_pFrogColorManagedSurface = frog_color_management_factory_v1_get_color_managed_surface( m_pBackend->GetFrogColorManagementFactory(), m_pSurface ); - -@@ -913,7 +974,11 @@ namespace gamescope - wp_presentation_feedback_add_listener( pFeedback, &s_PresentationFeedbackListener, this ); - } - -- if ( m_pFrogColorManagedSurface ) -+ if ( m_pXXColorManagedSurface ) -+ { -+ // TODO: Actually use this. -+ } -+ else if ( m_pFrogColorManagedSurface ) - { - frog_color_managed_surface_set_render_intent( m_pFrogColorManagedSurface, FROG_COLOR_MANAGED_SURFACE_RENDER_INTENT_PERCEPTUAL ); - switch ( oState->eColorspace ) -@@ -1167,6 +1232,12 @@ namespace gamescope - pHDRInfo->uMaxFrameAverageLuminance = uMaxFullFrameLuminance; - pHDRInfo->uMinContentLightLevel = uMinLuminance; - -+ auto *pDisplayColorimetry = &m_pBackend->m_Connector.m_DisplayColorimetry; -+ pDisplayColorimetry->primaries.r = glm::vec2{ uOutputDisplayPrimaryRedX * 0.00002f, uOutputDisplayPrimaryRedY * 0.00002f }; -+ pDisplayColorimetry->primaries.g = glm::vec2{ uOutputDisplayPrimaryGreenX * 0.00002f, uOutputDisplayPrimaryGreenY * 0.00002f }; -+ pDisplayColorimetry->primaries.b = glm::vec2{ uOutputDisplayPrimaryBlueX * 0.00002f, uOutputDisplayPrimaryBlueY * 0.00002f }; -+ pDisplayColorimetry->white = glm::vec2{ uOutputWhitePointX * 0.00002f, uOutputWhitePointY * 0.00002f }; -+ - xdg_log.infof( "PreferredMetadata: Red: %g %g, Green: %g %g, Blue: %g %g, White: %g %g, Max Luminance: %u nits, Min Luminance: %g nits, Max Full Frame Luminance: %u nits", - uOutputDisplayPrimaryRedX * 0.00002, uOutputDisplayPrimaryRedY * 0.00002, - uOutputDisplayPrimaryGreenX * 0.00002, uOutputDisplayPrimaryGreenY * 0.00002, -@@ -1177,6 +1248,87 @@ namespace gamescope - uint32_t( uMaxFullFrameLuminance ) ); - } - -+ // -+ -+ void CWaylandPlane::Wayland_XXColorManagementSurface_PreferredChanged( xx_color_management_surface_v3 *pColorManagementSurface ) -+ { -+ UpdateXXPreferredColorManagement(); -+ } -+ -+ void CWaylandPlane::UpdateXXPreferredColorManagement() -+ { -+ if ( m_pParent ) -+ return; -+ -+ xx_image_description_v3 *pImageDescription = xx_color_management_surface_v3_get_preferred( m_pXXColorManagedSurface ); -+ xx_image_description_info_v3 *pImageDescInfo = xx_image_description_v3_get_information( pImageDescription ); -+ static const xx_image_description_info_v3_listener s_Listener -+ { -+ -+ }; -+ xx_image_description_info_v3_add_listener( pImageDescInfo, &s_Listener, this ); -+ wl_display_roundtrip( m_pBackend->GetDisplay() ); -+ -+ xx_image_description_info_v3_destroy( pImageDescInfo ); -+ xx_image_description_v3_destroy( pImageDescription ); -+ } -+ -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Done( xx_image_description_info_v3 *pImageDescInfo ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_ICCFile( xx_image_description_info_v3 *pImageDescInfo, int32_t nICCFd, uint32_t uICCSize ) -+ { -+ if ( nICCFd >= 0 ) -+ close( nICCFd ); -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Primaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_PrimariesNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uPrimaries ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TFPower( xx_image_description_info_v3 *pImageDescInfo, uint32_t uExp) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TFNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uTF) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->bExposeHDRSupport = ( cv_hdr_enabled && uTF == XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ); -+ pHDRInfo->eOutputEncodingEOTF = ( cv_hdr_enabled && uTF == XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ) ? EOTF_PQ : EOTF_Gamma22; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Luminances( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum, uint32_t uRefLum ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TargetPrimaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ) -+ { -+ auto *pDisplayColorimetry = &m_pBackend->m_Connector.m_DisplayColorimetry; -+ pDisplayColorimetry->primaries.r = glm::vec2{ nRedX / 10000.0f, nRedY / 10000.0f }; -+ pDisplayColorimetry->primaries.g = glm::vec2{ nGreenX / 10000.0f, nGreenY / 10000.0f }; -+ pDisplayColorimetry->primaries.b = glm::vec2{ nBlueX / 10000.0f, nBlueY / 10000.0f }; -+ pDisplayColorimetry->white = glm::vec2{ nWhiteX / 10000.0f, nWhiteY / 10000.0f }; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TargetLuminance( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Target_MaxCLL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxCLL ) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->uMaxContentLightLevel = uMaxCLL; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Target_MaxFALL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxFALL ) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->uMaxFrameAverageLuminance = uMaxFALL; -+ } -+ -+ // -+ - void CWaylandPlane::Wayland_FractionalScale_PreferredScale( wp_fractional_scale_v1 *pFractionalScale, uint32_t uScale ) - { - if ( m_uFractionalScale != uScale ) -@@ -1258,6 +1410,39 @@ namespace gamescope - wl_registry_destroy( pRegistry ); - pRegistry = nullptr; - -+ if ( m_pXXColorManager ) -+ { -+ m_XXColorManagerFeatures.bSupportsGamescopeColorManagement = [this]() -> bool -+ { -+ // Features -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_PARAMETRIC ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_PRIMARIES ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_MASTERING_DISPLAY_PRIMARIES ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_EXTENDED_TARGET_VOLUME ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_LUMINANCES ) ) -+ return false; -+ -+ // Transfer Functions -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eTransferFunctions, XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_SRGB ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eTransferFunctions, XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ) ) -+ return false; -+ // TODO: Need scRGB -+ -+ // Primaries -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.ePrimaries, XX_COLOR_MANAGER_V3_PRIMARIES_SRGB ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.ePrimaries, XX_COLOR_MANAGER_V3_PRIMARIES_BT2020 ) ) -+ return false; -+ -+ return true; -+ }(); -+ } -+ - m_pLibDecor = libdecor_new( m_pDisplay, &s_LibDecorInterface ); - if ( !m_pLibDecor ) - { -@@ -1829,7 +2014,7 @@ namespace gamescope - - bool CWaylandBackend::SupportsColorManagement() const - { -- return m_pFrogColorMgmtFactory != nullptr; -+ return m_pFrogColorMgmtFactory != nullptr || ( m_pXXColorManager != nullptr && m_XXColorManagerFeatures.bSupportsGamescopeColorManagement ); - } - - void CWaylandBackend::UpdateCursor() -@@ -1947,6 +2132,11 @@ namespace gamescope - { - m_pFrogColorMgmtFactory = (frog_color_management_factory_v1 *)wl_registry_bind( pRegistry, uName, &frog_color_management_factory_v1_interface, 1u ); - } -+ else if ( !strcmp( pInterface, xx_color_manager_v3_interface.name ) ) -+ { -+ m_pXXColorManager = (xx_color_manager_v3 *)wl_registry_bind( pRegistry, uName, &xx_color_manager_v3_interface, 1u ); -+ xx_color_manager_v3_add_listener( m_pXXColorManager, &s_XXColorManagerListener, this ); -+ } - else if ( !strcmp( pInterface, zwp_pointer_constraints_v1_interface.name ) ) - { - m_pPointerConstraints = (zwp_pointer_constraints_v1 *)wl_registry_bind( pRegistry, uName, &zwp_pointer_constraints_v1_interface, 1u ); -@@ -2064,6 +2254,25 @@ namespace gamescope - UpdateCursor(); - } - -+ // XX Color Manager -+ -+ void CWaylandBackend::Wayland_XXColorManager_SupportedIntent( xx_color_manager_v3 *pXXColorManager, uint32_t uRenderIntent ) -+ { -+ m_XXColorManagerFeatures.eRenderIntents.push_back( static_cast( uRenderIntent ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedFeature( xx_color_manager_v3 *pXXColorManager, uint32_t uFeature ) -+ { -+ m_XXColorManagerFeatures.eFeatures.push_back( static_cast( uFeature ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedTFNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uTF ) -+ { -+ m_XXColorManagerFeatures.eTransferFunctions.push_back( static_cast( uTF ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedPrimariesNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uPrimaries ) -+ { -+ m_XXColorManagerFeatures.ePrimaries.push_back( static_cast( uPrimaries ) ); -+ } -+ - /////////////////////// - // CWaylandInputThread - /////////////////////// -diff --git a/src/backend.h b/src/backend.h -index 4f91fe7..85783c9 100644 ---- a/src/backend.h -+++ b/src/backend.h -@@ -44,6 +44,7 @@ namespace gamescope - // target/mapping values for the display brightness for undocking from a HDR display, - // but don't want to expose HDR there as it is not good. - bool bExposeHDRSupport = false; -+ bool bAlwaysPatchEdid = false; - - // The output encoding to use for HDR output. - // For typical HDR10 displays, this will be PQ. -@@ -62,7 +63,7 @@ namespace gamescope - - bool ShouldPatchEDID() const - { -- return IsHDRG22(); -+ return bAlwaysPatchEdid || IsHDRG22(); - } - - bool IsHDR10() const --- -2.45.2 - - -From 691c72b319efd2c4dcf73aa44e89e5f117cd00c3 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:51:55 +0100 -Subject: [PATCH 14/19] steamcompmgr: Fix Disable Frame Limit functionality - ---- - src/steamcompmgr.cpp | 23 +++++------------------ - 1 file changed, 5 insertions(+), 18 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 60ddbbe..1de35e7 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -794,33 +794,18 @@ static void _update_app_target_refresh_cycle() - if ( !GetBackend()->GetCurrentConnector() ) - return; - -- static gamescope::GamescopeScreenType last_type; -- static int last_target_fps; -- static bool first = true; -- - gamescope::GamescopeScreenType type = GetBackend()->GetCurrentConnector()->GetScreenType(); -- int target_fps = g_nCombinedAppRefreshCycleOverride[type]; - -- if ( !first && type == last_type && last_target_fps == target_fps ) -- { -- return; -- } -+ int target_fps = g_nCombinedAppRefreshCycleOverride[type]; - -- last_type = type; -- last_target_fps = target_fps; -- first = false; -+ g_nDynamicRefreshRate[ type ] = 0; -+ g_nSteamCompMgrTargetFPS = 0; - - if ( !target_fps ) - { -- g_nDynamicRefreshRate[ type ] = 0; -- g_nSteamCompMgrTargetFPS = 0; - return; - } - -- auto rates = GetBackend()->GetCurrentConnector()->GetValidDynamicRefreshRates(); -- -- g_nDynamicRefreshRate[ type ] = 0; -- - if ( g_nCombinedAppRefreshCycleChangeFPS[ type ] ) - { - g_nSteamCompMgrTargetFPS = target_fps; -@@ -828,6 +813,8 @@ static void _update_app_target_refresh_cycle() - - if ( g_nCombinedAppRefreshCycleChangeRefresh[ type ] ) - { -+ auto rates = GetBackend()->GetCurrentConnector()->GetValidDynamicRefreshRates(); -+ - // Find highest mode to do refresh doubling with. - for ( auto rate = rates.rbegin(); rate != rates.rend(); rate++ ) - { --- -2.45.2 - - -From 69610ec52429fecbe94c4c042cc42ab43e0491f8 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 18:22:11 +0100 -Subject: [PATCH 15/19] steamcompmgr: Relative mouse fixes and improvements - ---- - src/steamcompmgr.cpp | 21 ++++++++++++++++++--- - src/steamcompmgr.hpp | 3 +++ - src/wlserver.cpp | 9 ++++++--- - 3 files changed, 27 insertions(+), 6 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 1de35e7..9c98f9c 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -94,6 +94,10 @@ - #include "Utils/Process.h" - #include "Utils/Algorithm.h" - -+#include "wlr_begin.hpp" -+#include "wlr/types/wlr_pointer_constraints_v1.h" -+#include "wlr_end.hpp" -+ - #if HAVE_AVIF - #include "avif/avif.h" - #endif -@@ -1383,8 +1387,19 @@ MouseCursor::MouseCursor(xwayland_ctx_t *ctx) - void MouseCursor::UpdatePosition() - { - wlserver_lock(); -- m_x = wlserver.mouse_surface_cursorx; -- m_y = wlserver.mouse_surface_cursory; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ if ( pConstraint && pConstraint->current.cursor_hint.enabled ) -+ { -+ m_x = pConstraint->current.cursor_hint.x; -+ m_y = pConstraint->current.cursor_hint.y; -+ m_bConstrained = true; -+ } -+ else -+ { -+ m_x = wlserver.mouse_surface_cursorx; -+ m_y = wlserver.mouse_surface_cursory; -+ m_bConstrained = false; -+ } - wlserver_unlock(); - } - -@@ -7600,7 +7615,7 @@ steamcompmgr_main(int argc, char **argv) - ( global_focus.cursor && global_focus.cursor->imageEmpty() ) && - ( !window_is_steam( global_focus.inputFocusWindow ) ); - -- const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed -+ const bool bHasPointerConstraint = global_focus.cursor->IsConstrained(); - - uint32_t uAppId = global_focus.inputFocusWindow - ? global_focus.inputFocusWindow->appID -diff --git a/src/steamcompmgr.hpp b/src/steamcompmgr.hpp -index 7c2da8c..b009ac7 100644 ---- a/src/steamcompmgr.hpp -+++ b/src/steamcompmgr.hpp -@@ -95,6 +95,8 @@ public: - void GetDesiredSize( int& nWidth, int &nHeight ); - - void checkSuspension(); -+ -+ bool IsConstrained() const { return m_bConstrained; } - private: - - bool getTexture(); -@@ -102,6 +104,7 @@ private: - void updateCursorFeedback( bool bForce = false ); - - int m_x = 0, m_y = 0; -+ bool m_bConstrained = false; - int m_hotspotX = 0, m_hotspotY = 0; - - gamescope::OwningRc m_texture; -diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 1852be9..bdacff4 100644 ---- a/src/wlserver.cpp -+++ b/src/wlserver.cpp -@@ -2243,7 +2243,9 @@ static void wlserver_warp_to_constraint_hint() - double sx = pConstraint->current.cursor_hint.x; - double sy = pConstraint->current.cursor_hint.y; - -- wlserver_mousewarp( sx, sy, 0, true ); -+ wlserver.mouse_surface_cursorx = sx; -+ wlserver.mouse_surface_cursory = sy; -+ wlr_seat_pointer_warp( wlserver.wlr.seat, sx, sy ); - } - } - -@@ -2256,6 +2258,8 @@ static void wlserver_update_cursor_constraint() - { - wlserver.mouse_constraint_requires_warp = false; - -+ wlserver_warp_to_constraint_hint(); -+ - if (!pixman_region32_contains_point(pRegion, floor(wlserver.mouse_surface_cursorx), floor(wlserver.mouse_surface_cursory), NULL)) - { - int nboxes; -@@ -2265,8 +2269,7 @@ static void wlserver_update_cursor_constraint() - wlserver.mouse_surface_cursorx = std::clamp( wlserver.mouse_surface_cursorx, boxes[0].x1, boxes[0].x2); - wlserver.mouse_surface_cursory = std::clamp( wlserver.mouse_surface_cursory, boxes[0].y1, boxes[0].y2); - -- wlr_seat_pointer_notify_motion( wlserver.wlr.seat, 0, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory ); -- wlr_seat_pointer_notify_frame( wlserver.wlr.seat ); -+ wlr_seat_pointer_warp( wlserver.wlr.seat, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory ); - } - } - } --- -2.45.2 - - -From 1f15714bc37a246c7c7d175970bef5070b7d5649 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 18:30:11 +0100 -Subject: [PATCH 16/19] steamcompmgr: Fix return value of avifImageRGBToYUV - being ignored - ---- - src/steamcompmgr.cpp | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 9c98f9c..1861f9d 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -2712,7 +2712,11 @@ paint_all(bool async) - rgbAvifImage.pixels = (uint8_t *)imageData.data(); - rgbAvifImage.rowBytes = g_nOutputWidth * kCompCnt * sizeof( uint16_t ); - -- avifImageRGBToYUV( pAvifImage, &rgbAvifImage ); // Not really! See Matrix Coefficients IDENTITY above. -+ if ( ( avifResult = avifImageRGBToYUV( pAvifImage, &rgbAvifImage ) ) != AVIF_RESULT_OK ) // Not really! See Matrix Coefficients IDENTITY above. -+ { -+ xwm_log.errorf( "Failed to convert RGB to YUV: %u", avifResult ); -+ return; -+ } - - avifEncoder *pEncoder = avifEncoderCreate(); - defer( avifEncoderDestroy( pEncoder ) ); --- -2.45.2 - - -From bfebd15dd6b3141e1ed5ee4bf768dc0d50c9660f Mon Sep 17 00:00:00 2001 -From: psykose -Date: Sat, 6 Jul 2024 20:52:50 +0200 -Subject: [PATCH 17/19] utils: include limits.h for PATH_MAX - ---- - src/Utils/Process.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/Utils/Process.cpp b/src/Utils/Process.cpp -index 32c52f1..9e3f758 100644 ---- a/src/Utils/Process.cpp -+++ b/src/Utils/Process.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - #include --- -2.45.2 - - -From 7fe73df4bcf71579203332baa2f3cf47506bc560 Mon Sep 17 00:00:00 2001 -From: Julian Orth -Date: Wed, 24 Jul 2024 12:40:01 +0200 -Subject: [PATCH 18/19] wayland_backend: round surface size towards infinity - -Otherwise, if the scale is larger than the texture size, the surface -size would be 0. - -Signed-off-by: Julian Orth ---- - src/Backends/WaylandBackend.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 1a09acc..cc76f62 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1083,8 +1083,8 @@ namespace gamescope - .flSrcY = 0.0, - .flSrcWidth = double( pLayer->tex->width() ), - .flSrcHeight = double( pLayer->tex->height() ), -- .nDstWidth = int32_t( pLayer->tex->width() / double( pLayer->scale.x ) ), -- .nDstHeight = int32_t( pLayer->tex->height() / double( pLayer->scale.y ) ), -+ .nDstWidth = int32_t( ceil( pLayer->tex->width() / double( pLayer->scale.x ) ) ), -+ .nDstHeight = int32_t( ceil( pLayer->tex->height() / double( pLayer->scale.y ) ) ), - .eColorspace = pLayer->colorspace, - .bOpaque = pLayer->zpos == g_zposBase, - .uFractionalScale = GetScale(), --- -2.45.2 - - -From 7ae5e0d2a75de06e267c47ca3cd3cddedd1d7416 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Wed, 24 Jul 2024 13:42:21 -0400 -Subject: [PATCH 19/19] color_helpers: Clang warning fixes - ---- - src/color_bench.cpp | 8 ++++---- - src/color_helpers.cpp | 11 +++++++++-- - src/color_helpers.h | 11 ++++++++++- - src/color_helpers_impl.h | 20 ++++++++++++++++++++ - src/color_tests.cpp | 6 +++--- - src/rendervulkan.hpp | 9 +++++---- - src/steamcompmgr.cpp | 6 +++++- - 7 files changed, 56 insertions(+), 15 deletions(-) - create mode 100644 src/color_helpers_impl.h - -diff --git a/src/color_bench.cpp b/src/color_bench.cpp -index 9c9d986..1058986 100644 ---- a/src/color_bench.cpp -+++ b/src/color_bench.cpp -@@ -4,10 +4,10 @@ - #include - #include "Utils/Algorithm.h" - --#include "color_helpers.h" -+#include "color_helpers_impl.h" - --const uint32_t nLutSize1d = 4096; --const uint32_t nLutEdgeSize3d = 17; -+using color_bench::nLutEdgeSize3d; -+using color_bench::nLutSize1d; - - uint16_t lut1d[nLutSize1d*4]; - uint16_t lut3d[nLutEdgeSize3d*nLutEdgeSize3d*nLutEdgeSize3d*4]; -@@ -38,7 +38,7 @@ static void BenchmarkCalcColorTransform(EOTF inputEOTF, benchmark::State &state) - float flGain = 1.0f; - - for (auto _ : state) { -- calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, inputColorimetry, inputEOTF, - outputEncodingColorimetry, EOTF_Gamma22, - destVirtualWhite, k_EChromaticAdapatationMethod_XYZ, - colorMapping, nightmode, tonemapping, nullptr, flGain ); -diff --git a/src/color_helpers.cpp b/src/color_helpers.cpp -index 18d3ee6..2075eca 100644 ---- a/src/color_helpers.cpp -+++ b/src/color_helpers.cpp -@@ -1,4 +1,5 @@ --#include "color_helpers.h" -+#define COLOR_HELPERS_CPP -+#include "color_helpers_impl.h" - - #include - #include -@@ -213,7 +214,11 @@ inline void lerp_rgb(float* out, const float* a, const float* b, const float* c, - - inline float ClampAndSanitize( float a, float min, float max ) - { -+#ifndef __FAST_MATH__ - return std::isfinite( a ) ? std::min(std::max(min, a), max) : min; -+#else -+ return std::min(std::max(min, a), max); -+#endif - } - - // Adapted from: -@@ -665,8 +670,9 @@ inline T applyShaper( const T & input, EOTF source, EOTF dest, const tonemapping - - bool g_bHuePreservationWhenClipping = false; - -+template - void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, -- lut3d_t * pLut3d, int nLutEdgeSize3d, -+ lut3d_t * pLut3d, - const displaycolorimetry_t & source, EOTF sourceEOTF, - const displaycolorimetry_t & dest, EOTF destEOTF, - const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, -@@ -679,6 +685,7 @@ void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, - // The 3d lut should be considered a 'matched' pair where the transform is only complete - // when applying both. I.e., you can put ANY transform in here, and it should work. - -+ static constexpr int32_t nLutEdgeSize3d = static_cast(lutEdgeSize3d); - if ( pShaper ) - { - float flScale = 1.f / ( (float) nLutSize1d - 1.f ); -diff --git a/src/color_helpers.h b/src/color_helpers.h -index 319bfc7..66213e1 100644 ---- a/src/color_helpers.h -+++ b/src/color_helpers.h -@@ -363,14 +363,23 @@ bool LoadCubeLut( lut3d_t * lut3d, const char * filename ); - // If the white points differ, this performs an absolute colorimetric match - // Look luts are optional, but if specified applied in the sourceEOTF space - -+template - void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, -- lut3d_t * pLut3d, int nLutEdgeSize3d, -+ lut3d_t * pLut3d, - const displaycolorimetry_t & source, EOTF sourceEOTF, - const displaycolorimetry_t & dest, EOTF destEOTF, - const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, - const colormapping_t & mapping, const nightmode_t & nightmode, const tonemapping_t & tonemapping, - const lut3d_t * pLook, float flGain ); - -+#define REGISTER_LUT_EDGE_SIZE(size) template void calcColorTransform<(size)>( lut1d_t * pShaper, int nLutSize1d, \ -+ lut3d_t * pLut3d, \ -+ const displaycolorimetry_t & source, EOTF sourceEOTF, \ -+ const displaycolorimetry_t & dest, EOTF destEOTF, \ -+ const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, \ -+ const colormapping_t & mapping, const nightmode_t & nightmode, const tonemapping_t & tonemapping, \ -+ const lut3d_t * pLook, float flGain ) -+ - // Build colorimetry and a gamut mapping for the given SDR configuration - // Note: the output colorimetry will use the native display's white point - // Only the color gamut will change -diff --git a/src/color_helpers_impl.h b/src/color_helpers_impl.h -new file mode 100644 -index 0000000..3e8c2d5 ---- /dev/null -+++ b/src/color_helpers_impl.h -@@ -0,0 +1,20 @@ -+#pragma once -+#include "color_helpers.h" -+ -+namespace rendervulkan { -+ static constexpr uint32_t s_nLutEdgeSize3d = 17; -+ static constexpr uint32_t s_nLutSize1d = 4096; -+} -+ -+namespace color_bench { -+ static constexpr uint32_t nLutEdgeSize3d = 17; -+ static constexpr uint32_t nLutSize1d = 4096; -+} -+ -+namespace ns_color_tests { -+ [[maybe_unused]] static constexpr uint32_t nLutEdgeSize3d = 17; -+} -+ -+#ifdef COLOR_HELPERS_CPP -+REGISTER_LUT_EDGE_SIZE(rendervulkan::s_nLutEdgeSize3d); -+#endif -\ No newline at end of file -diff --git a/src/color_tests.cpp b/src/color_tests.cpp -index 66aae90..2d682bf 100644 ---- a/src/color_tests.cpp -+++ b/src/color_tests.cpp -@@ -1,12 +1,12 @@ - #include "color_helpers.h" - #include - --#include -+//#include - #include - - /* -+using ns_color_tests::nLutEdgeSize3d; - const uint32_t nLutSize1d = 4096; --const uint32_t nLutEdgeSize3d = 17; - - uint16_t lut1d[nLutSize1d*4]; - uint16_t lut3d[nLutEdgeSize3d*nLutEdgeSize3d*nLutEdgeSize3d*4]; -@@ -36,7 +36,7 @@ static void BenchmarkCalcColorTransform(EOTF inputEOTF, benchmark::State &state) - float flGain = 1.0f; - - for (auto _ : state) { -- calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, inputColorimetry, inputEOTF, - outputEncodingColorimetry, EOTF_Gamma22, - colorMapping, nightmode, tonemapping, nullptr, flGain ); - for ( size_t i=0, end = lut1d_float.dataR.size(); i - - #include "main.hpp" --#include "color_helpers.h" -+ - #include "gamescope_shared.h" - #include "backend.h" - -@@ -415,7 +415,7 @@ struct wlr_renderer *vulkan_renderer_create( void ); - - using mat3x4 = std::array, 3>; - --#include "color_helpers.h" -+#include "color_helpers_impl.h" - - struct gamescope_color_mgmt_t - { -@@ -453,8 +453,9 @@ struct gamescope_color_mgmt_t - bool operator != (const gamescope_color_mgmt_t&) const = default; - }; - --static constexpr uint32_t s_nLutEdgeSize3d = 17; --static constexpr uint32_t s_nLutSize1d = 4096; -+//namespace members from "color_helpers_impl.h": -+using rendervulkan::s_nLutEdgeSize3d; -+using rendervulkan::s_nLutSize1d; - - struct gamescope_color_mgmt_luts - { -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 1861f9d..4a9d567 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -315,7 +315,7 @@ create_color_mgmt_luts(const gamescope_color_mgmt_t& newColorMgmt, gamescope_col - buildPQColorimetry( &inputColorimetry, &colorMapping, displayColorimetry ); - } - -- calcColorTransform( &g_tmpLut1d, s_nLutSize1d, &g_tmpLut3d, s_nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &g_tmpLut1d, s_nLutSize1d, &g_tmpLut3d, inputColorimetry, inputEOTF, - outputEncodingColorimetry, newColorMgmt.outputEncodingEOTF, - newColorMgmt.outputVirtualWhite, newColorMgmt.chromaticAdaptationMode, - colorMapping, newColorMgmt.nightmode, tonemapping, pLook, flGain ); -@@ -5029,7 +5029,11 @@ steamcompmgr_latch_frame_done( steamcompmgr_win_t *w, uint64_t vblank_idx ) - - static inline float santitize_float( float f ) - { -+#ifndef __FAST_MATH__ - return ( std::isfinite( f ) ? f : 0.f ); -+#else -+ return f; -+#endif - } - - static void --- -2.45.2 - From 4e1d2ec23d8608e7a9cba69b86fe73e6e929920a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 12:11:35 -0700 Subject: [PATCH 06/58] chore: Add newer wayland spec file --- spec_files/gamescope/gamescope.spec | 3 +- .../gamescope/wayland/emersion-gpg-key.asc | Bin 0 -> 7501 bytes spec_files/gamescope/wayland/wayland.spec | 449 ++++++++++++++++++ 3 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 spec_files/gamescope/wayland/emersion-gpg-key.asc create mode 100644 spec_files/gamescope/wayland/wayland.spec diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 32d173aecd..b3ca437b16 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -50,7 +50,7 @@ BuildRequires: pkgconfig(xres) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(vulkan) BuildRequires: pkgconfig(wayland-scanner) -BuildRequires: pkgconfig(wayland-server) +BuildRequires: pkgconfig(wayland-server) >= 1.23.0 BuildRequires: pkgconfig(wayland-protocols) >= 1.17 BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(sdl2) @@ -76,6 +76,7 @@ BuildRequires: /usr/bin/glslangValidator BuildRequires: libdecor-devel BuildRequires: libXdamage-devel BuildRequires: xorg-x11-server-Xwayland-devel +BuildRequires: lcms-devel BuildRequires: git # libliftoff hasn't bumped soname, but API/ABI has changed for 0.2.0 release diff --git a/spec_files/gamescope/wayland/emersion-gpg-key.asc b/spec_files/gamescope/wayland/emersion-gpg-key.asc new file mode 100644 index 0000000000000000000000000000000000000000..cc3b6a06af86e73144a2da89ca2f6616fcdd9dcb GIT binary patch literal 7501 zcmbu^RZtw-mImOa(FPhCcWvC=f;8?L+#$i;2@nFoT^kSX1SbRuZowhAJA~j6EZCfL zr>5q-%+%D}*Y*6>UjO=cCJ>CI`+Sm&00E4+lUMHnF*%d>@6gIva#nGHK(5Wpfao_)vfTwE$j?E(N zu2zf_9L`}YOlF__^iIaytd|W_-EOJT{8VhVI$&3%Bjpui|Ju0?)?$9oginYa#;WxJ!Rv5w=DWU-)lcr ztgzAj+E=>Pq4UGnV8mM1h%mZu1>hh65Sl2hoUGhE>|C6wMc=qMds@8lg#Fiq!`fXu z3aEpGhkyo<0Foi1V1Uq25rHTKXh0A;1`;6<5dlbv03-?`q(S0)fip~=VWk(rws*1D z{WpImm?|IxP0ik;AcH`Xy}tqIAjp5sC9ffXLcLD-W>o~)AXAd>S3YQ#ES5=u@7vhG z{c!=lHrQ(HPmXp3&lu?OrF7KM(kG=?&lM@WdOg0}P;=ff=1iPP%WHDg)J*ljpxQx3 zB8UmeGy#Q4ZLFRwZrNy{GwuKp%%K*$;@vIyGSlK+aES-U0UE~cGzfsO$J)JVt7soV zQJ2=Q!yo{S=X|c$R!B?zKslxk??(?mBG46l%z<>LL@`FN7(A>@!#&nHhFiKzIIL=P z9knLn{lT@&X8^K>!Chs+Y(6C{`M|mWv8Y6s=qsptyzFVi<#bRqQ=M0cz-AbF@~W2Z z{9+ZCN7`OS>8~G->J~=cApl)2FZc4Cd};#6Y0u^A$S%UX>k*a0--D}Q!7^WPyT(F{^7LUi8+GMuPedH*!46OLA>%7P({aTRYQi&tPL{+- za9+LJWHs`ufG|lox#(dEJ`7T@F+Smjy}Mlq+=Y~cveNLsmn>6vyz*}kO3>m?IHaOX z%1P-Zk$6%x_olw))$B94BaP`7j2L2TX^NA^(?2fgfU94g5Ro$u>4y@KR7>lsc71qOrdFPglVIrz_(s_zN-!HE!kPpRN`fv0qF#e&RaC)23Yg zpxyI#DS1>f0hcRvOh}cTQ<`8Wd;HMPiUgy$TSJWk&j!bVYDM?bR4t7lW&KWyhiZ`99# zjWeO@s2u)k69{;11U)NQT23nbsF3hNe;+C+<>5B zMO@u|BHR*ARa=ND_xVj%QDkIpjn!utk2``l8KND`2#1b@yjJ{L*hS%T8uE5GHPYwG zlMaRWs)*uCAKnO&%E=YqdwhJDJM1e!$i}L^`W2cXH+|uyuQc>!WD7~(xmmR7kcT%Y z@R^%WQEg_F$uP&M-N5K)9{I3dw9yK)S&U%`uZt@kk&hR_c9OL{JJ zx#SJL*|?S0I?R5NvfrR2iVZ1l%^Q(!U*d8teY~X^PFRZqk|RM7&;cmOKs~G}ufKVu z1jP~76i?@H96$h7a8fN^uh-eRYpalm-@GAVPQ$0NAQ3{5SKtIc)H|;J$zHPHb?<2k z6FH!DL&l}1dH`bZd-Zcypr!#&$C}k1wz)fnDvq4-I;wgoNiTZfP4<3Hl@o0P5#VVCze)~l3P`th9yNE;7yYb0sbw^m*)e^|)Wi$-{# zNL>k39I{gyaT&*o7y3VRzoBgTtarnQXy#Un+;?54#d*!@9$s?b>FVkoH{Wzeao zNX=f@)YCWicil*=Be?nec9P`Eh{^FvX$_ z4b)yV?O5eAQExh+dk+^nN$rR#bp>|LJ$*;4x5EGtB@`b@{O%(GCpejjMI8MS3kl#& z#>qiHo@b)58IC*x$R8nVN(RuXZIp#9QzeT~ln#@O$|bH?rrrzlwVc!3B<`@$-W{De zR8#buvdJ09T}5nKHD0nMIdHEd!V&3xIr0p{ka9)j1v0X}9rmTs)lhSlzDesD45*f? z*)1>{8a_Y1kU$Y2rPso%b>}%R5D8d+$)hz}T2z8xm<DyAa1rR9*In4syN=rxRe)l^#~ zsY*1>^651;kM~5=ra(n*~YzFf?T_65L zL|pkLJi1GCZzWt_U!1HUy*^mo9KaPnH~8pfXSP{JFI!RQNq1CctwO5GRMBm$a2(eG z)9+Tzk99{ynZcQ3LJ3#K7veo;X2ztRp6z=RC^J0$;=d5}Q}Tf9O4WAgdu`tcxu z0KQ-aDT<2e!`w2$^%f`y~7BuG0;Ljwg!v&U!oiV>4=Gi^5XGE#L5?*L*q zqplwEya-=4CXz{2)i70~j^t1Y{Gg7=Bh6Yn31S`cGG%2m-J&}p75=Y@jv(7NbI@K- zQDaF}eg+u6@efew6Ygo;N-)q{_qTu3bq>Exv|6=|;mpOT|CqJKQe{&_)G=vyD#Kg> z%G&ic0=^4v0{X$sc)3rv7mk;ct_1G`xiI?}ao*xhqN;z$uP2zr&g{A*YVf&LSC+=W>K9`v7=u~4_QT)9s>p?M}k?t zhOkdyGYN}MjBd@AA}yUdM!XrtcDwjiLnA{JMKogm5Mlj=pxm8jPILT*`U7|3u1P1` zjR9OoTX@AO7Paz++5|x%UHq>y=bZhJ8hK}uSr&4KPU&bb8$q2}zCC}n6Vh;=-d?L; znq)VjZuA>zZjNCMlwDJv(EK?(nk1-4Q}A1Y)5Ha6$>(}bo<@=;hAnOY_P-Zv^fwud zkwJ*Pj!OS@HT+jxE>~J*+)v>Q4DUea)ROQk87vX6gP;w+;8cWNUIPFZ+;e$?D!Uo< zEbCR#z|N&CM5+2vaw@(3(Dm2bPaHV?G(~=AuGTah)C#$s^;O|-ZS`rEk9r{JTZeI>p2}dZHo_ncWJSTmX&Hns>Zr!b6w&`mzw^YFH z#hhHJsGGaYCt^4Ei=M1Vg$~0O24*MJUKH9B>JOyCgRM3;?ABdVVHTdNx;CsTo9Qg= z@Bv8&9mz2f`C*RtZt@`@#p>C@ehsq$gC&F_1ndm@z6TsniR#Xe&RkEm9jd#&V<(Im zm6k}TMz#OQccvPlknudWBC-d8XlLoh3e!Fa`HgtLr`leahgV(oHZ2;H9KVXDym*se z*7(KF;@@*+*ej!i3_>oB7W$_vUqkFiP@U$VL_VG|dbZ@<+bh1EFD6*%rzE?qW6CiIbwl&eF|z9I!+TwBn9|mVUM7jdqS}*M0hS z$DW29eMaR*N#!SRWOl6cR2nZbkIOd40IsCHVY5XCt$MlFB~|-oPnHT=#i}JM8%MT8 zNEroU2#gdeZ#1)N0NYFjCB|!4bNG5%lgkO_lKFr0@`{7C$MxCs`VNA~ zly$zkl>}ubdF=I3R@mXkmb-gqItZ6;z}(!=k(IHwSX=QJit`E|?hcDl@Vf!?5yrp{x%vC7KrtSuNfa{35E^N(YGV)m$7`)CrCd zM8zEFQV3AadrCOUc?kDG2l7=*DLd#l(&M=jgU^!%p9S%icoh%X%) z+N@*x*H~AsM}I1Yl0C69htroZxfIee{Q{4qQ#QDVZo2N0p8G@8djC_p%do@#msmr0g`fjeN)z=8!iT?XDC$3|C zo(aVjaEoZ6L}%QnO4FU~E{nlg)SOG;$RoQFrq3B*f^&i1fZwJES#1=#`IlY*Xt3(& zc@{@epzS9<-idx>thVE~ME?_O?`6%TY;Nb`;vil$ogpd}W8x6}W>-0P{~>F3aqATA zbf1Ag6N`HlgvL|r;qvfQj1F)ovEWCA)&>O{wfhtoI@-E!1y>B=1inLEY*`#B{r(Qb zSLr~>L98y=wW<)C+!Q*7ntDpHChadxV@x4tyw<| zIoyU(r_X(Hw~zBwy@XgYi=~0|E-NIWoU(wL0|@3#(%m}(7=9X za(=I#7ThsnfA>Bu<{|B>p3Wewne3)rCCaLP9R#L3fU?iX?($Ki5QT6vu_~OJ3=Jp4 zg;%{B$8VE}@KulbC~VTle@4XKN@^O;t|5si+5c+q%%vp8JGVk8pP*&bM_6IO{dD5B zGY52T(_-8u9`@7{5EDA=L(t_Zogk7xn|3nvy@qgWMP-4_^0|lfqFUEe_XQtnhQ?AKvtv!ywP25cW7aCmx?3 z6nh^2crPOPL?q22g7%_iama|nmY;$mWVknx{y4k5(@x5di_=+Q>^@^k!$lMYg?)6n zB{-}V(Uz5WanTKJR1q}Z7Fn?}`3|bNAy&JNtiBmPj0|jYmD`xea|&~h!Ne)xKBTj3 zQJ8knp7E7=4=eB02tY}G=t)hlPA9+7!6Lq6>&#no{KWlvs3wfvGx&Jxb<02-3f{P> zwL?5x^^E+faG_zv>#D0|&E32d=iZYqR0_8{=)u39g~+6{wdQl)xdQ!)}opxuZXaG%3I!0m$ndhvJdjO``U!5OSD15SwU4 z5O8jHqb4{Ob5F7a@>^fYZ-}pJLbR;zGgD(yb6j&l{ixB`gr+4zP0N+ZKR_mIvjYK0 zV;8qU+i|Kg6_VBM`%eCoOiZRQpLdAZb)WEFFUK30g?wnojFY5COD;GZ|JXC30%Dt9 zTu>}a)`mPj3?)b)2N)|oNMyHe1%5M2F$ng&2OoG^!$%DiPE1S&c+}YQf+2oeZ15F(Qjt#~XRYXXG4C!n>gB zK*$sJo5qy03hF^fX8LmtRc`?r@``J+`&azext>oHJ0KI`dD#WMAd*gV+tT5?(%HAo z-&hCwTd0QT)-uW1ix_AlB8EtP*(^JxUP5xVNgE@ns8t&ZLXLALs{U19M*&5Vi2u6h z8GvM%|62>K^>+*12m9x9a=Q)zbPCre6E)S2S(I#k4%725od?kxcX;23RMm@yHCoRu z99Hnf-HFW*Hvc&hFU=0DAt9WJ#Z;*0JF6Pn53Bd4<7H**y8$0~&EwDDrSlwIRqLgH zlb%{lK}+RC;@>@u2(c=hCa#N9bDsdhu9Qu659Y&N-9IgSHxq#?O*^Z1#L$lg(Dv=g zq~y%6WZ{JxDko&)1fs@<7YRXLd6AeXw%M|`=Qp!)dYy{`yY~j?JUqc$Xi#m7!E2S?GAdi85luU z_X8WEw4VM+1J<}&#Qyp|$*d^xaoNRK zGaVhn!+&}Z7yi7r1Omt#yo@Fhw|`*Q-_26rgPfFb8E(jL zV{Tr~3q^H4e?N#M;4nN3KWNvH?6C1^uLZXlS$^U!RxsZ7%g;?ISI~;8HJ`%k*x!k1 zbx%_q8vGI4u43}R*KDt|Ft(rQxuZ!FTVYuS0jG+V+W8<$C_^>sV5U@c{aLN^G<6(f zQuhb)*7zI`6Gz1nA%n7fx{WLQjB^sf=WOvLrZims{bHKW%23@vU=?7J4F^Z3l+C~p^2FuFgn{u&&DvgyVLdYB@Hh9{C zC$jqbI#SlmGYPf0j65nVUj`QU_k(Ma?!2~~b7F)Owof81Van}}gm@-~{W z3a9=cxW`tBRICXzRXrUC)v+XPD5q-r+#ejjF3Cw>&G;*rOBSEXgwPY#7*1U z@Gj&pS_D3G*OLl!MM;cYq1&v%0)}7J={V=Gz~7Up8mHQA(5Ynpa)W3!5%lalZRbFt c{Xvt_^t+9&1Mxc&G4cAWKO0^zJ80tm2e!to7ytkO literal 0 HcmV?d00001 diff --git a/spec_files/gamescope/wayland/wayland.spec b/spec_files/gamescope/wayland/wayland.spec new file mode 100644 index 0000000000..05286fbca4 --- /dev/null +++ b/spec_files/gamescope/wayland/wayland.spec @@ -0,0 +1,449 @@ +Name: wayland +Version: 1.23.0 +Release: 2%{?dist} +Summary: Wayland Compositor Infrastructure + +# SPDX +License: MIT +URL: http://wayland.freedesktop.org/ +Source0: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz +Source1: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz.sig +Source2: emersion-gpg-key.asc + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: docbook-style-xsl +BuildRequires: doxygen +BuildRequires: expat-devel +BuildRequires: graphviz +BuildRequires: libxml2-devel +BuildRequires: libxslt +BuildRequires: meson +BuildRequires: pkgconfig(libffi) +BuildRequires: xmlto + +# For origin certification +BuildRequires: gnupg2 + +%description +Wayland is a protocol for a compositor to talk to its clients as well as a C +library implementation of that protocol. The compositor can be a standalone +display server running on Linux kernel modesetting and evdev input devices, +an X application, or a wayland client itself. The clients can be traditional +applications, X servers (rootless or fullscreen) or other display servers. + +%package devel +Summary: Development files for %{name} +Requires: libwayland-client%{?_isa} = %{version}-%{release} +Requires: libwayland-cursor%{?_isa} = %{version}-%{release} +Requires: libwayland-egl%{?_isa} = %{version}-%{release} +Requires: libwayland-server%{?_isa} = %{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package doc +Summary: Wayland development documentation +BuildArch: noarch +%description doc +Wayland development documentation + +%package -n libwayland-client +Summary: Wayland client library +%description -n libwayland-client +Wayland client library + +%package -n libwayland-cursor +Summary: Wayland cursor library +Requires: libwayland-client%{?_isa} = %{version}-%{release} +%description -n libwayland-cursor +Wayland cursor library + +%package -n libwayland-egl +Summary: Wayland egl library +%description -n libwayland-egl +Wayland egl library + +%package -n libwayland-server +Summary: Wayland server library +%description -n libwayland-server +Wayland server library + +%prep +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%autosetup -p1 + +%build +%meson +%meson_build + +%install +%meson_install + +%check +%meson_test + +%files devel +%{_bindir}/wayland-scanner +%{_includedir}/wayland-*.h +%{_libdir}/pkgconfig/wayland-*.pc +%{_libdir}/libwayland-*.so +%{_datadir}/aclocal/wayland-scanner.m4 +%dir %{_datadir}/wayland +%{_datadir}/wayland/wayland-scanner.mk +%{_datadir}/wayland/wayland.xml +%{_datadir}/wayland/wayland.dtd +%{_mandir}/man3/*.3* + +%files doc +%doc README.md +%{_datadir}/doc/wayland/ + +%files -n libwayland-client +%license COPYING +%{_libdir}/libwayland-client.so.0* + +%files -n libwayland-cursor +%license COPYING +%{_libdir}/libwayland-cursor.so.0* + +%files -n libwayland-egl +%license COPYING +%{_libdir}/libwayland-egl.so.1* + +%files -n libwayland-server +%license COPYING +%{_libdir}/libwayland-server.so.0* + +%changelog +* Sat Jul 20 2024 Fedora Release Engineering - 1.23.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 28 2024 Olivier Fourdan - 1.23.0-1 +- Update to 1.23.0 + +* Sat Jan 27 2024 Fedora Release Engineering - 1.22.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Sep 07 2023 José Expósito +- SPDX migration: license is already SPDX compatible + +* Sat Jul 22 2023 Fedora Release Engineering - 1.22.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Apr 04 2023 Kalev Lember - 1.22.0-1 +- Update to 1.22.0 + +* Sat Jan 21 2023 Fedora Release Engineering - 1.21.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Jul 26 2022 Mike Rochefort - 1.21.0-1 +- Update to 1.21.0 + +* Sat Jul 23 2022 Fedora Release Engineering - 1.20.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Mar 21 2022 Olivier Fourdan - 1.20.0-4 +- Close file descriptors not needed + rhbz#2062030 + +* Sat Jan 22 2022 Fedora Release Engineering - 1.20.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Jan 08 2022 Miro Hrončok - 1.20.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 + +* Thu Dec 16 2021 Kalev Lember - 1.20.0-1 +- Update to 1.20.0 + +* Fri Jul 23 2021 Fedora Release Engineering - 1.19.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Thu Jan 28 2021 Kalev Lember - 1.19.0-1 +- Update to 1.19.0 +- Switch to meson build system +- Drop old provides + +* Wed Jan 27 2021 Fedora Release Engineering - 1.18.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 1.18.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Feb 12 2020 Kalev Lember - 1.18.0-1 +- Update to 1.18.0 +- Drop no longer needed obsoletes/provides + +* Fri Jan 31 2020 Fedora Release Engineering - 1.17.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sat Jul 27 2019 Fedora Release Engineering - 1.17.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Mar 21 2019 Kalev Lember - 1.17.0-1 +- Update to 1.17.0 + +* Thu Mar 07 2019 Kalev Lember - 1.16.92-1 +- Update to 1.16.92 + +* Thu Feb 28 2019 Kalev Lember - 1.16.91-1 +- Update to 1.16.91 + +* Sun Feb 03 2019 Fedora Release Engineering - 1.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Sep 11 2018 Kalev Lember - 1.16.0-1 +- Update to 1.16.0 + +* Mon Aug 13 2018 Kalev Lember - 1.15.93-1 +- Update to 1.15.93 + +* Tue Jul 31 2018 Florian Weimer - 1.15.92-2 +- Rebuild with fixed binutils + +* Sun Jul 29 2018 Kalev Lember - 1.15.92-1 +- Update to 1.15.92 + +* Sat Jul 14 2018 Fedora Release Engineering - 1.15.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Apr 09 2018 Kalev Lember - 1.15.0-1 +- Update to 1.15.0 + +* Wed Apr 04 2018 Kalev Lember - 1.14.93-2 +- Make mesa-libwayland-egl obsoleting actually work + +* Tue Apr 03 2018 Kalev Lember - 1.14.93-1 +- Update to 1.14.93 + +* Tue Mar 20 2018 Kalev Lember - 1.14.92-1 +- Update to 1.14.92 +- Remove F22 upgrade path obsoletes + +* Sat Mar 03 2018 Igor Gnatenko - 1.14.91-2 +- Improve Obsoletes + +* Tue Feb 27 2018 Kalev Lember - 1.14.91-1 +- Update to 1.14.91 +- Add new libwayland-egl subpackage and obsolete mesa-libwayland-egl +- Remove ldconfig scriptlets + +* Fri Feb 09 2018 Fedora Release Engineering - 1.14.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Dec 12 2017 Kalev Lember - 1.14.0-2 +- cursor: Fix heap overflows when parsing malicious files (#1522638) + +* Wed Aug 09 2017 Kalev Lember - 1.14.0-1 +- Update to 1.14.0 + +* Wed Aug 02 2017 Kalev Lember - 1.13.93-1 +- Update to 1.13.93 + +* Sun Jul 30 2017 Florian Weimer - 1.13.92-2 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Kalev Lember - 1.13.92-1 +- Update to 1.13.92 + +* Wed Jul 19 2017 Kalev Lember - 1.13.91-1 +- Update to 1.13.91 + +* Thu Jun 1 2017 Owen Taylor otaylor@redhat.com> - 1.13.0-2 +- Add a patch fixing a build error with newer versions of graphviz + +* Wed Feb 22 2017 Kalev Lember - 1.13.0-1 +- Update to 1.13.0 + +* Sat Feb 11 2017 Fedora Release Engineering - 1.12.91-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Jan 25 2017 Kalev Lember - 1.12.91-1 +- Update to 1.12.91 + +* Wed Sep 21 2016 Kalev Lember - 1.12.0-1 +- Update to 1.12.0 + +* Wed Sep 14 2016 Kalev Lember - 1.11.94-1 +- Update to 1.11.94 + +* Thu Sep 08 2016 Kalev Lember - 1.11.93-1 +- Update to 1.11.93 + +* Wed Aug 31 2016 Kalev Lember - 1.11.92-1 +- Update to 1.11.92 + +* Wed Aug 17 2016 Kalev Lember - 1.11.91-1 +- Update to 1.11.91 +- Simplify -devel subpackage packaging +- Include license files in packaging + +* Wed Jun 01 2016 Kalev Lember - 1.11.0-1 +- Update to 1.11.0 + +* Wed May 25 2016 Kalev Lember - 1.10.93-1 +- Update to 1.10.93 + +* Wed May 18 2016 Kalev Lember - 1.10.92-1 +- Update to 1.10.92 + +* Sun May 08 2016 Kalev Lember - 1.10.91-1 +- Update to 1.10.91 + +* Thu Feb 18 2016 Kalev Lember - 1.10.0-1 +- Update to 1.10.0 + +* Thu Feb 04 2016 Kalev Lember - 1.9.92-1 +- Update to 1.9.92 + +* Wed Jan 20 2016 Kalev Lember - 1.9.91-1 +- Update to 1.9.91 + +* Tue Sep 22 2015 Kalev Lember - 1.9.0-1 +- Update to 1.9.0 +- Use make_install macro + +* Wed Sep 16 2015 Kalev Lember - 1.8.93-1 +- Update to 1.8.93 + +* Wed Sep 02 2015 Kalev Lember - 1.8.92-1 +- Update to 1.8.92 + +* Fri Aug 21 2015 Kalev Lember - 1.8.91-2 +- Split out wayland-doc subpackage for documentation + +* Fri Aug 21 2015 Kalev Lember - 1.8.91-1 +- Update to 1.8.91 + +* Mon Jul 20 2015 Adam Jackson 1.8.0-1 +- wayland 1.8.0 + +* Fri Jun 19 2015 Fedora Release Engineering - 1.7.92-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 26 2015 Adam Jackson 1.7.92-1 +- wayland 1.7.92 + +* Sat Feb 21 2015 Till Maas - 1.7.0-2 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Tue Feb 17 2015 Richard Hughes - 1.7.0-1 +- Wayland 1.7.0 + +* Fri Sep 19 2014 Kalev Lember - 1.6.0-1 +- Update to 1.6.0 +- Remove lib64 rpaths + +* Fri Aug 22 2014 Kevin Fenzi 1.5.91-1 +- Update to 1.5.90 + +* Mon Aug 18 2014 Fedora Release Engineering - 1.5.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Jul 02 2014 Adam Jackson 1.5.0-4 +- Update protocol: new surface error enums + +* Mon Jun 30 2014 Adam Jackson 1.5.0-3 +- Remove blocking flush patch as it actually introduces deadlocks now + +* Sun Jun 08 2014 Fedora Release Engineering - 1.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed May 21 2014 Richard Hughes - 1.5.0-1 +- Wayland 1.5.0 + +* Tue May 13 2014 Richard Hughes - 1.4.93-1 +- Wayland 1.4.93 + +* Fri Jan 24 2014 Richard Hughes - 1.4.0-1 +- Wayland 1.4.0 + +* Mon Jan 20 2014 Richard Hughes - 1.3.93-1 +- Wayland 1.3.93 + +* Sat Dec 21 2013 Ville Skyttä - 1.3.91-2 +- Call ldconfig in libwayland-cursor %%post* scripts. +- Run test suite during build. +- Compress snapshot tarballs with xz. + +* Tue Dec 17 2013 Richard Hughes - 1.3.91-1 +- Wayland 1.3.91 + +* Mon Nov 25 2013 Lubomir Rintel - 1.3.0-1 +- Wayland 1.3.0 + +* Mon Oct 07 2013 Adam Jackson 1.2.0-3 +- Don't use MSG_DONTWAIT in wl_connection_flush. + +* Sun Aug 04 2013 Fedora Release Engineering - 1.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 15 2013 Richard Hughes - 1.2.0-1 +- wayland 1.2.0 + +* Wed May 15 2013 Richard Hughes - 1.1.90-0.1.20130515 +- Update to a git snapshot based on what will become 1.1.90 + +* Tue Apr 16 2013 Richard Hughes - 1.1.0-1 +- wayland 1.1.0 + +* Wed Mar 27 2013 Richard Hughes - 1.0.6-1 +- wayland 1.0.6 + +* Thu Feb 21 2013 Adam Jackson 1.0.5-1 +- wayland 1.0.5 + +* Fri Feb 15 2013 Fedora Release Engineering - 1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Jan 02 2013 Adam Jackson 1.0.3-1 +- wayland 1.0.3 + +* Tue Oct 23 2012 Adam Jackson 1.0.0-1 +- wayland 1.0 + +* Thu Oct 18 2012 Adam Jackson 0.99.0-1 +- wayland 0.99.0 + +* Tue Sep 04 2012 Adam Jackson 0.95.0-1 +- wayland 0.95.0 (#843738) + +* Sun Jul 22 2012 Fedora Release Engineering - 0.89.0-2.20120424 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Apr 24 2012 Richard Hughes - 0.89.0-1 +- Update to a git snapshot based on 0.89.0 + +* Sat Feb 18 2012 Thorsten Leemhuis - 0.85.0-1 +- update to 0.85.0 +- adjust license, as upstream changed it to MIT +- update make-git-snapshot.sh to current locations and scheme +- drop common package, not needed anymore +- compositor is now in a separate package, hence reduce BuildRequires to what + is actually needed (a lot less) and adjust summary +- make usage of a git checkout in spec file optional +- a %%{?_isa} to requires where it makes sense + +* Sat Jan 14 2012 Fedora Release Engineering - 0.1-0.6.20101221 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 06 2011 Adam Jackson - 0.1-0.5.20101221 +- Rebuild for new libpng + +* Wed Jun 15 2011 Lubomir Rintel - 0.1-0.4.20101221 +- Install real compositor binary instead of a libtool wrapper + +* Mon Feb 07 2011 Fedora Release Engineering - 0.1-0.3.20101221 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Dec 21 2010 Adam Jackson 0.1-0.2.20101221 +- Today's git snap + +* Tue Nov 23 2010 Adam Jackson 0.1-0.2.20101123 +- Today's git snap +- Fix udev rule install (#653353) + +* Mon Nov 15 2010 Adam Jackson 0.1-0.1.20101111 +- Initial packaging From a1de71cbc5110ca52d464fcd0136e0c5db1d324f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 12:58:02 -0700 Subject: [PATCH 07/58] chore: Use pkgconfig --- spec_files/gamescope/gamescope.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index b3ca437b16..4c83504f4d 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -60,6 +60,7 @@ BuildRequires: (pkgconfig(wlroots) >= 0.18.0 with pkgconfig(wlroots) < 0.19.0) BuildRequires: (pkgconfig(libliftoff) >= 0.4.1 with pkgconfig(libliftoff) < 0.5) BuildRequires: pkgconfig(libcap) BuildRequires: pkgconfig(hwdata) +BuildRequires: pkgconfig(lcms2) BuildRequires: spirv-headers-devel # Enforce the the minimum EVR to contain fixes for all of: # CVE-2021-28021 CVE-2021-42715 CVE-2021-42716 CVE-2022-28041 CVE-2023-43898 @@ -76,7 +77,6 @@ BuildRequires: /usr/bin/glslangValidator BuildRequires: libdecor-devel BuildRequires: libXdamage-devel BuildRequires: xorg-x11-server-Xwayland-devel -BuildRequires: lcms-devel BuildRequires: git # libliftoff hasn't bumped soname, but API/ABI has changed for 0.2.0 release From 9f2550f3982664da6c22e2e4cf32da4d937ca5ff Mon Sep 17 00:00:00 2001 From: Zeglius <33781398+Zeglius@users.noreply.github.com> Date: Thu, 1 Aug 2024 22:55:36 +0200 Subject: [PATCH 08/58] fix: Prevent bluetooth preventing suspension (#1446) Better fix than pr 1390 addressing both, controllers unable to disconnect on suspension and devices not being able of entering suspension --- .../systemd/system/bluetooth.service.d/prevent_hanging.conf | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf diff --git a/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf b/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf new file mode 100644 index 0000000000..3d574c93ec --- /dev/null +++ b/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf @@ -0,0 +1,4 @@ +# Prevent freezing device with bluetooth controllers +[Unit] +Conflicts=sleep.target +Before=sleep.target \ No newline at end of file From c8cd94494eb0e71e732941d2a0ba2f9fc790372a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 15:33:29 -0700 Subject: [PATCH 09/58] fix: Remove files now handled by steamdeck-dsp --- .../wireplumber.conf.d/alsa-card0.conf | 23 ------------ .../wireplumber.conf.d/alsa-card1.conf | 36 ------------------- .../alsa-ps-controller.conf | 20 ----------- .../wireplumber/wireplumber.conf.d/bluez.conf | 25 ------------- 4 files changed, 104 deletions(-) delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf deleted file mode 100644 index 73255fb985..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf +++ /dev/null @@ -1,23 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "HD-Audio Generic" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "HD-Audio Generic" - } - ] - actions = { - update-props = { - priority.driver = 900 - priority.session = 900 - api.alsa.period-size = 256 - api.alsa.headroom = 1024 - session.suspend-timeout-seconds = 0 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf deleted file mode 100644 index 4f2e57a293..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf +++ /dev/null @@ -1,36 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "acp5x" - } - { - node.name = "~alsa_input.*" - alsa.card_name = "acp6x" - } - { - node.name = "~alsa_input.*" - alsa.card_name = "sof-nau8821-max" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "acp5x" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "acp6x" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "sof-nau8821-max" - } - ] - actions = { - update-props = { - session.suspend-timeout-seconds = 0 - api.alsa.headroom = 1024 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf deleted file mode 100644 index e0c2a5ff72..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf +++ /dev/null @@ -1,20 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "Wireless Controller" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "Wireless Controller" - } - ] - actions = { - update-props = { - priority.driver = 90 - priority.session = 90 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf deleted file mode 100644 index 75e8f21a9c..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf +++ /dev/null @@ -1,25 +0,0 @@ -monitor.bluez.properties = { - ## we only want these audio profiles: - ## 0000110a-0000-1000-8000-00805f9b34fb Audio Source - ## 0000110b-0000-1000-8000-00805f9b34fb Audio Sink - ## 0000110d-0000-1000-8000-00805f9b34fb Advanced Audio Distribution - - ## And only this one headset related profile: - ## disabled: 00001112-0000-1000-8000-00805f9b34fb hsp_ag - ## disabled: 00001108-0000-1000-8000-00805f9b34fb hsp_hs - ## disabled: 0000111e-0000-1000-8000-00805f9b34fb hfp_hf - ## enabled : 0000111f-0000-1000-8000-00805f9b34fb hfp_ag - ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - ## NOTE: This used to be in .headset-roles, which was merged into .roles - ## NOTE: check hfphsp-backend below as that also affects hs/hf profiles - ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - bluez5.roles = "[ a2dp_sink a2dp_source hfp_ag ]" - - ## HFP/HSP backend (default: native). - ## Available values: any, none, hsphfpd, ofono, native - ## setting this to "none" disables all headset roles - bluez5.hfphsp-backend = "native" - - ## Disable dummy AVRCP player - bluez5.dummy-avrcp-player = false -} From 991b6044ee58e274ecd31133d1b82ef408b90126 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 15:33:54 -0700 Subject: [PATCH 10/58] chore: Remove wayland spec file --- .../gamescope/wayland/emersion-gpg-key.asc | Bin 7501 -> 0 bytes spec_files/gamescope/wayland/wayland.spec | 449 ------------------ 2 files changed, 449 deletions(-) delete mode 100644 spec_files/gamescope/wayland/emersion-gpg-key.asc delete mode 100644 spec_files/gamescope/wayland/wayland.spec diff --git a/spec_files/gamescope/wayland/emersion-gpg-key.asc b/spec_files/gamescope/wayland/emersion-gpg-key.asc deleted file mode 100644 index cc3b6a06af86e73144a2da89ca2f6616fcdd9dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7501 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 diff --git a/spec_files/gamescope/wayland/wayland.spec b/spec_files/gamescope/wayland/wayland.spec deleted file mode 100644 index 05286fbca4..0000000000 --- a/spec_files/gamescope/wayland/wayland.spec +++ /dev/null @@ -1,449 +0,0 @@ -Name: wayland -Version: 1.23.0 -Release: 2%{?dist} -Summary: Wayland Compositor Infrastructure - -# SPDX -License: MIT -URL: http://wayland.freedesktop.org/ -Source0: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz -Source1: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz.sig -Source2: emersion-gpg-key.asc - -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: docbook-style-xsl -BuildRequires: doxygen -BuildRequires: expat-devel -BuildRequires: graphviz -BuildRequires: libxml2-devel -BuildRequires: libxslt -BuildRequires: meson -BuildRequires: pkgconfig(libffi) -BuildRequires: xmlto - -# For origin certification -BuildRequires: gnupg2 - -%description -Wayland is a protocol for a compositor to talk to its clients as well as a C -library implementation of that protocol. The compositor can be a standalone -display server running on Linux kernel modesetting and evdev input devices, -an X application, or a wayland client itself. The clients can be traditional -applications, X servers (rootless or fullscreen) or other display servers. - -%package devel -Summary: Development files for %{name} -Requires: libwayland-client%{?_isa} = %{version}-%{release} -Requires: libwayland-cursor%{?_isa} = %{version}-%{release} -Requires: libwayland-egl%{?_isa} = %{version}-%{release} -Requires: libwayland-server%{?_isa} = %{version}-%{release} - -%description devel -The %{name}-devel package contains libraries and header files for -developing applications that use %{name}. - -%package doc -Summary: Wayland development documentation -BuildArch: noarch -%description doc -Wayland development documentation - -%package -n libwayland-client -Summary: Wayland client library -%description -n libwayland-client -Wayland client library - -%package -n libwayland-cursor -Summary: Wayland cursor library -Requires: libwayland-client%{?_isa} = %{version}-%{release} -%description -n libwayland-cursor -Wayland cursor library - -%package -n libwayland-egl -Summary: Wayland egl library -%description -n libwayland-egl -Wayland egl library - -%package -n libwayland-server -Summary: Wayland server library -%description -n libwayland-server -Wayland server library - -%prep -%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' -%autosetup -p1 - -%build -%meson -%meson_build - -%install -%meson_install - -%check -%meson_test - -%files devel -%{_bindir}/wayland-scanner -%{_includedir}/wayland-*.h -%{_libdir}/pkgconfig/wayland-*.pc -%{_libdir}/libwayland-*.so -%{_datadir}/aclocal/wayland-scanner.m4 -%dir %{_datadir}/wayland -%{_datadir}/wayland/wayland-scanner.mk -%{_datadir}/wayland/wayland.xml -%{_datadir}/wayland/wayland.dtd -%{_mandir}/man3/*.3* - -%files doc -%doc README.md -%{_datadir}/doc/wayland/ - -%files -n libwayland-client -%license COPYING -%{_libdir}/libwayland-client.so.0* - -%files -n libwayland-cursor -%license COPYING -%{_libdir}/libwayland-cursor.so.0* - -%files -n libwayland-egl -%license COPYING -%{_libdir}/libwayland-egl.so.1* - -%files -n libwayland-server -%license COPYING -%{_libdir}/libwayland-server.so.0* - -%changelog -* Sat Jul 20 2024 Fedora Release Engineering - 1.23.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jun 28 2024 Olivier Fourdan - 1.23.0-1 -- Update to 1.23.0 - -* Sat Jan 27 2024 Fedora Release Engineering - 1.22.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Sep 07 2023 José Expósito -- SPDX migration: license is already SPDX compatible - -* Sat Jul 22 2023 Fedora Release Engineering - 1.22.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Apr 04 2023 Kalev Lember - 1.22.0-1 -- Update to 1.22.0 - -* Sat Jan 21 2023 Fedora Release Engineering - 1.21.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Jul 26 2022 Mike Rochefort - 1.21.0-1 -- Update to 1.21.0 - -* Sat Jul 23 2022 Fedora Release Engineering - 1.20.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Mon Mar 21 2022 Olivier Fourdan - 1.20.0-4 -- Close file descriptors not needed - rhbz#2062030 - -* Sat Jan 22 2022 Fedora Release Engineering - 1.20.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Sat Jan 08 2022 Miro Hrončok - 1.20.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 - -* Thu Dec 16 2021 Kalev Lember - 1.20.0-1 -- Update to 1.20.0 - -* Fri Jul 23 2021 Fedora Release Engineering - 1.19.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Jan 28 2021 Kalev Lember - 1.19.0-1 -- Update to 1.19.0 -- Switch to meson build system -- Drop old provides - -* Wed Jan 27 2021 Fedora Release Engineering - 1.18.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jul 29 2020 Fedora Release Engineering - 1.18.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Feb 12 2020 Kalev Lember - 1.18.0-1 -- Update to 1.18.0 -- Drop no longer needed obsoletes/provides - -* Fri Jan 31 2020 Fedora Release Engineering - 1.17.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Sat Jul 27 2019 Fedora Release Engineering - 1.17.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Thu Mar 21 2019 Kalev Lember - 1.17.0-1 -- Update to 1.17.0 - -* Thu Mar 07 2019 Kalev Lember - 1.16.92-1 -- Update to 1.16.92 - -* Thu Feb 28 2019 Kalev Lember - 1.16.91-1 -- Update to 1.16.91 - -* Sun Feb 03 2019 Fedora Release Engineering - 1.16.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Tue Sep 11 2018 Kalev Lember - 1.16.0-1 -- Update to 1.16.0 - -* Mon Aug 13 2018 Kalev Lember - 1.15.93-1 -- Update to 1.15.93 - -* Tue Jul 31 2018 Florian Weimer - 1.15.92-2 -- Rebuild with fixed binutils - -* Sun Jul 29 2018 Kalev Lember - 1.15.92-1 -- Update to 1.15.92 - -* Sat Jul 14 2018 Fedora Release Engineering - 1.15.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Mon Apr 09 2018 Kalev Lember - 1.15.0-1 -- Update to 1.15.0 - -* Wed Apr 04 2018 Kalev Lember - 1.14.93-2 -- Make mesa-libwayland-egl obsoleting actually work - -* Tue Apr 03 2018 Kalev Lember - 1.14.93-1 -- Update to 1.14.93 - -* Tue Mar 20 2018 Kalev Lember - 1.14.92-1 -- Update to 1.14.92 -- Remove F22 upgrade path obsoletes - -* Sat Mar 03 2018 Igor Gnatenko - 1.14.91-2 -- Improve Obsoletes - -* Tue Feb 27 2018 Kalev Lember - 1.14.91-1 -- Update to 1.14.91 -- Add new libwayland-egl subpackage and obsolete mesa-libwayland-egl -- Remove ldconfig scriptlets - -* Fri Feb 09 2018 Fedora Release Engineering - 1.14.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Tue Dec 12 2017 Kalev Lember - 1.14.0-2 -- cursor: Fix heap overflows when parsing malicious files (#1522638) - -* Wed Aug 09 2017 Kalev Lember - 1.14.0-1 -- Update to 1.14.0 - -* Wed Aug 02 2017 Kalev Lember - 1.13.93-1 -- Update to 1.13.93 - -* Sun Jul 30 2017 Florian Weimer - 1.13.92-2 -- Rebuild with binutils fix for ppc64le (#1475636) - -* Wed Jul 26 2017 Kalev Lember - 1.13.92-1 -- Update to 1.13.92 - -* Wed Jul 19 2017 Kalev Lember - 1.13.91-1 -- Update to 1.13.91 - -* Thu Jun 1 2017 Owen Taylor otaylor@redhat.com> - 1.13.0-2 -- Add a patch fixing a build error with newer versions of graphviz - -* Wed Feb 22 2017 Kalev Lember - 1.13.0-1 -- Update to 1.13.0 - -* Sat Feb 11 2017 Fedora Release Engineering - 1.12.91-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Wed Jan 25 2017 Kalev Lember - 1.12.91-1 -- Update to 1.12.91 - -* Wed Sep 21 2016 Kalev Lember - 1.12.0-1 -- Update to 1.12.0 - -* Wed Sep 14 2016 Kalev Lember - 1.11.94-1 -- Update to 1.11.94 - -* Thu Sep 08 2016 Kalev Lember - 1.11.93-1 -- Update to 1.11.93 - -* Wed Aug 31 2016 Kalev Lember - 1.11.92-1 -- Update to 1.11.92 - -* Wed Aug 17 2016 Kalev Lember - 1.11.91-1 -- Update to 1.11.91 -- Simplify -devel subpackage packaging -- Include license files in packaging - -* Wed Jun 01 2016 Kalev Lember - 1.11.0-1 -- Update to 1.11.0 - -* Wed May 25 2016 Kalev Lember - 1.10.93-1 -- Update to 1.10.93 - -* Wed May 18 2016 Kalev Lember - 1.10.92-1 -- Update to 1.10.92 - -* Sun May 08 2016 Kalev Lember - 1.10.91-1 -- Update to 1.10.91 - -* Thu Feb 18 2016 Kalev Lember - 1.10.0-1 -- Update to 1.10.0 - -* Thu Feb 04 2016 Kalev Lember - 1.9.92-1 -- Update to 1.9.92 - -* Wed Jan 20 2016 Kalev Lember - 1.9.91-1 -- Update to 1.9.91 - -* Tue Sep 22 2015 Kalev Lember - 1.9.0-1 -- Update to 1.9.0 -- Use make_install macro - -* Wed Sep 16 2015 Kalev Lember - 1.8.93-1 -- Update to 1.8.93 - -* Wed Sep 02 2015 Kalev Lember - 1.8.92-1 -- Update to 1.8.92 - -* Fri Aug 21 2015 Kalev Lember - 1.8.91-2 -- Split out wayland-doc subpackage for documentation - -* Fri Aug 21 2015 Kalev Lember - 1.8.91-1 -- Update to 1.8.91 - -* Mon Jul 20 2015 Adam Jackson 1.8.0-1 -- wayland 1.8.0 - -* Fri Jun 19 2015 Fedora Release Engineering - 1.7.92-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 26 2015 Adam Jackson 1.7.92-1 -- wayland 1.7.92 - -* Sat Feb 21 2015 Till Maas - 1.7.0-2 -- Rebuilt for Fedora 23 Change - https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code - -* Tue Feb 17 2015 Richard Hughes - 1.7.0-1 -- Wayland 1.7.0 - -* Fri Sep 19 2014 Kalev Lember - 1.6.0-1 -- Update to 1.6.0 -- Remove lib64 rpaths - -* Fri Aug 22 2014 Kevin Fenzi 1.5.91-1 -- Update to 1.5.90 - -* Mon Aug 18 2014 Fedora Release Engineering - 1.5.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Wed Jul 02 2014 Adam Jackson 1.5.0-4 -- Update protocol: new surface error enums - -* Mon Jun 30 2014 Adam Jackson 1.5.0-3 -- Remove blocking flush patch as it actually introduces deadlocks now - -* Sun Jun 08 2014 Fedora Release Engineering - 1.5.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed May 21 2014 Richard Hughes - 1.5.0-1 -- Wayland 1.5.0 - -* Tue May 13 2014 Richard Hughes - 1.4.93-1 -- Wayland 1.4.93 - -* Fri Jan 24 2014 Richard Hughes - 1.4.0-1 -- Wayland 1.4.0 - -* Mon Jan 20 2014 Richard Hughes - 1.3.93-1 -- Wayland 1.3.93 - -* Sat Dec 21 2013 Ville Skyttä - 1.3.91-2 -- Call ldconfig in libwayland-cursor %%post* scripts. -- Run test suite during build. -- Compress snapshot tarballs with xz. - -* Tue Dec 17 2013 Richard Hughes - 1.3.91-1 -- Wayland 1.3.91 - -* Mon Nov 25 2013 Lubomir Rintel - 1.3.0-1 -- Wayland 1.3.0 - -* Mon Oct 07 2013 Adam Jackson 1.2.0-3 -- Don't use MSG_DONTWAIT in wl_connection_flush. - -* Sun Aug 04 2013 Fedora Release Engineering - 1.2.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Mon Jul 15 2013 Richard Hughes - 1.2.0-1 -- wayland 1.2.0 - -* Wed May 15 2013 Richard Hughes - 1.1.90-0.1.20130515 -- Update to a git snapshot based on what will become 1.1.90 - -* Tue Apr 16 2013 Richard Hughes - 1.1.0-1 -- wayland 1.1.0 - -* Wed Mar 27 2013 Richard Hughes - 1.0.6-1 -- wayland 1.0.6 - -* Thu Feb 21 2013 Adam Jackson 1.0.5-1 -- wayland 1.0.5 - -* Fri Feb 15 2013 Fedora Release Engineering - 1.0.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Wed Jan 02 2013 Adam Jackson 1.0.3-1 -- wayland 1.0.3 - -* Tue Oct 23 2012 Adam Jackson 1.0.0-1 -- wayland 1.0 - -* Thu Oct 18 2012 Adam Jackson 0.99.0-1 -- wayland 0.99.0 - -* Tue Sep 04 2012 Adam Jackson 0.95.0-1 -- wayland 0.95.0 (#843738) - -* Sun Jul 22 2012 Fedora Release Engineering - 0.89.0-2.20120424 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue Apr 24 2012 Richard Hughes - 0.89.0-1 -- Update to a git snapshot based on 0.89.0 - -* Sat Feb 18 2012 Thorsten Leemhuis - 0.85.0-1 -- update to 0.85.0 -- adjust license, as upstream changed it to MIT -- update make-git-snapshot.sh to current locations and scheme -- drop common package, not needed anymore -- compositor is now in a separate package, hence reduce BuildRequires to what - is actually needed (a lot less) and adjust summary -- make usage of a git checkout in spec file optional -- a %%{?_isa} to requires where it makes sense - -* Sat Jan 14 2012 Fedora Release Engineering - 0.1-0.6.20101221 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 06 2011 Adam Jackson - 0.1-0.5.20101221 -- Rebuild for new libpng - -* Wed Jun 15 2011 Lubomir Rintel - 0.1-0.4.20101221 -- Install real compositor binary instead of a libtool wrapper - -* Mon Feb 07 2011 Fedora Release Engineering - 0.1-0.3.20101221 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Tue Dec 21 2010 Adam Jackson 0.1-0.2.20101221 -- Today's git snap - -* Tue Nov 23 2010 Adam Jackson 0.1-0.2.20101123 -- Today's git snap -- Fix udev rule install (#653353) - -* Mon Nov 15 2010 Adam Jackson 0.1-0.1.20101111 -- Initial packaging From 5dc420ef4d0f6bf4b64c5b12377c295930160585 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Wed, 31 Jul 2024 08:28:40 -0700 Subject: [PATCH 11/58] chore: Add missing logo file --- repo_content/logo.png | Bin 0 -> 54981 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 repo_content/logo.png diff --git a/repo_content/logo.png b/repo_content/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d76d0d7e56b85165868839e23761e68f2bea8b54 GIT binary patch literal 54981 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 K<@|e=Z~i|m05xs^ literal 0 HcmV?d00001 From f547773b8da70abb8237ba5777c77b6c5c426495 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:35:23 -0700 Subject: [PATCH 12/58] chore: Update Mangohud spec --- spec_files/mangohud/mangohud.spec | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/spec_files/mangohud/mangohud.spec b/spec_files/mangohud/mangohud.spec index 21f8533a2c..ec080d170c 100644 --- a/spec_files/mangohud/mangohud.spec +++ b/spec_files/mangohud/mangohud.spec @@ -24,11 +24,6 @@ %bcond_without tests %endif -# Disable unpackaged files check for 32-bit builds shipping with conflicting files -%if %{__isa_bits} != 64 - %define _unpackaged_files_terminate_build 0 -%endif - Name: mangohud Version: 100.0.7.2 Release: %autorelease @@ -157,19 +152,18 @@ sed -i "s@#!/usr/bin/env python@#!/usr/bin/python3@" \ %files %license LICENSE %doc README.md -%if %{__isa_bits} == 64 %{_bindir}/%{name}* %{_bindir}/mangoapp %{_bindir}/mangoplot %{_datadir}/icons/hicolor/scalable/*/*.svg +%{_datadir}/vulkan/implicit_layer.d/*Mango*.json %{_docdir}/%{name}/%{appname}.conf.example %{_docdir}/%{name}/presets.conf.example +%{_libdir}/%{name}/ %{_mandir}/man1/%{name}.1* %{_mandir}/man1/mangoapp.1* %{_metainfodir}/*.metainfo.xml -%endif -%{_datadir}/vulkan/implicit_layer.d/*Mango*.json -%{_libdir}/%{name}/ + %changelog * Mon Oct 02 2023 Artem Polishchuk - 0.7.0-6 @@ -325,4 +319,3 @@ sed -i "s@#!/usr/bin/env python@#!/usr/bin/python3@" \ gasinvein Vitaly Zaitsev - From e6968e04990ee296ac197588a9eb51b0de720862 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:40:01 -0700 Subject: [PATCH 13/58] chore: Update to gamescope 3.14.26 --- spec_files/gamescope/1231.patch | 239 --------------------------- spec_files/gamescope/chimeraos.patch | 27 --- spec_files/gamescope/gamescope.spec | 10 +- 3 files changed, 2 insertions(+), 274 deletions(-) delete mode 100644 spec_files/gamescope/1231.patch diff --git a/spec_files/gamescope/1231.patch b/spec_files/gamescope/1231.patch deleted file mode 100644 index e21cb0a8ea..0000000000 --- a/spec_files/gamescope/1231.patch +++ /dev/null @@ -1,239 +0,0 @@ -From ab115896be1a448bde0eb7673c26300ea4ca5040 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Sun, 19 May 2024 20:15:36 -0400 -Subject: [PATCH 1/2] QueuePresent: canBypassXWayland(): fetch multiple xcb - cookies initially before waiting on any of them - ---- - layer/VkLayer_FROG_gamescope_wsi.cpp | 1 + - layer/xcb_helpers.hpp | 105 +++++++++++++++++++++++---- - 2 files changed, 93 insertions(+), 13 deletions(-) - -diff --git a/layer/VkLayer_FROG_gamescope_wsi.cpp b/layer/VkLayer_FROG_gamescope_wsi.cpp -index 5844c2a63..ca44849f2 100644 ---- a/layer/VkLayer_FROG_gamescope_wsi.cpp -+++ b/layer/VkLayer_FROG_gamescope_wsi.cpp -@@ -975,6 +975,7 @@ namespace GamescopeWSILayer { - continue; - } - -+ xcb::Prefetcher prefetcher(gamescopeSurface->connection, gamescopeSurface->window); - const bool canBypass = gamescopeSurface->canBypassXWayland(); - if (canBypass != gamescopeSwapchain->isBypassingXWayland) - UpdateSwapchainResult(canBypass ? VK_SUBOPTIMAL_KHR : VK_ERROR_OUT_OF_DATE_KHR); -diff --git a/layer/xcb_helpers.hpp b/layer/xcb_helpers.hpp -index 8fac5635b..72d0ec092 100644 ---- a/layer/xcb_helpers.hpp -+++ b/layer/xcb_helpers.hpp -@@ -4,22 +4,106 @@ - #include - #include - #include -+#include - - namespace xcb { -+ inline static constinit pthread_t g_cache_tid; //incase g_cache could otherwise be accessed by one thread, while it is being deleted by another thread -+ inline static constinit struct cookie_cache_t { -+ xcb_window_t window; -+ std::tuple cached_cookies; -+ std::tuple cached_replies; -+ } g_cache = {}; -+ -+ //Note: this class is currently only meant to be used within GamescopeWSILayer::VkDeviceOverrides::QueuePresentKHR: -+ struct Prefetcher { -+ explicit Prefetcher(xcb_connection_t* connection, const xcb_window_t window) { -+ g_cache = { -+ .window = window, -+ .cached_cookies = { -+ xcb_get_geometry(connection, window), -+ xcb_query_tree(connection, window) -+ } -+ }; -+ g_cache_tid = pthread_self(); -+ } - -+ ~Prefetcher() { -+ g_cache_tid = {}; -+ free(std::get<0>(g_cache.cached_replies)); -+ free(std::get<1>(g_cache.cached_replies)); -+ g_cache.cached_replies = {nullptr,nullptr}; -+ } -+ }; -+ - struct ReplyDeleter { -+ const bool m_bOwning = true; -+ consteval ReplyDeleter(bool bOwning = true) : m_bOwning{bOwning} {} - template - void operator()(T* ptr) const { -- free(const_cast*>(ptr)); -+ if (m_bOwning) -+ free(const_cast*>(ptr)); - } - }; - - template - using Reply = std::unique_ptr; -+ -+ template -+ class XcbFetch { -+ using cookie_f_ptr_t = Cookie_RetType (*)(XcbConn, Args...); -+ using reply_f_ptr_t = Reply_RetType* (*)(XcbConn, Cookie_RetType, xcb_generic_error_t**); -+ -+ const cookie_f_ptr_t m_cookieFunc; -+ const reply_f_ptr_t m_replyFunc; -+ -+ public: -+ consteval XcbFetch(cookie_f_ptr_t cookieFunc, reply_f_ptr_t replyFunc) : m_cookieFunc{cookieFunc}, m_replyFunc{replyFunc} {} -+ -+ inline Reply operator()(XcbConn conn, auto... args) { //have to use auto for argsTwo, since otherwise there'd be a type deduction conflict -+ return Reply { m_replyFunc(conn, m_cookieFunc(conn, args...), nullptr) }; -+ } -+ }; -+ -+ template -+ concept CacheableCookie = std::is_same::value -+ || std::is_same::value; -+ -+ template -+ class XcbFetch { -+ using cookie_f_ptr_t = Cookie_RetType (*)(xcb_connection_t*, xcb_window_t); -+ using reply_f_ptr_t = Reply_RetType* (*)(xcb_connection_t*, Cookie_RetType, xcb_generic_error_t**); -+ -+ const cookie_f_ptr_t m_cookieFunc; -+ const reply_f_ptr_t m_replyFunc; -+ -+ inline Reply getCachedReply(xcb_connection_t* connection) { -+ if (std::get(g_cache.cached_replies) == nullptr) { -+ std::get(g_cache.cached_replies) = m_replyFunc(connection, std::get(g_cache.cached_cookies), nullptr); -+ } - -+ return Reply{std::get(g_cache.cached_replies), ReplyDeleter{false}}; // return 'non-owning' unique_ptr -+ } -+ -+ public: -+ consteval XcbFetch(cookie_f_ptr_t cookieFunc, reply_f_ptr_t replyFunc) : m_cookieFunc{cookieFunc}, m_replyFunc{replyFunc} {} -+ -+ inline Reply operator()(xcb_connection_t* conn, xcb_window_t window) { -+ const bool tryCached = pthread_equal(g_cache_tid, pthread_self()) -+ && g_cache.window == window; -+ if (!tryCached) [[unlikely]] -+ return Reply { m_replyFunc(conn, m_cookieFunc(conn, window), nullptr) }; -+ -+ auto ret = getCachedReply(conn); -+ #if !defined(NDEBUG) || NDEBUG == 0 -+ if (!ret) -+ fprintf(stderr, "[Gamescope WSI] getCachedReply() failed.\n"); -+ #endif -+ return ret; -+ } -+ }; -+ - static std::optional getAtom(xcb_connection_t* connection, std::string_view name) { -- xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, false, name.length(), name.data()); -- auto reply = Reply{ xcb_intern_atom_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_intern_atom, xcb_intern_atom_reply}(connection, false, name.length(), name.data()); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] Failed to get xcb atom.\n"); - return std::nullopt; -@@ -34,8 +118,7 @@ namespace xcb { - - xcb_screen_t* screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data; - -- xcb_get_property_cookie_t cookie = xcb_get_property(connection, false, screen->root, atom, XCB_ATOM_CARDINAL, 0, sizeof(T) / sizeof(uint32_t)); -- auto reply = Reply{ xcb_get_property_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_get_property, xcb_get_property_reply}(connection, false, screen->root, atom, XCB_ATOM_CARDINAL, 0, sizeof(T) / sizeof(uint32_t)); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] Failed to read T root window property.\n"); - return std::nullopt; -@@ -61,8 +144,7 @@ namespace xcb { - - static std::optional getToplevelWindow(xcb_connection_t* connection, xcb_window_t window) { - for (;;) { -- xcb_query_tree_cookie_t cookie = xcb_query_tree(connection, window); -- auto reply = Reply{ xcb_query_tree_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_query_tree, xcb_query_tree_reply}(connection, window); - - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getToplevelWindow: xcb_query_tree failed for window 0x%x.\n", window); -@@ -77,8 +159,7 @@ namespace xcb { - } - - static std::optional getWindowRect(xcb_connection_t* connection, xcb_window_t window) { -- xcb_get_geometry_cookie_t cookie = xcb_get_geometry(connection, window); -- auto reply = Reply{ xcb_get_geometry_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_get_geometry, xcb_get_geometry_reply}(connection, window); - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getWindowRect: xcb_get_geometry failed for window 0x%x.\n", window); - return std::nullopt; -@@ -112,8 +193,7 @@ namespace xcb { - static std::optional getLargestObscuringChildWindowSize(xcb_connection_t* connection, xcb_window_t window) { - VkExtent2D largestExtent = {}; - -- xcb_query_tree_cookie_t cookie = xcb_query_tree(connection, window); -- auto reply = Reply{ xcb_query_tree_reply(connection, cookie, nullptr) }; -+ auto reply = XcbFetch{xcb_query_tree, xcb_query_tree_reply}(connection, window); - - if (!reply) { - fprintf(stderr, "[Gamescope WSI] getLargestObscuringWindowSize: xcb_query_tree failed for window 0x%x.\n", window); -@@ -130,8 +210,7 @@ namespace xcb { - for (uint32_t i = 0; i < reply->children_len; i++) { - xcb_window_t child = children[i]; - -- xcb_get_window_attributes_cookie_t attributeCookie = xcb_get_window_attributes(connection, child); -- auto attributeReply = Reply{ xcb_get_window_attributes_reply(connection, attributeCookie, nullptr) }; -+ auto attributeReply = XcbFetch{xcb_get_window_attributes, xcb_get_window_attributes_reply}(connection, child); - - const bool obscuring = - attributeReply && - -From 1b59621f4de5c05096d1f279cba2e04264124154 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Tue, 18 Jun 2024 22:21:23 -0400 -Subject: [PATCH 2/2] WSI: prefetcher: fix issue w/ attempting to prefetch xcb - stuff for pure wayland surfaces - ---- - layer/VkLayer_FROG_gamescope_wsi.cpp | 2 +- - layer/xcb_helpers.hpp | 9 ++++++++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/layer/VkLayer_FROG_gamescope_wsi.cpp b/layer/VkLayer_FROG_gamescope_wsi.cpp -index f26819a60..ce011dcd7 100644 ---- a/layer/VkLayer_FROG_gamescope_wsi.cpp -+++ b/layer/VkLayer_FROG_gamescope_wsi.cpp -@@ -1234,7 +1234,7 @@ namespace GamescopeWSILayer { - continue; - } - -- xcb::Prefetcher prefetcher(gamescopeSurface->connection, gamescopeSurface->window); -+ auto prefetcher = xcb::Prefetcher::GetPrefetcherIf(!gamescopeSurface->isWayland(), gamescopeSurface->connection, gamescopeSurface->window); - const bool canBypass = gamescopeSurface->canBypassXWayland(); - if (canBypass != gamescopeSwapchain->isBypassingXWayland) - UpdateSwapchainResult(canBypass ? VK_SUBOPTIMAL_KHR : VK_ERROR_OUT_OF_DATE_KHR); -diff --git a/layer/xcb_helpers.hpp b/layer/xcb_helpers.hpp -index 72d0ec092..f26aef38b 100644 ---- a/layer/xcb_helpers.hpp -+++ b/layer/xcb_helpers.hpp -@@ -16,6 +16,13 @@ namespace xcb { - - //Note: this class is currently only meant to be used within GamescopeWSILayer::VkDeviceOverrides::QueuePresentKHR: - struct Prefetcher { -+ static std::optional GetPrefetcherIf(bool bCond, xcb_connection_t* connection, const xcb_window_t window) { -+ if (bCond) -+ return std::optional(std::in_place_t{}, connection, window); -+ -+ return std::nullopt; -+ } -+ - explicit Prefetcher(xcb_connection_t* connection, const xcb_window_t window) { - g_cache = { - .window = window, -@@ -90,7 +97,7 @@ namespace xcb { - inline Reply operator()(xcb_connection_t* conn, xcb_window_t window) { - const bool tryCached = pthread_equal(g_cache_tid, pthread_self()) - && g_cache.window == window; -- if (!tryCached) [[unlikely]] -+ if (!tryCached) - return Reply { m_replyFunc(conn, m_cookieFunc(conn, window), nullptr) }; - - auto ret = getCachedReply(conn); diff --git a/spec_files/gamescope/chimeraos.patch b/spec_files/gamescope/chimeraos.patch index 80cc642b3d..9a6b2ecdd5 100644 --- a/spec_files/gamescope/chimeraos.patch +++ b/spec_files/gamescope/chimeraos.patch @@ -1944,33 +1944,6 @@ index 10c0a75..1bc9008 100644 2.45.2 -From 7865b34c5cd61fa5cc5428ace614e4551fabb6ec Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Joaqu=C3=ADn=20Ignacio=20Aramend=C3=ADa?= - -Date: Tue, 9 Jul 2024 18:29:16 -0300 -Subject: [PATCH 20/22] disable explicit sync to avoid graphical artifacts - ---- - src/Backends/DRMBackend.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 9df20ae..ff1858b 100644 ---- a/src/Backends/DRMBackend.cpp -+++ b/src/Backends/DRMBackend.cpp -@@ -68,7 +68,7 @@ gamescope::ConVar cv_drm_debug_disable_blend_tf( "drm_debug_disable_blend_ - gamescope::ConVar cv_drm_debug_disable_ctm( "drm_debug_disable_ctm", false, "CTM chicken bit. (Forces CTM off, does not affect other logic)" ); - gamescope::ConVar cv_drm_debug_disable_color_encoding( "drm_debug_disable_color_encoding", false, "YUV Color Encoding chicken bit. (Forces COLOR_ENCODING to DEFAULT, does not affect other logic)" ); - gamescope::ConVar cv_drm_debug_disable_color_range( "drm_debug_disable_color_range", false, "YUV Color Range chicken bit. (Forces COLOR_RANGE to DEFAULT, does not affect other logic)" ); --gamescope::ConVar cv_drm_debug_disable_explicit_sync( "drm_debug_disable_explicit_sync", false, "Force disable explicit sync on the DRM backend." ); -+gamescope::ConVar cv_drm_debug_disable_explicit_sync( "drm_debug_disable_explicit_sync", true, "Force disable explicit sync on the DRM backend." ); - gamescope::ConVar cv_drm_debug_disable_in_fence_fd( "drm_debug_disable_in_fence_fd", false, "Force disable IN_FENCE_FD being set to avoid over-synchronization on the DRM backend." ); - - // HACK: --- -2.45.2 - - From 1dbcfed76f4b80d8a9f6570819b5af7917c786fc Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Tue, 2 Jul 2024 14:12:47 -0700 diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 68a4c0f15d..d1693bbd39 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -2,7 +2,7 @@ %global _default_patch_fuzz 2 %global build_timestamp %(date +"%Y%m%d") -%global gamescope_tag 3.14.24 +%global gamescope_tag 3.14.26 Name: gamescope Version: 100.%{gamescope_tag} @@ -22,14 +22,8 @@ Patch1: chimeraos.patch # https://hhd.dev/ Patch2: disable-steam-touch-click-atom.patch Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch -# https://github.com/ValveSoftware/gamescope/pull/1281 -Patch4: deckhd.patch # https://github.com/ValveSoftware/gamescope/issues/1398 -Patch5: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch -# https://github.com/ValveSoftware/gamescope/issues/1369 -Patch6: revert-299bc34.patch -# https://github.com/ValveSoftware/gamescope/pull/1231 -Patch7: 1231.patch +Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch # Temporary until newer tag than 3.14.24 Patch8: upstream.patch From ec025fe5bbac92ef808dc7c0c1441db19010bd00 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:40:12 -0700 Subject: [PATCH 14/58] chore: Remove unneeded patch file --- spec_files/gamescope/revert-299bc34.patch | 65 ----------------------- 1 file changed, 65 deletions(-) delete mode 100644 spec_files/gamescope/revert-299bc34.patch diff --git a/spec_files/gamescope/revert-299bc34.patch b/spec_files/gamescope/revert-299bc34.patch deleted file mode 100644 index 550870fe82..0000000000 --- a/spec_files/gamescope/revert-299bc34.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index d7498e5..d1800a8 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -3271,7 +3271,7 @@ found:; - if ( window_has_commits( focus ) ) - out->focusWindow = focus; - else -- focus->outdatedInteractiveFocus = true; -+ out->outdatedInteractiveFocus = true; - - // Always update X's idea of focus, but still dirty - // the it being outdated so we can resolve that globally later. -@@ -5995,28 +5995,37 @@ bool handle_done_commit( steamcompmgr_win_t *w, xwayland_ctx_t *ctx, uint64_t co - // Window just got a new available commit, determine if that's worth a repaint - - // If this is an overlay that we're presenting, repaint -- if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT ) -+ if ( gameFocused ) - { -- hasRepaintNonBasePlane = true; -- } -+ if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } - -- if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT ) -- { -- hasRepaintNonBasePlane = true; -+ if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } - } -- -- // If this is an external overlay, repaint -- if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT ) -+ if ( ctx ) - { -- hasRepaintNonBasePlane = true; -+ if ( ctx->focus.outdatedInteractiveFocus ) -+ { -+ MakeFocusDirty(); -+ ctx->focus.outdatedInteractiveFocus = false; -+ } - } -- -- if ( w->outdatedInteractiveFocus ) -+ if ( global_focus.outdatedInteractiveFocus ) - { - MakeFocusDirty(); -- w->outdatedInteractiveFocus = false; -- } -+ global_focus.outdatedInteractiveFocus = false; - -+ // If this is an external overlay, repaint -+ if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT ) -+ { -+ hasRepaintNonBasePlane = true; -+ } -+ } - // If this is the main plane, repaint - if ( w == global_focus.focusWindow && !w->isSteamStreamingClient ) - { From bed6610e8c49a7d03a0839c04abf23aac689ba81 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 11:50:36 -0700 Subject: [PATCH 15/58] chore: Drop upstream patch for gamescope --- spec_files/gamescope/gamescope.spec | 3 - spec_files/gamescope/upstream.patch | 3602 --------------------------- 2 files changed, 3605 deletions(-) delete mode 100644 spec_files/gamescope/upstream.patch diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index d1693bbd39..32d173aecd 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -25,9 +25,6 @@ Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch -# Temporary until newer tag than 3.14.24 -Patch8: upstream.patch - BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build BuildRequires: cmake diff --git a/spec_files/gamescope/upstream.patch b/spec_files/gamescope/upstream.patch deleted file mode 100644 index 3b77c8d019..0000000000 --- a/spec_files/gamescope/upstream.patch +++ /dev/null @@ -1,3602 +0,0 @@ -From 261dc46d54aa1c7f5a7363807c39ae1f26b3ab49 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 14:51:16 +0100 -Subject: [PATCH 01/19] Utils: Add small Algorithm helper file - ---- - src/Utils/Algorithm.h | 173 ++++++++++++++++++++++++++++++++++++++++++ - src/color_bench.cpp | 137 +++++++++++++++++++++++++++++++++ - 2 files changed, 310 insertions(+) - create mode 100644 src/Utils/Algorithm.h - -diff --git a/src/Utils/Algorithm.h b/src/Utils/Algorithm.h -new file mode 100644 -index 0000000..7290367 ---- /dev/null -+++ b/src/Utils/Algorithm.h -@@ -0,0 +1,173 @@ -+#pragma once -+ -+#include -+#include -+ -+namespace gamescope::Algorithm -+{ -+ template -+ constexpr TObj *Begin( std::span span ) -+ { -+ return span.data(); -+ } -+ -+ template -+ constexpr TObj *End( std::span span ) -+ { -+ return Begin( span ) + span.size(); -+ } -+ -+ template -+ constexpr TIter FindSimple( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ while ( pFirst != pEnd && *pFirst != obj ) -+ ++pFirst; -+ -+ return pFirst; -+ } -+ -+ template -+ constexpr TIter FindByFour( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ typename std::iterator_traits< TIter >::difference_type ulTripCount = ( pEnd - pFirst ) >> 2; -+ -+ while ( ulTripCount-- > 0 ) -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ if ( pFirst[2] == obj ) -+ return &pFirst[2]; -+ -+ if ( pFirst[3] == obj ) -+ return &pFirst[3]; -+ -+ pFirst += 4; -+ } -+ -+ switch ( pEnd - pFirst ) -+ { -+ case 3: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ if ( pFirst[2] == obj ) -+ return &pFirst[2]; -+ -+ return pEnd; -+ } -+ case 2: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ if ( pFirst[1] == obj ) -+ return &pFirst[1]; -+ -+ return pEnd; -+ } -+ case 1: -+ { -+ if ( pFirst[0] == obj ) -+ return &pFirst[0]; -+ -+ return pEnd; -+ } -+ case 0: -+ { -+ return pEnd; -+ } -+ default: -+ { -+ __builtin_unreachable(); -+ } -+ } -+ } -+ -+ template -+ constexpr TIter Find( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return FindSimple( pFirst, pEnd, obj ); -+ } -+ -+ template -+ constexpr TIter Find( std::span span, const TObj &obj ) -+ { -+ return Find( Begin( span ), End( span ), obj ); -+ } -+ -+ template -+ constexpr bool ContainsShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return Find( pFirst, pEnd, obj ) != pEnd; -+ } -+ -+ template -+ constexpr bool ContainsNoShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ bool bFound = false; -+ -+ typename std::iterator_traits< TIter >::difference_type ulTripCount = ( pEnd - pFirst ) >> 2; -+ -+ while ( ulTripCount-- > 0 ) -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj || -+ pFirst[2] == obj || -+ pFirst[3] == obj; -+ -+ pFirst += 4; -+ } -+ -+ switch ( pEnd - pFirst ) -+ { -+ case 3: -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj || -+ pFirst[2] == obj; -+ break; -+ } -+ case 2: -+ { -+ bFound |= pFirst[0] == obj || -+ pFirst[1] == obj; -+ break; -+ } -+ case 1: -+ { -+ bFound |= pFirst[0] == obj; -+ break; -+ } -+ case 0: -+ { -+ break; -+ } -+ default: -+ { -+ __builtin_unreachable(); -+ } -+ } -+ -+ return bFound; -+ } -+ -+ template -+ constexpr bool Contains( TIter pFirst, TIter pEnd, const TObj &obj ) -+ { -+ return ContainsNoShortcut( pFirst, pEnd, obj ); -+ } -+ -+ template -+ constexpr bool Contains( std::span span, const TObj &obj ) -+ { -+ return Contains( Begin( span ), End( span ), obj ); -+ } -+} -diff --git a/src/color_bench.cpp b/src/color_bench.cpp -index 33dff78..9c9d986 100644 ---- a/src/color_bench.cpp -+++ b/src/color_bench.cpp -@@ -1,5 +1,9 @@ -+#include - #include - -+#include -+#include "Utils/Algorithm.h" -+ - #include "color_helpers.h" - - const uint32_t nLutSize1d = 4096; -@@ -74,4 +78,137 @@ static void BenchmarkCalcColorTransforms(benchmark::State &state) - } - BENCHMARK(BenchmarkCalcColorTransforms); - -+static constexpr uint32_t k_uFindTestValueCountLarge = 524288; -+static constexpr uint32_t k_uFindTestValueCountMedium = 16; -+static constexpr uint32_t k_uFindTestValueCountSmall = 5; -+ -+template -+static __attribute__((noinline)) std::array GetFindTestValues() -+{ -+ static std::array s_Values = []() -+ { -+ std::array values; -+ for ( uint32_t i = 0; i < uSize; i++ ) -+ values[i] = rand() % 255; -+ -+ return values; -+ }(); -+ -+ return s_Values; -+} -+ -+// Large -+ -+static void Benchmark_Find_Large_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Large_Gamescope); -+ -+static void Benchmark_Find_Large_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Large_Std); -+ -+static void Benchmark_Contains_Large_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Large_Gamescope); -+ -+// -+ -+static void Benchmark_Find_Medium_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Medium_Gamescope); -+ -+static void Benchmark_Find_Medium_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Medium_Std); -+ -+static void Benchmark_Contains_Medium_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Medium_Gamescope); -+ -+// -+ -+static void Benchmark_Find_Small_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = gamescope::Algorithm::Find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Small_Gamescope); -+ -+static void Benchmark_Find_Small_Std(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ auto iter = std::find( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( iter ); -+ } -+} -+BENCHMARK(Benchmark_Find_Small_Std); -+ -+static void Benchmark_Contains_Small_Gamescope(benchmark::State &state) -+{ -+ std::array values = GetFindTestValues(); -+ -+ for (auto _ : state) -+ { -+ bool bContains = gamescope::Algorithm::ContainsNoShortcut( values.begin(), values.end(), 765678478 ); -+ benchmark::DoNotOptimize( bContains ); -+ } -+} -+BENCHMARK(Benchmark_Contains_Small_Gamescope); -+ - BENCHMARK_MAIN(); --- -2.45.2 - - -From 74a020865906414f9d4374fa5568fffce71e4027 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 14:52:02 +0100 -Subject: [PATCH 02/19] Utils: Use Contains in CloseAllFds - ---- - src/Utils/Process.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Utils/Process.cpp b/src/Utils/Process.cpp -index 5688fb1..32c52f1 100644 ---- a/src/Utils/Process.cpp -+++ b/src/Utils/Process.cpp -@@ -1,4 +1,5 @@ - #include "Process.h" -+#include "../Utils/Algorithm.h" - #include "../convar.h" - #include "../log.hpp" - #include "../Utils/Defer.h" -@@ -268,7 +269,7 @@ namespace gamescope::Process - - int nFd = *onFd; - -- bool bExcluded = std::find( nExcludedFds.begin(), nExcludedFds.end(), nFd ) != nExcludedFds.end(); -+ bool bExcluded = Algorithm::Contains( nExcludedFds, nFd ); - if ( bExcluded ) - continue; - --- -2.45.2 - - -From 3c5a232269ef8adef56423bf9b2bb48cb5c0cd1d Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 15:52:33 +0100 -Subject: [PATCH 03/19] steamcompmgr: Only forward relative mouse mode if we - have a cursor constraint - ---- - src/steamcompmgr.cpp | 13 ++++++------- - src/wlserver.cpp | 32 +++++++++++++++++++------------- - src/wlserver.hpp | 26 +++++++++++++++++++++++++- - 3 files changed, 50 insertions(+), 21 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 9ee265d..f051463 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -682,7 +682,6 @@ constexpr const T& clamp( const T& x, const T& min, const T& max ) - } - - extern bool g_bForceRelativeMouse; --bool bSteamCompMgrGrab = false; - - CommitDoneList_t g_steamcompmgr_xdg_done_commits; - -@@ -7116,8 +7115,6 @@ steamcompmgr_main(int argc, char **argv) - // Reset getopt() state - optind = 1; - -- bSteamCompMgrGrab = GetBackend()->GetNestedHints() && g_bForceRelativeMouse; -- - int o; - int opt_index = -1; - bool bForceWindowsFullscreen = false; -@@ -7574,13 +7571,15 @@ steamcompmgr_main(int argc, char **argv) - - if ( GetBackend()->GetNestedHints() && !g_bForceRelativeMouse ) - { -- bool bImageEmpty = -+ const bool bImageEmpty = - ( global_focus.cursor && global_focus.cursor->imageEmpty() ) && - ( !window_is_steam( global_focus.inputFocusWindow ) ); - -- if ( GetBackend()->GetNestedHints() ) -- GetBackend()->GetNestedHints()->SetRelativeMouseMode( bImageEmpty ); -- bSteamCompMgrGrab = GetBackend()->GetNestedHints() && bImageEmpty; -+ const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed -+ -+ const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint; -+ -+ GetBackend()->GetNestedHints()->SetRelativeMouseMode( bRelativeMouseMode ); - } - - static int nIgnoredOverlayRepaints = 0; -diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index ee6891d..1852be9 100644 ---- a/src/wlserver.cpp -+++ b/src/wlserver.cpp -@@ -225,7 +225,8 @@ std::optional PrepareCommit( struct wlr_surface *surf, struct wl - - struct wlr_surface *pConstraintSurface = wlserver_surface_to_main_surface( surf ); - -- if ( wlserver.mouse_constraint && wlserver.mouse_constraint->surface == pConstraintSurface ) -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ if ( pConstraint && pConstraint->surface == pConstraintSurface ) - wlserver_update_cursor_constraint(); - - return oNewEntry; -@@ -2235,7 +2236,7 @@ struct GamescopePointerConstraint - - static void wlserver_warp_to_constraint_hint() - { -- struct wlr_pointer_constraint_v1 *pConstraint = wlserver.mouse_constraint; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); - - if (pConstraint->current.cursor_hint.enabled) - { -@@ -2248,7 +2249,7 @@ static void wlserver_warp_to_constraint_hint() - - static void wlserver_update_cursor_constraint() - { -- struct wlr_pointer_constraint_v1 *pConstraint = wlserver.mouse_constraint; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); - pixman_region32_t *pRegion = &pConstraint->region; - - if ( wlserver.mouse_constraint_requires_warp && pConstraint->surface ) -@@ -2278,27 +2279,29 @@ static void wlserver_update_cursor_constraint() - - static void wlserver_constrain_cursor( struct wlr_pointer_constraint_v1 *pNewConstraint ) - { -- if ( wlserver.mouse_constraint == pNewConstraint ) -+ struct wlr_pointer_constraint_v1 *pOldConstraint = wlserver.GetCursorConstraint(); -+ -+ if ( pOldConstraint == pNewConstraint ) - return; - -- if ( wlserver.mouse_constraint ) -+ if ( pOldConstraint ) - { - if ( !pNewConstraint ) - wlserver_warp_to_constraint_hint(); - -- wlr_pointer_constraint_v1_send_deactivated(wlserver.mouse_constraint); -+ wlr_pointer_constraint_v1_send_deactivated( pOldConstraint ); - } - -- wlserver.mouse_constraint = pNewConstraint; -+ wlserver.SetMouseConstraint( pNewConstraint ); - -- if ( !wlserver.mouse_constraint ) -+ if ( !pNewConstraint ) - return; - - wlserver.mouse_constraint_requires_warp = true; - - wlserver_update_cursor_constraint(); - -- wlr_pointer_constraint_v1_send_activated( wlserver.mouse_constraint ); -+ wlr_pointer_constraint_v1_send_activated( pNewConstraint ); - } - - static void handle_pointer_constraint_set_region(struct wl_listener *listener, void *data) -@@ -2316,11 +2319,12 @@ void handle_constraint_destroy(struct wl_listener *listener, void *data) - wl_list_remove(&pGamescopeConstraint->set_region.link); - wl_list_remove(&pGamescopeConstraint->destroy.link); - -- if (wlserver.mouse_constraint == pGamescopeConstraint->pConstraint) -+ struct wlr_pointer_constraint_v1 *pCurrentConstraint = wlserver.GetCursorConstraint(); -+ if ( pCurrentConstraint == pGamescopeConstraint->pConstraint ) - { - wlserver_warp_to_constraint_hint(); - -- wlserver.mouse_constraint = nullptr; -+ wlserver.SetMouseConstraint( nullptr ); - } - - delete pGamescopeConstraint; -@@ -2345,9 +2349,11 @@ static void handle_pointer_constraint(struct wl_listener *listener, void *data) - - static bool wlserver_apply_constraint( double *dx, double *dy ) - { -- if ( wlserver.mouse_constraint ) -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ -+ if ( pConstraint ) - { -- if ( wlserver.mouse_constraint->type == WLR_POINTER_CONSTRAINT_V1_LOCKED ) -+ if ( pConstraint->type == WLR_POINTER_CONSTRAINT_V1_LOCKED ) - return false; - - double sx = wlserver.mouse_surface_cursorx; -diff --git a/src/wlserver.hpp b/src/wlserver.hpp -index db7d491..467c54d 100644 ---- a/src/wlserver.hpp -+++ b/src/wlserver.hpp -@@ -70,6 +70,8 @@ struct ResListEntry_t { - - struct wlserver_content_override; - -+bool wlserver_is_lock_held(void); -+ - class gamescope_xwayland_server_t - { - public: -@@ -149,7 +151,29 @@ struct wlserver_t { - double mouse_surface_cursory = 0.0f; - bool mouse_constraint_requires_warp = false; - pixman_region32_t confine; -- struct wlr_pointer_constraint_v1 *mouse_constraint = nullptr; -+ std::atomic mouse_constraint = { nullptr }; -+ -+ void SetMouseConstraint( struct wlr_pointer_constraint_v1 *pConstraint ) -+ { -+ assert( wlserver_is_lock_held() ); -+ // Set by wlserver only. Read by both wlserver + steamcompmgr with no -+ // need to actually be sequentially consistent. -+ mouse_constraint.store( pConstraint, std::memory_order_relaxed ); -+ } -+ -+ struct wlr_pointer_constraint_v1 *GetCursorConstraint() const -+ { -+ assert( wlserver_is_lock_held() ); -+ return mouse_constraint.load( std::memory_order_relaxed ); -+ } -+ -+ bool HasMouseConstraint() const -+ { -+ // Does not need to be sequentially consistent. -+ // Used by the steamcompmgr thread to check if there is currently a mouse constraint. -+ return mouse_constraint.load( std::memory_order_relaxed ) != nullptr; -+ } -+ - uint64_t ulLastMovedCursorTime = 0; - bool bCursorHidden = true; - bool bCursorHasImage = true; --- -2.45.2 - - -From 745d0d6a09e53a8481bc94c67e3a3ae5c86c8796 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:21:16 +0100 -Subject: [PATCH 04/19] convar: Add some helpers for std::string convars and - callbacks - ---- - src/convar.h | 34 ++++++++++++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) - -diff --git a/src/convar.h b/src/convar.h -index c08dccb..f2a0485 100644 ---- a/src/convar.h -+++ b/src/convar.h -@@ -20,6 +20,24 @@ namespace gamescope - { - class ConCommand; - -+ template -+ inline std::string ToString( const T &thing ) -+ { -+ return std::to_string( thing ); -+ } -+ -+ template <> -+ inline std::string ToString( const std::string &sThing ) -+ { -+ return sThing; -+ } -+ -+ template <> -+ inline std::string ToString( const std::string_view &svThing ) -+ { -+ return std::string( svThing ); -+ } -+ - template - inline std::optional Parse( std::string_view chars ) - { -@@ -113,11 +131,15 @@ namespace gamescope - { - using ConVarCallbackFunc = std::function; - public: -- ConVar( std::string_view pszName, T defaultValue = T{}, std::string_view pszDescription = "", ConVarCallbackFunc func = nullptr ) -+ ConVar( std::string_view pszName, T defaultValue = T{}, std::string_view pszDescription = "", ConVarCallbackFunc func = nullptr, bool bRunCallbackAtStartup = false ) - : ConCommand( pszName, pszDescription, [this]( std::span pArgs ){ this->InvokeFunc( pArgs ); } ) - , m_Value{ defaultValue } - , m_Callback{ func } - { -+ if ( bRunCallbackAtStartup ) -+ { -+ RunCallback(); -+ } - } - - const T& Get() const -@@ -130,6 +152,11 @@ namespace gamescope - { - m_Value = T{ newValue }; - -+ RunCallback(); -+ } -+ -+ void RunCallback() -+ { - if ( !m_bInCallback && m_Callback ) - { - m_bInCallback = true; -@@ -143,6 +170,9 @@ namespace gamescope - - operator T() const { return m_Value; } - -+ // SFINAE for std::string... -+ operator std::string_view() const { return m_Value; } -+ - template bool operator == ( const J &other ) const { return m_Value == other; } - template bool operator != ( const J &other ) const { return m_Value != other; } - template auto operator <=>( const J &other ) const { return m_Value <=> other; } -@@ -158,7 +188,7 @@ namespace gamescope - { - // We should move to std format for logging and stuff. - // This is kinda gross and grody! -- std::string sValue = std::to_string( m_Value ); -+ std::string sValue = ToString( m_Value ); - console_log.infof( "%.*s: %.*s\n%.*s", - (int)m_pszName.length(), m_pszName.data(), - (int)sValue.length(), sValue.data(), --- -2.45.2 - - -From 69f94d99082f4b0c5e06c384d65705739608ca2f Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:21:30 +0100 -Subject: [PATCH 05/19] Utils: Add helpers for std::vector in our Algorithm - helpers - ---- - src/Utils/Algorithm.h | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/Utils/Algorithm.h b/src/Utils/Algorithm.h -index 7290367..eb51a79 100644 ---- a/src/Utils/Algorithm.h -+++ b/src/Utils/Algorithm.h -@@ -2,6 +2,7 @@ - - #include - #include -+#include - - namespace gamescope::Algorithm - { -@@ -17,6 +18,18 @@ namespace gamescope::Algorithm - return Begin( span ) + span.size(); - } - -+ template -+ constexpr const TObj *Begin( const std::vector &vec ) -+ { -+ return vec.data(); -+ } -+ -+ template -+ constexpr const TObj *End( const std::vector &vec ) -+ { -+ return Begin( vec ) + vec.size(); -+ } -+ - template - constexpr TIter FindSimple( TIter pFirst, TIter pEnd, const TObj &obj ) - { -@@ -103,6 +116,12 @@ namespace gamescope::Algorithm - return Find( Begin( span ), End( span ), obj ); - } - -+ template -+ constexpr TIter Find( const std::vector &vec, const TObj &obj ) -+ { -+ return Find( Begin( vec ), End( vec ), obj ); -+ } -+ - template - constexpr bool ContainsShortcut( TIter pFirst, TIter pEnd, const TObj &obj ) - { -@@ -170,4 +189,10 @@ namespace gamescope::Algorithm - { - return Contains( Begin( span ), End( span ), obj ); - } -+ -+ template -+ constexpr bool Contains( const std::vector &vec, const TObj &obj ) -+ { -+ return Contains( Begin( vec ), End( vec ), obj ); -+ } - } --- -2.45.2 - - -From dade66318d852387bf8f1e91427dc7e2b5511826 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Mon, 15 Jul 2024 20:28:05 +0100 -Subject: [PATCH 06/19] steamcompmgr: Add filter appids for relative mouse mode - ---- - src/steamcompmgr.cpp | 27 ++++++++++++++++++++++++++- - 1 file changed, 26 insertions(+), 1 deletion(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index f051463..b955a0c 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -92,6 +92,7 @@ - #include "commit.h" - #include "BufferMemo.h" - #include "Utils/Process.h" -+#include "Utils/Algorithm.h" - - #if HAVE_AVIF - #include "avif/avif.h" -@@ -7022,6 +7023,24 @@ static gamescope::ConCommand cc_launch( "launch", "Launch an application with th - gamescope::ConVar cv_shutdown_on_primary_child_death( "shutdown_on_primary_child_death", true, "Should gamescope shutdown when the primary application launched in it was shut down?" ); - static LogScope s_LaunchLogScope( "launch" ); - -+static std::vector s_uRelativeMouseFilteredAppids; -+static gamescope::ConVar cv_mouse_relative_filter_appids( "mouse_relative_filter_appids", -+"8400" /* Geometry Wars: Retro Evolved */, -+"Comma separated appids to filter out using relative mouse mode for.", -+[]() -+{ -+ std::vector sFilterAppids = gamescope::Split( cv_mouse_relative_filter_appids, "," ); -+ std::vector uFilterAppids; -+ uFilterAppids.reserve( sFilterAppids.size() ); -+ for ( auto &sFilterAppid : sFilterAppids ) -+ { -+ std::optional ouFilterAppid = gamescope::Parse( sFilterAppid ); -+ uFilterAppids.push_back( *ouFilterAppid ); -+ } -+ -+ s_uRelativeMouseFilteredAppids = std::move( uFilterAppids ); -+}, true); -+ - void LaunchNestedChildren( char **ppPrimaryChildArgv ) - { - std::string sNewPreload; -@@ -7577,7 +7596,13 @@ steamcompmgr_main(int argc, char **argv) - - const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed - -- const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint; -+ uint32_t uAppId = global_focus.inputFocusWindow -+ ? global_focus.inputFocusWindow->appID -+ : 0; -+ -+ const bool bExcludedAppId = uAppId && gamescope::Algorithm::Contains( s_uRelativeMouseFilteredAppids, uAppId ); -+ -+ const bool bRelativeMouseMode = bImageEmpty && bHasPointerConstraint && !bExcludedAppId; - - GetBackend()->GetNestedHints()->SetRelativeMouseMode( bRelativeMouseMode ); - } --- -2.45.2 - - -From 6c187b7f69d5f7e7d1a01728c1c22e055a1683f6 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 00:53:44 +0100 -Subject: [PATCH 07/19] steamcompmgr: Add adaptive sync convar - ---- - src/Backends/OpenVRBackend.cpp | 1 - - src/Backends/WaylandBackend.cpp | 4 ++-- - src/main.cpp | 4 ++-- - src/steamcompmgr.cpp | 8 ++++---- - 4 files changed, 8 insertions(+), 9 deletions(-) - -diff --git a/src/Backends/OpenVRBackend.cpp b/src/Backends/OpenVRBackend.cpp -index acc84ed..79b05d1 100644 ---- a/src/Backends/OpenVRBackend.cpp -+++ b/src/Backends/OpenVRBackend.cpp -@@ -38,7 +38,6 @@ extern int g_nPreferredOutputWidth; - extern int g_nPreferredOutputHeight; - extern bool g_bForceHDR10OutputDebug; - extern bool g_bBorderlessOutputWindow; --extern bool g_bAllowVRR; - - extern gamescope::ConVar cv_composite_force; - extern bool g_bColorSliderInUse; -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 6f578a2..3603be7 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -40,7 +40,7 @@ extern int g_nPreferredOutputWidth; - extern int g_nPreferredOutputHeight; - extern bool g_bForceHDR10OutputDebug; - extern bool g_bBorderlessOutputWindow; --extern bool g_bAllowVRR; -+extern gamescope::ConVar cv_adaptive_sync; - - extern gamescope::ConVar cv_composite_force; - extern bool g_bColorSliderInUse; -@@ -1531,7 +1531,7 @@ namespace gamescope - } - bool CWaylandBackend::IsVRRActive() const - { -- return g_bAllowVRR && m_bHostCompositorIsCurrentlyVRR; -+ return cv_adaptive_sync && m_bHostCompositorIsCurrentlyVRR; - } - - bool CWaylandBackend::SupportsPlaneHardwareCursor() const -diff --git a/src/main.cpp b/src/main.cpp -index cd4aeca..da1b516 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -42,7 +42,7 @@ - using namespace std::literals; - - EStreamColorspace g_ForcedNV12ColorSpace = k_EStreamColorspace_Unknown; --extern bool g_bAllowVRR; -+extern gamescope::ConVar cv_adaptive_sync; - - const char *gamescope_optstring = nullptr; - const char *g_pOriginalDisplay = nullptr; -@@ -765,7 +765,7 @@ int main(int argc, char **argv) - } else if (strcmp(opt_name, "display-index") == 0) { - g_nNestedDisplayIndex = atoi( optarg ); - } else if (strcmp(opt_name, "adaptive-sync") == 0) { -- g_bAllowVRR = true; -+ cv_adaptive_sync = true; - } else if (strcmp(opt_name, "expose-wayland") == 0) { - g_bExposeWayland = true; - } else if (strcmp(opt_name, "backend") == 0) { -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index b955a0c..b8102eb 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -187,7 +187,7 @@ timespec nanos_to_timespec( uint64_t ulNanos ) - static void - update_runtime_info(); - --bool g_bAllowVRR = false; -+gamescope::ConVar cv_adaptive_sync( "adaptive_sync", false, "Whether or not adaptive sync is enabled if available." ); - - uint64_t g_SteamCompMgrLimitedAppRefreshCycle = 16'666'666; - uint64_t g_SteamCompMgrAppRefreshCycle = 16'666'666; -@@ -2229,7 +2229,7 @@ paint_all(bool async) - struct FrameInfo_t frameInfo = {}; - frameInfo.applyOutputColorMgmt = g_ColorMgmt.pending.enabled; - frameInfo.outputEncodingEOTF = g_ColorMgmt.pending.outputEncodingEOTF; -- frameInfo.allowVRR = g_bAllowVRR; -+ frameInfo.allowVRR = cv_adaptive_sync; - frameInfo.bFadingOut = fadingOut; - - // If the window we'd paint as the base layer is the streaming client, -@@ -5410,7 +5410,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) - if ( ev->atom == ctx->atoms.gamescopeVRREnabled ) - { - bool enabled = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeVRREnabled, 0 ); -- g_bAllowVRR = enabled; -+ cv_adaptive_sync = enabled; - } - if ( ev->atom == ctx->atoms.gamescopeDisplayForceInternal ) - { -@@ -6886,7 +6886,7 @@ void update_vrr_atoms(xwayland_ctx_t *root_ctx, bool force, bool* needs_flush = - // Keep this as a preference, starting with off. - if ( force ) - { -- bool wants_vrr = g_bAllowVRR; -+ bool wants_vrr = cv_adaptive_sync; - uint32_t enabled_value = wants_vrr ? 1 : 0; - XChangeProperty(root_ctx->dpy, root_ctx->root, root_ctx->atoms.gamescopeVRREnabled, XA_CARDINAL, 32, PropModeReplace, - (unsigned char *)&enabled_value, 1 ); --- -2.45.2 - - -From 1ebfacbb7477437ef295eb821a972ff3cfe992df Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 01:14:19 +0100 -Subject: [PATCH 08/19] WaylandBackend: Fix picking output refresh for VRR - displays. - ---- - src/Backends/WaylandBackend.cpp | 69 ++++++++++++++++++++++++++++++++- - 1 file changed, 68 insertions(+), 1 deletion(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 3603be7..b7f275e 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -5,6 +5,7 @@ - #include "steamcompmgr.hpp" - #include "edid.h" - #include "Utils/Defer.h" -+#include "Utils/Algorithm.h" - #include "convar.h" - #include "refresh_rate.h" - #include "waitable.h" -@@ -186,8 +187,14 @@ namespace gamescope - - std::optional GetCurrentState() { std::unique_lock lock( m_PlaneStateLock ); return m_oCurrentPlaneState; } - -+ void UpdateVRRRefreshRate(); -+ - private: - -+ void Wayland_Surface_Enter( wl_surface *pSurface, wl_output *pOutput ); -+ void Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ); -+ static const wl_surface_listener s_SurfaceListener; -+ - void LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ); - void LibDecor_Frame_Close( libdecor_frame *pFrame ); - void LibDecor_Frame_Commit( libdecor_frame *pFrame ); -@@ -228,12 +235,20 @@ namespace gamescope - frog_color_managed_surface *m_pFrogColorManagedSurface = nullptr; - wp_fractional_scale_v1 *m_pFractionalScale = nullptr; - libdecor_window_state m_eWindowState = LIBDECOR_WINDOW_STATE_NONE; -+ std::vector m_pOutputs; - bool m_bNeedsDecorCommit = false; - uint32_t m_uFractionalScale = 120; - - std::mutex m_PlaneStateLock; - std::optional m_oCurrentPlaneState; - }; -+ const wl_surface_listener CWaylandPlane::s_SurfaceListener = -+ { -+ .enter = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_Surface_Enter ), -+ .leave = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_Surface_Leave ), -+ .preferred_buffer_scale = WAYLAND_NULL(), -+ .preferred_buffer_transform = WAYLAND_NULL(), -+ }; - // Can't be const, libdecor api bad... - libdecor_frame_interface CWaylandPlane::s_LibDecorFrameInterface = - { -@@ -540,9 +555,19 @@ namespace gamescope - - bool SupportsFormat( uint32_t uDRMFormat ) const; - -+ bool HostCompositorIsCurrentlyVRR() const { return m_bHostCompositorIsCurrentlyVRR; } - void SetHostCompositorIsCurrentlyVRR( bool bActive ) { m_bHostCompositorIsCurrentlyVRR = bActive; } - -- bool CurrentDisplaySupportsVRR() const { return m_bHostCompositorIsCurrentlyVRR; } -+ WaylandOutputInfo *GetOutputInfo( wl_output *pOutput ) -+ { -+ auto iter = m_pOutputs.find( pOutput ); -+ if ( iter == m_pOutputs.end() ) -+ return nullptr; -+ -+ return &iter->second; -+ } -+ -+ bool CurrentDisplaySupportsVRR() const { return HostCompositorIsCurrentlyVRR(); } - wl_region *GetFullRegion() const { return m_pFullRegion; } - - private: -@@ -819,6 +844,7 @@ namespace gamescope - m_pParent = pParent; - m_pSurface = wl_compositor_create_surface( m_pBackend->GetCompositor() ); - wl_surface_set_user_data( m_pSurface, this ); -+ wl_surface_add_listener( m_pSurface, &s_SurfaceListener, this ); - - m_pViewport = wp_viewporter_get_viewport( m_pBackend->GetViewporter(), m_pSurface ); - -@@ -1005,6 +1031,45 @@ namespace gamescope - } - } - -+ void CWaylandPlane::UpdateVRRRefreshRate() -+ { -+ if ( m_pParent ) -+ return; -+ -+ if ( !m_pBackend->HostCompositorIsCurrentlyVRR() ) -+ return; -+ -+ if ( m_pOutputs.empty() ) -+ return; -+ -+ int32_t nLargestRefreshRateMhz = 0; -+ for ( wl_output *pOutput : m_pOutputs ) -+ { -+ WaylandOutputInfo *pOutputInfo = m_pBackend->GetOutputInfo( pOutput ); -+ if ( !pOutputInfo ) -+ continue; -+ -+ nLargestRefreshRateMhz = std::max( nLargestRefreshRateMhz, pOutputInfo->nRefresh ); -+ } -+ -+ if ( nLargestRefreshRateMhz && nLargestRefreshRateMhz != g_nOutputRefresh ) -+ { -+ xdg_log.infof( "Changed refresh to: %.3fhz", ConvertmHzToHz( (float) nLargestRefreshRateMhz ) ); -+ g_nOutputRefresh = nLargestRefreshRateMhz; -+ } -+ } -+ -+ void CWaylandPlane::Wayland_Surface_Enter( wl_surface *pSurface, wl_output *pOutput ) -+ { -+ m_pOutputs.emplace_back( pOutput ); -+ -+ UpdateVRRRefreshRate(); -+ } -+ void CWaylandPlane::Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ) -+ { -+ std::erase( m_pOutputs, pOutput ); -+ } -+ - void CWaylandPlane::LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ) - { - if ( !libdecor_configuration_get_window_state( pConfiguration, &m_eWindowState ) ) -@@ -1060,6 +1125,8 @@ namespace gamescope - else - { - m_pBackend->SetHostCompositorIsCurrentlyVRR( true ); -+ -+ UpdateVRRRefreshRate(); - } - - GetVBlankTimer().MarkVBlank( ulTime, true ); --- -2.45.2 - - -From 37cc4d368b3804215b9b4bb2719a3ac2b64cf2e6 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Thu, 18 Jul 2024 01:18:17 +0100 -Subject: [PATCH 09/19] WaylandBackend: Run UpdateVRRRefreshRate on - Wayland_Surface_Leave - ---- - src/Backends/WaylandBackend.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index b7f275e..3aac004 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1068,6 +1068,8 @@ namespace gamescope - void CWaylandPlane::Wayland_Surface_Leave( wl_surface *pSurface, wl_output *pOutput ) - { - std::erase( m_pOutputs, pOutput ); -+ -+ UpdateVRRRefreshRate(); - } - - void CWaylandPlane::LibDecor_Frame_Configure( libdecor_frame *pFrame, libdecor_configuration *pConfiguration ) --- -2.45.2 - - -From 853cb9879505efea832ddc05517f57e06d410739 Mon Sep 17 00:00:00 2001 -From: CakeKing64 -Date: Sat, 20 Jul 2024 17:39:35 +1000 -Subject: [PATCH 10/19] WaylandBackend: Restore fullscreen state if returning - from not being visible - ---- - src/Backends/WaylandBackend.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 3aac004..8c98689 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1863,7 +1863,10 @@ namespace gamescope - - void CWaylandBackend::UpdateFullscreenState() - { -- if ( m_bDesiredFullscreenState != g_bFullscreen ) -+ if ( !m_bVisible ) -+ g_bFullscreen = false; -+ -+ if ( m_bDesiredFullscreenState != g_bFullscreen && m_bVisible ) - { - if ( m_bDesiredFullscreenState ) - libdecor_frame_set_fullscreen( m_Planes[0].GetFrame(), nullptr ); --- -2.45.2 - - -From 96f141d8b8453f9c28872e8ffc94a29d81d0758d Mon Sep 17 00:00:00 2001 -From: flightlessmango -Date: Mon, 22 Jul 2024 17:47:30 +0200 -Subject: [PATCH 11/19] mangoapp: only set env in steammode - -MANGOHUD_CONFIGFILE should only be set by gamescope if we're in steamMode. -This is causing confusion for regular users as it prevents usage of -the standard mangohud config paths ---- - src/main.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/main.cpp b/src/main.cpp -index da1b516..96484dc 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -613,7 +613,7 @@ static void UpdateCompatEnvVars() - setenv( "GAMESCOPE_NV12_COLORSPACE", "k_EStreamColorspace_BT601", 0 ); - - const char *pszMangoConfigPath = getenv( "MANGOHUD_CONFIGFILE" ); -- if ( g_bLaunchMangoapp && ( !pszMangoConfigPath || !*pszMangoConfigPath ) ) -+ if ( (g_bLaunchMangoapp && steamMode) && ( !pszMangoConfigPath || !*pszMangoConfigPath ) ) - { - char szMangoConfigPath[ PATH_MAX ]; - FILE *pMangoConfigFile = gamescope::MakeTempFile( szMangoConfigPath, gamescope::k_szGamescopeTempMangoappTemplate, "w", true ); --- -2.45.2 - - -From 634d739ac609c6550d30a759fb2bc2fa616e0997 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:00:13 +0100 -Subject: [PATCH 12/19] backend: Add dump debug info command - ---- - src/backend.cpp | 27 +++++++++++++++++++++++++++ - src/backend.h | 4 ++++ - src/steamcompmgr.cpp | 19 +++++++++++++++++++ - 3 files changed, 50 insertions(+) - -diff --git a/src/backend.cpp b/src/backend.cpp -index d11fcca..91ad0ef 100644 ---- a/src/backend.cpp -+++ b/src/backend.cpp -@@ -120,4 +120,31 @@ namespace gamescope - - return cv_touch_click_mode; - } -+ -+ void CBaseBackend::DumpDebugInfo() -+ { -+ console_log.infof( "Uses Modifiers: %s", this->UsesModifiers() ? "true" : "false" ); -+ console_log.infof( "VRR Active: %s", this->IsVRRActive() ? "true" : "false" ); -+ console_log.infof( "Supports Plane Hardware Cursor: %s (not relevant for nested backends)", this->SupportsPlaneHardwareCursor() ? "true" : "false" ); -+ console_log.infof( "Supports Tearing: %s", this->SupportsTearing() ? "true" : "false" ); -+ console_log.infof( "Uses Vulkan Swapchain: %s", this->UsesVulkanSwapchain() ? "true" : "false" ); -+ console_log.infof( "Is Session Based: %s", this->IsSessionBased() ? "true" : "false" ); -+ console_log.infof( "Supports Explicit Sync: %s", this->SupportsExplicitSync() ? "true" : "false" ); -+ console_log.infof( "Current Screen Type: %s", this->GetScreenType() == GAMESCOPE_SCREEN_TYPE_INTERNAL ? "Internal" : "External" ); -+ console_log.infof( "Is Visible: %s", this->IsVisible() ? "true" : "false" ); -+ console_log.infof( "Is Nested: %s", this->GetNestedHints() != nullptr ? "true" : "false" ); -+ console_log.infof( "Needs Frame Sync: %s", this->NeedsFrameSync() ? "true" : "false" ); -+ console_log.infof( "Total Presents Queued: %lu", this->PresentationFeedback().TotalPresentsQueued() ); -+ console_log.infof( "Total Presents Completed: %lu", this->PresentationFeedback().TotalPresentsCompleted() ); -+ console_log.infof( "Current Presents In Flight: %lu", this->PresentationFeedback().CurrentPresentsInFlight() ); -+ } -+ -+ ConCommand cc_backend_info( "backend_info", "Dump debug info about the backend state", -+ []( std::span svArgs ) -+ { -+ if ( !GetBackend() ) -+ return; -+ -+ GetBackend()->DumpDebugInfo(); -+ }); - } -diff --git a/src/backend.h b/src/backend.h -index 9c2db15..4f91fe7 100644 ---- a/src/backend.h -+++ b/src/backend.h -@@ -236,6 +236,8 @@ namespace gamescope - - virtual TouchClickMode GetTouchClickMode() = 0; - -+ virtual void DumpDebugInfo() = 0; -+ - static IBackend *Get(); - template - static bool Set(); -@@ -263,6 +265,8 @@ namespace gamescope - virtual BackendPresentFeedback& PresentationFeedback() override { return m_PresentFeedback; } - - virtual TouchClickMode GetTouchClickMode() override; -+ -+ virtual void DumpDebugInfo() override; - protected: - BackendPresentFeedback m_PresentFeedback{}; - }; -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index b8102eb..60ddbbe 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -856,6 +856,25 @@ void steamcompmgr_set_app_refresh_cycle_override( gamescope::GamescopeScreenType - update_app_target_refresh_cycle(); - } - -+gamescope::ConCommand cc_debug_set_fps_limit( "debug_set_fps_limit", "Set refresh cycle (debug)", -+[](std::span svArgs) -+{ -+ if ( svArgs.size() < 2 ) -+ return; -+ -+ // TODO: Expose all facets as args. -+ std::optional onFps = gamescope::Parse( svArgs[1] ); -+ if ( !onFps ) -+ { -+ console_log.errorf( "Failed to parse FPS." ); -+ return; -+ } -+ -+ int32_t nFps = *onFps; -+ -+ steamcompmgr_set_app_refresh_cycle_override( GetBackend()->GetScreenType(), nFps, true, true ); -+}); -+ - static int g_nRuntimeInfoFd = -1; - - bool g_bFSRActive = false; --- -2.45.2 - - -From e2a277e15b7f6b7075e0433a5b9605168faf91b5 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:00:35 +0100 -Subject: [PATCH 13/19] WaylandBackend: Beginnings of support for - xx-color-management-v3 - ---- - protocol/meson.build | 3 + - protocol/xx-color-management-v3.xml | 1421 +++++++++++++++++++++++++++ - src/Backends/WaylandBackend.cpp | 229 ++++- - src/backend.h | 3 +- - 4 files changed, 1645 insertions(+), 11 deletions(-) - create mode 100644 protocol/xx-color-management-v3.xml - -diff --git a/protocol/meson.build b/protocol/meson.build -index 9af3607..5eb681e 100644 ---- a/protocol/meson.build -+++ b/protocol/meson.build -@@ -37,6 +37,9 @@ protocols = [ - - # wlroots protocols - 'wlr-layer-shell-unstable-v1.xml', -+ -+ # WIP protocols -+ 'xx-color-management-v3.xml', - ] - - protocols_client_src = [] -diff --git a/protocol/xx-color-management-v3.xml b/protocol/xx-color-management-v3.xml -new file mode 100644 -index 0000000..e637a25 ---- /dev/null -+++ b/protocol/xx-color-management-v3.xml -@@ -0,0 +1,1421 @@ -+ -+ -+ -+ Copyright 2019 Sebastian Wick -+ Copyright 2019 Erwin Burema -+ Copyright 2020 AMD -+ Copyright 2020-2024 Collabora, Ltd. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ The aim of the color management extension is to allow clients to know -+ the color properties of outputs, and to tell the compositor about the color -+ properties of their content on surfaces. Doing this enables a compositor -+ to perform automatic color management of content for different outputs -+ according to how content is intended to look like. -+ -+ The color properties are represented as an image description object which -+ is immutable after it has been created. A wl_output always has an -+ associated image description that clients can observe. A wl_surface -+ always has an associated preferred image description as a hint chosen by -+ the compositor that clients can also observe. Clients can set an image -+ description on a wl_surface to denote the color characteristics of the -+ surface contents. -+ -+ An image description includes SDR and HDR colorimetry and encoding, HDR -+ metadata, and viewing environment parameters. An image description does -+ not include the properties set through color-representation extension. -+ It is expected that the color-representation extension is used in -+ conjunction with the color management extension when necessary, -+ particularly with the YUV family of pixel formats. -+ -+ Recommendation ITU-T H.273 -+ "Coding-independent code points for video signal type identification" -+ shall be referred to as simply H.273 here. -+ -+ The color-and-hdr repository -+ (https://gitlab.freedesktop.org/pq/color-and-hdr) contains -+ background information on the protocol design and legacy color management. -+ It also contains a glossary, learning resources for digital color, tools, -+ samples and more. -+ -+ The terminology used in this protocol is based on common color science and -+ color encoding terminology where possible. The glossary in the color-and-hdr -+ repository shall be the authority on the definition of terms in this -+ protocol. -+ -+ -+ -+ -+ A global interface used for getting color management extensions for -+ wl_surface and wl_output objects, and for creating client defined image -+ description objects. The extension interfaces allow -+ getting the image description of outputs and setting the image -+ description of surfaces. -+ -+ -+ -+ -+ Destroy the xx_color_manager_v3 object. This does not affect any other -+ objects in any way. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ See the ICC.1:2022 specification from the International Color Consortium -+ for more details about rendering intents. -+ -+ The principles of ICC defined rendering intents apply with all types of -+ image descriptions, not only those with ICC file profiles. -+ -+ Compositors must support the perceptual rendering intent. Other -+ rendering intents are optional. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ The compositor supports set_mastering_display_primaries request with a -+ target color volume fully contained inside the primary color volume. -+ -+ -+ -+ -+ The compositor additionally supports target color volumes that -+ extend outside of the primary color volume. -+ -+ This can only be advertised if feature set_mastering_display_primaries -+ is supported as well. -+ -+ -+ -+ -+ -+ -+ Named color primaries used to encode well-known sets of primaries. H.273 -+ is the authority, when it comes to the exact values of primaries and -+ authoritative specifications, where an equivalent code point exists. -+ -+ Descriptions do list the specifications for convenience. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.709-6 -+ - Rec. ITU-R BT.1361-0 conventional colour gamut system and extended -+ colour gamut system (historical) -+ - IEC 61966-2-1 sRGB or sYCC -+ - IEC 61966-2-4 -+ - Society of Motion Picture and Television Engineers (SMPTE) RP 177 -+ (1993) Annex B -+ Equivalent to H.273 ColourPrimaries code point 1. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.470-6 System M (historical) -+ - United States National Television System Committee 1953 -+ Recommendation for transmission standards for color television -+ - United States Federal Communications Commission (2003) Title 47 Code -+ of Federal Regulations 73.682 (a)(20) -+ Equivalent to H.273 ColourPrimaries code point 4. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.470-6 System B, G (historical) -+ - Rec. ITU-R BT.601-7 625 -+ - Rec. ITU-R BT.1358-0 625 (historical) -+ - Rec. ITU-R BT.1700-0 625 PAL and 625 SECAM -+ Equivalent to H.273 ColourPrimaries code point 5. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.601-7 525 -+ - Rec. ITU-R BT.1358-1 525 or 625 (historical) -+ - Rec. ITU-R BT.1700-0 NTSC -+ - SMPTE 170M (2004) -+ - SMPTE 240M (1999) (historical) -+ Equivalent to H.273 ColourPrimaries code point 6 and 7. -+ -+ -+ -+ -+ Color primaries as defined by H.273 for generic film. -+ Equivalent to H.273 ColourPrimaries code point 8. -+ -+ -+ -+ -+ Color primaries as defined by -+ - Rec. ITU-R BT.2020-2 -+ - Rec. ITU-R BT.2100-0 -+ Equivalent to H.273 ColourPrimaries code point 9. -+ -+ -+ -+ -+ Color primaries as defined as the maximum of the CIE 1931 XYZ color -+ space by -+ - SMPTE ST 428-1 -+ - (CIE 1931 XYZ as in ISO 11664-1) -+ Equivalent to H.273 ColourPrimaries code point 10. -+ -+ -+ -+ -+ Color primaries as defined by Digital Cinema System and published in -+ SMPTE RP 431-2 (2011). Equivalent to H.273 ColourPrimaries code point -+ 11. -+ -+ -+ -+ -+ Color primaries as defined by Digital Cinema System and published in -+ SMPTE EG 432-1 (2010). -+ Equivalent to H.273 ColourPrimaries code point 12. -+ -+ -+ -+ -+ Color primaries as defined by Adobe as "Adobe RGB" and later published -+ by ISO 12640-4 (2011). -+ -+ -+ -+ -+ -+ -+ Named transfer functions used to encode well-known transfer -+ characteristics. H.273 is the authority, when it comes to the exact -+ formulas and authoritative specifications, where an equivalent code -+ point exists. -+ -+ Descriptions do list the specifications for convenience. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.709-6 -+ - Rec. ITU-R BT.1361-0 conventional colour gamut system (historical) -+ Equivalent to H.273 TransferCharacteristics code point 1, 6, 14, 15. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.470-6 System M (historical) -+ - United States National Television System Committee 1953 -+ Recommendation for transmission standards for color television -+ - United States Federal Communications Commission (2003) Title 47 Code -+ of Federal Regulations 73.682 (a) (20) -+ - Rec. ITU-R BT.1700-0 625 PAL and 625 SECAM -+ Equivalent to H.273 TransferCharacteristics code point 4. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.470-6 System B, G (historical) -+ Equivalent to H.273 TransferCharacteristics code point 5. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 240 (1999) -+ Equivalent to H.273 TransferCharacteristics code point 7. -+ -+ -+ -+ -+ Linear transfer characteristics. -+ Equivalent to H.273 TransferCharacteristics code point 8. -+ -+ -+ -+ -+ Logarithmic transfer characteristic (100:1 range). -+ Equivalent to H.273 TransferCharacteristics code point 9. -+ -+ -+ -+ -+ Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range). -+ Equivalent to H.273 TransferCharacteristics code point 10. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-4 -+ Equivalent to H.273 TransferCharacteristics code point 11. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - Rec. ITU-R BT.1361-0 extended colour gamut system (historical) -+ Equivalent to H.273 TransferCharacteristics code point 12. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-1 sRGB -+ Equivalent to H.273 TransferCharacteristics code point 13 with -+ MatrixCoefficients set to 0. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - IEC 61966-2-1 sYCC -+ Equivalent to H.273 TransferCharacteristics code point 13 with -+ MatrixCoefficients set to anything but 0. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 2084 (2014) for 10-, 12-, 14- and 16-bit systems -+ - Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system -+ Equivalent to H.273 TransferCharacteristics code point 16. -+ -+ This TF implies these default luminances -+ - primary color volume minimum: 0.005 cd/m² -+ - primary color volume maximum: 10000 cd/m² -+ - reference white: 203 cd/m² -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - SMPTE ST 428-1 (2019) -+ Equivalent to H.273 TransferCharacteristics code point 17. -+ -+ -+ -+ -+ Transfer characteristics as defined by -+ - ARIB STD-B67 (2015) -+ - Rec. ITU-R BT.2100-2 hybrid log-gamma (HLG) system -+ Equivalent to H.273 TransferCharacteristics code point 18. -+ -+ This TF implies these default luminances -+ - primary color volume minimum: 0.005 cd/m² -+ - primary color volume maximum: 1000 cd/m² -+ - reference white: 203 cd/m² -+ Note: HLG is a scene referred signal. All absolute luminance values -+ used here for HLG assume a 1000 cd/m² display. -+ -+ -+ -+ -+ -+ -+ This creates a new xx_color_management_output_v3 object for the -+ given wl_output. -+ -+ See the xx_color_management_output_v3 interface for more details. -+ -+ -+ -+ -+ -+ -+ -+ -+ If a xx_color_management_surface_v3 object already exists for the given -+ wl_surface, the protocol error surface_exists is raised. -+ -+ This creates a new color xx_color_management_surface_v3 object for the -+ given wl_surface. -+ -+ See the xx_color_management_surface_v3 interface for more details. -+ -+ -+ -+ -+ -+ -+ -+ -+ Makes a new ICC-based image description creator object with all -+ properties initially unset. The client can then use the object's -+ interface to define all the required properties for an image description -+ and finally create a xx_image_description_v3 object. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.icc_v2_v4. -+ Otherwise this request raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ Makes a new parametric image description creator object with all -+ properties initially unset. The client can then use the object's -+ interface to define all the required properties for an image description -+ and finally create a xx_image_description_v3 object. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.parametric. -+ Otherwise this request raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each rendering intent the compositor supports. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each compositor supported feature listed in the enumeration. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each named transfer function the compositor supports with the -+ parametric image description creator. -+ -+ -+ -+ -+ -+ -+ -+ When this object is created, it shall immediately send this event once -+ for each named set of primaries the compositor supports with the -+ parametric image description creator. -+ -+ -+ -+ -+ -+ -+ -+ -+ A xx_color_management_output_v3 describes the color properties of an -+ output. -+ -+ The xx_color_management_output_v3 is associated with the wl_output global -+ underlying the wl_output object. Therefore the client destroying the -+ wl_output object has no impact, but the compositor removing the output -+ global makes the xx_color_management_output_v3 object inert. -+ -+ -+ -+ -+ Destroy the color xx_color_management_output_v3 object. This does not -+ affect any remaining protocol objects. -+ -+ -+ -+ -+ -+ This event is sent whenever the image description of the output changed, -+ followed by one wl_output.done event common to output events across all -+ extensions. -+ -+ If the client wants to use the updated image description, it needs to do -+ get_image_description again, because image description objects are -+ immutable. -+ -+ -+ -+ -+ -+ This creates a new xx_image_description_v3 object for the current image -+ description of the output. There always is exactly one image description -+ active for an output so the client should destroy the image description -+ created by earlier invocations of this request. This request is usually -+ sent as a reaction to the image_description_changed event or when -+ creating a xx_color_management_output_v3 object. -+ -+ The image description of an output represents the color encoding the -+ output expects. There might be performance and power advantages, as well -+ as improved color reproduction, if a content update matches the image -+ description of the output it is being shown on. If a content update is -+ shown on any other output than the one it matches the image description -+ of, then the color reproduction on those outputs might be considerably -+ worse. -+ -+ The created xx_image_description_v3 object preserves the image -+ description of the output from the time the object was created. -+ -+ The resulting image description object allows get_information request. -+ -+ If this protocol object is inert, the resulting image description object -+ shall immediately deliver the xx_image_description_v3.failed event with -+ the no_output cause. -+ -+ If the interface version is inadequate for the output's image -+ description, meaning that the client does not support all the events -+ needed to deliver the crucial information, the resulting image -+ description object shall immediately deliver the -+ xx_image_description_v3.failed event with the low_version cause. -+ -+ Otherwise the object shall immediately deliver the ready event. -+ -+ -+ -+ -+ -+ -+ -+ -+ A xx_color_management_surface_v3 allows the client to set the color -+ space and HDR properties of a surface. -+ -+ If the wl_surface associated with the xx_color_management_surface_v3 is -+ destroyed, the xx_color_management_surface_v3 object becomes inert. -+ -+ -+ -+ -+ Destroy the xx_color_management_surface_v3 object and do the same as -+ unset_image_description. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the image description of the underlying surface. The image -+ description and rendering intent are double-buffered state, see -+ wl_surface.commit. -+ -+ It is the client's responsibility to understand the image description -+ it sets on a surface, and to provide content that matches that image -+ description. Compositors might convert images to match their own or any -+ other image descriptions. -+ -+ Image description whose creation gracefully failed (received -+ xx_image_description_v3.failed) are forbidden in this request, and in -+ such case the protocol error image_description is raised. -+ -+ All image descriptions whose creation succeeded (received -+ xx_image_description_v3.ready) are allowed and must always be accepted -+ by the compositor. -+ -+ A rendering intent provides the client's preference on how content -+ colors should be mapped to each output. The render_intent value must -+ be one advertised by the compositor with -+ xx_color_manager_v3.render_intent event, otherwise the protocol error -+ render_intent is raised. -+ -+ By default, a surface does not have an associated image description -+ nor a rendering intent. The handling of color on such surfaces is -+ compositor implementation defined. Compositors should handle such -+ surfaces as sRGB but may handle them differently if they have specific -+ requirements. -+ -+ -+ -+ -+ -+ -+ -+ -+ This request removes any image description from the surface. See -+ set_image_description for how a compositor handles a surface without -+ an image description. This is double-buffered state, see -+ wl_surface.commit. -+ -+ -+ -+ -+ -+ The preferred image description is the one which likely has the most -+ performance and/or quality benefits for the compositor if used by the -+ client for its wl_surface contents. This event is sent whenever the -+ compositor changes the wl_surface's preferred image description. -+ -+ This is not an initial event. -+ -+ This event is merely a notification. When the client wants to know -+ what the preferred image description is, it shall use the get_preferred -+ request. -+ -+ The preferred image description is not automatically used for anything. -+ It is only a hint, and clients may set any valid image description with -+ set_image_description but there might be performance and color accuracy -+ improvements by providing the wl_surface contents in the preferred -+ image description. Therefore clients that can, should render according -+ to the preferred image description -+ -+ -+ -+ -+ -+ If this protocol object is inert, the protocol error inert is raised. -+ -+ The preferred image description represents the compositor's preferred -+ color encoding for this wl_surface at the current time. There might be -+ performance and power advantages, as well as improved color -+ reproduction, if the image description of a content update matches the -+ preferred image description. -+ -+ This creates a new xx_image_description_v3 object for the currently -+ preferred image description for the wl_surface. The client should -+ stop using and destroy the image descriptions created by earlier -+ invocations of this request for the associated wl_surface. -+ This request is usually sent as a reaction to the preferred_changed -+ event or when creating a xx_color_management_surface_v3 object if -+ the client is capable of adapting to image descriptions. -+ -+ The created xx_image_description_v3 object preserves the preferred image -+ description of the wl_surface from the time the object was created. -+ -+ The resulting image description object allows get_information request. -+ -+ If the interface version is inadequate for the preferred image -+ description, meaning that the client does not support all the -+ events needed to deliver the crucial information, the resulting image -+ description object shall immediately deliver the -+ xx_image_description_v3.failed event with the low_version cause, -+ otherwise the object shall immediately deliver the ready event. -+ -+ -+ -+ -+ -+ -+ -+ -+ This type of object is used for collecting all the information required -+ to create a xx_image_description_v3 object from an ICC file. A complete -+ set of required parameters consists of these properties: -+ - ICC file -+ -+ Each required property must be set exactly once if the client is to create -+ an image description. The set requests verify that a property was not -+ already set. The create request verifies that all required properties are -+ set. There may be several alternative requests for setting each property, -+ and in that case the client must choose one of them. -+ -+ Once all properties have been set, the create request must be used to -+ create the image description object, destroying the creator in the -+ process. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Create an image description object based on the ICC information -+ previously set on this object. A compositor must parse the ICC data in -+ some undefined but finite amount of time. -+ -+ The completeness of the parameter set is verified. If the set is not -+ complete, the protocol error incomplete_set is raised. For the -+ definition of a complete set, see the description of this interface. -+ -+ If the particular combination of the information is not supported -+ by the compositor, the resulting image description object shall -+ immediately deliver the xx_image_description_v3.failed event with the -+ 'unsupported' cause. If a valid image description was created from the -+ information, the xx_image_description_v3.ready event will eventually -+ be sent instead. -+ -+ This request destroys the xx_image_description_creator_icc_v3 object. -+ -+ The resulting image description object does not allow get_information -+ request. -+ -+ -+ -+ -+ -+ -+ -+ Sets the ICC profile file to be used as the basis of the image -+ description. -+ -+ The data shall be found through the given fd at the given offset, having -+ the given length. The fd must seekable and readable. Violating these -+ requirements raises the bad_fd protocol error. -+ -+ If reading the data fails due to an error independent of the client, the -+ compositor shall send the xx_image_description_v3.failed event on the -+ created xx_image_description_v3 with the 'operating_system' cause. -+ -+ The maximum size of the ICC profile is 4 MB. If length is greater than -+ that or zero, the protocol error bad_size is raised. If offset + length -+ exceeds the file size, the protocol error out_of_file is raised. -+ -+ A compositor may read the file at any time starting from this request -+ and only until whichever happens first: -+ - If create request was issued, the xx_image_description_v3 object -+ delivers either failed or ready event; or -+ - if create request was not issued, this -+ xx_image_description_creator_icc_v3 object is destroyed. -+ -+ A compositor shall not modify the contents of the file, and the fd may -+ be sealed for writes and size changes. The client must ensure to its -+ best ability that the data does not change while the compositor is -+ reading it. -+ -+ The data must represent a valid ICC profile. The ICC profile version -+ must be 2 or 4, it must be a 3 channel profile and the class must be -+ Display or ColorSpace. Violating these requirements will not result in a -+ protocol error but will eventually send the -+ xx_image_description_v3.failed event on the created -+ xx_image_description_v3 with the 'unsupported' cause. -+ -+ See the International Color Consortium specification ICC.1:2022 for more -+ details about ICC profiles. -+ -+ If ICC file has already been set on this object, the protocol error -+ already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ This type of object is used for collecting all the parameters required -+ to create a xx_image_description_v3 object. A complete set of required -+ parameters consists of these properties: -+ - transfer characteristic function (tf) -+ - chromaticities of primaries and white point (primary color volume) -+ -+ The following properties are optional and have a well-defined default -+ if not explicitly set: -+ - primary color volume luminance range -+ - reference white luminance level -+ - mastering display primaries and white point (target color volume) -+ - mastering luminance range -+ - maximum content light level -+ - maximum frame-average light level -+ -+ Each required property must be set exactly once if the client is to create -+ an image description. The set requests verify that a property was not -+ already set. The create request verifies that all required properties are -+ set. There may be several alternative requests for setting each property, -+ and in that case the client must choose one of them. -+ -+ Once all properties have been set, the create request must be used to -+ create the image description object, destroying the creator in the -+ process. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Create an image description object based on the parameters previously -+ set on this object. -+ -+ The completeness of the parameter set is verified. If the set is not -+ complete, the protocol error incomplete_set is raised. For the -+ definition of a complete set, see the description of this interface. -+ -+ Also, the combination of the parameter set is verified. If the set is -+ not consistent, the protocol error inconsistent_set is raised. -+ -+ If the particular combination of the parameter set is not supported -+ by the compositor, the resulting image description object shall -+ immediately deliver the xx_image_description_v3.failed event with the -+ 'unsupported' cause. If a valid image description was created from the -+ parameter set, the xx_image_description_v3.ready event will eventually -+ be sent instead. -+ -+ This request destroys the xx_image_description_creator_params_v3 -+ object. -+ -+ The resulting image description object does not allow get_information -+ request. -+ -+ -+ -+ -+ -+ -+ -+ Sets the transfer characteristic using explicitly enumerated named -+ functions. -+ -+ When the resulting image description is attached to an image, the -+ content should be encoded and decoded according to the industry standard -+ practices for the transfer characteristic. -+ -+ Only names advertised with xx_color_manager_v3 event supported_tf_named -+ are allowed. Other values shall raise the protocol error invalid_tf. -+ -+ If transfer characteristic has already been set on this object, the -+ protocol error already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color component transfer characteristic to a power curve with -+ the given exponent. This curve represents the conversion from electrical -+ to optical pixel or color values. -+ -+ When the resulting image description is attached to an image, the -+ content should be encoded with the inverse of the power curve. -+ -+ The curve exponent shall be multiplied by 10000 to get the argument eexp -+ value to carry the precision of 4 decimals. -+ -+ The curve exponent must be at least 1.0 and at most 10.0. Otherwise the -+ protocol error invalid_tf is raised. -+ -+ If transfer characteristic has already been set on this object, the -+ protocol error already_set is raised. -+ -+ This request can be used when the compositor advertises -+ xx_color_manager_v3.feature.set_tf_power. Otherwise this request raises -+ the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color primaries and white point using explicitly named sets. -+ This describes the primary color volume which is the basis for color -+ value encoding. -+ -+ Only names advertised with xx_color_manager_v3 event -+ supported_primaries_named are allowed. Other values shall raise the -+ protocol error invalid_primaries. -+ -+ If primaries have already been set on this object, the protocol error -+ already_set is raised. -+ -+ -+ -+ -+ -+ -+ -+ Sets the color primaries and white point using CIE 1931 xy chromaticity -+ coordinates. This describes the primary color volume which is the basis -+ for color value encoding. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ If primaries have already been set on this object, the protocol error -+ already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_primaries. Otherwise this request raises -+ the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the primary color volume luminance range and the reference white -+ luminance level. -+ -+ The default luminances are -+ - primary color volume minimum: 0.2 cd/m² -+ - primary color volume maximum: 80 cd/m² -+ - reference white: 80 cd/m² -+ -+ Setting a named transfer characteristic can imply other default -+ luminances. -+ -+ The default luminances get overwritten when this request is used. -+ -+ 'min_lum' and 'max_lum' specify the minimum and maximum luminances of -+ the primary color volume as reproduced by the targeted display. -+ -+ 'reference_lum' specifies the luminance of the reference white as -+ reproduced by the targeted display, and reflects the targeted viewing -+ environment. -+ -+ Compositors should make sure that all content is anchored, meaning that -+ an input signal level of 'reference_lum' on one image description and -+ another input signal level of 'reference_lum' on another image -+ description should produce the same output level, even though the -+ 'reference_lum' on both image representations can be different. -+ -+ If 'max_lum' is less than the 'reference_lum', or 'reference_lum' is -+ less than or equal to 'min_lum', the protocol error invalid_luminance is -+ raised. -+ -+ The minimum luminance is multiplied by 10000 to get the argument -+ 'min_lum' value and carries precision of 4 decimals. The maximum -+ luminance and reference white luminance values are unscaled. -+ -+ If the primary color volume luminance range and the reference white -+ luminance level have already been set on this object, the protocol error -+ already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_luminances. Otherwise this request -+ raises the protocol error unsupported_feature. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the color primaries and white point of the mastering display -+ using CIE 1931 xy chromaticity coordinates. This is compatible with the -+ SMPTE ST 2086 definition of HDR static metadata. -+ -+ The mastering display primaries define the target color volume. -+ -+ If mastering display primaries are not explicitly set, the target color -+ volume is assumed to be equal to the primary color volume. -+ -+ The target color volume is defined by all tristimulus values between 0.0 -+ and 1.0 (inclusive) of the color space defined by the given mastering -+ display primaries and white point. The colorimetry is identical between -+ the container color space and the mastering display color space, -+ including that no chromatic adaptation is applied even if the white -+ points differ. -+ -+ The target color volume can exceed the primary color volume to allow for -+ a greater color volume with an existing color space definition (for -+ example scRGB). It can be smaller than the primary color volume to -+ minimize gamut and tone mapping distances for big color spaces (HDR -+ metadata). -+ -+ To make use of the entire target color volume a suitable pixel format -+ has to be chosen (e.g. floating point to exceed the primary color -+ volume, or abusing limited quantization range as with xvYCC). -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ If mastering display primaries have already been set on this object, the -+ protocol error already_set is raised. -+ -+ This request can be used if the compositor advertises -+ xx_color_manager_v3.feature.set_mastering_display_primaries. Otherwise -+ this request raises the protocol error unsupported_feature. The -+ advertisement implies support only for target color volumes fully -+ contained within the primary color volume. -+ -+ If a compositor additionally supports target color volume exceeding the -+ primary color volume, it must advertise -+ xx_color_manager_v3.feature.extended_target_volume. If a client uses -+ target color volume exceeding the primary color volume and the -+ compositor does not support it, the result is implementation defined. -+ Compositors are recommended to detect this case and fail the image -+ description gracefully, but it may as well result in color artifacts. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the luminance range that was used during the content mastering -+ process as the minimum and maximum absolute luminance L. This is -+ compatible with the SMPTE ST 2086 definition of HDR static metadata. -+ -+ The mastering luminance range is undefined by default. -+ -+ If max L is less than or equal to min L, the protocol error -+ invalid_luminance is raised. -+ -+ Min L value is multiplied by 10000 to get the argument min_lum value -+ and carry precision of 4 decimals. Max L value is unscaled for max_lum. -+ -+ -+ -+ -+ -+ -+ -+ -+ Sets the maximum content light level (max_cll) as defined by CTA-861-H. -+ -+ This can only be set when set_tf_cicp is used to set the transfer -+ characteristic to Rec. ITU-R BT.2100-2 perceptual quantization system. -+ Otherwise, 'create' request shall raise inconsistent_set protocol -+ error. -+ -+ max_cll is undefined by default. -+ -+ -+ -+ -+ -+ -+ -+ Sets the maximum frame-average light level (max_fall) as defined by -+ CTA-861-H. -+ -+ This can only be set when set_tf_cicp is used to set the transfer -+ characteristic to Rec. ITU-R BT.2100-2 perceptual quantization system. -+ Otherwise, 'create' request shall raise inconsistent_set protocol error. -+ -+ max_fall is undefined by default. -+ -+ -+ -+ -+ -+ -+ -+ -+ An image description carries information about the color encoding used on -+ a surface when attached to a wl_surface via -+ xx_color_management_surface_v3.set_image_description. A compositor can use -+ this information to decode pixel values into colorimetrically meaningful -+ quantities. -+ -+ Note, that the xx_image_description_v3 object is not ready to be used -+ immediately after creation. The object eventually delivers either the -+ 'ready' or the 'failed' event, specified in all requests creating it. The -+ object is deemed "ready" after receiving the 'ready' event. -+ -+ An object which is not ready is illegal to use, it can only be destroyed. -+ Any other request in this interface shall result in the 'not_ready' -+ protocol error. Attempts to use an object which is not ready through other -+ interfaces shall raise protocol errors defined there. -+ -+ Once created and regardless of how it was created, a -+ xx_image_description_v3 object always refers to one fixed image -+ description. It cannot change after creation. -+ -+ -+ -+ -+ Destroy this object. It is safe to destroy an object which is not ready. -+ -+ Destroying a xx_image_description_v3 object has no side-effects, not -+ even if a xx_color_management_surface_v3.set_image_description has not -+ yet been followed by a wl_surface.commit. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ If creating a xx_image_description_v3 object fails for a reason that is -+ not defined as a protocol error, this event is sent. -+ -+ The requests that create image description objects define whether and -+ when this can occur. Only such creation requests can trigger this event. -+ This event cannot be triggered after the image description was -+ successfully formed. -+ -+ Once this event has been sent, the xx_image_description_v3 object will -+ never become ready and it can only be destroyed. -+ -+ -+ -+ -+ -+ -+ -+ -+ Once this event has been sent, the xx_image_description_v3 object is -+ deemed "ready". Ready objects can be used to send requests and can be -+ used through other interfaces. -+ -+ Every ready xx_image_description_v3 protocol object refers to an -+ underlying image description record in the compositor. Multiple protocol -+ objects may end up referring to the same record. Clients may identify -+ these "copies" by comparing their id numbers: if the numbers from two -+ protocol objects are identical, the protocol objects refer to the same -+ image description record. Two different image description records -+ cannot have the same id number simultaneously. The id number does not -+ change during the lifetime of the image description record. -+ -+ The id number is valid only as long as the protocol object is alive. If -+ all protocol objects referring to the same image description record are -+ destroyed, the id number may be recycled for a different image -+ description record. -+ -+ Image description id number is not a protocol object id. Zero is -+ reserved as an invalid id number. It shall not be possible for a client -+ to refer to an image description by its id number in protocol. The id -+ numbers might not be portable between Wayland connections. -+ -+ This identity allows clients to de-duplicate image description records -+ and avoid get_information request if they already have the image -+ description information. -+ -+ -+ -+ -+ -+ -+ -+ Creates a xx_image_description_info_v3 object which delivers the -+ information that makes up the image description. -+ -+ Not all image description protocol objects allow get_information -+ request. Whether it is allowed or not is defined by the request that -+ created the object. If get_information is not allowed, the protocol -+ error no_information is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ Sends all matching events describing an image description object exactly -+ once and finally sends the 'done' event. -+ -+ Once a xx_image_description_info_v3 object has delivered a 'done' event it -+ is automatically destroyed. -+ -+ Every xx_image_description_info_v3 created from the same -+ xx_image_description_v3 shall always return the exact same data. -+ -+ -+ -+ -+ Signals the end of information events and destroys the object. -+ -+ -+ -+ -+ -+ The icc argument provides a file descriptor to the client which may be -+ memory-mapped to provide the ICC profile matching the image description. -+ The fd is read-only, and if mapped then it must be mapped with -+ MAP_PRIVATE by the client. -+ -+ The ICC profile version and other details are determined by the -+ compositor. There is no provision for a client to ask for a specific -+ kind of a profile. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume primaries and white point using CIE -+ 1931 xy chromaticity coordinates. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume primaries and white point using an -+ explicitly enumerated named set. -+ -+ -+ -+ -+ -+ -+ -+ The color component transfer characteristic of this image description is -+ a pure power curve. This event provides the exponent of the power -+ function. This curve represents the conversion from electrical to -+ optical pixel or color values. -+ -+ The curve exponent has been multiplied by 10000 to get the argument eexp -+ value to carry the precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ Delivers the transfer characteristic using an explicitly enumerated -+ named function. -+ -+ -+ -+ -+ -+ -+ -+ Delivers the primary color volume luminance range and the reference -+ white luminance level. -+ -+ The minimum luminance is multiplied by 10000 to get the argument -+ 'min_lum' value and carries precision of 4 decimals. The maximum -+ luminance and reference white luminance values are unscaled. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the color primaries and white point of the target color volume -+ using CIE 1931 xy chromaticity coordinates. This is compatible with the -+ SMPTE ST 2086 definition of HDR static metadata for mastering displays. -+ -+ While primary color volume is about how color is encoded, the target -+ color volume is the actually displayable color volume. If target color -+ volume is equal to the primary color volume, then this event is not -+ sent. -+ -+ Each coordinate value is multiplied by 10000 to get the argument value -+ to carry precision of 4 decimals. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the luminance range that the image description is targeting as -+ the minimum and maximum absolute luminance L. This is compatible with -+ the SMPTE ST 2086 definition of HDR static metadata. -+ -+ This luminance range is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ Min L value is multiplied by 10000 to get the argument min_lum value and -+ carry precision of 4 decimals. Max L value is unscaled for max_lum. -+ -+ -+ -+ -+ -+ -+ -+ -+ Provides the targeted max_cll of the image description. max_cll is -+ defined by CTA-861-H. -+ -+ This luminance is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ -+ -+ -+ -+ -+ -+ Provides the targeted max_fall of the image description. max_fall is -+ defined by CTA-861-H. -+ -+ This luminance is only theoretical and may not correspond to the -+ luminance of light emitted on an actual display. -+ -+ -+ -+ -+ -+ -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 8c98689..1a09acc 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -129,6 +130,7 @@ namespace gamescope - friend CWaylandPlane; - - BackendConnectorHDRInfo m_HDRInfo{}; -+ displaycolorimetry_t m_DisplayColorimetry = displaycolorimetry_709; - std::vector m_FakeEdid; - - CWaylandBackend *m_pBackend = nullptr; -@@ -222,6 +224,22 @@ namespace gamescope - uint32_t uMaxFullFrameLuminance ); - static const frog_color_managed_surface_listener s_FrogColorManagedSurfaceListener; - -+ void Wayland_XXColorManagementSurface_PreferredChanged( xx_color_management_surface_v3 *pColorManagementSurface ); -+ static const xx_color_management_surface_v3_listener s_XXColorManagementSurfaceListener; -+ void UpdateXXPreferredColorManagement(); -+ -+ void Wayland_XXImageDescriptionInfo_Done( xx_image_description_info_v3 *pImageDescInfo ); -+ void Wayland_XXImageDescriptionInfo_ICCFile( xx_image_description_info_v3 *pImageDescInfo, int32_t nICCFd, uint32_t uICCSize ); -+ void Wayland_XXImageDescriptionInfo_Primaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ); -+ void Wayland_XXImageDescriptionInfo_PrimariesNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uPrimaries ); -+ void Wayland_XXImageDescriptionInfo_TFPower( xx_image_description_info_v3 *pImageDescInfo, uint32_t uExp); -+ void Wayland_XXImageDescriptionInfo_TFNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uTF); -+ void Wayland_XXImageDescriptionInfo_Luminances( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum, uint32_t uRefLum ); -+ void Wayland_XXImageDescriptionInfo_TargetPrimaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ); -+ void Wayland_XXImageDescriptionInfo_TargetLuminance( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum ); -+ void Wayland_XXImageDescriptionInfo_Target_MaxCLL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxCLL ); -+ void Wayland_XXImageDescriptionInfo_Target_MaxFALL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxFALL ); -+ - void Wayland_FractionalScale_PreferredScale( wp_fractional_scale_v1 *pFractionalScale, uint32_t uScale ); - static const wp_fractional_scale_v1_listener s_FractionalScaleListener; - -@@ -233,6 +251,7 @@ namespace gamescope - libdecor_frame *m_pFrame = nullptr; - wl_subsurface *m_pSubsurface = nullptr; - frog_color_managed_surface *m_pFrogColorManagedSurface = nullptr; -+ xx_color_management_surface_v3 *m_pXXColorManagedSurface = nullptr; - wp_fractional_scale_v1 *m_pFractionalScale = nullptr; - libdecor_window_state m_eWindowState = LIBDECOR_WINDOW_STATE_NONE; - std::vector m_pOutputs; -@@ -267,6 +286,10 @@ namespace gamescope - { - .preferred_metadata = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_FrogColorManagedSurface_PreferredMetadata ), - }; -+ const xx_color_management_surface_v3_listener CWaylandPlane::s_XXColorManagementSurfaceListener = -+ { -+ .preferred_changed = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_XXColorManagementSurface_PreferredChanged ), -+ }; - const wp_fractional_scale_v1_listener CWaylandPlane::s_FractionalScaleListener = - { - .preferred_scale = WAYLAND_USERDATA_TO_THIS( CWaylandPlane, Wayland_FractionalScale_PreferredScale ), -@@ -546,6 +569,7 @@ namespace gamescope - wp_viewporter *GetViewporter() const { return m_pViewporter; } - wp_presentation *GetPresentation() const { return m_pPresentation; } - frog_color_management_factory_v1 *GetFrogColorManagementFactory() const { return m_pFrogColorMgmtFactory; } -+ xx_color_manager_v3 *GetXXColorManager() const { return m_pXXColorManager; } - wp_fractional_scale_manager_v1 *GetFractionalScaleManager() const { return m_pFractionalScaleManager; } - xdg_toplevel_icon_manager_v1 *GetToplevelIconManager() const { return m_pToplevelIconManager; } - libdecor *GetLibDecor() const { return m_pLibDecor; } -@@ -596,6 +620,12 @@ namespace gamescope - void Wayland_Keyboard_Leave( wl_keyboard *pKeyboard, uint32_t uSerial, wl_surface *pSurface ); - static const wl_keyboard_listener s_KeyboardListener; - -+ void Wayland_XXColorManager_SupportedIntent( xx_color_manager_v3 *pXXColorManager, uint32_t uRenderIntent ); -+ void Wayland_XXColorManager_SupportedFeature( xx_color_manager_v3 *pXXColorManager, uint32_t uFeature ); -+ void Wayland_XXColorManager_SupportedTFNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uTF ); -+ void Wayland_XXColorManager_SupportedPrimariesNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uPrimaries ); -+ static const xx_color_manager_v3_listener s_XXColorManagerListener; -+ - CWaylandInputThread m_InputThread; - - CWaylandConnector m_Connector; -@@ -615,11 +645,22 @@ namespace gamescope - OwningRc m_pBlackTexture; - wp_presentation *m_pPresentation = nullptr; - frog_color_management_factory_v1 *m_pFrogColorMgmtFactory = nullptr; -+ xx_color_manager_v3 *m_pXXColorManager = nullptr; - zwp_pointer_constraints_v1 *m_pPointerConstraints = nullptr; - zwp_relative_pointer_manager_v1 *m_pRelativePointerManager = nullptr; - wp_fractional_scale_manager_v1 *m_pFractionalScaleManager = nullptr; - xdg_toplevel_icon_manager_v1 *m_pToplevelIconManager = nullptr; - -+ struct -+ { -+ std::vector ePrimaries; -+ std::vector eTransferFunctions; -+ std::vector eRenderIntents; -+ std::vector eFeatures; -+ -+ bool bSupportsGamescopeColorManagement = false; // Has everything we want and need? -+ } m_XXColorManagerFeatures; -+ - std::unordered_map m_pOutputs; - - libdecor *m_pLibDecor = nullptr; -@@ -690,6 +731,13 @@ namespace gamescope - .modifiers = WAYLAND_NULL(), - .repeat_info = WAYLAND_NULL(), - }; -+ const xx_color_manager_v3_listener CWaylandBackend::s_XXColorManagerListener -+ { -+ .supported_intent = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedIntent ), -+ .supported_feature = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedFeature ), -+ .supported_tf_named = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedTFNamed ), -+ .supported_primaries_named = WAYLAND_USERDATA_TO_THIS( CWaylandBackend, Wayland_XXColorManager_SupportedPrimariesNamed ), -+ }; - - ////////////////// - // CWaylandFb -@@ -752,6 +800,7 @@ namespace gamescope - CWaylandConnector::CWaylandConnector( CWaylandBackend *pBackend ) - : m_pBackend( pBackend ) - { -+ m_HDRInfo.bAlwaysPatchEdid = true; - } - - CWaylandConnector::~CWaylandConnector() -@@ -810,18 +859,20 @@ namespace gamescope - displaycolorimetry_t *displayColorimetry, EOTF *displayEOTF, - displaycolorimetry_t *outputEncodingColorimetry, EOTF *outputEncodingEOTF ) const - { -- if ( g_bForceHDR10OutputDebug ) -+ *displayColorimetry = m_DisplayColorimetry; -+ *displayEOTF = EOTF_Gamma22; -+ -+ if ( bHDR10 && GetHDRInfo().IsHDR10() ) - { -- *displayColorimetry = displaycolorimetry_2020; -- *displayEOTF = EOTF_PQ; -+ // For HDR10 output, expected content colorspace != native colorspace. - *outputEncodingColorimetry = displaycolorimetry_2020; -- *outputEncodingEOTF = EOTF_PQ; -+ *outputEncodingEOTF = GetHDRInfo().eOutputEncodingEOTF; - } - else - { -- *displayColorimetry = displaycolorimetry_709; -- *displayEOTF = EOTF_Gamma22; -- *outputEncodingColorimetry = displaycolorimetry_709; -+ // We always use default 'perceptual' intent, so -+ // this should be correct for SDR content. -+ *outputEncodingColorimetry = m_DisplayColorimetry; - *outputEncodingEOTF = EOTF_Gamma22; - } - } -@@ -848,7 +899,17 @@ namespace gamescope - - m_pViewport = wp_viewporter_get_viewport( m_pBackend->GetViewporter(), m_pSurface ); - -- if ( m_pBackend->GetFrogColorManagementFactory() ) -+ if ( m_pBackend->GetXXColorManager() ) -+ { -+ m_pXXColorManagedSurface = xx_color_manager_v3_get_surface( m_pBackend->GetXXColorManager(), m_pSurface ); -+ -+ // Only add the listener for the toplevel to avoid useless spam. -+ if ( !pParent ) -+ xx_color_management_surface_v3_add_listener( m_pXXColorManagedSurface, &s_XXColorManagementSurfaceListener, this ); -+ -+ UpdateXXPreferredColorManagement(); -+ } -+ else if ( m_pBackend->GetFrogColorManagementFactory() ) - { - m_pFrogColorManagedSurface = frog_color_management_factory_v1_get_color_managed_surface( m_pBackend->GetFrogColorManagementFactory(), m_pSurface ); - -@@ -913,7 +974,11 @@ namespace gamescope - wp_presentation_feedback_add_listener( pFeedback, &s_PresentationFeedbackListener, this ); - } - -- if ( m_pFrogColorManagedSurface ) -+ if ( m_pXXColorManagedSurface ) -+ { -+ // TODO: Actually use this. -+ } -+ else if ( m_pFrogColorManagedSurface ) - { - frog_color_managed_surface_set_render_intent( m_pFrogColorManagedSurface, FROG_COLOR_MANAGED_SURFACE_RENDER_INTENT_PERCEPTUAL ); - switch ( oState->eColorspace ) -@@ -1167,6 +1232,12 @@ namespace gamescope - pHDRInfo->uMaxFrameAverageLuminance = uMaxFullFrameLuminance; - pHDRInfo->uMinContentLightLevel = uMinLuminance; - -+ auto *pDisplayColorimetry = &m_pBackend->m_Connector.m_DisplayColorimetry; -+ pDisplayColorimetry->primaries.r = glm::vec2{ uOutputDisplayPrimaryRedX * 0.00002f, uOutputDisplayPrimaryRedY * 0.00002f }; -+ pDisplayColorimetry->primaries.g = glm::vec2{ uOutputDisplayPrimaryGreenX * 0.00002f, uOutputDisplayPrimaryGreenY * 0.00002f }; -+ pDisplayColorimetry->primaries.b = glm::vec2{ uOutputDisplayPrimaryBlueX * 0.00002f, uOutputDisplayPrimaryBlueY * 0.00002f }; -+ pDisplayColorimetry->white = glm::vec2{ uOutputWhitePointX * 0.00002f, uOutputWhitePointY * 0.00002f }; -+ - xdg_log.infof( "PreferredMetadata: Red: %g %g, Green: %g %g, Blue: %g %g, White: %g %g, Max Luminance: %u nits, Min Luminance: %g nits, Max Full Frame Luminance: %u nits", - uOutputDisplayPrimaryRedX * 0.00002, uOutputDisplayPrimaryRedY * 0.00002, - uOutputDisplayPrimaryGreenX * 0.00002, uOutputDisplayPrimaryGreenY * 0.00002, -@@ -1177,6 +1248,87 @@ namespace gamescope - uint32_t( uMaxFullFrameLuminance ) ); - } - -+ // -+ -+ void CWaylandPlane::Wayland_XXColorManagementSurface_PreferredChanged( xx_color_management_surface_v3 *pColorManagementSurface ) -+ { -+ UpdateXXPreferredColorManagement(); -+ } -+ -+ void CWaylandPlane::UpdateXXPreferredColorManagement() -+ { -+ if ( m_pParent ) -+ return; -+ -+ xx_image_description_v3 *pImageDescription = xx_color_management_surface_v3_get_preferred( m_pXXColorManagedSurface ); -+ xx_image_description_info_v3 *pImageDescInfo = xx_image_description_v3_get_information( pImageDescription ); -+ static const xx_image_description_info_v3_listener s_Listener -+ { -+ -+ }; -+ xx_image_description_info_v3_add_listener( pImageDescInfo, &s_Listener, this ); -+ wl_display_roundtrip( m_pBackend->GetDisplay() ); -+ -+ xx_image_description_info_v3_destroy( pImageDescInfo ); -+ xx_image_description_v3_destroy( pImageDescription ); -+ } -+ -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Done( xx_image_description_info_v3 *pImageDescInfo ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_ICCFile( xx_image_description_info_v3 *pImageDescInfo, int32_t nICCFd, uint32_t uICCSize ) -+ { -+ if ( nICCFd >= 0 ) -+ close( nICCFd ); -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Primaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_PrimariesNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uPrimaries ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TFPower( xx_image_description_info_v3 *pImageDescInfo, uint32_t uExp) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TFNamed( xx_image_description_info_v3 *pImageDescInfo, uint32_t uTF) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->bExposeHDRSupport = ( cv_hdr_enabled && uTF == XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ); -+ pHDRInfo->eOutputEncodingEOTF = ( cv_hdr_enabled && uTF == XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ) ? EOTF_PQ : EOTF_Gamma22; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Luminances( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum, uint32_t uRefLum ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TargetPrimaries( xx_image_description_info_v3 *pImageDescInfo, int32_t nRedX, int32_t nRedY, int32_t nGreenX, int32_t nGreenY, int32_t nBlueX, int32_t nBlueY, int32_t nWhiteX, int32_t nWhiteY ) -+ { -+ auto *pDisplayColorimetry = &m_pBackend->m_Connector.m_DisplayColorimetry; -+ pDisplayColorimetry->primaries.r = glm::vec2{ nRedX / 10000.0f, nRedY / 10000.0f }; -+ pDisplayColorimetry->primaries.g = glm::vec2{ nGreenX / 10000.0f, nGreenY / 10000.0f }; -+ pDisplayColorimetry->primaries.b = glm::vec2{ nBlueX / 10000.0f, nBlueY / 10000.0f }; -+ pDisplayColorimetry->white = glm::vec2{ nWhiteX / 10000.0f, nWhiteY / 10000.0f }; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_TargetLuminance( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMinLum, uint32_t uMaxLum ) -+ { -+ -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Target_MaxCLL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxCLL ) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->uMaxContentLightLevel = uMaxCLL; -+ } -+ void CWaylandPlane::Wayland_XXImageDescriptionInfo_Target_MaxFALL( xx_image_description_info_v3 *pImageDescInfo, uint32_t uMaxFALL ) -+ { -+ auto *pHDRInfo = &m_pBackend->m_Connector.m_HDRInfo; -+ pHDRInfo->uMaxFrameAverageLuminance = uMaxFALL; -+ } -+ -+ // -+ - void CWaylandPlane::Wayland_FractionalScale_PreferredScale( wp_fractional_scale_v1 *pFractionalScale, uint32_t uScale ) - { - if ( m_uFractionalScale != uScale ) -@@ -1258,6 +1410,39 @@ namespace gamescope - wl_registry_destroy( pRegistry ); - pRegistry = nullptr; - -+ if ( m_pXXColorManager ) -+ { -+ m_XXColorManagerFeatures.bSupportsGamescopeColorManagement = [this]() -> bool -+ { -+ // Features -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_PARAMETRIC ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_PRIMARIES ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_MASTERING_DISPLAY_PRIMARIES ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_EXTENDED_TARGET_VOLUME ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eFeatures, XX_COLOR_MANAGER_V3_FEATURE_SET_LUMINANCES ) ) -+ return false; -+ -+ // Transfer Functions -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eTransferFunctions, XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_SRGB ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.eTransferFunctions, XX_COLOR_MANAGER_V3_TRANSFER_FUNCTION_ST2084_PQ ) ) -+ return false; -+ // TODO: Need scRGB -+ -+ // Primaries -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.ePrimaries, XX_COLOR_MANAGER_V3_PRIMARIES_SRGB ) ) -+ return false; -+ if ( !Algorithm::Contains( m_XXColorManagerFeatures.ePrimaries, XX_COLOR_MANAGER_V3_PRIMARIES_BT2020 ) ) -+ return false; -+ -+ return true; -+ }(); -+ } -+ - m_pLibDecor = libdecor_new( m_pDisplay, &s_LibDecorInterface ); - if ( !m_pLibDecor ) - { -@@ -1829,7 +2014,7 @@ namespace gamescope - - bool CWaylandBackend::SupportsColorManagement() const - { -- return m_pFrogColorMgmtFactory != nullptr; -+ return m_pFrogColorMgmtFactory != nullptr || ( m_pXXColorManager != nullptr && m_XXColorManagerFeatures.bSupportsGamescopeColorManagement ); - } - - void CWaylandBackend::UpdateCursor() -@@ -1947,6 +2132,11 @@ namespace gamescope - { - m_pFrogColorMgmtFactory = (frog_color_management_factory_v1 *)wl_registry_bind( pRegistry, uName, &frog_color_management_factory_v1_interface, 1u ); - } -+ else if ( !strcmp( pInterface, xx_color_manager_v3_interface.name ) ) -+ { -+ m_pXXColorManager = (xx_color_manager_v3 *)wl_registry_bind( pRegistry, uName, &xx_color_manager_v3_interface, 1u ); -+ xx_color_manager_v3_add_listener( m_pXXColorManager, &s_XXColorManagerListener, this ); -+ } - else if ( !strcmp( pInterface, zwp_pointer_constraints_v1_interface.name ) ) - { - m_pPointerConstraints = (zwp_pointer_constraints_v1 *)wl_registry_bind( pRegistry, uName, &zwp_pointer_constraints_v1_interface, 1u ); -@@ -2064,6 +2254,25 @@ namespace gamescope - UpdateCursor(); - } - -+ // XX Color Manager -+ -+ void CWaylandBackend::Wayland_XXColorManager_SupportedIntent( xx_color_manager_v3 *pXXColorManager, uint32_t uRenderIntent ) -+ { -+ m_XXColorManagerFeatures.eRenderIntents.push_back( static_cast( uRenderIntent ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedFeature( xx_color_manager_v3 *pXXColorManager, uint32_t uFeature ) -+ { -+ m_XXColorManagerFeatures.eFeatures.push_back( static_cast( uFeature ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedTFNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uTF ) -+ { -+ m_XXColorManagerFeatures.eTransferFunctions.push_back( static_cast( uTF ) ); -+ } -+ void CWaylandBackend::Wayland_XXColorManager_SupportedPrimariesNamed( xx_color_manager_v3 *pXXColorManager, uint32_t uPrimaries ) -+ { -+ m_XXColorManagerFeatures.ePrimaries.push_back( static_cast( uPrimaries ) ); -+ } -+ - /////////////////////// - // CWaylandInputThread - /////////////////////// -diff --git a/src/backend.h b/src/backend.h -index 4f91fe7..85783c9 100644 ---- a/src/backend.h -+++ b/src/backend.h -@@ -44,6 +44,7 @@ namespace gamescope - // target/mapping values for the display brightness for undocking from a HDR display, - // but don't want to expose HDR there as it is not good. - bool bExposeHDRSupport = false; -+ bool bAlwaysPatchEdid = false; - - // The output encoding to use for HDR output. - // For typical HDR10 displays, this will be PQ. -@@ -62,7 +63,7 @@ namespace gamescope - - bool ShouldPatchEDID() const - { -- return IsHDRG22(); -+ return bAlwaysPatchEdid || IsHDRG22(); - } - - bool IsHDR10() const --- -2.45.2 - - -From 691c72b319efd2c4dcf73aa44e89e5f117cd00c3 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 17:51:55 +0100 -Subject: [PATCH 14/19] steamcompmgr: Fix Disable Frame Limit functionality - ---- - src/steamcompmgr.cpp | 23 +++++------------------ - 1 file changed, 5 insertions(+), 18 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 60ddbbe..1de35e7 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -794,33 +794,18 @@ static void _update_app_target_refresh_cycle() - if ( !GetBackend()->GetCurrentConnector() ) - return; - -- static gamescope::GamescopeScreenType last_type; -- static int last_target_fps; -- static bool first = true; -- - gamescope::GamescopeScreenType type = GetBackend()->GetCurrentConnector()->GetScreenType(); -- int target_fps = g_nCombinedAppRefreshCycleOverride[type]; - -- if ( !first && type == last_type && last_target_fps == target_fps ) -- { -- return; -- } -+ int target_fps = g_nCombinedAppRefreshCycleOverride[type]; - -- last_type = type; -- last_target_fps = target_fps; -- first = false; -+ g_nDynamicRefreshRate[ type ] = 0; -+ g_nSteamCompMgrTargetFPS = 0; - - if ( !target_fps ) - { -- g_nDynamicRefreshRate[ type ] = 0; -- g_nSteamCompMgrTargetFPS = 0; - return; - } - -- auto rates = GetBackend()->GetCurrentConnector()->GetValidDynamicRefreshRates(); -- -- g_nDynamicRefreshRate[ type ] = 0; -- - if ( g_nCombinedAppRefreshCycleChangeFPS[ type ] ) - { - g_nSteamCompMgrTargetFPS = target_fps; -@@ -828,6 +813,8 @@ static void _update_app_target_refresh_cycle() - - if ( g_nCombinedAppRefreshCycleChangeRefresh[ type ] ) - { -+ auto rates = GetBackend()->GetCurrentConnector()->GetValidDynamicRefreshRates(); -+ - // Find highest mode to do refresh doubling with. - for ( auto rate = rates.rbegin(); rate != rates.rend(); rate++ ) - { --- -2.45.2 - - -From 69610ec52429fecbe94c4c042cc42ab43e0491f8 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 18:22:11 +0100 -Subject: [PATCH 15/19] steamcompmgr: Relative mouse fixes and improvements - ---- - src/steamcompmgr.cpp | 21 ++++++++++++++++++--- - src/steamcompmgr.hpp | 3 +++ - src/wlserver.cpp | 9 ++++++--- - 3 files changed, 27 insertions(+), 6 deletions(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 1de35e7..9c98f9c 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -94,6 +94,10 @@ - #include "Utils/Process.h" - #include "Utils/Algorithm.h" - -+#include "wlr_begin.hpp" -+#include "wlr/types/wlr_pointer_constraints_v1.h" -+#include "wlr_end.hpp" -+ - #if HAVE_AVIF - #include "avif/avif.h" - #endif -@@ -1383,8 +1387,19 @@ MouseCursor::MouseCursor(xwayland_ctx_t *ctx) - void MouseCursor::UpdatePosition() - { - wlserver_lock(); -- m_x = wlserver.mouse_surface_cursorx; -- m_y = wlserver.mouse_surface_cursory; -+ struct wlr_pointer_constraint_v1 *pConstraint = wlserver.GetCursorConstraint(); -+ if ( pConstraint && pConstraint->current.cursor_hint.enabled ) -+ { -+ m_x = pConstraint->current.cursor_hint.x; -+ m_y = pConstraint->current.cursor_hint.y; -+ m_bConstrained = true; -+ } -+ else -+ { -+ m_x = wlserver.mouse_surface_cursorx; -+ m_y = wlserver.mouse_surface_cursory; -+ m_bConstrained = false; -+ } - wlserver_unlock(); - } - -@@ -7600,7 +7615,7 @@ steamcompmgr_main(int argc, char **argv) - ( global_focus.cursor && global_focus.cursor->imageEmpty() ) && - ( !window_is_steam( global_focus.inputFocusWindow ) ); - -- const bool bHasPointerConstraint = wlserver.HasMouseConstraint(); // atomic, no lock needed -+ const bool bHasPointerConstraint = global_focus.cursor->IsConstrained(); - - uint32_t uAppId = global_focus.inputFocusWindow - ? global_focus.inputFocusWindow->appID -diff --git a/src/steamcompmgr.hpp b/src/steamcompmgr.hpp -index 7c2da8c..b009ac7 100644 ---- a/src/steamcompmgr.hpp -+++ b/src/steamcompmgr.hpp -@@ -95,6 +95,8 @@ public: - void GetDesiredSize( int& nWidth, int &nHeight ); - - void checkSuspension(); -+ -+ bool IsConstrained() const { return m_bConstrained; } - private: - - bool getTexture(); -@@ -102,6 +104,7 @@ private: - void updateCursorFeedback( bool bForce = false ); - - int m_x = 0, m_y = 0; -+ bool m_bConstrained = false; - int m_hotspotX = 0, m_hotspotY = 0; - - gamescope::OwningRc m_texture; -diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 1852be9..bdacff4 100644 ---- a/src/wlserver.cpp -+++ b/src/wlserver.cpp -@@ -2243,7 +2243,9 @@ static void wlserver_warp_to_constraint_hint() - double sx = pConstraint->current.cursor_hint.x; - double sy = pConstraint->current.cursor_hint.y; - -- wlserver_mousewarp( sx, sy, 0, true ); -+ wlserver.mouse_surface_cursorx = sx; -+ wlserver.mouse_surface_cursory = sy; -+ wlr_seat_pointer_warp( wlserver.wlr.seat, sx, sy ); - } - } - -@@ -2256,6 +2258,8 @@ static void wlserver_update_cursor_constraint() - { - wlserver.mouse_constraint_requires_warp = false; - -+ wlserver_warp_to_constraint_hint(); -+ - if (!pixman_region32_contains_point(pRegion, floor(wlserver.mouse_surface_cursorx), floor(wlserver.mouse_surface_cursory), NULL)) - { - int nboxes; -@@ -2265,8 +2269,7 @@ static void wlserver_update_cursor_constraint() - wlserver.mouse_surface_cursorx = std::clamp( wlserver.mouse_surface_cursorx, boxes[0].x1, boxes[0].x2); - wlserver.mouse_surface_cursory = std::clamp( wlserver.mouse_surface_cursory, boxes[0].y1, boxes[0].y2); - -- wlr_seat_pointer_notify_motion( wlserver.wlr.seat, 0, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory ); -- wlr_seat_pointer_notify_frame( wlserver.wlr.seat ); -+ wlr_seat_pointer_warp( wlserver.wlr.seat, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory ); - } - } - } --- -2.45.2 - - -From 1f15714bc37a246c7c7d175970bef5070b7d5649 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Jul 2024 18:30:11 +0100 -Subject: [PATCH 16/19] steamcompmgr: Fix return value of avifImageRGBToYUV - being ignored - ---- - src/steamcompmgr.cpp | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 9c98f9c..1861f9d 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -2712,7 +2712,11 @@ paint_all(bool async) - rgbAvifImage.pixels = (uint8_t *)imageData.data(); - rgbAvifImage.rowBytes = g_nOutputWidth * kCompCnt * sizeof( uint16_t ); - -- avifImageRGBToYUV( pAvifImage, &rgbAvifImage ); // Not really! See Matrix Coefficients IDENTITY above. -+ if ( ( avifResult = avifImageRGBToYUV( pAvifImage, &rgbAvifImage ) ) != AVIF_RESULT_OK ) // Not really! See Matrix Coefficients IDENTITY above. -+ { -+ xwm_log.errorf( "Failed to convert RGB to YUV: %u", avifResult ); -+ return; -+ } - - avifEncoder *pEncoder = avifEncoderCreate(); - defer( avifEncoderDestroy( pEncoder ) ); --- -2.45.2 - - -From bfebd15dd6b3141e1ed5ee4bf768dc0d50c9660f Mon Sep 17 00:00:00 2001 -From: psykose -Date: Sat, 6 Jul 2024 20:52:50 +0200 -Subject: [PATCH 17/19] utils: include limits.h for PATH_MAX - ---- - src/Utils/Process.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/Utils/Process.cpp b/src/Utils/Process.cpp -index 32c52f1..9e3f758 100644 ---- a/src/Utils/Process.cpp -+++ b/src/Utils/Process.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - #include --- -2.45.2 - - -From 7fe73df4bcf71579203332baa2f3cf47506bc560 Mon Sep 17 00:00:00 2001 -From: Julian Orth -Date: Wed, 24 Jul 2024 12:40:01 +0200 -Subject: [PATCH 18/19] wayland_backend: round surface size towards infinity - -Otherwise, if the scale is larger than the texture size, the surface -size would be 0. - -Signed-off-by: Julian Orth ---- - src/Backends/WaylandBackend.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp -index 1a09acc..cc76f62 100644 ---- a/src/Backends/WaylandBackend.cpp -+++ b/src/Backends/WaylandBackend.cpp -@@ -1083,8 +1083,8 @@ namespace gamescope - .flSrcY = 0.0, - .flSrcWidth = double( pLayer->tex->width() ), - .flSrcHeight = double( pLayer->tex->height() ), -- .nDstWidth = int32_t( pLayer->tex->width() / double( pLayer->scale.x ) ), -- .nDstHeight = int32_t( pLayer->tex->height() / double( pLayer->scale.y ) ), -+ .nDstWidth = int32_t( ceil( pLayer->tex->width() / double( pLayer->scale.x ) ) ), -+ .nDstHeight = int32_t( ceil( pLayer->tex->height() / double( pLayer->scale.y ) ) ), - .eColorspace = pLayer->colorspace, - .bOpaque = pLayer->zpos == g_zposBase, - .uFractionalScale = GetScale(), --- -2.45.2 - - -From 7ae5e0d2a75de06e267c47ca3cd3cddedd1d7416 Mon Sep 17 00:00:00 2001 -From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> -Date: Wed, 24 Jul 2024 13:42:21 -0400 -Subject: [PATCH 19/19] color_helpers: Clang warning fixes - ---- - src/color_bench.cpp | 8 ++++---- - src/color_helpers.cpp | 11 +++++++++-- - src/color_helpers.h | 11 ++++++++++- - src/color_helpers_impl.h | 20 ++++++++++++++++++++ - src/color_tests.cpp | 6 +++--- - src/rendervulkan.hpp | 9 +++++---- - src/steamcompmgr.cpp | 6 +++++- - 7 files changed, 56 insertions(+), 15 deletions(-) - create mode 100644 src/color_helpers_impl.h - -diff --git a/src/color_bench.cpp b/src/color_bench.cpp -index 9c9d986..1058986 100644 ---- a/src/color_bench.cpp -+++ b/src/color_bench.cpp -@@ -4,10 +4,10 @@ - #include - #include "Utils/Algorithm.h" - --#include "color_helpers.h" -+#include "color_helpers_impl.h" - --const uint32_t nLutSize1d = 4096; --const uint32_t nLutEdgeSize3d = 17; -+using color_bench::nLutEdgeSize3d; -+using color_bench::nLutSize1d; - - uint16_t lut1d[nLutSize1d*4]; - uint16_t lut3d[nLutEdgeSize3d*nLutEdgeSize3d*nLutEdgeSize3d*4]; -@@ -38,7 +38,7 @@ static void BenchmarkCalcColorTransform(EOTF inputEOTF, benchmark::State &state) - float flGain = 1.0f; - - for (auto _ : state) { -- calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, inputColorimetry, inputEOTF, - outputEncodingColorimetry, EOTF_Gamma22, - destVirtualWhite, k_EChromaticAdapatationMethod_XYZ, - colorMapping, nightmode, tonemapping, nullptr, flGain ); -diff --git a/src/color_helpers.cpp b/src/color_helpers.cpp -index 18d3ee6..2075eca 100644 ---- a/src/color_helpers.cpp -+++ b/src/color_helpers.cpp -@@ -1,4 +1,5 @@ --#include "color_helpers.h" -+#define COLOR_HELPERS_CPP -+#include "color_helpers_impl.h" - - #include - #include -@@ -213,7 +214,11 @@ inline void lerp_rgb(float* out, const float* a, const float* b, const float* c, - - inline float ClampAndSanitize( float a, float min, float max ) - { -+#ifndef __FAST_MATH__ - return std::isfinite( a ) ? std::min(std::max(min, a), max) : min; -+#else -+ return std::min(std::max(min, a), max); -+#endif - } - - // Adapted from: -@@ -665,8 +670,9 @@ inline T applyShaper( const T & input, EOTF source, EOTF dest, const tonemapping - - bool g_bHuePreservationWhenClipping = false; - -+template - void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, -- lut3d_t * pLut3d, int nLutEdgeSize3d, -+ lut3d_t * pLut3d, - const displaycolorimetry_t & source, EOTF sourceEOTF, - const displaycolorimetry_t & dest, EOTF destEOTF, - const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, -@@ -679,6 +685,7 @@ void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, - // The 3d lut should be considered a 'matched' pair where the transform is only complete - // when applying both. I.e., you can put ANY transform in here, and it should work. - -+ static constexpr int32_t nLutEdgeSize3d = static_cast(lutEdgeSize3d); - if ( pShaper ) - { - float flScale = 1.f / ( (float) nLutSize1d - 1.f ); -diff --git a/src/color_helpers.h b/src/color_helpers.h -index 319bfc7..66213e1 100644 ---- a/src/color_helpers.h -+++ b/src/color_helpers.h -@@ -363,14 +363,23 @@ bool LoadCubeLut( lut3d_t * lut3d, const char * filename ); - // If the white points differ, this performs an absolute colorimetric match - // Look luts are optional, but if specified applied in the sourceEOTF space - -+template - void calcColorTransform( lut1d_t * pShaper, int nLutSize1d, -- lut3d_t * pLut3d, int nLutEdgeSize3d, -+ lut3d_t * pLut3d, - const displaycolorimetry_t & source, EOTF sourceEOTF, - const displaycolorimetry_t & dest, EOTF destEOTF, - const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, - const colormapping_t & mapping, const nightmode_t & nightmode, const tonemapping_t & tonemapping, - const lut3d_t * pLook, float flGain ); - -+#define REGISTER_LUT_EDGE_SIZE(size) template void calcColorTransform<(size)>( lut1d_t * pShaper, int nLutSize1d, \ -+ lut3d_t * pLut3d, \ -+ const displaycolorimetry_t & source, EOTF sourceEOTF, \ -+ const displaycolorimetry_t & dest, EOTF destEOTF, \ -+ const glm::vec2 & destVirtualWhite, EChromaticAdaptationMethod eMethod, \ -+ const colormapping_t & mapping, const nightmode_t & nightmode, const tonemapping_t & tonemapping, \ -+ const lut3d_t * pLook, float flGain ) -+ - // Build colorimetry and a gamut mapping for the given SDR configuration - // Note: the output colorimetry will use the native display's white point - // Only the color gamut will change -diff --git a/src/color_helpers_impl.h b/src/color_helpers_impl.h -new file mode 100644 -index 0000000..3e8c2d5 ---- /dev/null -+++ b/src/color_helpers_impl.h -@@ -0,0 +1,20 @@ -+#pragma once -+#include "color_helpers.h" -+ -+namespace rendervulkan { -+ static constexpr uint32_t s_nLutEdgeSize3d = 17; -+ static constexpr uint32_t s_nLutSize1d = 4096; -+} -+ -+namespace color_bench { -+ static constexpr uint32_t nLutEdgeSize3d = 17; -+ static constexpr uint32_t nLutSize1d = 4096; -+} -+ -+namespace ns_color_tests { -+ [[maybe_unused]] static constexpr uint32_t nLutEdgeSize3d = 17; -+} -+ -+#ifdef COLOR_HELPERS_CPP -+REGISTER_LUT_EDGE_SIZE(rendervulkan::s_nLutEdgeSize3d); -+#endif -\ No newline at end of file -diff --git a/src/color_tests.cpp b/src/color_tests.cpp -index 66aae90..2d682bf 100644 ---- a/src/color_tests.cpp -+++ b/src/color_tests.cpp -@@ -1,12 +1,12 @@ - #include "color_helpers.h" - #include - --#include -+//#include - #include - - /* -+using ns_color_tests::nLutEdgeSize3d; - const uint32_t nLutSize1d = 4096; --const uint32_t nLutEdgeSize3d = 17; - - uint16_t lut1d[nLutSize1d*4]; - uint16_t lut3d[nLutEdgeSize3d*nLutEdgeSize3d*nLutEdgeSize3d*4]; -@@ -36,7 +36,7 @@ static void BenchmarkCalcColorTransform(EOTF inputEOTF, benchmark::State &state) - float flGain = 1.0f; - - for (auto _ : state) { -- calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &lut1d_float, nLutSize1d, &lut3d_float, inputColorimetry, inputEOTF, - outputEncodingColorimetry, EOTF_Gamma22, - colorMapping, nightmode, tonemapping, nullptr, flGain ); - for ( size_t i=0, end = lut1d_float.dataR.size(); i - - #include "main.hpp" --#include "color_helpers.h" -+ - #include "gamescope_shared.h" - #include "backend.h" - -@@ -415,7 +415,7 @@ struct wlr_renderer *vulkan_renderer_create( void ); - - using mat3x4 = std::array, 3>; - --#include "color_helpers.h" -+#include "color_helpers_impl.h" - - struct gamescope_color_mgmt_t - { -@@ -453,8 +453,9 @@ struct gamescope_color_mgmt_t - bool operator != (const gamescope_color_mgmt_t&) const = default; - }; - --static constexpr uint32_t s_nLutEdgeSize3d = 17; --static constexpr uint32_t s_nLutSize1d = 4096; -+//namespace members from "color_helpers_impl.h": -+using rendervulkan::s_nLutEdgeSize3d; -+using rendervulkan::s_nLutSize1d; - - struct gamescope_color_mgmt_luts - { -diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 1861f9d..4a9d567 100644 ---- a/src/steamcompmgr.cpp -+++ b/src/steamcompmgr.cpp -@@ -315,7 +315,7 @@ create_color_mgmt_luts(const gamescope_color_mgmt_t& newColorMgmt, gamescope_col - buildPQColorimetry( &inputColorimetry, &colorMapping, displayColorimetry ); - } - -- calcColorTransform( &g_tmpLut1d, s_nLutSize1d, &g_tmpLut3d, s_nLutEdgeSize3d, inputColorimetry, inputEOTF, -+ calcColorTransform( &g_tmpLut1d, s_nLutSize1d, &g_tmpLut3d, inputColorimetry, inputEOTF, - outputEncodingColorimetry, newColorMgmt.outputEncodingEOTF, - newColorMgmt.outputVirtualWhite, newColorMgmt.chromaticAdaptationMode, - colorMapping, newColorMgmt.nightmode, tonemapping, pLook, flGain ); -@@ -5029,7 +5029,11 @@ steamcompmgr_latch_frame_done( steamcompmgr_win_t *w, uint64_t vblank_idx ) - - static inline float santitize_float( float f ) - { -+#ifndef __FAST_MATH__ - return ( std::isfinite( f ) ? f : 0.f ); -+#else -+ return f; -+#endif - } - - static void --- -2.45.2 - From 142a8641dbefb4e69cebff09050fc378c4967fea Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 12:11:35 -0700 Subject: [PATCH 16/58] chore: Add newer wayland spec file --- spec_files/gamescope/gamescope.spec | 3 +- .../gamescope/wayland/emersion-gpg-key.asc | Bin 0 -> 7501 bytes spec_files/gamescope/wayland/wayland.spec | 449 ++++++++++++++++++ 3 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 spec_files/gamescope/wayland/emersion-gpg-key.asc create mode 100644 spec_files/gamescope/wayland/wayland.spec diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 32d173aecd..b3ca437b16 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -50,7 +50,7 @@ BuildRequires: pkgconfig(xres) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(vulkan) BuildRequires: pkgconfig(wayland-scanner) -BuildRequires: pkgconfig(wayland-server) +BuildRequires: pkgconfig(wayland-server) >= 1.23.0 BuildRequires: pkgconfig(wayland-protocols) >= 1.17 BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(sdl2) @@ -76,6 +76,7 @@ BuildRequires: /usr/bin/glslangValidator BuildRequires: libdecor-devel BuildRequires: libXdamage-devel BuildRequires: xorg-x11-server-Xwayland-devel +BuildRequires: lcms-devel BuildRequires: git # libliftoff hasn't bumped soname, but API/ABI has changed for 0.2.0 release diff --git a/spec_files/gamescope/wayland/emersion-gpg-key.asc b/spec_files/gamescope/wayland/emersion-gpg-key.asc new file mode 100644 index 0000000000000000000000000000000000000000..cc3b6a06af86e73144a2da89ca2f6616fcdd9dcb GIT binary patch literal 7501 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 literal 0 HcmV?d00001 diff --git a/spec_files/gamescope/wayland/wayland.spec b/spec_files/gamescope/wayland/wayland.spec new file mode 100644 index 0000000000..05286fbca4 --- /dev/null +++ b/spec_files/gamescope/wayland/wayland.spec @@ -0,0 +1,449 @@ +Name: wayland +Version: 1.23.0 +Release: 2%{?dist} +Summary: Wayland Compositor Infrastructure + +# SPDX +License: MIT +URL: http://wayland.freedesktop.org/ +Source0: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz +Source1: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz.sig +Source2: emersion-gpg-key.asc + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: docbook-style-xsl +BuildRequires: doxygen +BuildRequires: expat-devel +BuildRequires: graphviz +BuildRequires: libxml2-devel +BuildRequires: libxslt +BuildRequires: meson +BuildRequires: pkgconfig(libffi) +BuildRequires: xmlto + +# For origin certification +BuildRequires: gnupg2 + +%description +Wayland is a protocol for a compositor to talk to its clients as well as a C +library implementation of that protocol. The compositor can be a standalone +display server running on Linux kernel modesetting and evdev input devices, +an X application, or a wayland client itself. The clients can be traditional +applications, X servers (rootless or fullscreen) or other display servers. + +%package devel +Summary: Development files for %{name} +Requires: libwayland-client%{?_isa} = %{version}-%{release} +Requires: libwayland-cursor%{?_isa} = %{version}-%{release} +Requires: libwayland-egl%{?_isa} = %{version}-%{release} +Requires: libwayland-server%{?_isa} = %{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package doc +Summary: Wayland development documentation +BuildArch: noarch +%description doc +Wayland development documentation + +%package -n libwayland-client +Summary: Wayland client library +%description -n libwayland-client +Wayland client library + +%package -n libwayland-cursor +Summary: Wayland cursor library +Requires: libwayland-client%{?_isa} = %{version}-%{release} +%description -n libwayland-cursor +Wayland cursor library + +%package -n libwayland-egl +Summary: Wayland egl library +%description -n libwayland-egl +Wayland egl library + +%package -n libwayland-server +Summary: Wayland server library +%description -n libwayland-server +Wayland server library + +%prep +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%autosetup -p1 + +%build +%meson +%meson_build + +%install +%meson_install + +%check +%meson_test + +%files devel +%{_bindir}/wayland-scanner +%{_includedir}/wayland-*.h +%{_libdir}/pkgconfig/wayland-*.pc +%{_libdir}/libwayland-*.so +%{_datadir}/aclocal/wayland-scanner.m4 +%dir %{_datadir}/wayland +%{_datadir}/wayland/wayland-scanner.mk +%{_datadir}/wayland/wayland.xml +%{_datadir}/wayland/wayland.dtd +%{_mandir}/man3/*.3* + +%files doc +%doc README.md +%{_datadir}/doc/wayland/ + +%files -n libwayland-client +%license COPYING +%{_libdir}/libwayland-client.so.0* + +%files -n libwayland-cursor +%license COPYING +%{_libdir}/libwayland-cursor.so.0* + +%files -n libwayland-egl +%license COPYING +%{_libdir}/libwayland-egl.so.1* + +%files -n libwayland-server +%license COPYING +%{_libdir}/libwayland-server.so.0* + +%changelog +* Sat Jul 20 2024 Fedora Release Engineering - 1.23.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 28 2024 Olivier Fourdan - 1.23.0-1 +- Update to 1.23.0 + +* Sat Jan 27 2024 Fedora Release Engineering - 1.22.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Sep 07 2023 José Expósito +- SPDX migration: license is already SPDX compatible + +* Sat Jul 22 2023 Fedora Release Engineering - 1.22.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Apr 04 2023 Kalev Lember - 1.22.0-1 +- Update to 1.22.0 + +* Sat Jan 21 2023 Fedora Release Engineering - 1.21.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Jul 26 2022 Mike Rochefort - 1.21.0-1 +- Update to 1.21.0 + +* Sat Jul 23 2022 Fedora Release Engineering - 1.20.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Mar 21 2022 Olivier Fourdan - 1.20.0-4 +- Close file descriptors not needed + rhbz#2062030 + +* Sat Jan 22 2022 Fedora Release Engineering - 1.20.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Jan 08 2022 Miro Hrončok - 1.20.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 + +* Thu Dec 16 2021 Kalev Lember - 1.20.0-1 +- Update to 1.20.0 + +* Fri Jul 23 2021 Fedora Release Engineering - 1.19.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Thu Jan 28 2021 Kalev Lember - 1.19.0-1 +- Update to 1.19.0 +- Switch to meson build system +- Drop old provides + +* Wed Jan 27 2021 Fedora Release Engineering - 1.18.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 1.18.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Feb 12 2020 Kalev Lember - 1.18.0-1 +- Update to 1.18.0 +- Drop no longer needed obsoletes/provides + +* Fri Jan 31 2020 Fedora Release Engineering - 1.17.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sat Jul 27 2019 Fedora Release Engineering - 1.17.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Mar 21 2019 Kalev Lember - 1.17.0-1 +- Update to 1.17.0 + +* Thu Mar 07 2019 Kalev Lember - 1.16.92-1 +- Update to 1.16.92 + +* Thu Feb 28 2019 Kalev Lember - 1.16.91-1 +- Update to 1.16.91 + +* Sun Feb 03 2019 Fedora Release Engineering - 1.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Sep 11 2018 Kalev Lember - 1.16.0-1 +- Update to 1.16.0 + +* Mon Aug 13 2018 Kalev Lember - 1.15.93-1 +- Update to 1.15.93 + +* Tue Jul 31 2018 Florian Weimer - 1.15.92-2 +- Rebuild with fixed binutils + +* Sun Jul 29 2018 Kalev Lember - 1.15.92-1 +- Update to 1.15.92 + +* Sat Jul 14 2018 Fedora Release Engineering - 1.15.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Apr 09 2018 Kalev Lember - 1.15.0-1 +- Update to 1.15.0 + +* Wed Apr 04 2018 Kalev Lember - 1.14.93-2 +- Make mesa-libwayland-egl obsoleting actually work + +* Tue Apr 03 2018 Kalev Lember - 1.14.93-1 +- Update to 1.14.93 + +* Tue Mar 20 2018 Kalev Lember - 1.14.92-1 +- Update to 1.14.92 +- Remove F22 upgrade path obsoletes + +* Sat Mar 03 2018 Igor Gnatenko - 1.14.91-2 +- Improve Obsoletes + +* Tue Feb 27 2018 Kalev Lember - 1.14.91-1 +- Update to 1.14.91 +- Add new libwayland-egl subpackage and obsolete mesa-libwayland-egl +- Remove ldconfig scriptlets + +* Fri Feb 09 2018 Fedora Release Engineering - 1.14.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Dec 12 2017 Kalev Lember - 1.14.0-2 +- cursor: Fix heap overflows when parsing malicious files (#1522638) + +* Wed Aug 09 2017 Kalev Lember - 1.14.0-1 +- Update to 1.14.0 + +* Wed Aug 02 2017 Kalev Lember - 1.13.93-1 +- Update to 1.13.93 + +* Sun Jul 30 2017 Florian Weimer - 1.13.92-2 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Kalev Lember - 1.13.92-1 +- Update to 1.13.92 + +* Wed Jul 19 2017 Kalev Lember - 1.13.91-1 +- Update to 1.13.91 + +* Thu Jun 1 2017 Owen Taylor otaylor@redhat.com> - 1.13.0-2 +- Add a patch fixing a build error with newer versions of graphviz + +* Wed Feb 22 2017 Kalev Lember - 1.13.0-1 +- Update to 1.13.0 + +* Sat Feb 11 2017 Fedora Release Engineering - 1.12.91-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Jan 25 2017 Kalev Lember - 1.12.91-1 +- Update to 1.12.91 + +* Wed Sep 21 2016 Kalev Lember - 1.12.0-1 +- Update to 1.12.0 + +* Wed Sep 14 2016 Kalev Lember - 1.11.94-1 +- Update to 1.11.94 + +* Thu Sep 08 2016 Kalev Lember - 1.11.93-1 +- Update to 1.11.93 + +* Wed Aug 31 2016 Kalev Lember - 1.11.92-1 +- Update to 1.11.92 + +* Wed Aug 17 2016 Kalev Lember - 1.11.91-1 +- Update to 1.11.91 +- Simplify -devel subpackage packaging +- Include license files in packaging + +* Wed Jun 01 2016 Kalev Lember - 1.11.0-1 +- Update to 1.11.0 + +* Wed May 25 2016 Kalev Lember - 1.10.93-1 +- Update to 1.10.93 + +* Wed May 18 2016 Kalev Lember - 1.10.92-1 +- Update to 1.10.92 + +* Sun May 08 2016 Kalev Lember - 1.10.91-1 +- Update to 1.10.91 + +* Thu Feb 18 2016 Kalev Lember - 1.10.0-1 +- Update to 1.10.0 + +* Thu Feb 04 2016 Kalev Lember - 1.9.92-1 +- Update to 1.9.92 + +* Wed Jan 20 2016 Kalev Lember - 1.9.91-1 +- Update to 1.9.91 + +* Tue Sep 22 2015 Kalev Lember - 1.9.0-1 +- Update to 1.9.0 +- Use make_install macro + +* Wed Sep 16 2015 Kalev Lember - 1.8.93-1 +- Update to 1.8.93 + +* Wed Sep 02 2015 Kalev Lember - 1.8.92-1 +- Update to 1.8.92 + +* Fri Aug 21 2015 Kalev Lember - 1.8.91-2 +- Split out wayland-doc subpackage for documentation + +* Fri Aug 21 2015 Kalev Lember - 1.8.91-1 +- Update to 1.8.91 + +* Mon Jul 20 2015 Adam Jackson 1.8.0-1 +- wayland 1.8.0 + +* Fri Jun 19 2015 Fedora Release Engineering - 1.7.92-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 26 2015 Adam Jackson 1.7.92-1 +- wayland 1.7.92 + +* Sat Feb 21 2015 Till Maas - 1.7.0-2 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Tue Feb 17 2015 Richard Hughes - 1.7.0-1 +- Wayland 1.7.0 + +* Fri Sep 19 2014 Kalev Lember - 1.6.0-1 +- Update to 1.6.0 +- Remove lib64 rpaths + +* Fri Aug 22 2014 Kevin Fenzi 1.5.91-1 +- Update to 1.5.90 + +* Mon Aug 18 2014 Fedora Release Engineering - 1.5.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Jul 02 2014 Adam Jackson 1.5.0-4 +- Update protocol: new surface error enums + +* Mon Jun 30 2014 Adam Jackson 1.5.0-3 +- Remove blocking flush patch as it actually introduces deadlocks now + +* Sun Jun 08 2014 Fedora Release Engineering - 1.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed May 21 2014 Richard Hughes - 1.5.0-1 +- Wayland 1.5.0 + +* Tue May 13 2014 Richard Hughes - 1.4.93-1 +- Wayland 1.4.93 + +* Fri Jan 24 2014 Richard Hughes - 1.4.0-1 +- Wayland 1.4.0 + +* Mon Jan 20 2014 Richard Hughes - 1.3.93-1 +- Wayland 1.3.93 + +* Sat Dec 21 2013 Ville Skyttä - 1.3.91-2 +- Call ldconfig in libwayland-cursor %%post* scripts. +- Run test suite during build. +- Compress snapshot tarballs with xz. + +* Tue Dec 17 2013 Richard Hughes - 1.3.91-1 +- Wayland 1.3.91 + +* Mon Nov 25 2013 Lubomir Rintel - 1.3.0-1 +- Wayland 1.3.0 + +* Mon Oct 07 2013 Adam Jackson 1.2.0-3 +- Don't use MSG_DONTWAIT in wl_connection_flush. + +* Sun Aug 04 2013 Fedora Release Engineering - 1.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 15 2013 Richard Hughes - 1.2.0-1 +- wayland 1.2.0 + +* Wed May 15 2013 Richard Hughes - 1.1.90-0.1.20130515 +- Update to a git snapshot based on what will become 1.1.90 + +* Tue Apr 16 2013 Richard Hughes - 1.1.0-1 +- wayland 1.1.0 + +* Wed Mar 27 2013 Richard Hughes - 1.0.6-1 +- wayland 1.0.6 + +* Thu Feb 21 2013 Adam Jackson 1.0.5-1 +- wayland 1.0.5 + +* Fri Feb 15 2013 Fedora Release Engineering - 1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Jan 02 2013 Adam Jackson 1.0.3-1 +- wayland 1.0.3 + +* Tue Oct 23 2012 Adam Jackson 1.0.0-1 +- wayland 1.0 + +* Thu Oct 18 2012 Adam Jackson 0.99.0-1 +- wayland 0.99.0 + +* Tue Sep 04 2012 Adam Jackson 0.95.0-1 +- wayland 0.95.0 (#843738) + +* Sun Jul 22 2012 Fedora Release Engineering - 0.89.0-2.20120424 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Apr 24 2012 Richard Hughes - 0.89.0-1 +- Update to a git snapshot based on 0.89.0 + +* Sat Feb 18 2012 Thorsten Leemhuis - 0.85.0-1 +- update to 0.85.0 +- adjust license, as upstream changed it to MIT +- update make-git-snapshot.sh to current locations and scheme +- drop common package, not needed anymore +- compositor is now in a separate package, hence reduce BuildRequires to what + is actually needed (a lot less) and adjust summary +- make usage of a git checkout in spec file optional +- a %%{?_isa} to requires where it makes sense + +* Sat Jan 14 2012 Fedora Release Engineering - 0.1-0.6.20101221 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 06 2011 Adam Jackson - 0.1-0.5.20101221 +- Rebuild for new libpng + +* Wed Jun 15 2011 Lubomir Rintel - 0.1-0.4.20101221 +- Install real compositor binary instead of a libtool wrapper + +* Mon Feb 07 2011 Fedora Release Engineering - 0.1-0.3.20101221 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Dec 21 2010 Adam Jackson 0.1-0.2.20101221 +- Today's git snap + +* Tue Nov 23 2010 Adam Jackson 0.1-0.2.20101123 +- Today's git snap +- Fix udev rule install (#653353) + +* Mon Nov 15 2010 Adam Jackson 0.1-0.1.20101111 +- Initial packaging From eb31cadeb577763cc118b56e9e72c96d80a87f41 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 12:58:02 -0700 Subject: [PATCH 17/58] chore: Use pkgconfig --- spec_files/gamescope/gamescope.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index b3ca437b16..4c83504f4d 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -60,6 +60,7 @@ BuildRequires: (pkgconfig(wlroots) >= 0.18.0 with pkgconfig(wlroots) < 0.19.0) BuildRequires: (pkgconfig(libliftoff) >= 0.4.1 with pkgconfig(libliftoff) < 0.5) BuildRequires: pkgconfig(libcap) BuildRequires: pkgconfig(hwdata) +BuildRequires: pkgconfig(lcms2) BuildRequires: spirv-headers-devel # Enforce the the minimum EVR to contain fixes for all of: # CVE-2021-28021 CVE-2021-42715 CVE-2021-42716 CVE-2022-28041 CVE-2023-43898 @@ -76,7 +77,6 @@ BuildRequires: /usr/bin/glslangValidator BuildRequires: libdecor-devel BuildRequires: libXdamage-devel BuildRequires: xorg-x11-server-Xwayland-devel -BuildRequires: lcms-devel BuildRequires: git # libliftoff hasn't bumped soname, but API/ABI has changed for 0.2.0 release From 82f66e8da9633acd52bd5ef9529f11f2932bc712 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 15:33:29 -0700 Subject: [PATCH 18/58] fix: Remove files now handled by steamdeck-dsp --- .../wireplumber.conf.d/alsa-card0.conf | 23 ------------ .../wireplumber.conf.d/alsa-card1.conf | 36 ------------------- .../alsa-ps-controller.conf | 20 ----------- .../wireplumber/wireplumber.conf.d/bluez.conf | 25 ------------- 4 files changed, 104 deletions(-) delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf delete mode 100644 system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf deleted file mode 100644 index 73255fb985..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card0.conf +++ /dev/null @@ -1,23 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "HD-Audio Generic" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "HD-Audio Generic" - } - ] - actions = { - update-props = { - priority.driver = 900 - priority.session = 900 - api.alsa.period-size = 256 - api.alsa.headroom = 1024 - session.suspend-timeout-seconds = 0 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf deleted file mode 100644 index 4f2e57a293..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-card1.conf +++ /dev/null @@ -1,36 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "acp5x" - } - { - node.name = "~alsa_input.*" - alsa.card_name = "acp6x" - } - { - node.name = "~alsa_input.*" - alsa.card_name = "sof-nau8821-max" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "acp5x" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "acp6x" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "sof-nau8821-max" - } - ] - actions = { - update-props = { - session.suspend-timeout-seconds = 0 - api.alsa.headroom = 1024 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf deleted file mode 100644 index e0c2a5ff72..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf +++ /dev/null @@ -1,20 +0,0 @@ -monitor.alsa.rules = [ - { - matches = [ - { - node.name = "~alsa_input.*" - alsa.card_name = "Wireless Controller" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "Wireless Controller" - } - ] - actions = { - update-props = { - priority.driver = 90 - priority.session = 90 - } - } - } -] diff --git a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf b/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf deleted file mode 100644 index 75e8f21a9c..0000000000 --- a/system_files/deck/shared/usr/etc/wireplumber/wireplumber.conf.d/bluez.conf +++ /dev/null @@ -1,25 +0,0 @@ -monitor.bluez.properties = { - ## we only want these audio profiles: - ## 0000110a-0000-1000-8000-00805f9b34fb Audio Source - ## 0000110b-0000-1000-8000-00805f9b34fb Audio Sink - ## 0000110d-0000-1000-8000-00805f9b34fb Advanced Audio Distribution - - ## And only this one headset related profile: - ## disabled: 00001112-0000-1000-8000-00805f9b34fb hsp_ag - ## disabled: 00001108-0000-1000-8000-00805f9b34fb hsp_hs - ## disabled: 0000111e-0000-1000-8000-00805f9b34fb hfp_hf - ## enabled : 0000111f-0000-1000-8000-00805f9b34fb hfp_ag - ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - ## NOTE: This used to be in .headset-roles, which was merged into .roles - ## NOTE: check hfphsp-backend below as that also affects hs/hf profiles - ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - bluez5.roles = "[ a2dp_sink a2dp_source hfp_ag ]" - - ## HFP/HSP backend (default: native). - ## Available values: any, none, hsphfpd, ofono, native - ## setting this to "none" disables all headset roles - bluez5.hfphsp-backend = "native" - - ## Disable dummy AVRCP player - bluez5.dummy-avrcp-player = false -} From 5b1525f116b0b5df73bca7388d2fcdd23babccf5 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 15:33:54 -0700 Subject: [PATCH 19/58] chore: Remove wayland spec file --- .../gamescope/wayland/emersion-gpg-key.asc | Bin 7501 -> 0 bytes spec_files/gamescope/wayland/wayland.spec | 449 ------------------ 2 files changed, 449 deletions(-) delete mode 100644 spec_files/gamescope/wayland/emersion-gpg-key.asc delete mode 100644 spec_files/gamescope/wayland/wayland.spec diff --git a/spec_files/gamescope/wayland/emersion-gpg-key.asc b/spec_files/gamescope/wayland/emersion-gpg-key.asc deleted file mode 100644 index cc3b6a06af86e73144a2da89ca2f6616fcdd9dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7501 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 diff --git a/spec_files/gamescope/wayland/wayland.spec b/spec_files/gamescope/wayland/wayland.spec deleted file mode 100644 index 05286fbca4..0000000000 --- a/spec_files/gamescope/wayland/wayland.spec +++ /dev/null @@ -1,449 +0,0 @@ -Name: wayland -Version: 1.23.0 -Release: 2%{?dist} -Summary: Wayland Compositor Infrastructure - -# SPDX -License: MIT -URL: http://wayland.freedesktop.org/ -Source0: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz -Source1: https://gitlab.freedesktop.org/%{name}/%{name}/-/releases/%{version}/downloads/%{name}-%{version}.tar.xz.sig -Source2: emersion-gpg-key.asc - -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: docbook-style-xsl -BuildRequires: doxygen -BuildRequires: expat-devel -BuildRequires: graphviz -BuildRequires: libxml2-devel -BuildRequires: libxslt -BuildRequires: meson -BuildRequires: pkgconfig(libffi) -BuildRequires: xmlto - -# For origin certification -BuildRequires: gnupg2 - -%description -Wayland is a protocol for a compositor to talk to its clients as well as a C -library implementation of that protocol. The compositor can be a standalone -display server running on Linux kernel modesetting and evdev input devices, -an X application, or a wayland client itself. The clients can be traditional -applications, X servers (rootless or fullscreen) or other display servers. - -%package devel -Summary: Development files for %{name} -Requires: libwayland-client%{?_isa} = %{version}-%{release} -Requires: libwayland-cursor%{?_isa} = %{version}-%{release} -Requires: libwayland-egl%{?_isa} = %{version}-%{release} -Requires: libwayland-server%{?_isa} = %{version}-%{release} - -%description devel -The %{name}-devel package contains libraries and header files for -developing applications that use %{name}. - -%package doc -Summary: Wayland development documentation -BuildArch: noarch -%description doc -Wayland development documentation - -%package -n libwayland-client -Summary: Wayland client library -%description -n libwayland-client -Wayland client library - -%package -n libwayland-cursor -Summary: Wayland cursor library -Requires: libwayland-client%{?_isa} = %{version}-%{release} -%description -n libwayland-cursor -Wayland cursor library - -%package -n libwayland-egl -Summary: Wayland egl library -%description -n libwayland-egl -Wayland egl library - -%package -n libwayland-server -Summary: Wayland server library -%description -n libwayland-server -Wayland server library - -%prep -%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' -%autosetup -p1 - -%build -%meson -%meson_build - -%install -%meson_install - -%check -%meson_test - -%files devel -%{_bindir}/wayland-scanner -%{_includedir}/wayland-*.h -%{_libdir}/pkgconfig/wayland-*.pc -%{_libdir}/libwayland-*.so -%{_datadir}/aclocal/wayland-scanner.m4 -%dir %{_datadir}/wayland -%{_datadir}/wayland/wayland-scanner.mk -%{_datadir}/wayland/wayland.xml -%{_datadir}/wayland/wayland.dtd -%{_mandir}/man3/*.3* - -%files doc -%doc README.md -%{_datadir}/doc/wayland/ - -%files -n libwayland-client -%license COPYING -%{_libdir}/libwayland-client.so.0* - -%files -n libwayland-cursor -%license COPYING -%{_libdir}/libwayland-cursor.so.0* - -%files -n libwayland-egl -%license COPYING -%{_libdir}/libwayland-egl.so.1* - -%files -n libwayland-server -%license COPYING -%{_libdir}/libwayland-server.so.0* - -%changelog -* Sat Jul 20 2024 Fedora Release Engineering - 1.23.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jun 28 2024 Olivier Fourdan - 1.23.0-1 -- Update to 1.23.0 - -* Sat Jan 27 2024 Fedora Release Engineering - 1.22.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Sep 07 2023 José Expósito -- SPDX migration: license is already SPDX compatible - -* Sat Jul 22 2023 Fedora Release Engineering - 1.22.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Apr 04 2023 Kalev Lember - 1.22.0-1 -- Update to 1.22.0 - -* Sat Jan 21 2023 Fedora Release Engineering - 1.21.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Jul 26 2022 Mike Rochefort - 1.21.0-1 -- Update to 1.21.0 - -* Sat Jul 23 2022 Fedora Release Engineering - 1.20.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Mon Mar 21 2022 Olivier Fourdan - 1.20.0-4 -- Close file descriptors not needed - rhbz#2062030 - -* Sat Jan 22 2022 Fedora Release Engineering - 1.20.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Sat Jan 08 2022 Miro Hrončok - 1.20.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 - -* Thu Dec 16 2021 Kalev Lember - 1.20.0-1 -- Update to 1.20.0 - -* Fri Jul 23 2021 Fedora Release Engineering - 1.19.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Jan 28 2021 Kalev Lember - 1.19.0-1 -- Update to 1.19.0 -- Switch to meson build system -- Drop old provides - -* Wed Jan 27 2021 Fedora Release Engineering - 1.18.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jul 29 2020 Fedora Release Engineering - 1.18.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Feb 12 2020 Kalev Lember - 1.18.0-1 -- Update to 1.18.0 -- Drop no longer needed obsoletes/provides - -* Fri Jan 31 2020 Fedora Release Engineering - 1.17.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Sat Jul 27 2019 Fedora Release Engineering - 1.17.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Thu Mar 21 2019 Kalev Lember - 1.17.0-1 -- Update to 1.17.0 - -* Thu Mar 07 2019 Kalev Lember - 1.16.92-1 -- Update to 1.16.92 - -* Thu Feb 28 2019 Kalev Lember - 1.16.91-1 -- Update to 1.16.91 - -* Sun Feb 03 2019 Fedora Release Engineering - 1.16.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Tue Sep 11 2018 Kalev Lember - 1.16.0-1 -- Update to 1.16.0 - -* Mon Aug 13 2018 Kalev Lember - 1.15.93-1 -- Update to 1.15.93 - -* Tue Jul 31 2018 Florian Weimer - 1.15.92-2 -- Rebuild with fixed binutils - -* Sun Jul 29 2018 Kalev Lember - 1.15.92-1 -- Update to 1.15.92 - -* Sat Jul 14 2018 Fedora Release Engineering - 1.15.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Mon Apr 09 2018 Kalev Lember - 1.15.0-1 -- Update to 1.15.0 - -* Wed Apr 04 2018 Kalev Lember - 1.14.93-2 -- Make mesa-libwayland-egl obsoleting actually work - -* Tue Apr 03 2018 Kalev Lember - 1.14.93-1 -- Update to 1.14.93 - -* Tue Mar 20 2018 Kalev Lember - 1.14.92-1 -- Update to 1.14.92 -- Remove F22 upgrade path obsoletes - -* Sat Mar 03 2018 Igor Gnatenko - 1.14.91-2 -- Improve Obsoletes - -* Tue Feb 27 2018 Kalev Lember - 1.14.91-1 -- Update to 1.14.91 -- Add new libwayland-egl subpackage and obsolete mesa-libwayland-egl -- Remove ldconfig scriptlets - -* Fri Feb 09 2018 Fedora Release Engineering - 1.14.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Tue Dec 12 2017 Kalev Lember - 1.14.0-2 -- cursor: Fix heap overflows when parsing malicious files (#1522638) - -* Wed Aug 09 2017 Kalev Lember - 1.14.0-1 -- Update to 1.14.0 - -* Wed Aug 02 2017 Kalev Lember - 1.13.93-1 -- Update to 1.13.93 - -* Sun Jul 30 2017 Florian Weimer - 1.13.92-2 -- Rebuild with binutils fix for ppc64le (#1475636) - -* Wed Jul 26 2017 Kalev Lember - 1.13.92-1 -- Update to 1.13.92 - -* Wed Jul 19 2017 Kalev Lember - 1.13.91-1 -- Update to 1.13.91 - -* Thu Jun 1 2017 Owen Taylor otaylor@redhat.com> - 1.13.0-2 -- Add a patch fixing a build error with newer versions of graphviz - -* Wed Feb 22 2017 Kalev Lember - 1.13.0-1 -- Update to 1.13.0 - -* Sat Feb 11 2017 Fedora Release Engineering - 1.12.91-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Wed Jan 25 2017 Kalev Lember - 1.12.91-1 -- Update to 1.12.91 - -* Wed Sep 21 2016 Kalev Lember - 1.12.0-1 -- Update to 1.12.0 - -* Wed Sep 14 2016 Kalev Lember - 1.11.94-1 -- Update to 1.11.94 - -* Thu Sep 08 2016 Kalev Lember - 1.11.93-1 -- Update to 1.11.93 - -* Wed Aug 31 2016 Kalev Lember - 1.11.92-1 -- Update to 1.11.92 - -* Wed Aug 17 2016 Kalev Lember - 1.11.91-1 -- Update to 1.11.91 -- Simplify -devel subpackage packaging -- Include license files in packaging - -* Wed Jun 01 2016 Kalev Lember - 1.11.0-1 -- Update to 1.11.0 - -* Wed May 25 2016 Kalev Lember - 1.10.93-1 -- Update to 1.10.93 - -* Wed May 18 2016 Kalev Lember - 1.10.92-1 -- Update to 1.10.92 - -* Sun May 08 2016 Kalev Lember - 1.10.91-1 -- Update to 1.10.91 - -* Thu Feb 18 2016 Kalev Lember - 1.10.0-1 -- Update to 1.10.0 - -* Thu Feb 04 2016 Kalev Lember - 1.9.92-1 -- Update to 1.9.92 - -* Wed Jan 20 2016 Kalev Lember - 1.9.91-1 -- Update to 1.9.91 - -* Tue Sep 22 2015 Kalev Lember - 1.9.0-1 -- Update to 1.9.0 -- Use make_install macro - -* Wed Sep 16 2015 Kalev Lember - 1.8.93-1 -- Update to 1.8.93 - -* Wed Sep 02 2015 Kalev Lember - 1.8.92-1 -- Update to 1.8.92 - -* Fri Aug 21 2015 Kalev Lember - 1.8.91-2 -- Split out wayland-doc subpackage for documentation - -* Fri Aug 21 2015 Kalev Lember - 1.8.91-1 -- Update to 1.8.91 - -* Mon Jul 20 2015 Adam Jackson 1.8.0-1 -- wayland 1.8.0 - -* Fri Jun 19 2015 Fedora Release Engineering - 1.7.92-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 26 2015 Adam Jackson 1.7.92-1 -- wayland 1.7.92 - -* Sat Feb 21 2015 Till Maas - 1.7.0-2 -- Rebuilt for Fedora 23 Change - https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code - -* Tue Feb 17 2015 Richard Hughes - 1.7.0-1 -- Wayland 1.7.0 - -* Fri Sep 19 2014 Kalev Lember - 1.6.0-1 -- Update to 1.6.0 -- Remove lib64 rpaths - -* Fri Aug 22 2014 Kevin Fenzi 1.5.91-1 -- Update to 1.5.90 - -* Mon Aug 18 2014 Fedora Release Engineering - 1.5.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Wed Jul 02 2014 Adam Jackson 1.5.0-4 -- Update protocol: new surface error enums - -* Mon Jun 30 2014 Adam Jackson 1.5.0-3 -- Remove blocking flush patch as it actually introduces deadlocks now - -* Sun Jun 08 2014 Fedora Release Engineering - 1.5.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed May 21 2014 Richard Hughes - 1.5.0-1 -- Wayland 1.5.0 - -* Tue May 13 2014 Richard Hughes - 1.4.93-1 -- Wayland 1.4.93 - -* Fri Jan 24 2014 Richard Hughes - 1.4.0-1 -- Wayland 1.4.0 - -* Mon Jan 20 2014 Richard Hughes - 1.3.93-1 -- Wayland 1.3.93 - -* Sat Dec 21 2013 Ville Skyttä - 1.3.91-2 -- Call ldconfig in libwayland-cursor %%post* scripts. -- Run test suite during build. -- Compress snapshot tarballs with xz. - -* Tue Dec 17 2013 Richard Hughes - 1.3.91-1 -- Wayland 1.3.91 - -* Mon Nov 25 2013 Lubomir Rintel - 1.3.0-1 -- Wayland 1.3.0 - -* Mon Oct 07 2013 Adam Jackson 1.2.0-3 -- Don't use MSG_DONTWAIT in wl_connection_flush. - -* Sun Aug 04 2013 Fedora Release Engineering - 1.2.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Mon Jul 15 2013 Richard Hughes - 1.2.0-1 -- wayland 1.2.0 - -* Wed May 15 2013 Richard Hughes - 1.1.90-0.1.20130515 -- Update to a git snapshot based on what will become 1.1.90 - -* Tue Apr 16 2013 Richard Hughes - 1.1.0-1 -- wayland 1.1.0 - -* Wed Mar 27 2013 Richard Hughes - 1.0.6-1 -- wayland 1.0.6 - -* Thu Feb 21 2013 Adam Jackson 1.0.5-1 -- wayland 1.0.5 - -* Fri Feb 15 2013 Fedora Release Engineering - 1.0.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Wed Jan 02 2013 Adam Jackson 1.0.3-1 -- wayland 1.0.3 - -* Tue Oct 23 2012 Adam Jackson 1.0.0-1 -- wayland 1.0 - -* Thu Oct 18 2012 Adam Jackson 0.99.0-1 -- wayland 0.99.0 - -* Tue Sep 04 2012 Adam Jackson 0.95.0-1 -- wayland 0.95.0 (#843738) - -* Sun Jul 22 2012 Fedora Release Engineering - 0.89.0-2.20120424 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue Apr 24 2012 Richard Hughes - 0.89.0-1 -- Update to a git snapshot based on 0.89.0 - -* Sat Feb 18 2012 Thorsten Leemhuis - 0.85.0-1 -- update to 0.85.0 -- adjust license, as upstream changed it to MIT -- update make-git-snapshot.sh to current locations and scheme -- drop common package, not needed anymore -- compositor is now in a separate package, hence reduce BuildRequires to what - is actually needed (a lot less) and adjust summary -- make usage of a git checkout in spec file optional -- a %%{?_isa} to requires where it makes sense - -* Sat Jan 14 2012 Fedora Release Engineering - 0.1-0.6.20101221 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 06 2011 Adam Jackson - 0.1-0.5.20101221 -- Rebuild for new libpng - -* Wed Jun 15 2011 Lubomir Rintel - 0.1-0.4.20101221 -- Install real compositor binary instead of a libtool wrapper - -* Mon Feb 07 2011 Fedora Release Engineering - 0.1-0.3.20101221 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Tue Dec 21 2010 Adam Jackson 0.1-0.2.20101221 -- Today's git snap - -* Tue Nov 23 2010 Adam Jackson 0.1-0.2.20101123 -- Today's git snap -- Fix udev rule install (#653353) - -* Mon Nov 15 2010 Adam Jackson 0.1-0.1.20101111 -- Initial packaging From b70be71568d812bc133cd838ce3251828a9c0f51 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 15:55:19 -0700 Subject: [PATCH 20/58] chore: Restore wireplumber configs in /usr/share, add replacement alsa-config0.conf to fix Legion Go input bug --- .../wireplumber.conf.d/alsa-card0.conf | 21 +++++++++++ .../wireplumber.conf.d/alsa-card0.conf | 23 ++++++++++++ .../wireplumber.conf.d/alsa-card1.conf | 36 +++++++++++++++++++ .../alsa-ps-controller.conf | 20 +++++++++++ .../wireplumber/wireplumber.conf.d/bluez.conf | 25 +++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf new file mode 100644 index 0000000000..2e9ca8bd1b --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf @@ -0,0 +1,21 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "HD-Audio Generic" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "HD-Audio Generic" + } + ] + actions = { + update-props = { + api.alsa.period-size = 256 + api.alsa.headroom = 1024 + session.suspend-timeout-seconds = 0 + } + } + } +] diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf new file mode 100644 index 0000000000..73255fb985 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf @@ -0,0 +1,23 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "HD-Audio Generic" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "HD-Audio Generic" + } + ] + actions = { + update-props = { + priority.driver = 900 + priority.session = 900 + api.alsa.period-size = 256 + api.alsa.headroom = 1024 + session.suspend-timeout-seconds = 0 + } + } + } +] diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf new file mode 100644 index 0000000000..4f2e57a293 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf @@ -0,0 +1,36 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "sof-nau8821-max" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "sof-nau8821-max" + } + ] + actions = { + update-props = { + session.suspend-timeout-seconds = 0 + api.alsa.headroom = 1024 + } + } + } +] diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf new file mode 100644 index 0000000000..e0c2a5ff72 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-ps-controller.conf @@ -0,0 +1,20 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "Wireless Controller" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "Wireless Controller" + } + ] + actions = { + update-props = { + priority.driver = 90 + priority.session = 90 + } + } + } +] diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf new file mode 100644 index 0000000000..75e8f21a9c --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf @@ -0,0 +1,25 @@ +monitor.bluez.properties = { + ## we only want these audio profiles: + ## 0000110a-0000-1000-8000-00805f9b34fb Audio Source + ## 0000110b-0000-1000-8000-00805f9b34fb Audio Sink + ## 0000110d-0000-1000-8000-00805f9b34fb Advanced Audio Distribution + + ## And only this one headset related profile: + ## disabled: 00001112-0000-1000-8000-00805f9b34fb hsp_ag + ## disabled: 00001108-0000-1000-8000-00805f9b34fb hsp_hs + ## disabled: 0000111e-0000-1000-8000-00805f9b34fb hfp_hf + ## enabled : 0000111f-0000-1000-8000-00805f9b34fb hfp_ag + ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ## NOTE: This used to be in .headset-roles, which was merged into .roles + ## NOTE: check hfphsp-backend below as that also affects hs/hf profiles + ## >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + bluez5.roles = "[ a2dp_sink a2dp_source hfp_ag ]" + + ## HFP/HSP backend (default: native). + ## Available values: any, none, hsphfpd, ofono, native + ## setting this to "none" disables all headset roles + bluez5.hfphsp-backend = "native" + + ## Disable dummy AVRCP player + bluez5.dummy-avrcp-player = false +} From 8804d899b04d7a2682d1d252e2dde1c47437a300 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 16:40:02 -0700 Subject: [PATCH 21/58] chore(legion): Only match output --- .../lenovo-83e1/wireplumber.conf.d/alsa-card0.conf | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf index 2e9ca8bd1b..7c43132ae5 100644 --- a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf @@ -2,16 +2,13 @@ monitor.alsa.rules = [ { matches = [ { - node.name = "~alsa_input.*" - alsa.card_name = "HD-Audio Generic" - } - { - node.name = "~alsa_output.*" - alsa.card_name = "HD-Audio Generic" + node.name = "alsa_output.pci-0000_c2_00.6.analog-stereo" } ] actions = { update-props = { + priority.driver = 900 + priority.session = 900 api.alsa.period-size = 256 api.alsa.headroom = 1024 session.suspend-timeout-seconds = 0 From 139413d119c4d5de518a5ceb8131c1ec05b66ad4 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 18:01:53 -0700 Subject: [PATCH 22/58] chore: Remove no longer needed input de-noising config --- .../usr/etc/pipewire/99-input-denoising.conf | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 system_files/deck/shared/usr/etc/pipewire/99-input-denoising.conf diff --git a/system_files/deck/shared/usr/etc/pipewire/99-input-denoising.conf b/system_files/deck/shared/usr/etc/pipewire/99-input-denoising.conf deleted file mode 100644 index d0061e2960..0000000000 --- a/system_files/deck/shared/usr/etc/pipewire/99-input-denoising.conf +++ /dev/null @@ -1,71 +0,0 @@ -context.modules = [ -{ name = libpipewire-module-filter-chain - args = { - node.description = "Noise Canceling source" - media.name = "Noise Canceling source" - filter.graph = { - nodes = [ - { - type = ladspa - name = rnnoise - plugin = /usr/lib64/ladspa/librnnoise_ladspa.so - label = noise_suppressor_stereo - control = { - "VAD Threshold (%)" = 23.0 - "VAD Grace Period (ms)" = 200 - } - } - { - type = ladspa - name = equaliser - plugin = /usr/lib64/ladspa/caps.so - label = Eq10X2 - control = { - "31 Hz" 0 - "63 Hz" 0 - "125 Hz" 0 - "250 Hz" 0 - "500 Hz" 0 - "1 kHz" 0 - "2 kHz" 0 - "4 kHz" 0 - "8 kHz" -3 - "16 kHz" -3 - } - } - { - type = ladspa - name = compressor - plugin = /usr/lib64/ladspa/caps.so - label = CompressX2 - control = { - "measure" 1 - "mode" 1 - "threshold" 0.5 - "strength" 0.25 - "attack" 0.75 - "release" 0.5 - "gain (dB)" 12 - } - } - ] - links = [ - { output = "rnnoise:Output (L)" input = "equaliser:in.l" } - { output = "rnnoise:Output (R)" input = "equaliser:in.r" } - { output = "equaliser:out.l" input = "compressor:in.l" } - { output = "equaliser:out.r" input = "compressor:in.r" } - ] - } - capture.props = { - node.name = "capture.rnnoise_source" - node.passive = true - audio.rate = 48000 - } - playback.props = { - node.name = "rnnoise_source" - media.class = Audio/Source - audio.rate = 48000 - } - } -} -] From b05bdd564e74557f91781501fcf6bf42c267d117 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Thu, 1 Aug 2024 18:13:31 -0700 Subject: [PATCH 23/58] chore: Update scx-scheds --- spec_files/scx-scheds/scx-scheds.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/scx-scheds/scx-scheds.spec b/spec_files/scx-scheds/scx-scheds.spec index 9a68cd497a..f0030bdb57 100644 --- a/spec_files/scx-scheds/scx-scheds.spec +++ b/spec_files/scx-scheds/scx-scheds.spec @@ -1,4 +1,4 @@ -%define commit d4a5a629ffc5d01768f6052b1156c9b0479d0f70 +%define commit 643edb5431e12c74e1dbb598be07204dfe5d9469 %global shortcommit %(c=%{commit}; echo ${c:0:7}) %global build_timestamp %(date +"%Y%m%d") %global rel_build git.%{build_timestamp}.%{shortcommit}%{?dist} From 20eb99edaaec143e149befb523380a66ba5bd83f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 00:53:50 -0700 Subject: [PATCH 24/58] fix: Prevent restoring audio levels on hardware with custom DSPs chore: Remove alsa changes on HTPCs chore: Add missing bluez setting --- .../wireplumber.conf.d/alsa-card0.conf | 19 ++++++++++ .../wireplumber.conf.d/alsa-card1.conf | 37 +++++++++++++++++++ .../wireplumber.conf.d/alsa-card0.conf | 1 + .../wireplumber.conf.d/alsa-card1.conf | 37 +++++++++++++++++++ .../wireplumber.conf.d/alsa-card0.conf | 2 - .../wireplumber.conf.d/alsa-card1.conf | 1 - .../wireplumber/wireplumber.conf.d/bluez.conf | 5 +++ 7 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card1.conf create mode 100644 system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card1.conf diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf new file mode 100644 index 0000000000..fe32def7d0 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf @@ -0,0 +1,19 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "alsa_output.pci-0000_09_00.6.analog-stereo" + } + ] + actions = { + update-props = { + state.restore-props = false + priority.driver = 900 + priority.session = 900 + api.alsa.period-size = 256 + api.alsa.headroom = 1024 + session.suspend-timeout-seconds = 0 + } + } + } +] diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card1.conf new file mode 100644 index 0000000000..ff891c05a8 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card1.conf @@ -0,0 +1,37 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "sof-nau8821-max" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "sof-nau8821-max" + } + ] + actions = { + update-props = { + session.suspend-timeout-seconds = 0 + api.alsa.headroom = 1024 + } + } + } +] + diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf index 7c43132ae5..1a630087b9 100644 --- a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf @@ -7,6 +7,7 @@ monitor.alsa.rules = [ ] actions = { update-props = { + state.restore-props = false priority.driver = 900 priority.session = 900 api.alsa.period-size = 256 diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card1.conf new file mode 100644 index 0000000000..ff891c05a8 --- /dev/null +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card1.conf @@ -0,0 +1,37 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_input.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_input.*" + alsa.card_name = "sof-nau8821-max" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp5x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "acp6x" + } + { + node.name = "~alsa_output.*" + alsa.card_name = "sof-nau8821-max" + } + ] + actions = { + update-props = { + session.suspend-timeout-seconds = 0 + api.alsa.headroom = 1024 + } + } + } +] + diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf index 9175ec4419..d2539da5ab 100644 --- a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card0.conf @@ -14,8 +14,6 @@ monitor.alsa.rules = [ update-props = { priority.driver = 900 priority.session = 900 - api.alsa.period-size = 256 - api.alsa.headroom = 1024 session.suspend-timeout-seconds = 0 } } diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf index ff891c05a8..9cdaedc0d4 100644 --- a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/alsa-card1.conf @@ -29,7 +29,6 @@ monitor.alsa.rules = [ actions = { update-props = { session.suspend-timeout-seconds = 0 - api.alsa.headroom = 1024 } } } diff --git a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf index d074b489b6..c4911c2d52 100644 --- a/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf +++ b/system_files/deck/shared/usr/share/wireplumber/wireplumber.conf.d/bluez.conf @@ -24,3 +24,8 @@ monitor.bluez.properties = { bluez5.dummy-avrcp-player = false } +wireplumber.settings = { + # Disable the profile autoswitch until https://gitlab.steamos.cloud/holo-team/tasks/-/issues/881 + # has been resolved + bluetooth.autoswitch-to-headset-profile = false +} From 37b664260c3c6c12c6881d9296bef16977ccffcf Mon Sep 17 00:00:00 2001 From: Ryan Bateman Date: Fri, 2 Aug 2024 00:14:56 -0800 Subject: [PATCH 25/58] add benchmark just cmd and stress-ng (#1450) --- Containerfile | 1 + .../desktop/shared/usr/share/ublue-os/just/80-bazzite.just | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Containerfile b/Containerfile index d028780148..5c0bd669a4 100644 --- a/Containerfile +++ b/Containerfile @@ -376,6 +376,7 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ topgrade \ ydotool \ yafti \ + stress-ng \ lsb_release && \ rpm-ostree install \ ublue-update && \ diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just index 843a0c7421..10219ad0a6 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just @@ -358,3 +358,6 @@ bazzite-cli: # Entrypoint main "" +benchmark: + echo 'Running a 1 minute benchmark ...' + cd /tmp && stress-ng --matrix 0 -t 1m --times From ecfc56d1fa6b89aa5eb9bbcbe0b8ea2ae7dfab38 Mon Sep 17 00:00:00 2001 From: HikariKnight <2557889+HikariKnight@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:25:15 +0200 Subject: [PATCH 26/58] fix(just): fix syntax for benchmark ujust (#1451) --- .../desktop/shared/usr/share/ublue-os/just/80-bazzite.just | 2 ++ 1 file changed, 2 insertions(+) diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just index 10219ad0a6..ef1568a5a3 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just @@ -358,6 +358,8 @@ bazzite-cli: # Entrypoint main "" + +# Run a one minute system benchmark benchmark: echo 'Running a 1 minute benchmark ...' cd /tmp && stress-ng --matrix 0 -t 1m --times From 0db4acd696600a5ad0a0704410117e923dc6d9b4 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 08:17:30 -0700 Subject: [PATCH 27/58] chore: Drop restore-props for now --- .../wireplumber.conf.d/alsa-card0.conf | 1 - .../lenovo-83e1/wireplumber.conf.d/alsa-card0.conf | 1 - 2 files changed, 2 deletions(-) diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf index fe32def7d0..d78f519bd7 100644 --- a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/asustek computer inc.-rog ally rc71l_rc71l/wireplumber.conf.d/alsa-card0.conf @@ -7,7 +7,6 @@ monitor.alsa.rules = [ ] actions = { update-props = { - state.restore-props = false priority.driver = 900 priority.session = 900 api.alsa.period-size = 256 diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf index 1a630087b9..7c43132ae5 100644 --- a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/alsa-card0.conf @@ -7,7 +7,6 @@ monitor.alsa.rules = [ ] actions = { update-props = { - state.restore-props = false priority.driver = 900 priority.session = 900 api.alsa.period-size = 256 From 8077a9e81bcbb2bac83ca872eb13b348a7ab9210 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 11:38:52 -0700 Subject: [PATCH 28/58] chore: Replace wayland packages for newer gamescope (temporary) --- Containerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Containerfile b/Containerfile index 5c0bd669a4..3e6bcd5100 100644 --- a/Containerfile +++ b/Containerfile @@ -265,6 +265,13 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ fwupd-plugin-flashrom \ fwupd-plugin-modem-manager \ fwupd-plugin-uefi-capsule-data && \ + rpm-ostree override replace \ + --experimental \ + --from repo=copr:copr.fedorainfracloud.org:kylegospo:bazzite-multilib \ + libwayland-client \ + libwayland-server \ + libwayland-cursor \ + libwayland-egl && \ /usr/libexec/containerbuild/cleanup.sh && \ ostree container commit From b1277b56f30a80038cd758b24e56acf3aedf81da Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 11:38:57 -0700 Subject: [PATCH 29/58] chore: Fix whitespace --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 3e6bcd5100..ad49047e33 100644 --- a/Containerfile +++ b/Containerfile @@ -383,7 +383,7 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ topgrade \ ydotool \ yafti \ - stress-ng \ + stress-ng \ lsb_release && \ rpm-ostree install \ ublue-update && \ From b2f0b558ba9a8bc2e55374d5957ecdaed4dcdd19 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 18:14:41 -0700 Subject: [PATCH 30/58] fix: Add fix for docking and a crash for certain inputs to Gamescope --- spec_files/gamescope/1444.patch | 22 ++++++++++++ ...8dea137d2cedd4cf71fede560feb2ad3ffc5.patch | 35 +++++++++++++++++++ spec_files/gamescope/gamescope.spec | 6 +++- 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 spec_files/gamescope/1444.patch create mode 100644 spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch diff --git a/spec_files/gamescope/1444.patch b/spec_files/gamescope/1444.patch new file mode 100644 index 0000000000..280ac95a4e --- /dev/null +++ b/spec_files/gamescope/1444.patch @@ -0,0 +1,22 @@ +From ce4029c6523d8ee9773958577e6edc32979d2271 Mon Sep 17 00:00:00 2001 +From: sharkautarch <128002472+sharkautarch@users.noreply.github.com> +Date: Wed, 31 Jul 2024 18:36:38 -0400 +Subject: [PATCH] wlserver: fix nullptr dereference on oPoint->pTimeline + +--- + src/wlserver.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index 79b9c5c5c..756393c6f 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -131,7 +131,7 @@ void GamescopeTimelinePoint::Release() + + static std::optional TimelinePointToEventFd( const std::optional& oPoint ) + { +- if (!oPoint) ++ if (!oPoint || !(oPoint->pTimeline) ) + return std::nullopt; + + uint64_t uSignalledPoint = 0; diff --git a/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch b/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch new file mode 100644 index 0000000000..46db552f88 --- /dev/null +++ b/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch @@ -0,0 +1,35 @@ +From e31b8dea137d2cedd4cf71fede560feb2ad3ffc5 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 21:11:11 +0100 +Subject: [PATCH] DRMBackend: Fix mode fallback on connector changes + +--- + src/Backends/DRMBackend.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index 2712994ef..ee2cbd3d9 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -1040,6 +1040,9 @@ static bool setup_best_connector(struct drm_t *drm, bool force, bool initial) + return false; + } + ++ // Don't allow rollback of mode_id after connector change ++ drm->current.mode_id = drm->pending.mode_id; ++ + const struct wlserver_output_info wlserver_output_info = { + .description = description, + .phys_width = (int) best->GetModeConnector()->mmWidth, +@@ -2876,6 +2879,11 @@ bool drm_set_connector( struct drm_t *drm, gamescope::CDRMConnector *conn ) + return false; + } + ++ // If we are changing connector, zero out the current and pending mode IDs. ++ // So we don't try to use one mode from the old connector on the new one if we roll back. ++ drm->pending.mode_id = nullptr; ++ drm->current.mode_id = nullptr; ++ + drm->pConnector = conn; + drm->needs_modeset = true; + diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 4c83504f4d..ee1eebf9ad 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -6,7 +6,7 @@ Name: gamescope Version: 100.%{gamescope_tag} -Release: 19.bazzite +Release: 20.bazzite Summary: Micro-compositor for video games on Wayland License: BSD @@ -24,6 +24,10 @@ Patch2: disable-steam-touch-click-atom.patch Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch +# https://github.com/ValveSoftware/gamescope/pull/1444 +Patch5: 1444.patch +# https://github.com/ValveSoftware/gamescope/commit/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5 +Patch6: e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build From 5badead3ec662ecd560588835fdd8381c9f2c749 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 19:50:47 -0700 Subject: [PATCH 31/58] chore: Switch to 6.5.0-valve15 kernel for firmware --- Containerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Containerfile b/Containerfile index ad49047e33..14d431b1e8 100644 --- a/Containerfile +++ b/Containerfile @@ -6,7 +6,7 @@ ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG SOURCE_IMAGE="${SOURCE_IMAGE:-$BASE_IMAGE_NAME-$BASE_IMAGE_FLAVOR}" ARG BASE_IMAGE="ghcr.io/ublue-os/${SOURCE_IMAGE}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" -ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-jupiter-20240605.1}" +ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-6.5.0-valve15}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" FROM ghcr.io/ublue-os/akmods:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} AS akmods @@ -22,7 +22,7 @@ ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" -ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-jupiter-20240605.1}" +ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-6.5.0-valve15}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" COPY system_files/desktop/shared system_files/desktop/${BASE_IMAGE_NAME} / From 9c0984bc63a352a86c85d1c9305cc20260180229 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 20:12:46 -0700 Subject: [PATCH 32/58] chore: Switch to JUPITER_FIRMWARE_VERSION tag --- Containerfile | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Containerfile b/Containerfile index 14d431b1e8..2c6a95bee1 100644 --- a/Containerfile +++ b/Containerfile @@ -6,7 +6,7 @@ ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG SOURCE_IMAGE="${SOURCE_IMAGE:-$BASE_IMAGE_NAME-$BASE_IMAGE_FLAVOR}" ARG BASE_IMAGE="ghcr.io/ublue-os/${SOURCE_IMAGE}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" -ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-6.5.0-valve15}" +ARG JUPITER_FIRMWARE_VERSION="${JUPITER_FIRMWARE_VERSION:-jupiter-20240605.1}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" FROM ghcr.io/ublue-os/akmods:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} AS akmods @@ -22,7 +22,7 @@ ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" -ARG JUPITER_KERNEL_VERSION="${JUPITER_KERNEL_VERSION:-6.5.0-valve15}" +ARG JUPITER_FIRMWARE_VERSION="${JUPITER_FIRMWARE_VERSION:-jupiter-20240605.1}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" COPY system_files/desktop/shared system_files/desktop/${BASE_IMAGE_NAME} / @@ -199,26 +199,26 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ # Setup firmware RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ mkdir -p /tmp/linux-firmware-neptune && \ - curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-cali.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/cs35l41-dsp1-spk-cali.bin && \ - curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-cali.wmfw https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/cs35l41-dsp1-spk-cali.wmfw && \ - curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-prot.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/cs35l41-dsp1-spk-prot.bin && \ - curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-prot.wmfw https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/cs35l41-dsp1-spk-prot.wmfw && \ + curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-cali.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/cs35l41-dsp1-spk-cali.bin && \ + curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-cali.wmfw https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/cs35l41-dsp1-spk-cali.wmfw && \ + curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-prot.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/cs35l41-dsp1-spk-prot.bin && \ + curl -Lo /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-prot.wmfw https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/cs35l41-dsp1-spk-prot.wmfw && \ xz --check=crc32 /tmp/linux-firmware-neptune/cs35l41-dsp1-spk-{cali.bin,cali.wmfw,prot.bin,prot.wmfw} && \ mv -vf /tmp/linux-firmware-neptune/* /usr/lib/firmware/cirrus/ && \ rm -rf /tmp/linux-firmware-neptune && \ mkdir -p /tmp/linux-firmware-galileo && \ - curl https://gitlab.com/evlaV/linux-firmware-neptune/-/archive/"${JUPITER_KERNEL_VERSION}"/linux-firmware-neptune-"${JUPITER_KERNEL_VERSION}".tar.gz?path=ath11k/QCA206X -o /tmp/linux-firmware-galileo/ath11k.tar.gz && \ + curl https://gitlab.com/evlaV/linux-firmware-neptune/-/archive/"${JUPITER_FIRMWARE_VERSION}"/linux-firmware-neptune-"${JUPITER_FIRMWARE_VERSION}".tar.gz?path=ath11k/QCA206X -o /tmp/linux-firmware-galileo/ath11k.tar.gz && \ tar --strip-components 1 --no-same-owner --no-same-permissions --no-overwrite-dir -xvf /tmp/linux-firmware-galileo/ath11k.tar.gz -C /tmp/linux-firmware-galileo && \ xz --check=crc32 /tmp/linux-firmware-galileo/ath11k/QCA206X/hw2.1/* && \ mv -vf /tmp/linux-firmware-galileo/ath11k/QCA206X /usr/lib/firmware/ath11k/QCA206X && \ rm -rf /tmp/linux-firmware-galileo/ath11k && \ rm -rf /tmp/linux-firmware-galileo/ath11k.tar.gz && \ ln -s QCA206X /usr/lib/firmware/ath11k/QCA2066 && \ - curl -Lo /tmp/linux-firmware-galileo/hpbtfw21.tlv https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/qca/hpbtfw21.tlv && \ - curl -Lo /tmp/linux-firmware-galileo/hpnv21.309 https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/qca/hpnv21.309 && \ - curl -Lo /tmp/linux-firmware-galileo/hpnv21.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/qca/hpnv21.bin && \ - curl -Lo /tmp/linux-firmware-galileo/hpnv21g.309 https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/qca/hpnv21g.309 && \ - curl -Lo /tmp/linux-firmware-galileo/hpnv21g.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_KERNEL_VERSION}"/qca/hpnv21g.bin && \ + curl -Lo /tmp/linux-firmware-galileo/hpbtfw21.tlv https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/qca/hpbtfw21.tlv && \ + curl -Lo /tmp/linux-firmware-galileo/hpnv21.309 https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/qca/hpnv21.309 && \ + curl -Lo /tmp/linux-firmware-galileo/hpnv21.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/qca/hpnv21.bin && \ + curl -Lo /tmp/linux-firmware-galileo/hpnv21g.309 https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/qca/hpnv21g.309 && \ + curl -Lo /tmp/linux-firmware-galileo/hpnv21g.bin https://gitlab.com/evlaV/linux-firmware-neptune/-/raw/"${JUPITER_FIRMWARE_VERSION}"/qca/hpnv21g.bin && \ xz --check=crc32 /tmp/linux-firmware-galileo/* && \ mv -vf /tmp/linux-firmware-galileo/* /usr/lib/firmware/qca/ && \ rm -rf /tmp/linux-firmware-galileo && \ From af02155318934919d79ff79c578af1b1258ab9b5 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 2 Aug 2024 22:01:49 -0700 Subject: [PATCH 33/58] Revert "fix: Prevent bluetooth preventing suspension (#1446)" This reverts commit 9f2550f3982664da6c22e2e4cf32da4d937ca5ff. --- .../systemd/system/bluetooth.service.d/prevent_hanging.conf | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf diff --git a/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf b/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf deleted file mode 100644 index 3d574c93ec..0000000000 --- a/system_files/desktop/shared/usr/lib/systemd/system/bluetooth.service.d/prevent_hanging.conf +++ /dev/null @@ -1,4 +0,0 @@ -# Prevent freezing device with bluetooth controllers -[Unit] -Conflicts=sleep.target -Before=sleep.target \ No newline at end of file From 72b983d8ff0ce11d59b18291991aeb7e5d5fd806 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 07:37:08 -0700 Subject: [PATCH 34/58] chore: Always update libX11-xcb --- Containerfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Containerfile b/Containerfile index 2c6a95bee1..7bc0ad869e 100644 --- a/Containerfile +++ b/Containerfile @@ -143,6 +143,11 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ --from repo=updates \ libdrm \ || true && \ + rpm-ostree override replace \ + --experimental \ + --from repo=updates \ + libX11-xcb \ + || true && \ rpm-ostree override remove \ glibc32 \ || true && \ From 63b7bb6fd14cbd8e5e8fc072fc7390e5116a1262 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 07:48:37 -0700 Subject: [PATCH 35/58] chore: Update remaining X11 packages --- Containerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Containerfile b/Containerfile index 7bc0ad869e..7f72bb5d7c 100644 --- a/Containerfile +++ b/Containerfile @@ -146,6 +146,8 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ rpm-ostree override replace \ --experimental \ --from repo=updates \ + libX11 \ + libX11-common \ libX11-xcb \ || true && \ rpm-ostree override remove \ From 371ff845a17fd5ed55c5ca92bbc5e4663e29645e Mon Sep 17 00:00:00 2001 From: Isaac Date: Sat, 3 Aug 2024 10:06:13 -0500 Subject: [PATCH 36/58] fix(LGO): reduce input source priority and add description (#1452) Priority didn't need to be so high. Add a description to see it in wpctl status. --- .../wireplumber.conf.d/60-raise-internal-mic.conf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/60-raise-internal-mic.conf b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/60-raise-internal-mic.conf index b33fed67aa..31cf798530 100644 --- a/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/60-raise-internal-mic.conf +++ b/system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/60-raise-internal-mic.conf @@ -7,9 +7,10 @@ monitor.alsa.rules = [ ] actions = { update-props = { - priority.driver = 8901 - priority.session = 8901 + node.description = "ALC257 Analog Internal Microphone" + priority.driver = 2100 + priority.session = 2100 } } } -] \ No newline at end of file +] From 42b5a2eeedc2748764e5d46322178f6246ac705d Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 13:11:55 -0700 Subject: [PATCH 37/58] chore: Remove boot params from deck ISO --- .github/workflows/build_iso.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index 10c3d56d72..63890aa79a 100644 --- a/.github/workflows/build_iso.yml +++ b/.github/workflows/build_iso.yml @@ -57,16 +57,6 @@ jobs: echo "tag=${TAG}" >> $GITHUB_OUTPUT - - name: Set EXTRA_BOOT_PARAMS - id: generate-extra-params - shell: bash - run: | - EXTRA_BOOT_PARAMS="" - if [[ "${{ matrix.image_name }}" =~ "deck" ]]; then - EXTRA_BOOT_PARAMS="inst.resolution=1280x800" - fi - echo "extra-boot-params=${EXTRA_BOOT_PARAMS}" >> $GITHUB_OUTPUT - - name: Set Flatpaks Directory Shortname id: generate-flatpak-dir-shortname shell: bash From 48ffa8f6e4ce73368afbd9becee6169aa108cc1f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 13:31:32 -0700 Subject: [PATCH 38/58] chore: Add patched anaconda sources --- spec_files/anaconda/anaconda.spec | 9378 +++++++++++++++++++++++++++++ spec_files/anaconda/bazzite.patch | 35 + 2 files changed, 9413 insertions(+) create mode 100644 spec_files/anaconda/anaconda.spec create mode 100644 spec_files/anaconda/bazzite.patch diff --git a/spec_files/anaconda/anaconda.spec b/spec_files/anaconda/anaconda.spec new file mode 100644 index 0000000000..e9df247511 --- /dev/null +++ b/spec_files/anaconda/anaconda.spec @@ -0,0 +1,9378 @@ +Summary: Graphical system installer +Name: anaconda +Version: 41.27 +Release: 100.bazzite +License: GPL-2.0-or-later +URL: http://fedoraproject.org/wiki/Anaconda + +# To generate Source0 do: +# git clone https://github.com/rhinstaller/anaconda +# git checkout -b archive-branch anaconda-%%{version}-%%{release} +# ./autogen.sh +# make dist +Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}/%{name}-%{version}.tar.bz2 + +Patch0: bazzite.patch + +# Versions of required components (done so we make sure the buildrequires +# match the requires versions of things). + +%if ! 0%{?rhel} +%bcond_without glade +%bcond_without live +%define blivetguiver 2.4.2-3 +%else +%bcond_with glade +%bcond_with live +%endif +%define dasbusver 1.3 +%define dbusver 1.2.3 +%define dnfver 3.6.0 +%define dracutver 034-7 +%define fcoeutilsver 1.0.12-3.20100323git +%define gettextver 0.19.8 +%define gtk3ver 3.22.17 +%define isomd5sumver 1.0.10 +%define langtablever 0.0.60 +%define libarchivever 3.0.4 +%define libblockdevver 2.1 +%define libreportanacondaver 2.0.21-1 +%define libxklavierver 5.4 +%define mehver 0.23-1 +%define nmver 1.0 +%define pykickstartver 3.52-1 +%define pypartedver 2.5-2 +%define pythonblivetver 1:3.9.0-1 +%define rpmver 4.15.0 +%define simplelinever 1.9.0-1 +%define subscriptionmanagerver 1.26 +%define utillinuxver 2.15.1 +%define rpmostreever 2023.2 + +BuildRequires: libtool +BuildRequires: gettext-devel >= %{gettextver} +BuildRequires: gtk3-devel >= %{gtk3ver} +BuildRequires: gtk-doc +BuildRequires: gtk3-devel-docs >= %{gtk3ver} +BuildRequires: glib2-doc +BuildRequires: gobject-introspection-devel +%if %{with glade} +BuildRequires: glade-devel +%endif +BuildRequires: libxklavier-devel >= %{libxklavierver} +BuildRequires: make +BuildRequires: pango-devel +BuildRequires: python3-devel +BuildRequires: systemd +# rpm and libarchive are needed for driver disk handling +BuildRequires: rpm-devel >= %{rpmver} +BuildRequires: libarchive-devel >= %{libarchivever} +%ifarch s390 s390x +BuildRequires: s390utils-devel +%endif + +# Tools used by the widgets resource bundle generation +BuildRequires: gdk-pixbuf2-devel +BuildRequires: libxml2 + +Requires: anaconda-gui = %{version}-%{release} +Requires: anaconda-tui = %{version}-%{release} + +%description +The anaconda package is a metapackage for the Anaconda installer. + +%package core +Summary: Core of the Anaconda installer +# core/signal.py is under MIT +License: GPL-2.0-or-later AND MIT +Requires: python3-libs +%if 0%{?rhel} > 10 || 0%{?fedora} > 40 +Requires: python3-crypt-r +%endif +Requires: python3-dnf >= %{dnfver} +Requires: python3-blivet >= %{pythonblivetver} +Requires: python3-blockdev >= %{libblockdevver} +Requires: python3-meh >= %{mehver} +%if 0%{?rhel} < 10 || 0%{?fedora} +Requires: libreport-anaconda >= %{libreportanacondaver} +%endif +Requires: libselinux-python3 +Requires: python3-rpm >= %{rpmver} +Requires: python3-pyparted >= %{pypartedver} +Requires: python3-requests +Requires: python3-requests-file +Requires: python3-requests-ftp +Requires: python3-kickstart >= %{pykickstartver} +Requires: python3-langtable >= %{langtablever} +Requires: util-linux >= %{utillinuxver} +Requires: python3-gobject-base +Requires: python3-pwquality +Requires: python3-systemd +Requires: python3-productmd +Requires: python3-dasbus >= %{dasbusver} +Requires: flatpak-libs +%if %{defined rhel} && %{undefined centos} +Requires: subscription-manager >= %{subscriptionmanagerver} +%endif + +# pwquality only "recommends" the dictionaries it needs to do anything useful, +# which is apparently great for containers but unhelpful for the rest of us +Requires: cracklib-dicts + +%if 0%{?rhel} < 10 || 0%{?fedora} +Requires: teamd +Requires: NetworkManager-team +%endif +%ifarch s390 s390x +Requires: openssh +%endif +Requires: NetworkManager >= %{nmver} +Requires: NetworkManager-libnm >= %{nmver} +Requires: kbd +Requires: chrony +Requires: systemd +%if 0%{?rhel} > 10 || 0%{?fedora} +Requires: systemd-resolved +%endif +Requires: python3-pid + +# Required by the systemd service anaconda-fips. +Requires: crypto-policies +Requires: /usr/bin/update-crypto-policies + +# required because of the rescue mode and VNC question +Requires: anaconda-tui = %{version}-%{release} + +# Make sure we get the en locale one way or another +Requires: (glibc-langpack-en or glibc-all-langpacks) + +# anaconda literally runs its own dbus-daemon, so it needs this, +# even though the distro default is dbus-broker in F30+ +Requires: dbus-daemon + +# setting time from time spoke +Requires: /usr/bin/date + +# Ensure it's not possible for a version of grubby to be installed +# that doesn't work with btrfs subvolumes correctly... +Conflicts: grubby < 8.40-10 + +Obsoletes: anaconda-images <= 10 +Provides: anaconda-images = %{version}-%{release} +Obsoletes: anaconda-runtime < %{version}-%{release} +Provides: anaconda-runtime = %{version}-%{release} +Obsoletes: booty <= 0.107-1 + +%description core +The anaconda-core package contains the program which was used to install your +system. + +%if %{with live} +# do not provide the live subpackage on RHEL + +%package live +Summary: Live installation specific files and dependencies +BuildArchitectures: noarch +BuildRequires: desktop-file-utils +# live installation currently implies a graphical installation +Requires: anaconda-gui = %{version}-%{release} +Requires: zenity +Requires: xisxwayland +Recommends: xhost + +%description live +The anaconda-live package contains scripts, data and dependencies required +for live installations. + +%endif + +%package install-env-deps +Summary: Installation environment specific dependencies +Requires: udisks2-iscsi +Requires: libblockdev-plugins-all >= %{libblockdevver} +%if ! 0%{?rhel} +Requires: libblockdev-lvm-dbus +%endif +# active directory/freeipa join support +Requires: realmd +Requires: isomd5sum >= %{isomd5sumver} +%ifarch %{ix86} x86_64 +Recommends: fcoe-utils >= %{fcoeutilsver} +%endif +# likely HFS+ resize support +%ifarch %{ix86} x86_64 +%if ! 0%{?rhel} +Requires: hfsplus-tools +%endif +%endif +# kexec support except riscv64 +%ifnarch riscv64 +Requires: kexec-tools +%endif +# run's on TTY1 in install env +Requires: tmux +# install time crash handling +Requires: gdb +# support for installation from image and live & live image installations +Requires: rsync +# An addon that allows enabling kdump at install time +Recommends: kdump-anaconda-addon +# basic filesystem tools +%if ! 0%{?rhel} +Requires: btrfs-progs +Requires: ntfs-3g +Requires: ntfsprogs +Requires: f2fs-tools +%endif +Requires: xfsprogs +Requires: dosfstools +Requires: e2fsprogs +# External tooling for managing NVMe-FC devices in the installation environment +Recommends: nvme-cli + +%description install-env-deps +The anaconda-install-env-deps metapackage lists all installation environment +dependencies. This makes it possible for packages (such as Initial Setup) to +depend on the main Anaconda package without pulling in all the install time +dependencies as well. + +%package install-img-deps +Summary: Installation image specific dependencies +# This package must have no weak dependencies. +# Pull in most stuff with the -env- metapackage +Requires: anaconda-install-env-deps = %{version}-%{release} +# Require storage things that are only recommended in -env- +%ifarch %{ix86} x86_64 +Requires: fcoe-utils >= %{fcoeutilsver} +%endif +# only WeakRequires elsewhere and not guaranteed to be present +Requires: device-mapper-multipath +# only WeakRequires in -env- +Requires: kdump-anaconda-addon +%if ! 0%{?rhel} +Requires: zram-generator-defaults +%else +Requires: zram-generator +%endif +# needed for proper driver disk support - if RPMs must be installed, a repo is needed +Requires: createrepo_c +# Display stuff moved from lorax templates +Requires: xorg-x11-drivers +Requires: xorg-x11-server-Xorg +Requires: xrandr +Requires: xrdb +Requires: dbus-x11 +Requires: gsettings-desktop-schemas +Requires: nm-connection-editor +Requires: librsvg2 +Requires: gnome-kiosk +Requires: brltty +# dependencies for rpm-ostree payload module +Requires: rpm-ostree >= %{rpmostreever} +Requires: ostree +# used by ostree command for native containers +Requires: skopeo +# External tooling for managing NVMe-FC devices in the installation environment +Requires: nvme-cli +# Needed for bootc +Requires: podman + +%description install-img-deps +The anaconda-install-img-deps metapackage lists all boot.iso installation +image dependencies. Add this package to an image build (eg. with lorax) to +ensure all Anaconda capabilities are supported in the resulting image. + +%package gui +Summary: Graphical user interface for the Anaconda installer +Requires: anaconda-core = %{version}-%{release} +Requires: anaconda-widgets = %{version}-%{release} +Requires: python3-iso639 +Requires: python3-meh-gui >= %{mehver} +Requires: python3-xkbregistry +Requires: adwaita-icon-theme +Requires: tecla +Requires: tigervnc-server-minimal +Requires: libxklavier >= %{libxklavierver} +Requires: nm-connection-editor +%ifnarch s390 s390x +Requires: NetworkManager-wifi +%endif +%if ! 0%{?rhel} +Requires: blivet-gui-runtime >= %{blivetguiver} +%endif +Requires: system-logos + +# Needed to compile the gsettings files +BuildRequires: gsettings-desktop-schemas + +%description gui +This package contains graphical user interface for the Anaconda installer. + +%package tui +Summary: Textual user interface for the Anaconda installer +Requires: anaconda-core = %{version}-%{release} +Requires: python3-simpleline >= %{simplelinever} + +%description tui +This package contains textual user interface for the Anaconda installer. + +%package widgets +Summary: A set of custom GTK+ widgets for use with anaconda +Requires: %{__python3} + +%description widgets +This package contains a set of custom GTK+ widgets used by the anaconda +installer. + +%package widgets-devel +Summary: Development files for anaconda-widgets +%if %{with glade} +Requires: glade +%endif +Requires: %{name}-widgets%{?_isa} = %{version}-%{release} + +%description widgets-devel +This package contains libraries and header files needed for writing the +anaconda installer. It also contains Python and Glade support files, +as well as documentation for working with this library. + +%package dracut +Summary: The anaconda dracut module +Requires: dracut >= %{dracutver} +Requires: dracut-network +Requires: dracut-live +Requires: xz +Requires: python3-kickstart +Requires: iputils + +%description dracut +The 'anaconda' dracut module handles installer-specific boot tasks and +options. This includes driver disks, kickstarts, and finding the anaconda +runtime on NFS/HTTP/FTP servers or local disks. + +%prep +%autosetup -p 1 + +%build +# use actual build-time release number, not tarball creation time release number +%configure ANACONDA_RELEASE=%{release} %{!?with_glade:--disable-glade} +%{__make} %{?_smp_mflags} + +%install +%{make_install} +find %{buildroot} -type f -name "*.la" | xargs %{__rm} + +# Create an empty directory for addons +mkdir %{buildroot}%{_datadir}/anaconda/addons + +# Create an empty directory for post-scripts +mkdir %{buildroot}%{_datadir}/anaconda/post-scripts + +%if %{with live} +# required for live installations +desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop +%else +# Remove all live-installer files from the buildroot +rm -rf \ + %{buildroot}/%{_sysconfdir}/xdg/autostart/liveinst-setup.desktop \ + %{buildroot}/%{_bindir}/liveinst \ + %{buildroot}/%{_libexecdir}/liveinst-setup.sh \ + %{buildroot}/%{_datadir}/anaconda/gnome \ + %{buildroot}/%{_datadir}/anaconda/gnome/fedora-welcome \ + %{buildroot}/%{_datadir}/anaconda/gnome/org.fedoraproject.welcome-screen.desktop \ + %{buildroot}/%{_datadir}/polkit-1/actions/* \ + %{buildroot}/%{_datadir}/applications/liveinst.desktop +%endif + +# Add localization files +%find_lang %{name} + +# main package and install-env-deps are metapackages +%files + +%files install-env-deps + +# Allow the lang file to be empty +%define _empty_manifest_terminate_build 0 + +%files install-img-deps + +# Allow the lang file to be empty here too +%define _empty_manifest_terminate_build 0 + +%files core -f %{name}.lang +%license COPYING +%{_unitdir}/* +%{_prefix}/lib/systemd/system-generators/* +%{_bindir}/instperf +%{_bindir}/anaconda-disable-nm-ibft-plugin +%{_bindir}/anaconda-nm-disable-autocons +%{_sbindir}/anaconda +%{_sbindir}/handle-sshpw +%{_datadir}/anaconda +%{_prefix}/libexec/anaconda +%exclude %{_datadir}/anaconda/gnome +%exclude %{_datadir}/anaconda/pixmaps +%exclude %{_datadir}/anaconda/ui +%exclude %{_datadir}/anaconda/window-manager +%exclude %{_datadir}/anaconda/anaconda-gtk.css +%dir %{_datadir}/anaconda/post-scripts +%exclude %{_prefix}/libexec/anaconda/dd_* +%{python3_sitearch}/pyanaconda +%exclude %{python3_sitearch}/pyanaconda/rescue.py* +%exclude %{python3_sitearch}/pyanaconda/__pycache__/rescue.* +%exclude %{python3_sitearch}/pyanaconda/ui/gui/* +%exclude %{python3_sitearch}/pyanaconda/ui/tui/* +%{_bindir}/anaconda-cleanup +%dir %{_sysconfdir}/%{name} +%config %{_sysconfdir}/%{name}/* +%dir %{_sysconfdir}/%{name}/conf.d +%config %{_sysconfdir}/%{name}/conf.d/* +%dir %{_sysconfdir}/%{name}/profile.d +%config %{_sysconfdir}/%{name}/profile.d/* + +%if %{with live} +# do not provide the live subpackage on RHEL + +%files live +%{_bindir}/liveinst +%{_datadir}/polkit-1/actions/* +%{_libexecdir}/liveinst-setup.sh +%{_datadir}/applications/*.desktop +%{_datadir}/anaconda/gnome +%{_sysconfdir}/xdg/autostart/*.desktop + +%endif + +%files gui +%{python3_sitearch}/pyanaconda/ui/gui/* +%{_datadir}/anaconda/pixmaps +%{_datadir}/anaconda/ui +%if 0%{?rhel} +# Remove blivet-gui +%exclude %{_datadir}/anaconda/ui/spokes/blivet_gui.* +%exclude %{python3_sitearch}/pyanaconda/ui/gui/spokes/blivet_gui.* +%endif +%{_datadir}/anaconda/window-manager +%{_datadir}/anaconda/anaconda-gtk.css +%{_datadir}/anaconda/gtk-4.0/settings.ini + +%files tui +%{python3_sitearch}/pyanaconda/rescue.py +%{python3_sitearch}/pyanaconda/__pycache__/rescue.* +%{python3_sitearch}/pyanaconda/ui/tui/* + +%files widgets +%{_libdir}/libAnacondaWidgets.so.* +%{_libdir}/girepository*/AnacondaWidgets*typelib +%{python3_sitearch}/gi/overrides/* + +%files widgets-devel +%{_includedir}/* +%{_libdir}/libAnacondaWidgets.so +%if %{with glade} +%{_libdir}/glade/modules/libAnacondaWidgets.so +%{_datadir}/glade/catalogs/AnacondaWidgets.xml +%endif +%{_datadir}/gtk-doc + +%files dracut +%dir %{_prefix}/lib/dracut/modules.d/80%{name} +%{_prefix}/lib/dracut/modules.d/80%{name}/* +%{_prefix}/libexec/anaconda/dd_* + +%changelog +* Tue Jul 30 2024 Packit - 41.27-1 +- Remove threading compatibility layer (kkoukiou) + +* Tue Jul 23 2024 Packit - 41.26-1 +- Don't use tmpfs in build if not enough RAM (lifto) +- Document RHEL 10 specifics for container shell (mkolman) +- storage: add EFI partition in the windows OS devices if it's detected + (kkoukiou) +- storage: add windows system to GetExistingSystems (kkoukiou) +- storage: store the partition type name in device attrs for partitions + (kkoukiou) +- Clean up the code by removing the utils directory (rolivier) + +* Wed Jul 17 2024 Fedora Release Engineering - 41.25-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jul 16 2024 Packit - 41.25-1 +- makeupdates: Bump Python version in site packages path to 3.13 (vtrefny) +- Apply suggestions from Rodolfo (martin.kolman) +- Scripts for local boot.iso updates workflow (mkolman) +- Fix unit_tests/pyanaconda_tests/core/test_threads.py:140:20: E721 (kkoukiou) +- Fix pyanaconda/modules/network/nm_client.py:576:21: PLR1704 (kkoukiou) +- Fix pyanaconda/core/users.py:408:21: PLR1704 (kkoukiou) + +* Tue Jul 09 2024 Packit - 41.24-1 +- Update translations from Weblate for master (github-actions) +- tests: storage: conditionally run btrfs tests if command is not removed + (kkoukiou) +- tests: allow the module specification to contain removed commands (kkoukiou) + +* Tue Jul 02 2024 Packit - 41.23-1 +- Update translations from Weblate for master (github-actions) +- chore: remove unused atk in BaseWindow.c (freya) +- Replace deprecated methods to avoid warnings (rolivier) +- Do not mark ancestors of device with source or stage2 as protected (rvykydal) + +* Tue Jun 25 2024 Packit - 41.22-1 +- Update translations from Weblate for master (github-actions) + +* Tue Jun 11 2024 Python Maint - 41.20-2 +- Rebuilt for Python 3.13 + +* Tue Jun 11 2024 Packit - 41.20-1 +- Update translations from Weblate for master (github-actions) +- Fix issues for new pylint check (jkonecny) +- Use InconsistentParentSectorSize instead of InconsistentPVSectorSize + (vtrefny) +- Do not require libreport on RHEL 10 (mkolman) +- Update translations from Weblate for master (github-actions) +- Get kickstart data via DBus (akankovs) +- Adding a implementation for runtime and ui commands (akankovs) +- Update tests for kickstart commands (akankovs) +- Migration of the remaining kickstart commands to the Runtime module + (akankovs) + +* Fri Jun 07 2024 Python Maint - 41.19-2 +- Rebuilt for Python 3.13 + +* Tue Jun 04 2024 Packit - 41.19-1 +- dracut: Remove 'linear' from modules to load (vtrefny) +- Remove 'linear' from list of expected MD RAID levels (vtrefny) + +* Tue May 28 2024 Packit - 41.18-1 +- Do not imply that Fedora ELN has an EULA (sgallagh) +- Update translations from Weblate for master (github-actions) +- Deprecate kickstart modularity module (marusak.matej) +- Remove Javascript leftovers from Makefile (jkonecny) +- Revert "Ignore npm packages files for translation" (jkonecny) +- Update translations from Weblate for master (github-actions) +- docs: Add guide how to debug/develop GH workflows (jkonecny) + +* Tue May 21 2024 Packit - 41.17-1 +- RHEL moved from Bugzilla to Jira (jstodola) +- Update translations from Weblate for master (github-actions) +- docs: Fix link on ci-status page (jkonecny) +- docs: Fix link on ci status for container updates (jkonecny) +- gui: Fix displaying of the device label (yueyuankun) +- Stop pretending liveinst+vnc is supported (#678354) (kkoukiou) +- Use the standalone crypt_r package on Fedora 41+ (miro) +- Write a warning rescue selinux (akankovs) + Resolves: RHEL-14005 + +* Tue Apr 30 2024 Katerina Koukiou - 41.15-1 +- Update to upstream release 41.15 + +* Tue Apr 23 2024 Packit - 41.14-1 +- Revert "infra: Packit fix empty jobs field" (kkoukiou) + +* Thu Apr 18 2024 Packit - 41.13-1 +- Fix signature of the method passed to DNF (jkonecny) +- Do not include teamd on RHEL (rvykydal) +- network: guard team devices configuration in kickstart by capabilities + (rvykydal) + +* Tue Apr 09 2024 Packit - 41.9-1 +- Update translations from Weblate for master (github-actions) + +* Tue Mar 26 2024 Packit - 41.7-1 +- Update translations from Weblate for master (github-actions) +- Disable preexec for vtActivate() (mkolman) + +* Tue Mar 19 2024 Packit - 41.6-1 +- install-img-deps: Require podman (walters) + +* Wed Mar 06 2024 Adam Williamson - 41.2-2 +- Backport PR #5508 to make bootupd create EFI boot manager entries (#2268505) + +* Tue Feb 20 2024 Packit - 41.2-1 +- Test for task category and category API (akankovs) +- Creating categories dbus API for installation phases (akankovs) + +* Fri Feb 16 2024 Packit - 41.1-1 +- bump major version number for Rawhide after F40 branching (mkolman) + +* Tue Feb 06 2024 Adam Williamson - 40.21-2 +- Backport PR #5460 to fix ostree btrfs installs with new util-linux (#2262892) + +* Tue Feb 06 2024 Packit - 40.21-1 +- Update translations from Weblate for master (github-actions) +- Deprecate timezone --isUtc, --ntpservers and --nontp kickstart options + (vponcova) +- Remove the repo --ignoregroups kickstart option in Fedora 40 (vponcova) +- Remove the logging --level kickstart option in Fedora 40 (vponcova) +- Remove the method kickstart command in Fedora 40 (vponcova) +- docs: Add a release note for removed/deprecated kickstart commands and + options (vponcova) +- Remove the autostep kickstart command in Fedora 40 (vponcova) +- Do not write newline to the webui pid file (jkonecny) +- gui: Log information about blivet-gui failed import (vtrefny) +- Make network spoke complete also in connecting state. (rvykydal) +- Do not use libxklavier to list keyboard layouts (jexposit) +- Do not use stringize and unicodeize from Blivet (vtrefny) +- Remove the inst.nompath boot option (vponcova) +- Remove support for timezone --isUtc, --ntpservers and --nontp kickstart + options (vponcova) +- Remove no more used GetRequiredMountPoints API of devicetree viewer. + (rvykydal) +- Set GTK 4 decoration layout (jexposit) +- Add TUI for installing non-standard kernels (ozobal) +- Add GUI option for installing 64k ARM kernel (ozobal) +- Revert "Remove instperf" (vslavik) + +* Tue Jan 30 2024 Packit - 40.20-1 +- docs: add section about multi-package updates (kkoukiou) + +* Wed Jan 24 2024 Jiri Konecny - 40.18-1 +- Use flag file to signal backend is ready (jkonecny) +- Start Firefox before Anaconda on Live (jkonecny) +- Update translations from Weblate for master (github-actions) +- Evaluate live keyboard sources safely (vslavik) +- rescue: Don't allow to mount systems without a root device (vponcova) +- gui: Redesign the Time & Date spoke (vponcova) +- gui: Update the glade file of the Time & Date spoke (vponcova) +- gui: Remove the timezone map from the Time & Date spoke (vponcova) +- Update translations from Weblate for master (github-actions) + +* Mon Jan 22 2024 Fedora Release Engineering - 40.17-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 40.17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 12 2024 Packit - 40.17-1 +- tests: Add a test case for the NVMe module (vtrefny) +- Add a simple NVMe module for NVMe Fabrics support (vtrefny) +- Disable LVM devices file when running image installs (vtrefny) +- Update translations from Weblate for master (github-actions) +- Fixed file-write operation to a public directory (ataf) +- gui: Improve the position of the Encrypt checkbox in the Container dialog + (vponcova) +- storage: Set the default LUKS version for interactive partitioning (vponcova) +- gui: Remove support for the LUKS version selection (vponcova) +- Update translations from Weblate for master (github-actions) +- docs: Fix commit-log.rst after JIRA switch (jkonecny) +- Update documentation for RHEL contributions (jkonecny) + +* Tue Dec 19 2023 Packit - 40.15-1 +- fix missing emit of zfcp kickstart statements (maier) +- DeviceTreeViewer: Add path-id attribute to zfcp-attached SCSI disks (maier) +- fix missing WWID values for multipath devices in advanced storage UI + (#2046654) (maier) +- Update translations from Weblate for master (github-actions) +- storage: do not add /boot among required partitions (rvykydal) +- storage: add a new more generic API for mount point constraints (rvykydal) +- Update translations from Weblate for master (github-actions) +- tests: no need in HFS+ on Apple Macs (vponcova) +- storage: no need in HFS+ on Apple Macs (temap) +- bootupd: Use --write-uuid (walters) +- network: ignore BOOTIF connections when creating device configurations + (rvykydal) +- network: ignore BOOTIF connections when looking for initramfs bond ports + (rvykydal) +- anaconda-diskroot: wait before dying on media check fail (awilliam) + +* Tue Dec 05 2023 Packit - 40.13-1 +- Keyboard layout descriptions: more liberal language name check (awilliam) +- Don't prepend random language to keyboard layout names (awilliam) + +* Tue Dec 05 2023 Packit - 40.12-1 +- Update translations from Weblate for master (github-actions) +- docs: Add release note for bootupd support (vslavik) +- bootloader: Detect bootupd and skip regular install (vslavik) +- ostree: Use bootupd if installed by payload (vslavik) +- storage: Ignore NVDIMM namespaces in a non-sector mode (vponcova) +- storage: Remove support for NVDIMM namespaces (vponcova) +- spec: Add noarch where applicable (vslavik) +- bootloader: Create an installation task for collecting kernel arguments + (vponcova) +- bootloader: Add the collect_arguments method (vponcova) +- bootloader: Remove the install_boot_loader function (vponcova) + +* Wed Nov 22 2023 Packit - 40.11-1 +- Remove all support of the built-in help system (vponcova) +- Make possible to start TUI with installed WebUI (akankovs) +- workflows: Drop COCKPITUOUS_TOKEN from trigger-webui.yml (kkoukiou) +- Use 'os.uname().machine' to get machine architecture instead of 'uname -i' + (kkoukiou) +- docs: Describe l10n CI changes for new Fedoras (vslavik) +- docs: Describe caveats for inst.sdboot and live (vslavik) +- docs: Mention efibootmgr with the invalid byte bug (vslavik) +- logging: split image package list message into 8K chunks (rvykydal) +- webui: pixel tests reference update (account on review screen) (rvykydal) +- webui: add account information to review screen (rvykydal) +- Update translations from Weblate for master (github-actions) +- Remove instperf (mkolman) +- webui: update pixel test images (rvykydal) +- webui: fix password strength indicator layout in horizontal form (rvykydal) +- webui: update end2end tests for the new users screen (rvykydal) +- webui: create required user when reaching a test step by default (rvykydal) +- webui: allow to create user more easily for reaching a step in test + (rvykydal) +- webui: add users screen to tests for sidebar navigation (rvykydal) +- webui: add simple test for users screen (rvykydal) +- webui: hide user screen on live images (rvykydal) +- webui: make created user administarator by default (rvykydal) +- webui: apply the created user to the backend (rvykydal) +- webui: make partitioning reset on going back more robust (rvykydal) +- webui: keep the state of Create Account UI (rvykydal) +- webui: add simplest user name check to Create Accounts (rvykydal) +- webui: share length password rule between users and disk encryption + (rvykydal) +- webui: use password form component for Create Account screen (rvykydal) +- webui: add a simple Create Account screen (rvykydal) +- webui: move pasword form component into a separate file (rvykydal) +- webui: move also password strength logic into pw form component (rvykydal) +- webui: use dynamic rules in password form component (rvykydal) +- spec: Remove dependency on jfsutils (vtrefny) +- widgets: disable glade in RHEL builds (yselkowi) +- Adjust test_mount_filesystems to the latest blivet changes (vtrefny) +- webui: package.json: bump patternfly dependencies (kkoukiou) +- webui: package.json: update some eslint packages (kkoukiou) +- webui: package.json: use exact versions of all package dependencies + (kkoukiou) +- webui: don't repeat code in the src/apis/ (kkoukiou) +- webui: split src/apis/storage.js into multiple files (kkoukiou) +- webui: tests: expect reboot when killing the webui-desktop script (kkoukiou) +- webui: when rebooting the machine the dbus clients close and throw error + messages (kkoukiou) +- webui: tests: Robustify JS error modal pixel test (kkoukiou) +- webui: bump Cockpit version of testlib (kkoukiou) +- webui: pixel-tests: wait for animations for finish before taking screenshots + (kkoukiou) +- Update translations from Weblate for master (github-actions) +- Add new substitution members in dnf tests (vslavik) +- webui: Conditional enable networking hint (akankovs) + +* Tue Oct 24 2023 Packit - 40.10-1 +- Update translations from Weblate for master (github-actions) +- webui: use global password policy in DiskEncryption (rvykydal) +- webui: add global state for password policies (rvykydal) +- Add release note for the removal of screenshot support (mkolman) +- Remove GUI screenshot support (mkolman) +- Remove the use of the Keybinder library (mkolman) +- Extend the Timezone DBus module (mkolman) +- Webui: Fix for adding report for JS bugs (akankovs) +- webui: remove step notification from the InstallationMethod component + (kkoukiou) +- webui: document commit message suggestion for prefixing the ui name if + relevant (kkoukiou) +- webui: get next button label and variant from the components (kkoukiou) +- webui: move InstallationProgress component outside of the Wizard steps + (kkoukiou) +- webui: get first step id by parsing the steps array (kkoukiou) +- webui: remove logic for showing helpers in footer per component to the + components (kkoukiou) +- webui: make installer.reach method more robust (rvykydal) +- webui: be more robust in tests when moving to REVIEW screen (rvykydal) +- webui: add report for JS bugs + test (kkoukiou) +- docs: Document using customized ci containers (jkonecny) +- test docs: Update tools list (vslavik) +- docs: Describe release note gathering process. (vslavik) +- docs: Describe updates for new Python version (vslavik) +- docs: Collect release notes for F39 (vslavik) +- webui: pass osRelease through context (kkoukiou) +- webui: move code related to version parsing (beta) into separate component + (kkoukiou) +- webui: use Optional Chaining operator where possible (kkoukiou) +- webui: InstallationMethod: remove redundant nesting (kkoukiou) +- webui: move conditional check for rendering ModifyStorage out of the + component itself (kkoukiou) +- webui: pass system type through context (kkoukiou) +- webui: split out components for disk selection to seperate file (kkoukiou) +- logging: log content of /root/lorax-packages if available (rvykydal) +- webui: unpin firefox version from updates.img (kkoukiou) +- webui: send stderr from webui-desktop to the journal (kkoukiou) + +* Tue Oct 17 2023 Packit - 40.9-1 +- webui: catch exceptions from the backend in all actions (kkoukiou) +- Update translations from Weblate for master (github-actions) +- webui: move per-page title, id, label and hidden state into the components + (kkoukiou) +- webui: Drop global notifications in favor of the per page notifications + (kkoukiou) +- webui: let's be consistent on how we hide steps (kkoukiou) +- webui: sort some state variables alphabetically (kkoukiou) +- webui: pass the properties only to the components that use these (kkoukiou) +- payload: check finished dnf transaction for transation item errors (rvykydal) +- webui: check existence of payload image when running testing VM (rvykydal) +- webui: Test for unknown language review crash (akankovs) +- webui: Avoid crash on non-translated languages (akankovs) +- webui: mount the RequestsTable component only once requests are available + (kkoukiou) +- webui: tests: wait for logo to get visible when openning the page (kkoukiou) +- webui: do not show `equal disks` notification when the previous disks are not + loaded (kkoukiou) +- webui: disable the whole form when disk re-scan is taking place (kkoukiou) +- webui: introduce `isFormDisabled` global state property (kkoukiou) +- webui: rebuild devices object in the store with the getDevicesAction + (kkoukiou) +- webui: set form validity also at the initial load of the mount point mapping + (kkoukiou) +- payload: don't check PKG_VERIFY dnf progress messages (rvykydal) +- payload: do not detect success of dnf transaction by PGK_VERIFY progress + (rvykydal) +- webui: utilize PasswordPolicies rules from the backend for disk encryption + (kkoukiou) +- set_x_keyboard_defaults: drop space when calling supports_ascii (awilliam) +- storage: Handle BTRFS with systemd-boot (jeremy.linton) + +* Tue Oct 10 2023 Packit - 40.8-1 +- tests: Drop unused testing dir (vslavik) +- webui: Install cockpit-storaged (martin) +- webui: Support testing against a cockpit PR (martin) +- webui: Reduce rpm download timeout (martin) +- webui: Install all downloaded rpms (martin) +- Update translations from Weblate for master (github-actions) +- Revert "webui: pin down cockpit-* packages versions for gating purposes" + (martin) +- webui: tests: temporarilly pin down firefox to unbreak CI (kkoukiou) +- WebUI: drop eslint flowtype plugin (jvanderwaa) +- pylint: Use 'exit' instead of 'do_exit' for pylint.lint.Run (vtrefny) +- webui: replace specific checkEqualDisks with new checkIfArraysAreEqual helper + (kkoukiou) +- webui: split 'Modify storage' modals into separate file (kkoukiou) +- webui: utilize idPredix variable for ids in UnlockDialog component (kkoukiou) +- webui: move code for updating backend requests to helper function (kkoukiou) +- Drop kbd-legacy requirement in localization module (awilliam) + +* Tue Oct 03 2023 Packit - 40.7-1 +- webui: tests: ignore the logo image selector in the pixel tests (kkoukiou) +- webui: do not hardcode the required mount points in the getInitialRequests + (kkoukiou) +- webui: helpers: Document storage helper methods (kkoukiou) +- webui: reimplement checkDeviceInSubTree by re-using existing helper method + (kkoukiou) +- webui: port dropdown to new PF5 implementation (akankovs) +- Revert "tests: Run pytest in parallel on available cpu cores" (vslavik) +- webui: add a logo to the header (akankovs) +- install-{env,img}-deps: recommend/require kdump-anaconda-addon (awilliam) +- Fix crash because of missing import statement (kkoukiou) +- webui: prevent re-defining required mount points from the UI (kkoukiou) +- Simplify keyboard layout handling, rely on localed more (awilliam) +- tests: Run pytest in parallel on available cpu cores (vslavik) +- tests: Don't hardcode file handle number (vslavik) +- live: Report installation progress from rsync output (vslavik) +- Change process return code handling in execReadlines (vslavik) +- Count free space on btrfs subvolume mount points correctly (vslavik) + +* Tue Sep 26 2023 Packit - 40.6-1 +- webui: robustify manual partitioning request manipulation (kkoukiou) +- webui: split long line to more lines (kkoukiou) +- webui: tests: improve add_mountpoint_row the remove_mountpoint_row helper + methods (kkoukiou) +- webui: start using 'passphrase' always for LUKS instead of 'password' + (kkoukiou) +- webui: refactor LUKS unlocking modal after designer feedback (kkoukiou) +- webui: test: increase timeout when unlocking LUKS devices (kkoukiou) +- webui: fix unexpected closing of the Unlock LUKS device dialog after wrong + password (kkoukiou) +- Update translations from Weblate for master (github-actions) +- webui: Check for required filesystem type for mount points (vtrefny) +- webui: Get the required mountpoints from the backend (vtrefny) +- storage: Add a function to get list of required mount points (vtrefny) +- tests: Remove pep8 and pycodestyle (vslavik) +- docs: Add efibootmgr non-unicode output to common bugs (vslavik) +- webui: Unpin blivet-gui dependency from test/prepare-updates-img (vtrefny) +- spec: Add depdendency on fs tools to anaconda-install-env-deps (vtrefny) + +* Tue Sep 19 2023 Packit - 40.5-1 +- webui: Remove test for unformattable filesystems (vtrefny) +- Update translations from Weblate for master (github-actions) +- webui: Start blivet-gui with --keep-above (vtrefny) +- webui: tests: remove unnecessary semilocon from python code (kkoukiou) +- webui: tests: move all helpers for mount point assignment page to + test/helpers/storage (kkoukiou) +- webui: tests: organize the storage helper functions into multiple classes + (kkoukiou) +- webui: tests: pack checks for mount point assignment rows in one method call + (kkoukiou) +- webui: adjust installation scenario hint messages after designer feedback + (kkoukiou) +- webui: when multiple devices have the same name disable mount point mapping + scenario (kkoukiou) +- liveinst: Don't exec pkexec (rstrode) +- cppcheck: Pretend we know more macros (vslavik) +- webui: Start blivet-gui with --auto-dev-updates (vtrefny) +- webui: tests: wipefs on vda is done in the VirtInstallMachineCase setUp + (kkoukiou) +- webui: check the BZ report URL length before sending it (rvykydal) +- webui: move adding comment about log file attaching to proper component + (rvykydal) +- Remove unused variable from makeupdates script (kkoukiou) +- Fix install complete text (awilliam) + +* Tue Sep 12 2023 Packit - 40.4-1 +- webui: reset partitioning when the user goes back from review screen + (kkoukiou) +- webui: tests: remove double quotes from return result of dbus call + (kkoukiou) +- Add 'localhost-live' to ignored hostnames for device naming (vtrefny) +- webui: do not hardcode the pretty name in installation progress (kkoukiou) +- webui: Fix checking for locked LUKS devices (vtrefny) +- webui: remove extra parenthesis (kkoukiou) +- webui: fix a typo in pre-blivet dialog (rvykydal) +- webui: update fonts in log review for BZ reporting for Patterfly v5 + (rvykydal) +- webui: fix button spacing in BZ error reporting dialog (rvykydal) + +* Thu Sep 07 2023 Packit - 40.3-1 +- Use Firefox environment variables for styling (mkolman) +- make: Pass interactive container arguments only for run (vslavik) +- make: Add container run options (vslavik) +- make: Expand the ambiguous container option -t (vslavik) +- make: One option per line for all container calls (vslavik) +- Remove old product.py (vslavik) +- GUI: Move helper for window header distribution text (vslavik) +- Convert usages of product to core.product (vslavik) +- Stop using old product in constants (vslavik) +- Replace all uses of product values via constants (vslavik) +- Make old product just a wrapper of the new one (vslavik) +- Add a new product.py (vslavik) +- Copy /var/lib/gnome-initial-setup/state to installed system (rstrode) +- webui: add pixel test for modify storage test (rvykydal) +- webui: use Blivet-gui name instead of Blivet (rvykydal) +- webui: add tests for modify storage dialogs (rvykydal) +- webui: if blivet-gui exits earlier then the delay update the dialog + (rvykydal) +- webui: do not show rescan dialog in case of critical error (rvykydal) +- webui: make blivet-gui start failure a Critical Error (rvykydal) +- webui: catch errors when spawning blivet-gui (rvykydal) +- webui: add dialogs around launching blivet-gui (rvykydal) +- webui: show error name in Critical Error dialog only if it exists (rvykydal) +- core: Look up live user from PKEXEC_UID (rstrode) +- Revert the ESP maximum size back to 600MiB (richard) +- Docs: added to 'Common bugs and issues' workaround for setup on 4K block + devices (k0ste) + +* Tue Sep 05 2023 Packit - 40.2-1 +- webui: tests: move wait for re-scanning to finish before moving forward with + the tests (kkoukiou) +- webui: When re-scanning don't reset disk selection (kkoukiou) +- Update translations from Weblate for master (github-actions) +- webui: Show warning when trying to use non-ASCII LUKS passphrase (vtrefny) +- Add a note about the need to rebuild containers after branching (mkolman) +- Note to push to master branch after updating Rawhide config (mkolman) +- Document the need for changing the l10n commit hash (mkolman) +- Fix Cockpit CI docs for branching (mkolman) +- Fix localization branch name in branching docs (mkolman) +- Update translations from Weblate + +* Wed Aug 30 2023 Packit - 40.1-1 +- tests: Add a webui test case with EFI system (vtrefny) +- webui: Show error when mounting /boot/efi to a non-EFI partition (vtrefny) +- webui: Add /boot/efi to required mount points when in EFI mode (vtrefny) +- tests: Add support for running webui tests in an EFI VM (vtrefny) +- Update translations from Weblate for master (github-actions) +- j2 render: Preserve hashbangs (vslavik) +- j2 render: Flip logic for empty result (vslavik) +- j2 render: Clean up details (vslavik) +- webui: Do not show unusable devices in mount point assignment (vtrefny) +- webui: Enable mount point mapping based on filesystem not partition (vtrefny) +- webui: add basic test for sidebar navigation (#2233805) (rvykydal) +- webui: do not reset validity of step id moving to the same step (#2233805) + (rvykydal) +- webui: add offline version to BZ report dialog (rvykydal) +- webui: monitor network connection state from the Anaconda backend (rvykydal) +- Update translations from Weblate + +* Tue Aug 29 2023 Packit - 39.33-1 +- webui: Update request IDs when removing mount point row (vtrefny) +- Update translations from Weblate for master (github-actions) +- Fix spelling mistake / typo: "Criticall error" (awilliam) +- webui: Let error reporting dialog test area auto resize (kkoukiou) +- webui: Show error when trying to reformat unsupported format (vtrefny) +- Use `isinstance(x, t)` instead of `type(x) is t` (vslavik) +- Ignore subprocess.run without the check parameter (vslavik) +- storage: Add 'formattable' property to the format data (vtrefny) +- Disable geolocation on the Fedora Workstation live image (mkolman) +- Update translations from Weblate + +* Tue Aug 22 2023 Packit - 39.32-1 +- liveinst: Ensure DBUS_SESSION_BUS_ADDRESS is set in live install (rstrode) +- screensaver: Look at $PKEXEC_UID not $USERHELPER_UID (rstrode) +- webui: disable disk selection while disks are being rescanned (kkoukiou) +- webui: show spinner in the disk selection while the backend did not update + (kkoukiou) +- WebUI: update pixel tests for Fedora 40 (jvanderwaa) +- webui: show 25 rows in the bug report log review. (rvykydal) +- webui: add option to report an issue to global menu (rvykydal) +- webui: bump cockpit-* dependencies in updates.img (kkoukiou) +- Update translations from Weblate for master (github-actions) +- release-notes: Document support for compressed kernel modules in Driver Discs + (peter.georg) +- Add documentation about support for compressed kernel modules (peter.georg) +- dd_extract: Update test info to reflect added support for compressed kernel + modules (peter.georg) +- dd_extract: Add test for zstd compressed kernel module (peter.georg) +- dd_extract: Add test for xz compressed kernel module (peter.georg) +- dd_extract: Add support for compressed kernel modules (peter.georg) +- Update translations from Weblate + +* Tue Aug 22 2023 Packit - 39.31-1 +- po: Don't try to delete extra.pot (vslavik) +- tests: Rename test to match file with code (vslavik) +- tests: Split localed wrapper from module (vslavik) +- tests: Split live keyboard from module (vslavik) +- tets: Split localization module task tests (vslavik) +- Update translations from Weblate + +* Mon Aug 21 2023 Packit - 39.30-1 +- webui: update pixel tests (kkoukiou) +- webui: move groupedAdditional content to PageGroup as specified in the + documentation (kkoukiou) +- webui: port disk selector to the new Select implementation (kkoukiou) +- webui: tests: workaround non-unique selector for the modal (kkoukiou) +- webui: Upgrade to Patternfly 5 (kkoukiou) +- Improve image building docs (mkolman) +- Improve image building docs (mkolman) +- webui: Do not show unused devices on the review page (vtrefny) +- liveinst: Port to polkit (rstrode) +- webui: Fixed typo to launch Live OS ISO with test/webui_testvm.py script + (akankovs) +- webui: Automatically prefill mount point for swap devices (vtrefny) +- manual: Allow using swap without reformatting (vtrefny) +- Update translations from Weblate for master (github-actions) +- webui: Allow changing and removing duplicate required mount points (vtrefny) +- webui: test editing of the log in error reporting dialog (rvykydal) +- Correct spelling of "formatted" (awilliam) +- webui: Remove obsolete check for btrfs reformat support (vtrefny) +- Add realease notes for keyboard from live system (jkonecny) +- Add support for virtual console keymap from live (jkonecny) +- Add live environment keyboard settings support (jkonecny) +- Don't directly copy webui files in makeupdates script (mkolman) +- webui: increase default size of log review text area in critical error dialog + (rvykydal) +- test: allow booting a Live OS ISO with test/webui_testvm.py script (kkoukiou) +- webui: use monospace font in critical error dialog (rvykydal) +- webui: disable error reporting button when reading log for review (rvykydal) +- webui: in Critical Error test click to report to BZ only after the log is + read (rvykydal) +- Move get_missing_keyboard_configuration method (jkonecny) +- Fix typo in the LocalizationInterface docstring (jkonecny) +- Add execWithCaptureAsLiveUser to run as liveuser (jkonecny) +- Extract liveuser data from help to generic tooling (jkonecny) +- make: Document downloading .po from l10n repo (vslavik) +- make: Update POT from branch, not pinned commit (vslavik) +- webui: tests: cleanup webui.log in the end of the test (kkoukiou) +- webui: give better feedback to user after 'Report issue' was clicked + (kkoukiou) +- webui: add testing of log existence in critical error handling (rvykydal) +- webui: translate critical error context only in the dialog (rvykydal) +- webui: use Critical Error dialog for critical failures on Back button + (rvykydal) +- webui: use Critical Error dialog in installation progress (rvykydal) +- webui: use Critical Error dialog to handle erros in getting data about + storage (rvykydal) +- webui: display also the background wizard page with Critical Error dialog + (rvykydal) +- webui: use form layout and add log review of journal (rvykydal) +- webui: add button for reporting to Bugzilla to CriticalError dialog + (rvykydal) +- webui: tests: convert testErrorHandling to a non-destructive test (kkoukiou) +- webui: tests: remove unused variable (kkoukiou) +- webui: use storage exception for critical error dialog test (rvykydal) +- webui: move partition_disk to Storage helper class (rvykydal) +- webui: use Critical Error dialog to handle erros in getting data about + storage (rvykydal) +- webui: use Critical Error dialog for disks rescan (rvykydal) +- webui: use Critical Error dialog in installation progress (rvykydal) +- webui: add context to Critical Error dialog (rvykydal) +- webui: Prevent the Anaconda window from being closed by keyboard shortcuts + (akankovs) +- webui: fix make rsync not updating the test VM (kkoukiou) +- webui: Back/Next button are not localized (akankovs) +- webui: tests are expecting #mount-point-mapping-table-row-{rowId}-format + selector (kkoukiou) +- webui: fix TestStorageMountPoints.testBasic (rvykydal) +- webui: tests: use m.write for writing files (kkoukiou) +- webui: tests: extend the TestInstallationProgress test to include reboot + (jvanderwaa) +- webui: introduce a button to launch blivet GUI (kkoukiou) +- webui: when using the remote option just relax the address that cockpit-ws + binds to (kkoukiou) +- webui: After returning to InstallationLanguage, the next button does not work + (akankovs) +- Remove PatternFly workaround from build.js (mkolman) +- spec: Bump required blivet version to 3.8.1 (vtrefny) +- webui: Changing of checkbox for switch (akankovs) +- iscsi: Allow changing iSCSI initiator name once set (vtrefny) +- Update translations from Weblate for master (github-actions) +- webui: fix logic for when to re-create the partitioning (kkoukiou) +- webui: compress dist files also on development builds (kkoukiou) +- webui: webui-desktop: don't use tls when spawning cockpit-ws (kkoukiou) +- docs: Add translation bumper to CI status page (vslavik) +- webui: extend condition that blocks rendering of the installation scenario + step (kkoukiou) +- Update translations from Weblate for master (github-actions) +- webui: do not keep in the central state all possible created partitioning + objects (kkoukiou) +- Update translations from Weblate + +* Thu Aug 03 2023 Packit - 39.29-1 +- webui: spread the state update function into seperate hooks and useMemo + (kkoukiou) +- webui: Clear mount point and reformat flag for removed requests (vtrefny) +- manual: Return error when trying to use removed nested subvolumes (vtrefny) +- webui: show 'format as' only when reformatting partition (kkoukiou) +- webui: Empty value for input should not be null nor undefined (mmarusak) +- webui: Define unique key for list on review page (mmarusak) +- webui: Show partition size on review page (mmarusak) +- manual: Ignore no-op mount point requests (vtrefny) +- webui: when the disk is empty hide "Use free space" scenario (skobyda) +- webui: InstallationScenario: assume non-availability (kkoukiou) +- webui: update only the needed encryption state attributes (kkoukiou) +- webui: scenarios is a global variable, no need to pass it as propertry + (kkoukiou) +- webui: tests: use 'click' helper test method on radio buttons (kkoukiou) +- webui: tests: next button is enabled before the screenshot (kkoukiou) +- webui: update scenario availability state only after parsing all scenarios + (kkoukiou) +- Ignore btrfs snapshots in mountpoint assignment (vtrefny) +- webui: start using payload from the bots repository (kkoukiou) +- webui: make 'Next' by default 'disabled' and let each component update it + (kkoukiou) +- webui: Enable source maps and enable minification (mkolman) +- webui: Add mount point assignment test case with LVM (vtrefny) +- webui: Add mount point assignment test case with btrfs subvolumes (vtrefny) +- webui: remove limitation for formating btrfs subvolumes (kkoukiou) +- add another encrypted disk to test case (mahmoud-mahgoub1) +- l10n: Lock to current HEAD (vslavik) +- make: Add target to automatically bump l10n ref (vslavik) +- make: Move l10n constants from configure.ac to include file (vslavik) +- make: Add l10n config file with SHA variable, use (vslavik) +- Update translations from Weblate + +* Tue Aug 01 2023 Packit - 39.28-1 +- webui: update cockpit dependencies to the latest released in rawhide + (kkoukiou) +- webui: tests: add method to partition disk (tomatus777) +- webui: Quit button does not work on the Live image (akankovs) +- webui: Update and simplify review page (mmarusak) +- docs: use correct path for VM command (90795679+MahmoudHamdy02) +- webui: Translate strings used in cockpit.format (mmarusak) +- Allow reformatting of 'plain' btrfs volumes (vtrefny) +- webui: catch also exceptions from GetDevicesAction when rescanning disks + (rvykydal) +- webui: unpack GetDiskFreeSpace and GetDiskTotalSpace from array (skobyda) +- webui: tests: remove duplicate pixel tests for the first storage page + (kkoukiou) +- webui: tests: create a variable with the table row selector (kkoukiou) +- webui: tests: simplify the open test helper (kkoukiou) +- webui: tests: remove redundant check for disabled 'Next' button (kkoukiou) +- webui: tests: add helper method for setting a valid password (kkoukiou) +- webui: rename some components to more self explanatory names (kkoukiou) +- webui: fix prefix for identifiers of the installation scenarios (kkoukiou) +- webui: remove obsolete TODO (kkoukiou) +- webui: change Alert on review screen to HelperText (mmarusak) +- webui: Introduce cockpit-style debug() helper (martin) +- Revert "Add GUI option for installing 64k ARM kernel" (jkonecny) +- Revert "Add TUI for installing non-standard kernels" (jkonecny) +- webui: debounce changes on the password confirmation field (kkoukiou) +- webui: docs: fix documentation on how to re-create the updates.img (kkoukiou) +- Simplify submodule subscription to storage changes (vslavik) +- Enable iterating over managed modules (vslavik) +- Use the new class in relevant Storage submodules (vslavik) +- webui: Disable minification (mkolman) +- Add a class for modules that keep track of storage (vslavik) +- Use the submodule manager in Storage (vslavik) +- Use the submodule manager in Runtime (vslavik) +- Add a submodule manager class (vslavik) +- webui: redesign and refactor custom partition mapper (kkoukiou) +- webui: Add Firefox theme for use on Live media (mkolman) +- webui: tests: Fix end to end tests to work with new storage design (zveleba) +- webui: tests: Make reboot button selector more specific (zveleba) +- webui: use term 'devices' not 'partitions' in the custom mountpoint step + (kkoukiou) +- webui: debounce password quality checks to be done only once per 300ms + (kkoukiou) +- tests: Update reference images for mountpoint assignment (vtrefny) +- webui: Use device name instead of path as identifier (vtrefny) +- tests: Fix expected device specs in check-storage (vtrefny) +- webui: Use custom label when creating btrfs for tests (vtrefny) +- Use blivet mount options for new subvolumes in mountpoint assignment + (vtrefny) +- tui: Preserve blivet mount options in mountpoint assignment (vtrefny) +- tui: allow to 'format' btrfs subvolumes in mount point assignment (rvykydal) +- tui: Use name instead of path for devspec in mountpoint assignment (vtrefny) +- tui: Use all btrfs subvolumes in mountpoint assignment (vtrefny) +- webui: Update pixel tests broken from localization updates (kkoukiou) +- ruff: Silence new warnings with 0.0.280 (vslavik) +- webui: rename custom mountpoint assignment step to mountpoint mapper + (kkoukiou) +- Check for webui with property (vslavik) +- Update translations from Weblate + +* Wed Jul 26 2023 Adam Williamson - 39.27-3 +- Revert *both* commits from the broken PR, not just one + +* Wed Jul 26 2023 Adam Williamson - 39.27-2 +- Revert "Port GUI kernel switcher for ARM 64k", it's broken, causes crashes + +* Tue Jul 25 2023 Packit - 39.27-1 +- webui: if no scenario is available for selection show the options but + disabled (kkoukiou) +- webui: new design for welcome page in live image (kkoukiou) +- webui: rephrase text hints for disabled options (kkoukiou) +- webui: make all actions return anonymous functions (kkoukiou) +- webui: re-calculate the scenarios only if the selected devices or device data + changed (kkoukiou) +- webui: tests: use installer helper 'reach' method for moving ahead multiple + steps (kkoukiou) +- webui: fix typo 'screenWarning' for custom mountpoint selection (kkoukiou) +- webui: select 'vda' disk instead of the scsi ram disk in the test (kkoukiou) +- webui: safeguard access to deviceData properties to avoid crashes while state + is not fully loaded (kkoukiou) +- webui: return a Promise when fetching all device data (kkoukiou) +- webui: edit style files with errors (akankovs) +- webui: setup lint for style files (akankovs) +- tests: Fix expected value for "has_key" with latest blivet (vtrefny) +- webui: tests: make some more tests non-destructive (kkoukiou) +- webui: don't crash in case a AUTOMATIC partitioning object exists (kkoukiou) +- webui: the encryption password screen is not subpage anymore (kkoukiou) +- webui: Check for beta variable being undefined (mkolman) +- Use DBus API to check for final release (mkolman) +- webui: introduce an About screen (acruzgon) +- Move more product-related values to the module itself (vslavik) +- Simplify product-related constants (vslavik) +- Drop the isFinal UI constructor parameter from WebUI (vslavik) +- webui: do not silence exception when parsing languages from backend + (kkoukiou) +- webui: language information should be fetched also for live media (kkoukiou) +- Add minimal documentation to pyanaconda.product (vslavik) +- Add IsFinal property to the UI module (vslavik) +- webui: accept conf being undefined (yet) during a CriticalError (rvykydal) +- webui: design adjustment on the disk encryption screen (kkoukiou) +- spec: Honor 79 char limit for descriptions (vslavik) +- webui: allow critical errors also in the first load of the application + (kkoukiou) +- Add TUI for installing non-standard kernels (ozobal) +- Add GUI option for installing 64k ARM kernel (ozobal) +- Remove deprecated conf: kickstart_modules, addons_enabled (vslavik) +- Update translations from Weblate + +* Wed Jul 19 2023 Fedora Release Engineering - 39.26-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 18 2023 Packit - 39.26-1 +- webui: introduce dialog to unlock existing locked LUKS partitions (kkoukiou) +- Introduce 'has_key' property in the attrs of DeviceFormatData object + (kkoukiou) +- makeupdates: Now targeting python 3.12 (vslavik) +- webui: tests: more anaconda state cleanup for test teardown (kkoukiou) +- webui: tests: wait for data initialization to finish before proceeding with + the tests (kkoukiou) +- Update License tag in the spec file template to use SPDX syntax (dcantrell) +- webui: Introduce new Critical error component (kkoukiou) +- webui: return a promise when fetching all device data (kkoukiou) +- webui: create new dbus client objects when address changes (kkoukiou) +- ruff: Enable flake8-simplify checks (vslavik) +- Fix ruff detections for RUF002 & RUF003 (vslavik) +- ruff: Enable ruff checks (vslavik) +- ruff: Enable flake8 logging format checks (vslavik) +- ruff: Enable flake8 import conventions checks (vslavik) +- Fix ruff detections after enabling pycodestyle warnings (vslavik) +- ruff: Enable pycodestyle warning checks (vslavik) +- Fix ruff detections after enabling pylint checks (vslavik) +- ruff: Enable most of the "pylint" checks (vslavik) +- webui: simplify webui-desktop script (kkoukiou) +- Add possibility to run pylint-only test (jkonecny) +- webui: tests: reset selected disks between test runs (kkoukiou) +- webui: tests: use busctl instead of dbus-send in the test helper (kkoukiou) +- webui: localization: fix react warning about missing key (kkoukiou) +- webui: wait for all languages to be loaded before rendering languages page + (kkoukiou) +- Update translations from Weblate + +* Thu Jul 13 2023 Packit - 39.25-1 +- webui: replace the Tooltip with HelperText in Storage devices step (acruzgon) +- webui: Hide the language selection screen on Live images (akankovs) +- webui: tests: switch some storage tests to nondestructive (kkoukiou) +- webui: fix disk selection not working when moving back to the disk selection + screen (kkoukiou) +- webui: tests: check status of the bulk select checkbox in the helper + functions (kkoukiou) +- Fix and add tests for the preexec changes (vslavik) +- webui: tests: wait for the checkboxes to get initialized before taking + screenshot (kkoukiou) +- Change startProgram preexec check to early exit style (vslavik) +- Add do_preexec propagation also to execWithCapture and shutdownServer + (vslavik) +- webui: add some helper debug logs in the storage page (kkoukiou) +- webui: fetch device data on the initial app load (kkoukiou) +- webui: correct the last partitioning getter (kkoukiou) +- webui: pin down cockpit-ws and cockpit-bridge versions before the python + bridge release (kkoukiou) +- webui: tests: implement a 'reach' helper method (kkoukiou) +- Squashed 'translation-canary/' changes from 3bc2ad68a8..5bb81253b4 (vslavik) +- webui: tests: restart cockpit-ws between tests (kkoukiou) +- Use correct call assert method in flapak test (vslavik) +- Handle subprocess disallowing preexec during shutdown (awilliam) +- Update translations from Weblate + +* Tue Jul 11 2023 Packit - 39.24-1 +- webui: extend the list of the data we need to wait for before showing the app + (kkoukiou) +- webui: tests: attempt to rebustify tests by more carefully implementing the + page enter (kkoukiou) +- webui: test: extend allowed journal messages for language tests (kkoukiou) +- webui: tests: adjust next and back helper methods (kkoukiou) +- webui: pin down cockpit-* packages versions for gating purposes (kkoukiou) +- webui: if device selection changed since last partitioning request redo the + partitioning (kkoukiou) +- webui: Disable strict host checking in SSH config snippet (mkolman) +- Update translations from Weblate + +* Tue Jul 04 2023 Adam Williamson - 39.23-3 +- Fix the patch to default to doing preexec_fn (duh) + +* Tue Jul 04 2023 Adam Williamson - 39.23-2 +- Backport PR #4879 to fix shutdown with Python 3.12 + +* Mon Jul 03 2023 Packit - 39.23-1 +- webui: store system language information in the global store (kkoukiou) +- webui: Start Web UI when the anaconda-webui package is installed (mkolman) +- webui: remove redundant console.info (kkoukiou) +- webui: always disable next button if the form is invalid (kkoukiou) +- webui: when re-scanning disks or loading initial date disable the re-scan + button (kkoukiou) +- webui: mount point assignment support (jvanderwaa) +- webui: remove forgotten console.info object (kkoukiou) +- WebUI: Change help drawer width (ozobal) +- webui: show empty state while the selected scenario is not available + (kkoukiou) +- webui: the value we want to take effect should be last in destructured object + (kkoukiou) +- Fix cppcheck failure on gettext.h (jkonecny) +- Inline testlib.sh file (jkonecny) +- webui: Make RPM building DNF5 compatible (mkolman) +- Allow showing passphrase when unlocking LUKS device (jstodola) +- Update translations from Weblate + +* Tue Jun 27 2023 Python Maint - 39.22-2 +- Rebuilt for Python 3.12 + +* Tue Jun 27 2023 Packit - 39.22-1 +- Update the bundled cockpit-desktop script (martin.kolman) +- Revert "Revert "webui: start using custom webui-desktop script instead of + cockpit-desktop"" (martin.kolman) +- docs: Document the distribution component (vponcova) +- Update translations from Weblate + +* Tue Jun 27 2023 Packit - 39.21-1 +- webui: Fix handling of END2END env variable in WebUI tests (zveleba) +- webui: tests: wait for the webui to update disk selection instead of + asserting the state (kkoukiou) +- webui: use the store as single source of truth for disk selection (kkoukiou) +- webui: split actions per data type (kkoukiou) +- webui: split reducers acording to the data type (kkoukiou) +- webui: use useReducer also for language state collection (kkoukiou) +- webui: start using useReducer for managing complicated state objects + centrally (kkoukiou) +- WebUI: Switch Quit/Reboot button in Progress spoke (ozobal) +- WebUI: update pixel tests for new tasks container (jvanderwaa) +- WebUI: Use Cockpit's os-release implementation (jvanderwaa) +- webui: test: ensure that disk selection is updated before taking screenshot + (kkoukiou) +- webui: tests: increase specificity for the disk toggle selector (kkoukiou) +- webui: tests: wait for drawer status instead of asserting it directly + (kkoukiou) +- webui: tests: don't create screenshots in step_logger decorator for non + end2end tests (kkoukiou) +- WebUI: Convert InstallationProgress to function (ozobal) +- webui: tests: rename IntegrationTest class and associated file to End2EndTest + (kkoukiou) +- webui: tests: rename 'integration' directory to 'end2end' (kkoukiou) +- webui: remove some trailing whitespace from test files (kkoukiou) +- Update translations from Weblate + +* Mon Jun 26 2023 Python Maint - 39.20-2 +- Rebuilt for Python 3.12 + +* Tue Jun 20 2023 Packit - 39.20-1 +- webui: add PRETTY_NAME to use in title instead of anaconda generic title + (acruzgon) +- Revert "WebUI: explicitly specify GITHUB_BASE for pixel test commands" + (kkoukiou) +- webui: add expected journal messages coming from cockpit's new python bridge + (kkoukiou) +- WebUI: Remove centering from loading screen (ozobal) +- webui: show partitions of local standard disks (kkoukiou) +- webui: increase timeout when downloading anaconda-webui rpm dependencies + (acruzgon) +- webui: add PageSection variant 'wizard' to give Wizard in-page styling + (acruzgon) +- webui: use fmt_to_fragments so that the translation does not break (kkoukiou) +- Import BlockDev from blivet instead of gi (vtrefny) +- Stop infinite wait for CDROM when KS is processed (#2209599) (jkonecny) +- Update translations from Weblate + +* Thu Jun 15 2023 Python Maint - 39.19-2 +- Rebuilt for Python 3.12 + +* Tue Jun 13 2023 Packit - 39.19-1 +- webui: remove redundant dashes from README (kkoukiou) +- docs: remove confusion for which toolbox to use for webui development + (kkoukiou) +- webui: enable linter for webui CI runs (kkoukiou) +- Check minimal LUKS passphrase length in FIPS mode for Kickstart (vslavik) +- GUI: Require 8 chars of LUKS passwords in FIPS mode (vslavik) +- Use Firefox in kiosk mode for running the Web UI locally (mkolman) +- Do not print error on inst.ks=cdrom|hd (#2077045) (jkonecny) +- storage: fix resolving btrfs subvolumes from fstab (#2186158) (rvykydal) +- storage: improve btrfs devices removing in custom partitioning (#2186158) + (rvykydal) +- Don't override blivet's preferred disk label type by default (awilliam) +- Update translations from Weblate + +* Tue Jun 06 2023 Packit - 39.18-1 +- webui: change the language direction when language changes (kkoukiou) +- Fix webui-tests workflow waiving (zveleba) +- Add github-pr and xunit reporting to webui-tests workflow (zveleba) +- Simplify user and group name test (vslavik) +- Clean up imports (vslavik) +- Block more usernames as reserved (vslavik) +- Remove unused/duplicate WebUI e2e testplan (zveleba) +- If nano is the default editor, use it for bug reports (vslavik) +- webui: Fix malformed XML (vslavik) +- WebUI: re-design the review screen for custom mount point (jvanderwaa) +- WebUI: explicitly specify GITHUB_BASE for pixel test commands (jvanderwaa) +- Reload translations dynamically without a browser reload (jvanderwaa) +- Re-render app when language changes (jvanderwaa) +- Update translations from Weblate + +* Tue May 30 2023 Packit - 39.17-1 +- Remove unused parameter anaconda (vslavik) +- Remove unused parameter opts (vslavik) +- Remove unused parameter pass_to_boss (vslavik) +- Rename parameters ks->ks_path (vslavik) +- WebUI: move alert under header for review screen (jvanderwaa) +- Reindent test file list (vslavik) +- Fix ruff detections (vslavik) +- Add ruff, a very fast linter (vslavik) +- Move the User Interface module under Runtime (vslavik) +- Increase the minimum EFI System Partition (ESP) size to 500MiB (richard) +- Update translations from Weblate + +* Wed May 24 2023 Petr Pisar - 39.16-2 +- Rebuild against rpm-4.19 (https://fedoraproject.org/wiki/Changes/RPM-4.19) + +* Tue May 23 2023 Packit - 39.16-1 +- Change driver_updates exit info messages to debug (#2154904) (jkonecny) +- Add readme for the conf.d drop dir (vslavik) +- webui: use the reason in title of disabled partitioing warning (rvykydal) +- WebUI: improve handling of removal of testvm's (jvanderwaa) +- webui: [pixel-tests] update microcopy of "erase-all" storage scenario + (rvykydal) +- webui: update microcopy of "erase-all" storage scenario (rvykydal) +- Add a draft release note for the Runtime module (vslavik) +- Add tests for the Runtime and Dracut modules (vslavik) +- Add the dracut command module (vslavik) +- Add the Runtime module (vslavik) +- Add release notes packaging Web UI (jkonecny) +- Fix release notes link consistency (jkonecny) +- docs: Add other f38 release notes (vslavik) +- docs: Add vponcova f38 release notes (vslavik) +- docs: Add F38 release notes for vslavik PRs (vslavik) +- Create Fedora 38 release notes (jkonecny) +- Remove link to the release notes template.rst (jkonecny) +- WebUI: close embedded panel when clicking prev/next (jvanderwaa) +- WebUI: update ESLINT to LINT (jvanderwaa) +- WebUI: use StorageScenarioId in all components (jvanderwaa) +- WebUI: set default storage scenario based on scenarios constant (jvanderwaa) +- webui: use the same naming for disk images created in machine_install + (rvykydal) +- webui: consolidate creating images in machine_install (rvykydal) +- Update translations from Weblate + +* Fri May 19 2023 Petr Pisar - 39.15-2 +- Rebuild against rpm-4.19 (https://fedoraproject.org/wiki/Changes/RPM-4.19) + +* Tue May 16 2023 Packit - 39.15-1 +- tests: Remove eslint unit test (vslavik) +- docs: Add WebUI integration tests badge to CI status (vslavik) +- Add new integration test cases: Storage encryption and Wizard navigation + (zveleba) +- webui: commonLanguages can contains codes that are not in the locales the API + returns (kkoukiou) +- webui: migrate to async syntax for promises in review screen (rvykydal) +- localization: add Localization section and use_geolocation to configuration + (rvykydal) +- WebUI: fix spelling of encrypted (jvanderwaa) +- webui: create disk images for VirtInstallMachine in advance (rvykydal) +- Add new post_install_step function to IntegrationTest class (zveleba) +- Add missing log_step decorators to storage helper functions (zveleba) +- Update translations from Weblate + +* Tue May 09 2023 Packit - 39.14-1 +- webui: better source maps (kkoukiou) +- conf: Missing geolocation provider URL disables it (vslavik) +- webui: [pixel tests] update review screen for v1 of autopartiotioning + (rvykydal) +- webui: update review screen for v1 of autopartiotioning (rvykydal) +- webui: reset partitioning on going Back from review screen (rvykydal) +- webui: don't use global scope for translated strings (kkoukiou) +- Move from webpack to esbuild bundler (kkoukiou) +- webui: some invalid code fixes (kkoukiou) +- Update translations from Weblate + +* Thu May 04 2023 Packit - 39.13-1 +- WebUI: fix eslint error (jvanderwaa) +- WebUI: run eslint in CI (jvanderwaa) +- Update translations from Weblate + +* Tue Apr 25 2023 Packit - 39.12-1 +- WebUI: [pixel tests] Hide progress stepper after finishing (rvykydal) +- WebUI: allow webui_testvm to pick up development files (jvanderwaa) +- pyanaconda: start cockpit-ws from a systemd unit (jvanderwaa) +- webui: reset storage backend before autopart test (rvykydal) +- WebUI: Update test for Hide progress stepper after finishing (rvykydal) +- WebUI: Hide progress stepper after finishing (ozobal) +- webui: [pixel tests] fix spacing of Storage Congfiguration options (rvykydal) +- webui: fix spacing of Storage Congfiguration options (rvykydal) +- Fix indefinite articles before "NFS" (jstodola) +- Remove redundant return (vslavik) +- Fix virt-install cockpit run on fedora-X images (jkonecny) +- WebUI: Dynamically choose Quit/Reboot button label (ozobal) +- WebUI: use Cockpit's run-tests (jvanderwaa) +- WebUI: introduce a new MachineCase subclass for VirtInstallMachine + (jvanderwaa) +- WebUI: touch dist/manifest.json explicitly (jvanderwaa) +- Run webui-tests workflow on a testing runner for some time (rvykydal) +- Add GH workflow to run webui integration tests in Permian on PR (rvykydal) +- Update translations from Weblate + +* Tue Apr 18 2023 Packit - 39.11-1 +- Add missing documentation about OEMDRV (#2171811) (jkonecny) +- gui: Simplify invalid timezone handling. (vslavik) +- Try to set timezone from language on welcome spoke (vslavik) +- Revert "Remove the function get_locale_timezones" (vslavik) +- Always set timezone with priority (vslavik) +- Add timezone priority to module backend and interface (vslavik) +- Fix logging to packaging.log (vponcova) +- exception: only attach existent and non-empty files (#2185827) (awilliam) +- WebUI: force symlink re-creation (jvanderwaa) +- Don't set the __doc__ attribute (vponcova) +- Remove the DeviceSetupError exception (vponcova) +- Remove SetupDevice and TeardownDevice from DeviceTreeHandlerInterface + (vponcova) +- Remove unused constants (vponcova) +- Remove the DNFManager.remove_repository method (vponcova) +- Remove the DNFManager.reset_substitution method (vponcova) +- Remove the DNFManager.is_environment_valid method (vponcova) +- Remove resolve_device from pyanaconda.payload.utils (vponcova) +- Remove the TreeInfoMetadata._root_url attribute (vponcova) +- po: fix (jvanderwaa) +- WebUI: don't set step in React state (jvanderwaa) +- WebUI: avoid relying on automated semicolon insertion (jvanderwaa) +- .github: add codeql workflow for JavaScript (jvanderwaa) +- WebUI: correct setState calls for SearchInput (jvanderwaa) +- Update translations from Weblate + +* Tue Apr 11 2023 Packit - 39.10-1 +- webui: update reference images (kkoukiou) +- webui: update CockpitPoWebpackPlugin and adjust configuration options + (kkoukiou) +- webui: update run-tests script (kkoukiou) +- webui: build: Move to a webpack module (kkoukiou) +- webui: modernize the makefile (kkoukiou) +- webui: update integration tests for v1 of autopartitioning (rvykydal) +- Fix wrong dracut timeout message (jkonecny) +- Run webui-periodic workflow on a testing runner for some time (rvykydal) +- Add GH workflow for periodic webui integration tests in Permian (rvykydal) +- webui: update pixeltest reference (rvykydal) +- webui: update microcopy plurals to remove "(s)" suffixes (rvykydal) +- webui: add pixel tests for the new storage config screens (rvykydal) +- webui: add test for autopartitioning (rvykydal) +- webui: test that disk selection persists Next and Back (INSTALLER-3029) + (rvykydal) +- webui: make not enough space warning in detail a phrase (rvykydal) +- webui: add content for autopartitioning options details (rvykydal) +- webui: allow weak passwords for disk encryption (rvykydal) +- webui: fix tests for split Installation Destination step (rvykydal) +- webui: add TODO for applyPartitioning (rvykydal) +- webui: move some subcomponents out of components (rvykydal) +- webui: implement Disk Encryption subscreens in scope of the single substep + (rvykydal) +- webui: log exception in case of partitioning application error (rvykydal) +- webui: keep disk selection in the UI when going back (rvykydal) +- webui: add a tooltip hint to disabled autopartitioning scenarios (rvykydal) +- webui: connect Storage Configuration to backend initalization mode (rvykydal) +- webui: implement Storage Configuration (guided partitioning) (rvykydal) +- webui: move storage validation to the last storage substep (rvykydal) +- webui: add Disk Encryption subscreen skeleton (rvykydal) +- webui: add Storage Configuration subscreen skeleton (rvykydal) +- webui: move disk selection into a wizard substep (rvykydal) +- Move the validation report to the payload manager (vponcova) +- Use the DNF module in TUI and GUI (vponcova) +- Extend the DNF module (vponcova) +- Handle an undefined release version (vponcova) +- Move the generate_treeinfo_repository function (vponcova) +- Create the check_instances function for unit tests (vponcova) +- oemdrv: wait up to 5 seconds for disks to be handled (rmetrich) +- Update translations from Weblate + +* Tue Apr 04 2023 Packit - 39.9-1 +- fsset: Catch SwapSpaceError when trying to activate swaps (vtrefny) +- Add tests for threads (vslavik) +- Add and use thread_manager.add_thread() (vslavik) +- Use the simplified HDD source in the UI (vponcova) +- Simplify the HDD source (vponcova) +- Add the create_hdd_url function (vponcova) +- Move thread tests according to renaming (vslavik) +- Compatibility layer for threading->core.threads (vslavik) +- Rename core module threading to threads (vslavik) +- Move threading from pyanaconda to pyanaconda.core (vslavik) +- Rename threadMgr to thread_manager (vslavik) +- Allow showing proxy passwords on the installation source spoke (jstodola) +- Allow showing passwords on the subscription spoke (jstodola) +- Always hide the user password by default (jstodola) +- Always hide the root password by default (jstodola) +- Update translations from Weblate + +* Tue Mar 28 2023 Packit - 39.8-1 +- Move ostreecontainer deps to install-img-deps (jkonecny) +- Add 'vga' to the list of preserved kernel arguments (#2176782) (awilliam) +- Improve documentation of our Cockpit CI tests (jkonecny) +- Download cockpit rpms during build (jkonecny) +- Add --strict mode to makeupdates script (jkonecny) +- docs: Document the `autopart --nohome` issue (vponcova) +- Remove a react-core tarball (mkolman) +- WebUI tweak local test execution (jkonecny) +- Add missing deps to install_dependencies.sh (jkonecny) +- WebUI: do not force to manually remove updates.img (jkonecny) +- Update translations from Weblate + +* Tue Mar 28 2023 Packit - 39.7-1 +- Remove the SourceFactory class from the pyanaconda.payload module (vponcova) +- Simplify creation of a source based on its URL (vponcova) +- Protect the specified devices with all their ancestors (vponcova) +- Protect HDD sources from the Payloads module (vponcova) +- Use the simplified NFS source in the UI (vponcova) +- Simplify the NFS source (vponcova) +- Improve access to the repository configuration of a source (vponcova) +- Protect the stage2 device from the Storage module (vponcova) +- Don't protect unavailable devices (vponcova) +- Update pixel tests for a new cockpit-ws (jkonecny) +- webui: update links for downloading cockpit-ws and cockpit-bridge RPMs + (kkoukiou) +- Don't parse additional repositories during start-up (vponcova) +- Implement needs_network for rpm_ostree_container (#2125655) (jkonecny) +- Move rpm-ostree deps from Lorax to Anaconda (#2125655) (jkonecny) +- Deduplicate test data creation func in rpm ostree (jkonecny) +- Add release note for ostreecontainer (#2125655) (jkonecny) +- Add new OSTree container source test (#2125655) (jkonecny) +- Enable RPM OSTree from container source in payload (#2125655) (jkonecny) +- Add RPM OSTree source from container (#2125655) (jkonecny) +- WebUI: Fix keyboard navigation on welcome screen (ozobal) +- Add test step logging and screenshots to WebUI tests (zveleba) +- Ignore newly found pylint detections (vslavik) +- Fix network configuration from kickstart in intramfs (rvykydal) +- Update translations from Weblate + +* Tue Mar 21 2023 Packit - 39.6-1 +- Adjust to pykickstart moving new network commands to F39 (awilliam) +- Generate the ostreesetup kickstart command (vponcova) +- Simplify the URL source (vponcova) +- Add support for sources that provide access to a repository (vponcova) +- Protect the RPM source provided by Dracut (vponcova) +- Show the RPM source provided by Dracut in GUI (jkonecny) +- Rename widgets for auto-detected installation media (vponcova) +- Drop the stage2 support from the CDROM source (vponcova) +- Simplify the default source selection of the RPM sources (jkonecny) +- Add support for an RPM source defined by a local path to a repository + (jkonecny) +- webui: add hint for running tests locally with selinux failures (rvykydal) +- For user unit tests, provide valid login.defs (vslavik) +- Don't copy binaries in user unit tests (vslavik) +- Don't create empty login.defs (vslavik) +- Revert "infra: Disable failing tests that call useradd and groupadd" + (vslavik) +- Set correctly NM props for DNS kickstart options (vslavik) +- fedora-welcome: Default to light style (fmuellner) +- fedora-welcome: Swap buttons (fmuellner) +- fedora-welcome: Drop icons from buttons (fmuellner) +- fedora-welcome: Use libadwaita (fmuellner) +- fedora-welcome: Use actions instead of clicked callbacks (fmuellner) +- fedora-welcome: Port to GTK4 (fmuellner) +- fedora-welcome: Tweak button labels (fmuellner) +- fedora-welcome: Adjust wording of description (fmuellner) +- fedora-welcome: Rename .desktop file (fmuellner) +- fedora-welcome: Add back app icon (fmuellner) +- fedora-welcome: Replace grids with boxes (fmuellner) +- fedora-welcome: Remove secondary screen (fmuellner) +- fedora-welcome: Launch .desktop file instead of spawning command (fmuellner) +- fedora-welcome: Fix passing command line flags (fmuellner) +- fedora-welcome: Use standard Javascript modules (fmuellner) +- fedora-welcome: Split out application subclass (fmuellner) +- fedora-window: Use show_all() only internally (fmuellner) +- fedora-welcome: Stop using deprecated Lang module (fmuellner) +- fedora-welcome: Reindent WelcomeWindow class (fmuellner) +- fedora-welcome: Use consistent quotes (fmuellner) +- fedora-welcome: Use template strings (fmuellner) +- fedora-welcome: Use consistent braces (fmuellner) +- fedora-welcome: Remove unused imports (fmuellner) +- Fix saving DNS search domains to kickstart (vslavik) +- Update translations from Weblate + +* Fri Mar 17 2023 Adam Williamson - 39.5-2 +- Backport PR #4624 to fix anaconda with pykickstart 3.47 + +* Tue Mar 14 2023 Packit - 39.5-1 +- Revert "Enable TFTP support (#2071350)" (vslavik) +- CONTRIBUTING: Add note about systemd-boot (jeremy.linton) +- release-notes: Document that its possible to install with systemd-boot + (jeremy.linton) +- Add kickstart/command line control to enable systemd-boot (jeremy.linton) +- add x86 systemd-boot option (jeremy.linton) +- Add the grub packages removed from comps to grub installs (jeremy.linton) +- Add EFISYSTEMD class and enable aarch64 (jeremy.linton) +- Hoist firmware bit size check (jeremy.linton) +- storage: Add a systemd class for systemd-boot (jeremy.linton) +- bootloader/base.py drop stage2 requirement (jeremy.linton) +- Retranslate welcome screen more simply (vslavik) +- Clean up ISO option in source selection spoke (ozobal) +- Clean up strings in payload tasks (vponcova) +- Clean up tasks for setting up and tearing down sources (vponcova) +- Enable TFTP support (#2071350) (Inperpetuammemoriam) +- Update translations from Weblate + +* Tue Mar 07 2023 Packit - 39.4-1 +- Verify repomd hashes with a task (vponcova) +- WebUI: Give "Quit" button correct margin (ozobal) +- Remove the tx_id functionality (vponcova) +- Don't generate a repository name of the URL source (vponcova) +- Fix translations of the pre-release warning dialog (#2165762) (vponcova) +- Validate the CDN source early (vponcova) +- Add the ValidatePackagesSelectionWithTask DBus method (vponcova) +- Remove the get_base_repo_url method of the TreeInfoMetadata class (vponcova) +- Load treeinfo metadata with the LoadTreeInfoMetadataTask task (vponcova) +- Allow to get the base and root treeinfo repositories (vponcova) +- Create the generate_treeinfo_repository function (vponcova) +- Create the update_treeinfo_repositories function (vponcova) +- password tooltip text adapt language (iasunsea) +- Update translations from Weblate + +* Tue Feb 28 2023 Packit - 39.3-1 +- Add config for Fedora Designsuite (luya) +- docs: Update contrib guide for current branching (vslavik) +- efi: deal with verbose by default output from efibootmgr (marmarek) +- Update translations from Weblate + +* Tue Feb 21 2023 Packit - 39.2-1 +- Add DNS search and ignore options from kickstart (vslavik) +- Adjust templates after F38 branching (mkolman) +- webui: Fix missing space (vslavik) +- Update translations from Weblate + +* Thu Feb 16 2023 Packit - 39.1-1 +- Fix new pylint detections (vslavik) +- Update translations from Weblate + +* Wed Feb 15 2023 Packit - 38.23-1 +- Templatize pykickstart version in dracut code (vslavik) +- Apply --noverifyssl option for liveimg kickstart command (jstodola) +- Update translations from Weblate + +* Tue Feb 14 2023 Packit - 38.22-1 +- Web UI: Make Pre-release label look clickable (ozobal) +- Web UI: Update help in Installation destination (ozobal) +- Be more indulgent when reclaiming disk space (jstodola) +- Update translations from Weblate + +* Tue Feb 07 2023 Packit - 38.21-1 +- Sort RPM versions via rpm.labelCompare() and not via + packaging.version.LegacyVersion() (miro) +- Update translations from Weblate + +* Tue Feb 07 2023 Packit - 38.20-1 +- Add Sericea - ostree based Sway variant (jkonecny) +- Fix the systemd generator for systemd 253 (#2165433) (awilliam) +- WebUI: Updated wizard footer buttons (ozobal) +- Remove the dmraid and nodmraid boot options (vtrefny) +- Update translations from Weblate + +* Tue Jan 31 2023 Packit - 38.19-1 +- Remove mocking of modules for sphinx docs builds (vslavik) +- docs: Update branching instructions (vslavik) +- docs: Fix release badge URL (vslavik) +- Remove leftovers after the isys module removal (vslavik) +- Templatize kickstart version (vslavik) +- Ignore jinja templates in RPM tests (vslavik) +- Show only usable devices in custom partitioning (jstodola) +- Add base for integration testing and default installation test (zveleba) +- Add storage helper function for listing disks (zveleba) +- Add helper for back button to WebUI tests (zveleba) +- Fix missing tests in release archive (marmarek) +- Update translations from Weblate + +* Tue Jan 24 2023 Packit - 38.18-1 +- Extend the DBus API of the DNF module (vponcova) +- webui: Disable check for unexpected SELinux denials (martin) +- Clean up the DNF module (vponcova) +- Update translations from Weblate + +* Thu Jan 19 2023 Packit - 38.17-1 +- Remove the is_complete method of the DNF payload class (vponcova) +- Use another type to make new GCC warnings go away (vslavik) +- Remove outdated GCC error suppression (vslavik) +- Ignore non-quoted array expansion in ShellCheck (vslavik) +- Handle the `repo` kickstart command in the DNF module (vponcova) +- Extend the is_network_required method of the DNF module (vponcova) +- Add the Repositories DBus property to the DNF module (vponcova) +- Fix the check_kickstart_interface testing function (vponcova) +- Always use blivet.arch.is_s390() to detect s390 (vslavik) +- Update translations from Weblate + +* Wed Jan 18 2023 Fedora Release Engineering - 38.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Jan 10 2023 Packit - 38.15-1 +- webui: update obsolete comment (rvykydal) +- webui: pin down tag for fetching cockpit's test library (kkoukiou) +- bootloader/zipl.py: update for zipl >= 2.25.0 (dan) +- docs: Track also automated releases (vslavik) +- shellcheck: Double quote to prevent globbing and word splitting (vponcova) +- Remove the StorageChecker.remove_check method (vponcova) +- Remove the CONNECTION_ACTIVATION_TIMEOUT constant (vponcova) +- Remove the DEFAULT_DBUS_TIMEOUT constant (vponcova) +- GUI: Update the glade file for the Installation Source screen (vponcova) +- Update translations from Weblate + +* Thu Dec 22 2022 Packit - 38.14-1 +- Fix typo in the docs (jkonecny) +- docs: corrections and additions to the history (msw) +- Ignore SIGINT in D-Bus launcher and x11 too (iasunsea) +- update translations + +* Thu Dec 22 2022 Packit - 38.13-1 +- infra: Don't run scheduled events on forks (vslavik) +- infra: Notify about tagged releases in gChat (vslavik) +- infra: bump pylint from 2.15.6 to 2.15.8 in /dockerfile (49699333+dependabot[bot]) +- update translations + +* Tue Dec 06 2022 Packit - 38.12-1 +- Web UI: Tests should ignore the volatile space requirement message (skobyda) +- webui: Upgrade to react 18 and enable the new concurrent renderer (kkoukiou) +- Add a block of history about the name of the installer (dcantrell) + +* Tue Dec 06 2022 Packit - 38.11-1 +- Fix the installation message about the payload installation (vponcova) + +* Mon Nov 28 2022 Packit - 38.10-1 +- infra: Fix the condition for bumping a release version (vponcova) +- infra: Fetch all tags before tagging the release (vponcova) +- Web UI: Add a payload to ks.cfg (ozobal) +- infra: Set up the access token during the code checkout (vponcova) +- infra: Don't release periodically on forks (vponcova) +- Make text in custom_storage_helper more accurate (ozobal) +- test: Update pixel references to current Fedora (martin) +- Fix infobar colors in GTK GUI (ozobal) + +* Wed Nov 16 2022 Packit - 38.9-1 +- Progress step improvements (mkolman) +- makebumpver: Ignore all infra, not just bumps (vslavik) + +* Tue Nov 08 2022 Packit - 38.8-1 +- Web UI: Update language selection screen (ozobal) +- There are no installation targets if bootloader devices are not set (#2131183) (vponcova) +- makebumpver: import bugzilla only if used (vslavik) +- Remove the period at the end of the button caption (bramgn) +- sync_run_task: Poll proxy state faster (vslavik) +- Use more dasbus-ish interface (vslavik) +- Web UI: Redesign language selection screen (ozobal) +- Add GetCommonLocales to API (ozobal) +- network: fix add_connection_sync doc string (rvykydal) +- webui: update pixel tests for "Detect disks" updates (rvykydal) +- webui: Use 'Detect Disks' instead of 'Discover Disks' (rvykydal) +- webui: do not hide checkbox when showing skeleton while rescanning disks (rvykydal) +- Add release notes for Fedora 37 (vponcova) +- driver_updates: migrate driver_updates.py to pep8 format (jkonecny) +- driver_updates: adding tests for the new logging solution (jkonecny) +- driver_updates: add lot of debug logs for easier debugging (jkonecny) +- driver_updates: extend where we print log messages (jkonecny) +- Change screensaver handling to dasbus, drop safe_dbus (vslavik) +- webui: improve formatting of a promise (rvykydal) +- webui: show alert when there are no discovered disks (rvykydal) +- webui: disable bulk selection during disks discovery (rvykydal) +- webui: add tooltip to disks discovery button (rvykydal) +- webui: replace discovery button spinner with skeleton (rvykydal) +- rpm-ostree: set untrusted ostree pull flag (champetier.etienne) + +* Mon Oct 17 2022 Packit - 38.7-1 +- Call date by full path and list it as a dependency (vslavik) +- Remove the isys module and directory (vslavik) +- Move set_system_date_time to pyanaconda.timezone (vslavik) +- Call date instead of settimeofday (vslavik) +- Clean up time-setting (vslavik) +- network: document edge case of resolv.conf missing for %post scripts (#2101527) (rvykydal) +- Revert "webui: start using custom webui-desktop script instead of cockpit-desktop" (rvykydal) +- infra: bump pylint from 2.15.3 to 2.15.4 in /dockerfile (49699333+dependabot[bot]) +- infra: bump astroid from 2.12.10 to 2.12.11 in /dockerfile (49699333+dependabot[bot]) +- network: use separate main conext for NM client in threads (rvykydal) +- Clean up configure and #include (vslavik) +- Remove our custom mock auditd binary (vslavik) +- Turn off audit without our custom binary (vslavik) + +* Mon Oct 10 2022 Packit - 38.6-1 +- Remove bogus dependency on python3-dbus (vslavik) +- Fix a few typos in release document (rvykydal) +- Make driver disk code run only on boot.iso (vslavik) +- Call the Blivet.copy method (vponcova) +- Web UI: Make context help reusable (ozobal) +- Fix Web UI VM startup on F37 (mkolman) +- Don't duplicate dependency on hfsplus-tools (vslavik) +- Move createrepo_c to anaconda-img-deps (vslavik) +- Use faulthandler instead of isys signal handlers (vslavik) +- Fix duplicate alt-D accelerator on root account screen (jeremy.linton) +- Add minimal_memory_needed to hw module (vslavik) +- Use more specific imports in startup_utils (vslavik) +- Use total_memory() from blivet.util instead of ours (vslavik) +- Move storage constraints setting to a helper (vslavik) +- Add tests for is_smt_enabled (vslavik) +- Move some functions from util to hw (vslavik) +- Move memory-related things from isys to new module (vslavik) +- infra: bump pylint from 2.15.2 to 2.15.3 in /dockerfile (49699333+dependabot[bot]) +- infra: bump @patternfly/patternfly from 4.210.2 to 4.215.1 in /ui/webui (49699333+dependabot[bot]) +- Use existing locale in welcome spoke (vslavik) +- Apply geolocation in main process (vslavik) +- infra: bump astroid from 2.12.9 to 2.12.10 in /dockerfile (49699333+dependabot[bot]) +- infra: bump @patternfly/react-core from 4.224.1 to 4.239.0 in /ui/webui (49699333+dependabot[bot]) +- Add back waiting for geolocation (vslavik) +- Add wait_for_task() to wait for a Task with timeout (vslavik) +- dracut: handle compressed kernel modules (m.novosyolov) + +* Mon Sep 19 2022 Packit - 38.5-1 +- Do not require the anaconda-webui package (mkolman) +- Document how to fix NPM cache issues in Cockpit CI (mkolman) +- Use correct hint for VNC password boot option (jstodola) +- infra: Use the Bugzilla API key in the `makebumpver` script (vponcova) +- Drop the devel branch from the docs (mkolman) +- gui: fix summary hub layout for Japanese translations (rvykydal) +- Improve Register button click feedback (mkolman) + +* Tue Sep 06 2022 Packit - 38.4-1 +- Run yelp under liveuser if possible (vslavik) +- infra: bump astroid from 2.12.5 to 2.12.6 in /dockerfile (49699333+dependabot[bot]) +- Disable the Unregister button during unregistration (mkolman) +- Update outdated system purpose related strings (mkolman) +- Always set system purpose from GUI (mkolman) +- Report registration errors from kickstart (mkolman) +- Do not pass rd.znet on to installed system unconditionally (jstodola) +- Ignore dependabot commits in changelog (vslavik) +- infra: bump @patternfly/patternfly from 4.206.3 to 4.210.2 in /ui/webui (49699333+dependabot[bot]) +- Web UI: Increase visibility of warning messages (ozobal) +- Drop packit override for webui package build (mkolman) +- Create the LVM devices file, if supported (vslavik) +- Remove unused import that snuck in somehow (vslavik) +- Bump SshKeyData version (vslavik) +- Bump pykickstart version for F38_AutoPart (vslavik) +- Document the automated Anaconda package release process (mkolman) +- Web UI: for disks selection show empty label rather than '0 selected' (rvykydal) +- Web UI: use toolbox in disk selection (rvykydal) +- Web UI: Show the help drawer next to content (ozobal) +- Silence pylint warnings in webui code (vslavik) +- Remove execInSysroot (vslavik) + +* Tue Aug 30 2022 Packit - 38.3-1 +- Add --hibernation option for Kickstart autopart (ozobal) +- Docs: How to run non-unit tests in CI standalone (#docs) (vslavik) +- Define more macros for cppcheck (vslavik) +- Infra templating script improvements (vslavik) +- infra: bump @patternfly/patternfly from 4.202.1 to 4.206.3 in /ui/webui (49699333+dependabot[bot]) +- webui: clean up prepare-updates-img (allison.karlitskaya) +- Adjust dependencies of the anaconda-webui package (mkolman) +- test: Update to cockpit 275 (allison.karlitskaya) +- Add test for dracut_eject (vslavik) +- Add test for ipmi_abort (vslavik) +- Add test for ipmi_report (vslavik) +- Simplify test_detect_virtualized_platform (vslavik) +- Rewrite test_vt_activate to use patch (vslavik) +- webui: build RPMs inside the fedora-37 image (allison.karlitskaya) +- Web UI: update target name in test documentation (rvykydal) +- Verify a biosboot partition on all installation targets (vponcova) +- Define the install_targets property for all bootloader classes (vponcova) +- Test the InstallerStorage.copy method (vponcova) +- Show multiple bootloader devices on the Manual Partitioning screen (vponcova) +- Implement the Root.copy method (vponcova) +- Redefine the Blivet.roots attribute (vponcova) +- Redefine the Blivet.copy method (vponcova) +- Add infrastructure templating tools (ozobal) + +* Fri Aug 19 2022 Packit - 38.2-1 +- Fix building for RHEL/ELN without live installer (sgallagh) +- Remove the SimpleConfigFile class (vponcova) +- Don't use the SimpleConfigFile class (vponcova) +- Add a function for splitting values into two strings (vponcova) +- Move DNF code from the payload manager to the DNF payload (vponcova) +- Remove the restart_thread method of the payload manager (vponcova) +- Simplify the implementation of the payload manager (vponcova) +- Remove error messages from the payload manager (vponcova) +- Keep the "Setting up installation source..." message in a new constant (vponcova) +- Remove the WAITING_NETWORK state of the payload manager (vponcova) +- Remove the VERIFYING_AVAILABILITY state of the payload manager (vponcova) + +* Mon Aug 15 2022 Packit - 38.1-1 +- Remove release builds from CI status page (#docs) (vslavik) +- Update the tests for the SELinux configuration (vponcova) +- Add release notes for RPMOSTree /sysroot mount as 'ro' (jkonecny) +- Documented required space always including swap (ozobal) +- Remove the DeprecatedSection class (vponcova) +- Remove the sensitive info logger (vponcova) +- Remove the _repos_lock property of the DNF payload class (vponcova) +- Remove the function get_locale_timezones (vponcova) +- Remove the THREAD_GEOLOCATION_REFRESH constant (vponcova) +- Add release notes for f37 vslavik PRs (#docs) (vslavik) +- Do not provide the anaconda-live subpackage on RHEL (vslavik) +- Add release note for no more copying /etc/resolv.conf (rvykydal) +- Add release note for rootpw --allow-ssh option (rvykydal) +- Fix growing installation size requirement (ozobal) +- Add a release note for the `inst.disklabel` boot option (vponcova) +- Add unit tests for the initialization of the default disk label type (vponcova) +- Prefer GPT instead of legacy MBR (vponcova) +- Support the `inst.disklabel` boot option (vponcova) +- Skip Kickstart version tests on RHEL (ozobal) +- Add unit tests for errors raised by the `ZFCPDiscoverTask` task (vponcova) +- rpm-ostree: Setup readonly sysroot for ostree & rw karg (#2086489) (tim) +- Document the Dependabot status (vponcova) +- Initialize empty disks on the Manual Partitioning screen (vponcova) +- Revert "Temporarily ignore the new version of the zfcp command" (jstodola) +- Revert "Ignore also ZFCPData temporarily" (jstodola) +- Allow to omit WWPN and LUN for NPIV-enabled zFCP devices (jstodola) +- Reduce the width of the zFCP dialog (jstodola) + +* Tue Aug 02 2022 Packit - 37.12-1 +- Web UI: Replace a newly translated string in tests (vponcova) +- Communicate media verification result clearly (vslavik) +- Fix: check that the password contains the username (songmingliang) +- Fixed required space check always including swap (ozobal) +- Hide the keyboard layout indicator in the passphrase dialog (#2070823) (vponcova) +- Call the check_duplicate_repo_names function (vponcova) +- Call the validate_repo_name function (vponcova) +- Call the get_unique_repo_name function (vponcova) +- Simplify the condition for the `disk_space` parameter in `suggest_swap_size` (vponcova) +- Remove the `quiet` parameter of the `suggest_swap_size` function (vponcova) +- Test the `suggest_swap_size` function (vponcova) +- Web UI: Don't wait for animations in the pixel tests (vponcova) +- Web UI: Show a context help about storage options (vponcova) +- Silence pylint warnings about crypt module (vslavik) +- Ignore no-member pylint detections on gi.repository (vslavik) +- Revert "Disable Pylint" (vslavik) +- bootloader/base.py: enable resume on arm64 (mihai.carabas) +- Disable kexec on RISC-V (imbearchild) +- simplify TestValues enum creation and usage (ethan) +- Disable Pylint (vslavik) +- Fix unit tests for python 3.11 (vslavik) +- Change the Python version to 3.11 in the makeupdates script (rvykydal) +- bootloader: do not consider non-ibft iscsi disk as usable for bootloader (rvykydal) +- Revert "Temporarily keep setter methods for Initial Setup" (vponcova) +- Revert "Temporarily keep setter methods for the Kdump add-on" (vponcova) +- Change default swap size for large-memory systems (pablomh) + +* Wed Jul 20 2022 Fedora Release Engineering - 37.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 27 2022 Packit - 37.11-1 +- anaconda-modprobe: don't try and load cramfs (awilliam) +- module-setup.sh: Don't ignore errors, unbound variable and pipe fails (miro) +- Don't attempt to add frozen python modules to initramfs (miro) +- Fix kickstart command order in new version (vslavik) +- Ignore also ZFCPData temporarily (vslavik) +- Temporarily ignore the new version of the zfcp command (vponcova) +- Web UI: Fix betanag popover position (mkolman) +- Web UI: Make it possible to close the disks alert (mkolman) +- tests: update the order of commands (rootpw) in generated kickstart (rvykydal) +- webui: Disable "Next" button if no disks are selected (mkolman) +- dnf: apply the /etc/dnf/dnf.conf configuration file in the installer (rvykydal) +- kstests on pr: run in separate anaconda directory (rvykydal) +- Web UI: Show the "Checking disks" spinner for at least two seconds (vponcova) +- Web UI: Show the "Checking disks" spinner (vponcova) +- kstest on pr: use Permian GitHub ReportSender to show results (rvykydal) +- Web UI: Vertically grow the wizard page (vponcova) +- Web UI: Hide the footer if the wizard page is in progress (vponcova) +- Web UI: Add the sleep function (vponcova) +- Web UI: Remove the getSteps function (vponcova) +- Web UI: Remove the wrapWithContext function (vponcova) +- Add Circle Linux profile to Anaconda (bella) +- Web UI: Don't try to replicate installation flags (vponcova) +- Web UI: Remove an unused context from the wizard (vponcova) +- Update pixel test reference image. (mkolman) +- fix type (48353898+copperii) +- Display keyboard accelerator properly (jstodola) +- Revert "Temporarily keep setter methods for the OSCAP add-on" (vponcova) +- Remove missing kickstart command for root ssh password login from common issues (rvykydal) +- GUI: Show the dialog for a missing passphrase in an enlight box (vponcova) +- GUI: Ask for a missing passphrase during automated installations (vponcova) +- Create functions for a missing passphrase in pyanaconda.ui.lib (vponcova) +- Add support for rootpw --allow-ssh (rvykydal) +- Enable bootloader hiding on RHEL (rharwood) + +* Tue Jun 21 2022 Adam Williamson - 37.10-3 +- Backport PR #4207 to fix initramfs generation for Python 3.11 + +* Mon Jun 13 2022 Python Maint - 37.10-2 +- Rebuilt for Python 3.11 + +* Mon Jun 06 2022 Packit - 37.10-1 +- Web UI: Don't use a top-level text content (vponcova) +- Update common bugs for F35 resolv.conf issue (rvykydal) +- Check if run as root earlier (#1935470) (luke) +- kstests on PR: adapt to tclib renamig to tplib (rvykydal) +- Add 'eln-baseos' to the DEFAULT_REPOS (sgallagh) +- Web UI: Jump only to the previous wizard steps (vponcova) +- Always tear down devices after finding existing installations (vponcova) +- Update reference images (vslavik) +- Change kstest workflow badge and link for Permian (#docs) (vslavik) +- Fix tests README.rst how to run one unit test (jkonecny) +- kstests on PR: Use stable permian branch (rvykydal) +- Don't fall back to default timezone in welcome spoke (vslavik) +- Use directly URLs in conf geoloc provider field (vslavik) +- Remove unmodularized geolocation (vslavik) +- Use modularized geolocation instead of unmodularized (vslavik) +- Hide the geolocation task in Timezone's interface (vslavik) +- Add GeolocationTask to the Timezone module (vslavik) +- Add a D-Bus structure for geolocation data (vslavik) +- Add conf option for geolocation provider (vslavik) +- Run FixZIPLBootloader task after FIPS setup (rvykydal) +- webui: Make app/page span the whole viewport (vslavik) +- Web UI: Automatically change the popover position (vponcova) +- webui: Add inline alert to the Storage screen (mkolman) +- Web UI: Always allow to sort disks by their name (vponcova) +- Web UI: Improve the table for local standard disks (vponcova) +- Add missing period when concatenating password error strings (#2075419) (jkonecny) +- Prepare release notes for Fedora 36 (vponcova) +- Add tooltip to the Insights checkbox (#2069178) (jkonecny) +- Enable bootloader hiding on RHEL (rharwood) + +* Tue May 24 2022 Packit - 37.9-1 +- Use the IsRootAccountLocked property (vponcova) +- Web UI: Fix strings (vponcova) + +* Mon May 23 2022 Packit - 37.8-1 +- Web UI: Add the Language label on the Welcome page (vponcova) +- Specify that we want the Adwaita icon theme (awilliam) +- Web UI: Fix the style of paragraphs (vponcova) +- Web UI: Fix header styles in the Review screen (vponcova) +- Web UI: Inform users about the required space and the partitioning method (vponcova) +- Round the required device size up (vponcova) +- tests: Use MD instead of LVM to test available RAID levels (vtrefny) +- webui: Show installation status text on progress screen (mkolman) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- webui: Wait longer for installation to fail (mkolman) +- webui: Add a Quit confirmation dialog (mkolman) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- Don't use Cockpit style overrides (vponcova) +- Web UI: Reset the bootloader drive before we schedule partitions (vponcova) +- webui: tests: Streamline working with dbus language setting (zveleba) +- Make check for geolocation start a standalone helper (vslavik) +- Split Timezone module tests for tasks to new file (vslavik) +- Move the default source type on DBus (vponcova) +- Temporarily keep setter methods for Initial Setup (vponcova) +- Temporarily keep setter methods for the OSCAP add-on (vponcova) +- Temporarily keep setter methods for the Kdump add-on (vponcova) +- Use DBus read-write properties (vponcova) +- Simplify the implementation for the DBus interface for Users module (vponcova) +- Install rdma-core if infiniband network device is found (rvykydal) + +* Thu May 19 2022 Adam Williamson - 37.7-2 +- Backport PR #4125 to fix icon theme problems on KDE + +* Mon May 09 2022 Packit - 37.7-1 +- Remove the is_repo_enabled method (vponcova) +- Fix too long lines in the Network spoke (vponcova) +- Rename the checkmount argument (vponcova) +- Rename the onlyOnChange argument (vponcova) +- Run an installation task to close the DNF base (vponcova) +- Close the DNF base during the reset (vponcova) +- Move isIsoImage to the Payloads module (vponcova) +- Move find_first_iso_image to the Payloads module (vponcova) +- Move helper functions for HDISO sources to pyanaconda.ui.lib (vponcova) +- Keep Timezone proxy in Welcome spoke (vslavik) +- Split starting locales in welcome spoke to a helper (vslavik) +- Rename constant to reflect its usage (vslavik) +- makeupdates: Don't be silent about copying anaconda.py (vslavik) +- Remove the get_mount_points function (vponcova) +- Remove PayloadError (vponcova) +- Remove PayloadInstallError (vponcova) +- Remove PayloadSetupError (vponcova) +- (build-deps): Update misc. npm packages (vslavik) +- (build-deps): Update chrome-remote-interface npm package (vslavik) +- (build-deps): Update sass npm packages (vslavik) +- (build-deps): Update patternfly npm packages (vslavik) +- (build-deps): Update eslint npm packages (vslavik) +- (build-deps): Update webpack and plugin npm packages (vslavik) +- (deps-dev): Update babel npm packages (vslavik) +- Add the UpdatesEnabled DBus property (vponcova) +- webui: tests: Add cleanup to TestLanguage to make it non-destructive (zveleba) +- webui: tests: Change handling of steps and hide selectors in methods (zveleba) +- Remove the _configure method (vponcova) +- webui: Document how to fix failing pixel tests (mkolman) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- Remove the unused _set_repo_enabled method (vponcova) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- Don't continue if there is no valid base source to use (vponcova) +- Clean up the code that includes additional repositories (vponcova) +- Split the code for the installation source spoke (vponcova) +- Remove ancient file (vslavik) +- Convert additional space checkbox to use child label (vslavik) +- Indent everything on root spoke by 4px (vslavik) +- Set correct focused widget for root spoke (vslavik) +- Add eslint as an unit test for webui (vslavik) +- Run eslint only in dev builds or when requested (vslavik) +- Run restorecon in chroot when handling home dirs (vslavik) +- Move restorecon calls in Tasks to a helper function (vslavik) +- Add Virtuozzo Linux profile to Anaconda, Resolves: rhbz#2067195 (dsilakov) +- webui: Don't check SSH key in command from VM script (vslavik) + +* Mon Apr 25 2022 Packit - 37.6-1 +- Map Anaconda exceptions to org.fedoraproject.Anaconda.Error (vponcova) +- Use our error mapper only for the Anaconda message bus (vponcova) +- Clean up the code that adds a base repository (vponcova) +- Remove dependency on eslint-plugin-standard (vslavik) +- webui - Fix pixel test failure due to string being translated (mkolman) +- Call join_paths to create an absolute path (vponcova) +- Document why the DNF transaction runs in a sub-process (vponcova) +- Correct message when ignoring hibernation flag (jblz) +- Clean up the code that reloads the treeinfo metadata (vponcova) +- Don't add treeinfo repositories to DNF twice (vponcova) +- Clean up the code for removal of treeinfo repositories (vponcova) +- Clean up the code that generates treeinfo repositories (vponcova) +- Distinguish URLs from paths in the treeinfo support (vponcova) +- Improve logic of the keyboard spoke completed method (jkonecny) +- webui: tests: Add function for checking pre-release information (zveleba) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- webui: tests: Make it easier to reset partitioning (zveleba) +- webui: tests: increase abstraction of changing pages in the wizard (zveleba) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- webui: Update READMEs (mmarusak) +- Don't unnecessarily use cat and use grep -E (oguz) + +* Tue Apr 12 2022 Packit - 37.5-1 +- Fix keyboard spoke issue if Live system changed keyboard layouts (#2072941) (jkonecny) +- webui: tests: update reference image for the languate test (kkoukiou) +- webui: fix typo in progress page (oguz) +- webui: Update pixel test reference (mkolman) +- webui: use className for customizing CSS not an ID (kkoukiou) +- webui: be more specific in the custom CSS selectors for the progress stepper (kkoukiou) +- webui: remove unused custom CSS for the progress bar component (kkoukiou) +- webui: show all installation logs in a LogViewer component (kkoukiou) +- webui: Use ProgressStepper on the installation progress screen (mkolman) +- webui: update welcome page title text (kkoukiou) +- webui: improve documentation and add makefile target for updating reference images (kkoukiou) +- webui: tests: make sure TestReview cleans up its changes (kkoukiou) +- webui: tests: extend storage test to validate the disk table rows content (kkoukiou) +- webui: tests: add a test for backend language being initially not english (kkoukiou) +- webui: add a basic check that the webui strings get translated (kkoukiou) +- webui: fix case where the default language is not english (kkoukiou) +- webui: set modules locale for translating messages from the backend (kkoukiou) +- webui: Also filter languages by English names (mmarusak) +- Don't set LC_ALL for live installations (vponcova) +- Don't set the global domain to `anaconda` (vponcova) +- webui: Support other rsync targets (martin) +- webui: tests: Wait for UI initialization in Installer.open() (martin) +- webui: tests: Simplify check-basic (martin) +- webui: fix typo in the review configuration disk table (kkoukiou) +- webui: tests: ignore the labels (PF4 Labels) when pixel testing (kkoukiou) +- webui: tests: introduce some pixel tests (kkoukiou) +- Don't log the output of journalctl -b (vponcova) +- webui: tests: add missing machine_class to the check-language (kkoukiou) +- webui: tests: use the prefixes of the ids from variables (kkoukiou) +- webui: tests: ignore test/images symlink needed for the tests (kkoukiou) +- webui: standardize the naming of the ids and classNames (kkoukiou) +- webui: bring some order to the react components folder (kkoukiou) +- Fix unit tests of the treeinfo support (vponcova) +- Rename the `path` property of the TreeInfoRepoMetadata class (vponcova) +- Log info about loaded .treeinfo files (vponcova) +- Use the origin to handle system repositories (vponcova) +- Add the `origin` attribute to the repo configuration data (vponcova) +- webui: setup pixel tests submodule (kkoukiou) +- webui: tests: add teardown cleanup resetting the language to english (kkoukiou) +- webui: tests: standardize test file names by removing -installation- substring (kkoukiou) +- webui: port review screen confirmation from checkbox to modal dialog (kkoukiou) +- Bump Cockpit version of testlib to 266 (vslavik) +- webui: default language should be fetched from anaconda backend (kkoukiou) +- webui: add support for disabling Next button if form is invalid (kkoukiou) +- webui: pass translated string for 'No results found' text (kkoukiou) +- webui: move language setting of cookies and backend (kkoukiou) +- webui: menuAppendTo can be a property of Select component from Patternfly (kkoukiou) +- webui: remove undefined property from InstallationLanguage component (kkoukiou) +- webui: create helpers for language conversion from and to cockpit lang cookie (kkoukiou) +- webui: set language also in backend when selecting a new language (kkoukiou) +- webui: tests: use id instead of contains: for the Quit button test selector (kkoukiou) +- webui: tests: add a test for the Quit button (kkoukiou) +- webui: if the file is empty don't try to parse it (kkoukiou) +- webui: adjust error message to make it unique and matching the actual problem (kkoukiou) +- webui: remove unused parameter from conf.js helper function (kkoukiou) +- webui: parsing the files for the initialization can be done in parallel (kkoukiou) +- webui: fix 'Reboot' and 'Quit' button callbacks (kkoukiou) +- webui: Make it possible to go back to language selection screen (mkolman) +- webui: Add Review screen implementation (mkolman) +- webui: add support for re-scanning disks (kkoukiou) +- webui: Add API for selected disks access (mkolman) +- webui: Add API for target system language access (mkolman) +- webui: add title and icon to the empty-state component in the installation progress (kkoukiou) +- webui: tests: create some helper test classes (kkoukiou) +- Mark error message for missing usable disks for partitioning as translatable (kkoukiou) +- Don't re-enable repositories (vponcova) +- Use the disabled_repositories configuration option (vponcova) +- Add the get_matching_repositories method (vponcova) +- Manage the system repositories with DNF manager (vponcova) +- Remove the _reset_configuration method of the DNF payload class (vponcova) +- webui: show empty state loading variant if the API is still fetching data (kkoukiou) +- webui: storage: if more than 10 disks are present change the table to compact (kkoukiou) +- webui: storage: only show sortable columns if more than one disks exist (kkoukiou) +- webui: allow passing different label for the wizard nav item and the step title (kkoukiou) +- webui: rephrase the welcome screen label for the language selector (kkoukiou) +- Add Release Notes for keyboard configuration split on Live (#2016613) (jkonecny) +- Enable fingerprint authentication using enable-feature (#2069899) (vponcova) +- webui: Close installer to quit/reboot/finish (vslavik) +- webui: Increase size of VM disk for interactive work (vslavik) +- webui: Don't use inst.nokill for testing VMs (vslavik) +- webui: Save webui wrapper script PID (vslavik) +- Fix the documentation of the languages attribute in packages configuration (vponcova) +- webui: expose webui.remote boot option (kkoukiou) +- Clean up pyanaconda.payload.utils (vponcova) +- Clean up the RepoData class (vponcova) +- Use a task to set up an additional HDD repository (vponcova) +- Add the parse_hdd_url function (vponcova) +- Improve the recommendation from the swap verification check (vponcova) +- Improve the error message from the OPAL compatibility check (vponcova) +- webui: Test both betanag states (vslavik) + +* Mon Mar 28 2022 Packit Service - 37.4-1 +- Remove the unused _noop method (vponcova) +- Fix failing pylint check. (rvykydal) +- Use a task to set up an additional NFS repository (vponcova) +- Parse both formats of the NFS repositories (vponcova) +- webui: start using custom webui-desktop script instead of cockpit-desktop (kkoukiou) +- ShellCheck: Quote also variables inside ${...} (vslavik) +- Move the validation of system repositories (vponcova) +- Always load new enabled repositories to check their validity (vponcova) +- Don't allow to load metadata of a disabled repository (vponcova) +- Remove the _add_repo_to_dnf_and_ks method of the DNF payload class (vponcova) +- Use the DNF manager to load all enabled repositories (vponcova) +- Add the load_packages_metadata method to the DNF manager (vponcova) +- Extend the DBus documentation of the Storage module (vponcova) +- webui: add helper text in the installation destination step (kkoukiou) +- webui: adapt the wizard body headers and other captions to the design mockups (kkoukiou) +- webui: move installation destination step to ListingTable component (kkoukiou) +- Clarify which Anaconda profile is used by CentOS Stream (vponcova) +- webui: prefer constant variable when possible (kkoukiou) +- webui: bring some order to the imports (kkoukiou) +- webui: move wizard code out of app.jsx to a new file (kkoukiou) +- webui: stop using titleId without a title (kkoukiou) +- webui: keep a list of visited pages for deciding which nav items are enabled (kkoukiou) +- webui: stop passing 'address' variable to the Footer component (kkoukiou) +- webui: tests: do not start the installation in non-destructive tests (kkoukiou) +- webui: convert wizard to in-page and add a betanag label (kkoukiou) +- Add the generate_driver_disk_repositories function (vponcova) +- Split some code from the update_base_repo method (vponcova) +- Handle the inst.addrepo option in the DNF payload class (vponcova) +- Remove the additional_repos attribute of the Anaconda class (vponcova) +- Parse the inst.addrepo option using argparser (vponcova) +- gui: update network spoke for symbolic icons (#2055883) (rvykydal) +- gui: update beta-nag dialog for symbolic icons (#2055883) (rvykydal) +- gui: update Quit dialog for symbolic icons (#2055883) (rvykydal) +- Add the --ignore-broken test again (vponcova) +- Remove --ignore-broken test (#test) (jkonecny) +- webui: add support for in form error notifications per step (kkoukiou) +- webui: introduce a custom Footer component for the Wizard (kkoukiou) +- webui: introduce some logic for which steps the users can access (kkoukiou) +- webui: Get method call on the Properties interface always wraps results in arrays (kkoukiou) +- webui: move dbus client declarations to singleton classes (kkoukiou) +- webui: fix progress reporting in the InstallationProgress component (kkoukiou) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- Document inst.net.noautodefault option (rvykydal) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- Add scripts for anaconda services to updates image (rvykydal) +- Add inst.net.noautodefault option do disable NM default autocons (#2033231) (rvykydal) +- Disable NM autoconnections in Anaconda (rvykydal) + +* Tue Mar 15 2022 Packit Service - 37.3-1 +- Increase version of the anaconda-widgets (jkonecny) +- Disable layout_indicator in Anaconda (jkonecny) +- Don't configure the keyboard in Live environments with XWayland (jkonecny) +- webui: tests: check-installation-progress tests are not non-destructive (kkoukiou) +- tests: webui: ensure that installation reaches boot-loader step and fails (kkoukiou) +- webui: storage configuration: show only usable disks in the table (kkoukiou) +- webui: set default storage configuration in the JS code (kkoukiou) +- webui: move localization apis to 'apis' folder (kkoukiou) +- webui: move installation apis to 'apis' folder (kkoukiou) +- webui: pass up to the component tree a hander for showing errors in the UI (kkoukiou) +- webui: move react components to a new `components` folders (kkoukiou) +- webui: rewrite language selection component to a class component (kkoukiou) +- network: Handle network configuration paths not existing (awilliam) +- webui: webpack: process all assets when compressing (kkoukiou) +- Change pylint ignore from number to name (vslavik) +- Remove RpmDb-related setup in OSTree payloads (vslavik) +- pylint: Survive scanning broken symlinks (vslavik) +- pylint: Don't read whole files to check hashbangs (vslavik) +- pylint: Ignore checkouts of cockpit repos (vslavik) +- pylint: Simplify skipping already detected paths (vslavik) +- webui: move to a wizard based design implementation (mkolman) +- Do not crash on network --device link with wireless device (#2051235) (rvykydal) +- Remove the decorated_window conf option (vslavik) +- packit: build SRPM in Copr (ttomecek) +- Use the latest Read the Docs theme (vponcova) +- Change the example bug related to unlocked LUKS devices (vponcova) +- webui: read conf from installation environment (vslavik) + +* Tue Mar 08 2022 Adam Williamson - 37.2-2 +- Backport PR#3935 to fix live installs + +* Tue Mar 08 2022 Packit Service - 37.2-1 +- Fix Makefile targets using L10N Makefile variables (jkonecny) +- Remove the blivet_gui_supported configuration option (vponcova) +- webui: tests: move journal parsing for waiting for webui initialization to the VM creation script (kkoukiou) +- webui: tests: move cockpit-ws spawning to the machine_install script instead of the ks file (kkoukiou) +- webui: tests: workaround cockpit's expectation for test/images directory (kkoukiou) +- webui: first pass on the installation progress component (kkoukiou) +- webui: tests: add payload workaround for the webui tests (kkoukiou) +- webui: add notification component at top level (kkoukiou) +- Set up basic error handling for the Web UI (vponcova) +- Provide defaults for the Web UI installation (vponcova) +- webui: tests: wait for the webui initialiation to have finishes before running the tests (kkoukiou) +- Always request localization files during build (jkonecny) +- Collect PO files names dynamically (jkonecny) +- Move the po files download to the `make` call (jkonecny) +- webui: tests: actually boot into the webui mode (kkoukiou) +- webui: tests: ignore output when running commands in the ks file (kkoukiou) +- Remove the enable_ignore_broken_packages configuration option (vponcova) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- tests: webui: Increate timeout for accessible webui to 5 minutes (kkoukiou) +- Replace one more icon after removal from adwaita (#2055883) (jkonecny) +- Allow to run an incomplete installation via DBus (vponcova) +- Remove ksdata from migrated payload classes (vponcova) +- Remove progressQ (vponcova) +- Don't use progressQ in GUI (vponcova) +- Don't use progressQ in TUI (vponcova) +- Don't use progressQ in the installation queue (vponcova) +- Update accordion.py (76429226+layne-yang) +- Replace legacy adwaita icons removed in adwaita-icon-theme 42 (awilliam) +- Update the .coveragerc file (vponcova) +- webui: Pin eslint-plugin-react to the last non broken release (kkoukiou) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- ovirt: move /var/tmp to its own partition (sbonazzo) +- webui: Don't save SSH key in command from VM script (vslavik) +- docs: add intructions to the on-duty team member for handling failing image refreshes for webui tests (kkoukiou) +- Add a release note for removed undocumented and unused scripts (vponcova) +- Remove the /usr/bin/analog script (vponcova) +- Remove the /usr/bin/restart-anaconda script (vponcova) +- Improve the documentation of the run-anaconda script (vponcova) +- Don't report the name of the DBus task by default (vponcova) +- webui: Use grouped typeahead for the language selector (kkoukiou) +- webui: consume real data in the language selection dialog from the API (kkoukiou) +- Introduce GetLanguages, GetLanguageData, GetLocales, GetLocaleData methods on the Localization interface (kkoukiou) +- Add note to branching guide to look on pykickstart issues (#docs) (jkonecny) +- Fixed the translation not taking effect (yangxiaoxuan) + +* Mon Feb 21 2022 Packit Service - 37.1-1 +- webui: checkout last release instead of main for cockpit's test library (kkoukiou) +- Do not modify boot order on UEFI if asked (vslavik) +- webui: use test images from the cockpit's image store (kkoukiou) +- webui: tests: use python3, python is not a thing in Cockpit's test container anymore (kkoukiou) +- Remove RPM database cleanup (vslavik) +- Add all fields to PartSpec's string representation (vslavik) +- Add __repr__ to PartSpec (vslavik) +- UX: clarify meaning of "additional space" checkbox (hexagon-recursion) +- Create /var subvolume on Fedora Kinoite and Silverblue (cmurf) +- Remove misleading warning about inst.ks.device replacing ksdevice (rvykydal) +- Remove the support for detection of unsupported hardware (vponcova) +- Revert "Ignore webui specific parts in the rpm-test" (kkoukiou) +- webui: Add mising MAINTAINERCLEANFILES in Makefile.am (kkoukiou) +- webui: install eslint-config-standard-jsx to align with what starter-kit [1] does (kkoukiou) +- build(deps): bump @patternfly/patternfly in /ui/webui (49699333+dependabot[bot]) +- Remove webui kernel boot argument support (jkonecny) +- Ignore deps-dev commits by dependabot (vslavik) +- Remove web UI from spec file on Fedora 36 (jkonecny) +- Remove npm dependencies from the containers (jkonecny) +- Remove webui code from the Fedora 36 (jkonecny) +- build(deps): bump @patternfly/react-core in /ui/webui (49699333+dependabot[bot]) +- Restore contexts also in /usr/lib (vslavik) +- ci: rpm: install older rpm version in the container (kkoukiou) +- po: limit threads used by libgomp when building the merged translation files (kkoukiou) +- Reset the password if the root account is disabled (vponcova) +- Fix the status of the root configuration screen (vponcova) +- Fix the condition for entering the root configuration (vponcova) +- Move tests for pyanaconda.ui.lib.users to a new file (vponcova) +- Revert "Show correctly that no admin user is set up" (vponcova) +- Remove the make-sphinx-docs script (vponcova) +- Remove the list-screens script (vponcova) +- Remove the anaconda-read-journal script (vponcova) +- Remove the run_boss_locally.py script (vponcova) +- Improve the indentation in pyanaconda.installation (vponcova) +- Translate strings when we create the installation queue (vponcova) +- Create a task for running the current installation queue (vponcova) +- webui: tests: update README file (kkoukiou) +- webui: tests: add support for destructive tests (kkoukiou) +- Don't use progressQ in tasks of the installation queue (vponcova) +- Do not fail on nonexistent fs nodes in pstore (vslavik) +- dockerfile: stop specifying nodejs stream explicitely (kkoukiou) +- Support Btrfs-only mount points in the default partitioning (vponcova) +- Use a task to write repositories on the target system (vponcova) +- Revert "Adjust configuration options for Fedora 36" (jkonecny) +- dockerfile: ci: rpm: install nodejs instead of NPM directly (kkoukiou) +- Do not copy resolv.conf to target system at the end of installation (rvykydal) +- Do not copy /etc/resolv.conf to chroot before installation (rvykydal) +- Clean up pyanaconda.installation_tasks (vponcova) +- Extend the unit tests for the Flatpak manager (vponcova) +- Don't use progressQ in the payload classes (vponcova) +- Don't use progressQ in the DNF payload class (vponcova) +- Simplify the error message about a failed Flatpak operation (vponcova) +- Don't use progressQ in the Flatpak manager (vponcova) +- spec: Add dependency on libblockdev-lvm-dbus to install-env-deps (vtrefny) +- webui: users: do not try to use the proxy before it's ready (kkoukiou) +- Add documentation of how to fix our CI (jkonecny) +- Move save_hw_clock method to a D-Bus configuration task (kkoukiou) +- Remove the InstallRepoEnabled DBus property (vponcova) +- Add the `installation_enabled` attribute to the repository configuration data (vponcova) +- Document how to enable Cockpit CI for Fedora branches (mkolman) +- Update branching docs (mkolman) +- Reset the password if the root account is disabled (vponcova) +- Fix the status of the root configuration screen (vponcova) +- Fix the condition for entering the root configuration (vponcova) +- Move tests for pyanaconda.ui.lib.users to a new file (vponcova) +- Revert "Show correctly that no admin user is set up" (vponcova) +- Remove the WriteResolvConfTask class (vponcova) +- Clean up the code for including Web UI in an updates image (vponcova) +- Adjust configuration options for Fedora 36 (mkolman) +- build: Remove make as part of run-build-and-arg script (kkoukiou) +- spec: list webui language translation files into the RPM (kkoukiou) +- po: don't translate the externally fetched pkg/lib content for now (kkoukiou) +- webui: po: cockpit-po-plugin expects that translations are from the current directory (kkoukiou) +- po: add hack to workaround semicolon bug (kkoukiou) +- po: stop using --use-fist when creating the anaconda.pot file (kkoukiou) +- po: start translating webui files (jsx) and add support for cockpit translation functions (kkoukiou) +- webui: eslint: let's always prefer double quotes since cockpit localization needs it (kkoukiou) +- webui: start translating some strings (kkoukiou) +- Test a recreation of the same thread (vponcova) +- Add the `enabled` attribute to the repository configuration data (vponcova) + +* Wed Jan 26 2022 Packit Service - 36.16-1 +- packit: release: unset use_cockpit by sedding the specfile in packit script (kkoukiou) +- webui: parameterize ports for ssh, cockpit connection and http server (kkoukiou) +- Use systemd-resolved in installer environment. (rvykydal) +- webui: tests: add info on how to run these in a toolbox (#docs) (kkoukiou) +- npm: Lock mini-css-extract-plugin at version 2.4.5 (kkoukiou) +- pyanaconda: fix webui directory in Makefile (kkoukiou) +- webui: Fix test/README tip (kkoukiou) +- webui: makeupdates: file expected path (kkoukiou) +- webui: Fix some pylint errors in the tests code (kkoukiou) +- webui: Reorganize new webui code into different directories (kkoukiou) +- webui: add usage of the timedatectl ServerTime wrapper (kkoukiou) +- webui: introduce new watch and rsync makefile targets (kkoukiou) +- webui: setup subdirectories for the different components (kkoukiou) +- webui: show device selection list for partitioning (kkoukiou) +- webui: sync Makefile with starter kit makefile regarding updating package.json (kkoukiou) +- webui: Introduce template react components for all configuration subpages (kkoukiou) +- test: Bring new cockpit based WebUI tests to the CI (kkoukiou) +- webui: change format of the README files for consistency (kkoukiou) +- webui: Introduce base functionality for automated testing (kkoukiou) +- webui: Add target for fetching cockpit's testing library in anaconda-webui Makefile (kkoukiou) +- Ignore webui specific parts in the rpm-test (jkonecny) +- Ignore npm packages files for translation (jkonecny) +- Add npm and git dependencies to the ci and rpm containers (kkoukiou) +- Build and install webui also through autotools (kkoukiou) +- webui: strip down eslintrc ignore rules to only the rules that really don't make sense (kkoukiou) +- webui: enforce the consistent use of either double or single quotes (kkoukiou) +- webui: add simple example of using the dbus API for reading and writing properties (kkoukiou) +- Make the makeupdates script Web UI aware (kkoukiou) +- Build and include the cockpit tar into the anaconda spec file (kkoukiou) +- Introduce webui plugin base code (kkoukiou) +- Initial Web UI support (mkolman) +- Run chown instead of os.walk-ing to re-own home dir (vslavik) +- Add the set_repository_enabled function (vponcova) + +* Wed Jan 19 2022 Fedora Release Engineering - 36.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 17 2022 Packit Service - 36.15-1 +- Correct liveinst SELinux status check (awilliam) +- The OPAL compatibility with XFS features is mandatory (vponcova) +- Improve wording on the admin checkbox (vslavik) +- User is admin by default (vslavik) + +* Mon Jan 10 2022 Packit Service - 36.14-1 +- Move the code for adding repositories to the DNF base (vponcova) +- Allow to convert kickstart repositories into DBus data (vponcova) +- Skip /etc/machine-info during live installs (#2036199) (awilliam) + +* Thu Jan 06 2022 Packit Service - 36.13-1 +- New version - 36.13 (Martin Kolman) +- Fix names of tests for the OPAL compatibility verification (Vendula Poncova) +- Always use LegacyVersion for parsing versions (Vendula Poncova) +- Remove the GenerateTemporaryKickstart DBus method (Vendula Poncova) +- Use the DBus API for the image and tar installation (Vendula Poncova) +- Run the installation tasks in the live image payload module (Vendula Poncova) +- Create complete installation tasks for live and tar installations (Vendula Poncova) +- Create the tarball source module (Vendula Poncova) +- Merge helper functions into users._reown_homedir() (Vladimir Slavik) +- Remove _get_parent_directory (Vladimir Slavik) +- Merge _dir_tree_map into _chown_dir_tree (Vladimir Slavik) +- Move touch from core.util to core.path (Vladimir Slavik) +- Move join_paths from core.util to core.path (Vladimir Slavik) +- Move open_with_perm from core.util to core.path (Vladimir Slavik) +- Move get_mount_paths from core.util to core.path (Vladimir Slavik) +- Move parent_dir to users._get_parent_directory (Vladimir Slavik) +- Move dir_tree_map and chown_dir_tree to users (Vladimir Slavik) +- Remove last use of dir_tree_map outside core.util (Vladimir Slavik) +- Move util.mkdirChain to path.make_directories (Vladimir Slavik) +- Add missing commas to the test_get_kernel_version_list test (Vendula Poncova) +- Fix syntax errors in a workflow (#infra) (Vendula Poncova) +- Show all logs of failed unit tests (Vendula Poncova) +- Move set_system_root from core.util to core.path (Vladimir Slavik) +- Add a new module for path-related helpers (Vladimir Slavik) +- Fix shellcheck warnings (Vladimir Slavik) +- Update ShellCheck config files (Vladimir Slavik) +- Add ShellCheck to unit tests (Vladimir Slavik) +- Improve headline comment of our containers (#infra) (Jiri Konecny) +- Use local anaconda.spec.in file during container build (#infra) (Jiri Konecny) +- Fix typo in debug print in network part (Jiri Konecny) +- Replace local function with service helper (Vladimir Slavik) +- Change service helper default root to "/" (Vladimir Slavik) +- Fix too shallow clone in release action (#infra) (Vladimír Slávik) +- Test the service helpers (Vladimir Slavik) +- Move service util functions to new module (Vladimir Slavik) +- Remove the base_repo property (Vendula Poncova) +- Remove the support for image installations from the liveinst script (Vendula Poncova) +- Close stale pull requests (#infra) (Vendula Poncova) + +* Tue Dec 14 2021 Packit Service - 36.12-1 +- New version - 36.12 (Martin Kolman) +- Retire execInSysroot (Vladimir Slavik) +- Retire all uses of execInSysroot in bootloader (Vladimir Slavik) +- Stop using execInSysroot in FixZIPLBootloaderTask (Vladimir Slavik) +- Remove the root= kwarg of execInSysroot (Vladimir Slavik) +- Replace the only execInSysroot call using root= (Vladimir Slavik) +- Fix ShellCheck issues in translation_canary (Vladimir Slavik) +- network: always use rd.iscsi.ibft when the need to access an iBFT device (Lubomir Rintel) +- Remove the dracut_args attribute (Vendula Poncova) +- Remove upd-kernel (Vladimir Slavik) +- Quote things for ShellCheck (Vladimir Slavik) +- Eliminate boolean test operator (Vladimir Slavik) +- Remove LIVE_INSTALL (Vladimir Slavik) +- Improve grepping and testing results in liveinst (Vladimir Slavik) +- Fix quoting in liveinst scripts (Vladimir Slavik) +- Split variable declaration and assignment (Vladimir Slavik) +- Do not try to load the floppy kernel module (Jan Stodola) +- Fix reset of DBus containers in the unit tests (Vendula Poncova) +- Introduce a download path to simplify the image payload code (Vendula Poncova) +- Add a page with overview of CI actions (Vladimir Slavik) +- Fix generation of commit range for rel.notes (#infra) (Vladimir Slavik) +- Fix mailing list in our Dockerfiles (Jiri Konecny) +- Change mail from anaconda-devel-list@redhat.com to Fedora variant (Jiri Konecny) +- Remove the container build badge from README (Vladimir Slavik) +- Clean up the task for the checksum verification (Vendula Poncova) +- Remove the %anaconda section (Vendula Poncova) +- Deprecate the ANA_INSTALL_PATH environment variable (Vendula Poncova) + +* Thu Dec 02 2021 Packit Service - 36.11-1 +- New version - 36.11 (Martin Kolman) +- Handle potential failure of `cd` (Vladimir Slavik) +- Printf variables correctly (Vladimir Slavik) +- Simplify debug printing (Vladimir Slavik) +- Ignore use of local variables (Vladimir Slavik) +- Fix wrong comparison operator (Vladimir Slavik) +- Remove unused variables (Vladimir Slavik) +- Ignore variables used across our dracut hooks (Vladimir Slavik) +- Fix arithmetic operation on a variable (Vladimir Slavik) +- Fix `read` calls in dracut code (Vladimir Slavik) +- Check correctly if glob finds anything (Vladimir Slavik) +- Check for substring in POSIX compatible way (Vladimir Slavik) +- Remove useless echo calls (Vladimir Slavik) +- Split combined local variable creation and assignment (Vladimir Slavik) +- Fix "empty" redirections in dracut scripts (Vladimir Slavik) +- Fix hashbangs in dracut scripts (Vladimir Slavik) +- Split binary logic in dracut shell files (Vladimir Slavik) +- Add a ShellCheck config for dracut scripts (Vladimir Slavik) +- Add changelog to GH releases (#infra) (Vladimir Slavik) +- Enable the pytest assert introspection in the helper functions (Vendula Poncova) +- Fix Source0 in spec to point to upstream source URL (Jiri Konecny) + +* Mon Nov 29 2021 Martin Kolman - 36.10-1 +- Add tasks for cleaning up after the live image installation (vponcova) +- Create a task for mounting a live image (vponcova) +- Remove unused code from the live image payload module (vponcova) +- Wait for all background threads to finish before filling installation task + queue (mkolman) +- Remove all git hooks (vponcova) +- Add a mnemonic (alt-s) to the LUKS version dropdown (vslavik) +- Use a task to download the image payload (vponcova) +- Clean up the download progress of the image payload (vponcova) +- Fix double quotes in dracut package module-setup (vslavik) +- Use the set up tasks in the image payload class (vponcova) +- Split system purpose tests to a separate file (mkolman) +- Create shared constants file for the subscription module (mkolman) +- Move USER_AGENT to core/constants.py (mkolman) +- Reset the goal during clearing the DNF cache (#2020754) (vponcova) +- Fix generating of the kernel boot argument rd.znet= on s390x (jstodola) +- Do not crash on dangling symlink /etc/resolv.conf (#2019579) (rvykydal) +- Prepare release notes for Fedora 35 (vponcova) +- Fix shell quotes in dracut (vslavik) + +* Mon Nov 15 2021 Martin Kolman - 36.9-1 +- Remove the BaseLivePayload class (vponcova) +- Cancel planned manual update of system time on turning ntp on (rvykydal) +- Always check the dot before a tar suffix (vponcova) +- Unify the detection of the tar image (vponcova) +- Remove Jenkins from makebumpver (vslavik) +- Add Rocky Linux profile to Anaconda (tucklesepk) +- Add a new separator after the default keyboard layout (vponcova) +- Replace the deprecated syspurpose CLI tool with SetSysrpose DBus call + (mkolman) +- bug fix: activate connection from callback _connection_updated_cb (qiy) +- Remove git hook scripts (vslavik) +- Run rsync with the correct source (vponcova) +- Fix application of network --mtu kickstart option in Anaconda (rvykydal) +- Add Rocky Linux profile to Anaconda (tucklesepk) +- Migrate the Live OS payload on DBus (vponcova) +- Don't require implementation of post_install_with_tasks (vponcova) +- Move test launcher scripts to subdirectories (vslavik) +- Fix all Shellcheck warnings in tests (vslavik) +- Add Shellcheck config for Anaconda (vslavik) +- Remove the provides_web_browser property (vponcova) + +* Tue Nov 02 2021 Martin Kolman - 36.8-1 +- Make network spoke GUI more robust in cases of missing NM Client. (rvykydal) +- Do not crash on missing NM Client on --vnc installations (#1998754) + (rvykydal) +- Add configuration files for Read the Docs (vponcova) +- Use the set-up and tear-down tasks of the Live OS image source (vponcova) +- make US keyboard layout easier to find in Anaconda (suanand) +- Show correctly that no admin user is set up (vslavik) +- Move the Live OS image detection into a task (vponcova) +- No wildcards in Automake (praiskup) +- Create a new base class for migrated payloads (vponcova) +- Disable the concurrency check in the error dialog in TUI (vponcova) +- Unify GUI & TUI root spoke completeness conditions (vslavik) +- Log statistics about the image installation (vponcova) +- Document the drop-in %%post scripts (vslavik) +- Monitor the progress of the image installation in tasks (vponcova) +- Bump required rpm version (vslavik) +- CONTRIBUTING: Note to base changes on a clone of the target branch. (fgrose) +- anaconda-cleanup: Don't unmount '/run/rootfsbase'. (fgrose) +- Change creation of post-script directory (vslavik) +- Restore file contexts in task instead of %%post script (vslavik) +- CopyLogsWithTask is now FinishInstallationWithTasks (vslavik) +- Use the recommended autoreconf command (praiskup) + +* Tue Oct 12 2021 Martin Kolman - 36.7-1 +- Cache the parsed content of the help mapping files (vponcova) +- Use specific help directories (vponcova) +- Remove the default_help_pages configuration option (vponcova) +- Remove the helpFile attribute (vponcova) +- Implement the unified help support (vponcova) +- Mention manual journal dumps for mising logs (vslavik) +- Revert "Install kbd-legacy if keyboard layout is "fi" (#1955793)" (vponcova) + +* Mon Oct 11 2021 Martin Kolman - 36.6-1 +- Don't assume Python modules are in sysconfig.get_path('purelib') (miro) +- Watch the org.freedesktop.hostname1 name (vponcova) +- Make log copying truly the very last thing done (vslavik) +- Rename string constant to make more sense (vslavik) +- Move screenshot copying into the Task to copy logs (vslavik) +- Add a quick howto for testing dracut changes (vslavik) +- Mark the nompath option as deprecated (vslavik) +- Don't consider the string module as deprecated (vslavik) +- Fix typo and style (vslavik) +- Remove ensure_str and decode_bytes (vslavik) +- Stop using ensure_str in SimpleConfigParser (vslavik) +- Stop using ensure_str in ProxyString (vslavik) +- Uncouple ensure_str from {upper,lower}_ascii (vslavik) +- Stop optionally decoding string data from RPM (vslavik) +- Remove usage of ensure_str from have_word_match (vslavik) +- Rename functions in string module to lower_case (vslavik) +- Improve tests and docs of the new string module (vslavik) +- Split string helpers from pyanaconda.core.util (vslavik) +- Replace dummy callbacks (vponcova) +- Remove the DBusMetaTask class (vponcova) +- Remove unused arguments of the AnacondaPreParser class (vponcova) +- Remove unused arguments of the AnacondaKSParser class (vponcova) +- Remove the successful_checks property (vponcova) +- Remove the sysroot_path function (vponcova) +- Mark an unused variable with an underscore (vponcova) +- Remove the SessionBus object (vponcova) +- Remove the ANACONDA_DATA_DIR constant (vponcova) +- Remove the minLevel argument (vponcova) +- Remove the logLevelMap variable (vponcova) +- Add systemd-machine-id-setup on Live to common bugs (vslavik) +- Remove the mpath flag (vslavik) +- Stop using the mpath flag (vslavik) + +* Thu Sep 30 2021 Martin Kolman - 36.5-1 +- In installer environment set static, not transient hostname (rvykydal) +- Payload should wait for all storage related threads to finish (mkolman) +- Update Rawhide release docs to state of the art as of Fedora 35 (mkolman) +- Fix deprecation warning about Gdk.Cursor.new (vslavik) +- Document workaround MGA G200e graphics card (mkolman) +- Verify the OPAL compatibility with XFS features (vponcova) +- Fix comments in the python-deps script (vslavik) +- Use sysconfig in dracut directly, not via distutils (vslavik) + +* Thu Sep 23 2021 Martin Kolman - 36.4-1 +- Do not crash if restorecon is missing on target system (vslavik) +- Move chmod into file copying function in CopyLogsTask (vslavik) +- Clarify that the software selection doesn't affect the Anaconda configuration + (vponcova) +- Set an upper bound to entered sizes (#1992585) (vponcova) +- Revert "Install kbd-legacy if keyboard layout is "fi" (#1955793)" (vponcova) +- Use octal permissions instead of hexadecimal (vslavik) +- Handle new time zones in GUI after earlier switch to zoneinfo (vslavik) +- Do not stretch NTP toggle in GUI (vslavik) +- Add AlmaLinux profile (andrew.lukoshko) +- The NTP server dialog without entries shouldn't crash (#2001591) (vponcova) +- Set hostname also from ip= static configuration without device (#1988521) + (rvykydal) +- Add Silverblue specific logos to profile. (jaberan) +- data/profile.d: Add profiles for KDE & Kinoite Spins (tim) +- Fix Removed options inst.[product|variant] were subsections (jkonecny) + +* Thu Sep 16 2021 Martin Kolman - 36.3-1 +- Fix boolean comparisons in asserts (vslavik) +- Stop using distutils to compare kernel versions (vslavik) +- Clarify scope of ignored locations (amahdal) +- Clarify reference to other *multiple* `inst.ks` arguments (amahdal) +- Clarify default behavior before `inst.ks.all` (amahdal) +- Clarify `inst.ks.all` description by using imperative mode (amahdal) +- Add missing markup for option names and "value types" (amahdal) +- Copy logs in a task instead of a %%post script (vslavik) + +* Thu Sep 09 2021 Martin Kolman - 36.2-1 +- Add missing apostrophe to suggestion (rffontenelle) +- Add test for new "nosave" config members (vslavik) +- Remove nosave flags, use conf instead (vslavik) +- Add (no)save options to Anaconda section of config (vslavik) +- Define a unique id in the main spokes and hubs (vponcova) +- Add the Screen class (vponcova) +- Print progress dots on one line in TUI (honza.stodola) +- Cleanup unneeded NFS repo with rd.live.ram parameter (mmatsuya) +- Include the anaconda-generator script in the updates image (vponcova) +- Don't run shell on every found virtualization console (vponcova) + +* Tue Aug 24 2021 Martin Kolman - 36.1-1 +- fsset: Ignore all swap activation errors in turn_on_swap (vtrefny) +- Don't try to use line buffering in binary mode (vponcova) +- Add release notes for NTP dialog change (vslavik) +- Change the NTP server dialog design (vslavik) +- Rename spoke to Root Account (vslavik) +- Don't set default of gpt option at cmdline parsing (cheeselee) +- Change the root password spoke GUI design (vslavik) +- Add release notes for visible warnings from initrd (jkonecny) +- Split NTP dialog to its own glade file (vslavik) + +* Tue Aug 10 2021 Martin Kolman - 35.22-1 +- Fix dependency on zram-generator in RHEL (sgallagh) +- tests: Fix failing ClearPartTestCase with latest blivet (vtrefny) +- Add brltty to boot.iso with default configuration (vslavik) +- Fix admin user password condition handling in TUI (854182924) +- Fix typo in docstring (vslavik) + +* Thu Jul 29 2021 Martin Kolman - 35.21-1 +- Add release notes for packaging log in tmux (jkonecny) +- Small fixes in the subscription structures (vponcova) +- Make critical warnings from Dracut more visible (#1983098) (jkonecny) +- Print Dracut errors encountered during boot after Anaconda starts (#1983098) + (jkonecny) +- Add function to print critical warnings more visible during boot (#1983098) + (jkonecny) +- dracut: read filename dhcp option from dhcpopts file (rvykydal) +- Disable anaconda-core's requirement on subscription-manager on CentOS (carl) +- Add new error reporting hook when Dracut timeout (#1983098) (jkonecny) +- Update boot-options.rst (31507393+Ultimate-etamitlU) +- Handle handle get_layout() method returning None (#1976526) (mkolman) +- Enable the zram-generator service on RHEL (vponcova) + +* Tue Jul 20 2021 Martin Kolman - 35.20-1 +- Improve logging from the DownloadProgress class (vponcova) +- Monitor the image installation progress with a new class (vponcova) +- Clean up the InstallFromImageTask class (vponcova) +- Clean up the InstallFromTarTask class (vponcova) +- Move the InstallFromImageTask class (vponcova) +- Disable installation tasks of the Live OS payload module (vponcova) +- Improve installation logs in the Security module (vponcova) +- Raise kickstart errors only during kickstart parsing (vponcova) +- Reuse the apply_partitioning function (vponcova) +- Verify the image checksum in an installation task (vponcova) +- Move the progress callback to the base payload class (vponcova) +- Revert "Disable failing test" (jkonecny) +- Check the support for the Subscription module on startup (vponcova) +- Activate DBus modules based on the new configuration options (vponcova) +- Add new configuration options for the DBus module activation (vponcova) +- Fix typing errors in the Security module (vponcova) +- remove authconfig support (pbrezina) +- Use C.UTF-8 if the requested locale is unsupported (vponcova) +- Don't match a non-POSIX locale with a POSIX langcode (vponcova) +- Show suggestions for an error caused by inconsistent sector sizes (vponcova) +- new window in tmux to tail packaging.log (jarrod) + +* Mon Jul 12 2021 Martin Kolman - 35.19-1 +- Don't return None from is_supported_filesystem (#1979854) (vponcova) +- Configure the multilib policy of the target system (vponcova) +- Reorder imports to reduce linter warnings (vslavik) +- Ignore falsy pylint missing member warning in dnf code (vslavik) +- Silence false pylint warning (vslavik) +- Don't use deprecated imp module in dracut test (vslavik) +- Fix typo in docs (vslavik) +- Replace (vslavik) +- Ignore pylint mistakes about missing members in test (vslavik) +- Remove the productVariant variable (vponcova) +- Document the profile configuration files (vponcova) +- Add support for the profile configuration files (#1974819) (vponcova) +- Replace inst.product and inst.variant with inst.profile (vponcova) +- Replace product configuration files with profiles (vponcova) +- Appease pylint's belief that this is not a string (vslavik) +- Update pylint directive for new warning name (vslavik) +- Revert "Fix unit test for previous commit" (lveyde) +- Revert "ovirt / rhv: drop swap partition" (lveyde) + +* Mon Jun 28 2021 Martin Kolman - 35.18-1 +- Use yescrypt hashing method for shadow passwords (besser82) +- Intercept OSError thrown by crypt.crypt() on error. (besser82) +- Add tests for system time setting (awilliam) +- Fix time setting for daylight savings, let Python do the work (awilliam) +- Update the pixel depth of xvnc server from 16 to 24 (rvykydal) +- Change the Python version to 3.10 in the makeupdates script (vponcova) +- Enable running container tests in parallel (jkonecny) +- Fix broken hashbang (vslavik) +- Fix typo in release docs (vslavik) +- Clean up the initialization of PartTypeSpoke (vponcova) +- Run installation tasks from ConfigureBootloaderWithTasks (vponcova) +- Add the CollectConfigureBootloaderTasks method (vponcova) +- Add the ConfigureBootloaderWithTasks method (vponcova) +- Add suggestions to kickstart error message in liveinst (vslavik) +- Fix potential use of uninitialized variable (vslavik) +- Fix potential use of uninitialized variable (vslavik) +- Fix literal curly braces in dracut scripts (vslavik) +- Fix logging messages (vslavik) +- Remove RPM_TESTS_ARGS support (jkonecny) +- Disable failing test (jkonecny) +- Disable pylint error in tests (jkonecny) +- Disable glade tests (jkonecny) +- Migrate rpm_tests to python3 unittest framework (jkonecny) +- Rename rpm_tests to make them discoverable by unittest framework (jkonecny) +- Fix tests README file (jkonecny) +- Change NOSE_TESTS_ARGS to a similar logic for unittest framework (jkonecny) +- Fix services after nosetests renaming to unit_tests (jkonecny) +- Rename nosetests execution scripts and vars to unit_tests (jkonecny) +- Rename nosetests folder to unit-tests (jkonecny) +- Make it possible to skip install time Insights errors (#1931069) (mkolman) +- Run our unit tests with unittest python3 framework (jkonecny) +- Rename all unit tests methods to use test_* prefix (jkonecny) +- Rename all tests files to make them discoverable by unittest (jkonecny) +- Remove the upd-updates script (vslavik) +- Remove the merge-pr script (vslavik) +- Apply the bootloader options before the installation (vponcova) + +* Tue Jun 15 2021 Martin Kolman - 35.17-1 +- Fix import of Iterable from collections (rvykydal) +- Move the support for the treeinfo metadata into a DBus module (vponcova) +- Add support for configuration of the DNF substitution variables (vponcova) +- Remove the _install_tree_metadata attribute (vponcova) +- Add unit test for biosdevname package requirement (rvykydal) +- Require biosdevname package if biosdevname=1 boot option is set (rvykydal) +- Make clear that team and vlan from ks in initramfs is not supported + (rvykydal) +- Fixed some more PEP8 issues in installation.py (lveyde) +- Don't allow reformat if the requested file system is unsupported (vponcova) +- Always exclude unsupported file systems (vponcova) +- Remove btrfs from the list of unsupported file systems (vponcova) +- Clean up the get_supported_filesystems function (vponcova) +- Clarify the implementation of GetFormatTypeData (vponcova) +- Run tests on every push to a base branch (vponcova) +- Introduce the docs/release-notes directory (vponcova) + +* Wed May 26 2021 Martin Kolman - 35.16-1 +- Add kickstart tests support for RHEL-9 branch (#infra) (jkonecny) +- Add a log message for successful installation (vslavik) +- Remove base container from kickstart-test workflow (#infra) (jkonecny) +- Change the description of "Encrypt my data" in the custom partitioning spoke + (vponcova) +- Use anaconda-iso-creator container to build boot.iso (#infra) (jkonecny) +- Use consistent shell formatting in kickstart-tests workflow (#infra) + (jkonecny) +- Rename lorax_build_container in kickstart-tests workflow (#infra) (jkonecny) +- Add Dockerfile for lorax iso build with Anaconda (#infra) (jkonecny) +- Remove the configuration file for Fedora Workstation Live (vponcova) +- Rename the configuration file for CentOS Stream (vponcova) +- Remove the configuration file for CentOS Linux (vponcova) +- Don't set the home directory to None (#1960803) (vponcova) +- Enable back ELN Anaconda daily builds (jkonecny) +- Add nightly builds also for ELN containers (jkonecny) +- Enable debug output when building containers (#infra) (jkonecny) +- Show mount points for other types of actions (#1953134) (vponcova) +- Populate the missing keyboard values before the payload installation + (vponcova) +- Clarify how branches are merged back for contributors to pick a target + (javierm) +- Install kbd-legacy if keyboard layout is "fi" (#1955793) (awilliam) + +* Mon May 17 2021 Martin Kolman - 35.15-1 +- Make the coverage status about tests informational (vponcova) +- network: check NM availability before running some methods (#1937185) + (rvykydal) +- Migrate from pytz to zoneinfo, list (close to) all time zones (miro) +- Change logic in NFS validation (vslavik) +- Avoid a race condition during Connect to Red Hat spoke initialization + (mkolman) +- Tweak dependabot configuration (jkonecny) +- Use .codecov.yml from the main branch (vponcova) +- Fix boot options generated by the dracut module (vponcova) +- Simplify the code for working with kickstart repositories (vponcova) +- Remove the _enabled_repos property of the DNF payload (vponcova) +- Remove the addons property of the DNF payload (vponcova) +- Move post installation scripts to the end of queue (lveyde) +- Add support for repomd.xml hashes to the DNF manager (vponcova) +- Deduplicate dependency metapackages (vslavik) +- Do not use pip cache when building containers (#infra) (vslavik) +- Revert "Use GitHub environment gating for kstests workflow" (#infra) + (jkonecny) +- Move NTP server dialog to its own file (vslavik) +- Simplify the unit tests with DNF repositories (vponcova) +- Test GetFormatTypeData for all format types (vponcova) +- Add the repositories property to the DNF manager (vponcova) +- Remove comments about ConditionArchitecture (vslavik) +- Add common bug with incomplete VG because of ignoredisk (jkonecny) +- Fix AskVNCSpoke call (vslavik) +- Improve X startup error messages (vslavik) +- Terminate X server after timeout and restore crash test handler (vslavik) +- Reorganize control flow in startX (vslavik) +- Handle SIGUSR1 correctly after Xorg timeout (vslavik) +- Refactor minor details in startX (vslavik) +- Small fixups of metacity replacement. (rvykydal) +- Remove unnecessary workaround to always build ELN containers (#infra) + (jkonecny) +- Remove temp workaround to solve podman issue on GH runners (#infra) + (jkonecny) +- makebumpver: allow BZ to be also in POST (#infra) (rvykydal) +- scripts: do not require "Fixed in version" set for release (#infra) + (rvykydal) +- Remove github-action-run-once script from anaconda-ci (#infra) (jkonecny) +- Clean DNF to make the anaconda-rpm container smaller (#infra) (jkonecny) +- Add the load_repository method to the DNF manager (vponcova) +- Add a badge with the current coverage (vponcova) +- Configure codecov.io (vponcova) +- Upload coverage to codecov.io (vponcova) +- Add base repo name for CentOS Stream after repository renaming (jkonecny) +- Remove parse-kickstart tests which don't test anything useful (rvykydal) +- Fix basic dracut parse-kickstart tests for network configuration (rvykydal) +- Fix parse-kickstart bridge test (rvykydal) + +* Wed May 05 2021 Martin Kolman - 35.14-1 +- Document too little memory for LUKS setup (vslavik) +- Remove redundant logging messages from the DNF module (vponcova) +- Use the new support for checking the software selection in UI (vponcova) +- Add an installation task for resolving the packages selection (vponcova) +- Add a validation task for checking the packages selection (vponcova) +- Handle marking errors in the DNF manager (vponcova) +- Add the clear_selection method to the DNF manager (vponcova) +- Add the resolve_selection method to the DNF manager (vponcova) +- Remove the bugUrl variable (vponcova) +- Remove the productStamp variable (vponcova) +- Remove the productArch variable (vponcova) +- Improve debug message about configuration loading and writing (jkonecny) +- Enable closest mirror in CentOS Stream config (carl) +- The kernel boot argument sshd is removed and should warn user (jkonecny) +- Document the workaround for missing options of the repo command (vponcova) +- Replace metacity with gnome-kiosk (rvykydal) +- Drop deprecated support for comps from the DNF payload class (vponcova) +- Use the software selection cache in GUI (vponcova) +- Use new fedora-latest alias in COPR (jkonecny) + +* Tue Apr 27 2021 Martin Kolman - 35.13-1 +- Disable ELN for our unit and rpm tests (jkonecny) +- Disable ELN builds for Packit (jkonecny) +- Fix unit test for previous commit (sbonazzo) +- Add hotfix for Ubuntu hosts for container refresh (jkonecny) +- ovirt / rhv: drop swap partition (sbonazzo) +- Fix the broken rootless podman on Ubuntu 20.04 20210419.1 (vponcova) +- Increase the minimal suggested size for /boot (vslavik) +- Support bond device activated in initramfs from kickstart (rvykydal) +- fix tests for RHV (sbonazzo) +- rhvh: fix EULA path for RHV-H (sbonazzo) +- Adapt tests to the new ostree user defined mount points (#1906735) (jkonecny) +- Fix RPMOSTree mount to the non-existing directory (#1906735) (jkonecny) +- Use the software selection cache in TUI (vponcova) +- Add the SoftwareSelectionCache class (vponcova) +- Add the get_software_selection_status function (vponcova) +- Add the is_software_selection_complete function (vponcova) +- Clean up the collect_platform_requirements function (vponcova) +- Add the match_available_packages method to the DNF manager (vponcova) +- Add the is_package_available method to the DNF manager (vponcova) +- Remove product-specific data from the Anaconda stylesheet (vponcova) +- s: make it better (vslavik) +- Replace use of imp with importlib in collect() (vslavik) +- Document the issue about the ignoredisk command and installation sources + (vponcova) +- Describe the common bug in the Issue paragraph (vponcova) +- Run RHEL COPR builds on kstest (vslavik) +- Allow to use no default product configuration (#1947939) (vponcova) +- Make sure rhsm.service is running at Anaconda startup (mkolman) +- Add display-related dependencies (vslavik) +- Set up the Storage spoke in TUI on every entry (vponcova) +- subscription: allow dates in ISO 8601 format (ptoscano) + +* Mon Apr 12 2021 Martin Kolman - 35.12-1 +- Remove patches to avoid forcing inst. prefix on RHEL 9 (jkonecny) +- Allow to exclude the kernel-lpae package (vponcova) +- Remove the pwpolicy kickstart command (vponcova) +- Do not generate dracut arguments multiple times for some storage devices + (rvykydal) +- Run RHEL8 contributor tests on kstest runners (vslavik) +- Add support for comps to the DNF manager (vponcova) +- Add DBus structures for comps data (vponcova) +- Add the is_cdn_registration_required function (vponcova) +- Use the default_environment property in UI (vponcova) +- Add the default_environment property to the DNF manager (vponcova) +- Create the substitute method (vponcova) +- Rename tests-owners to just tests (jkonecny) +- Use GitHub environment gating for kstests workflow (jkonecny) +- Replace our Fedora owners check by GH environments for our workflows + (jkonecny) +- Fix a small typo in common bugs (jkonecny) + +* Wed Mar 31 2021 Martin Kolman - 35.11-1 +- Turn off wrapping of the scale values (vponcova) +- Make the scale visible by default (#1943370) (vponcova) + +* Tue Mar 30 2021 Martin Kolman - 35.10-1 +- Update unit test for GetDracutArguments for FCoE (rvykydal) +- Make failure in generating of dracut arguments for iSCSI device non-fatal. + (rvykydal) +- network: match also connections named by MAC created by NM in initramfs + (rvykydal) +- Create /tmp with the right permissions (#1937626) (vponcova) +- Don't recommend zram-generator-defaults (#1938132) (vponcova) +- Don't automatically execute the default partitioning (vponcova) +- Fix the warning about working NTP servers (#1889180) (vponcova) +- Remove implicit dependencies (vponcova) +- Don't install anaconda-install-env-deps by default (vponcova) +- Document SSH root password login issues & possible workaround (mkolman) +- Add groups to kickstart tests lorax output (vslavik) + +* Mon Mar 22 2021 Martin Kolman - 35.9-1 +- Improve logging of the download and install sizes (vponcova) +- Clean up the code for finding sufficient mount points (vponcova) +- Remove pyanaconda.payload.dnf.utils (vponcova) +- Move code for cleaning up the download location (vponcova) +- Add the get_free_space_map function (vponcova) +- Move code from the space_required property (vponcova) +- Check if the mount point exists before calling statvfs (#1824357) (vponcova) +- Move code from _pick_download_location (vponcova) +- Move the get_df_map and pick_mount_point functions (vponcova) +- Use a custom stylesheet to define Fedora-specific stylesheet data (vponcova) +- Replace download_location with a local variable (vponcova) +- Handle modules in the DNF manager (vponcova) +- Handle the module command in the Payloads module (vponcova) +- ostree: ignore exit code 65 for systemd-tmpfiles (vponcova) +- Mark usage of IOError for further investigation (vslavik) +- Replace IOError by OSError in scripts (vslavik) +- Replace IOError by OSError in dracut code (vslavik) +- Replace IOError by OSError for file operations (vslavik) +- Move the code for installing packages into a task (vponcova) +- Replace IOError when looking up glade files (vslavik) +- Replace IOError when starting DBus (vslavik) +- Improve messages for the Flatpak installation (vponcova) +- Clean up the arguments of the OSTree installation tasks (vponcova) +- Change the arguments of ChangeOSTreeRemoteTask (vponcova) +- Use the RPM OSTree module to install flatpacks (vponcova) +- Move the code for downloading packages into a task (vponcova) +- Use the RPM OSTree module to install the payload (vponcova) +- Add the _get_source method to the payload modules (vponcova) +- Fix unknown error when entering wrong NFS URL address (30516382+century6) +- Replace IOError when downloading .treeinfo (vslavik) +- consicous lang: fix a fallout of slave -> port patch (rvykydal) +- Add logging for iSCSI / FCoE dracut arguments (rvykydal) + +* Wed Mar 10 2021 Martin Kolman - 35.8-1 +- Make kickstart tests run on branched fedora branches (vslavik) +- Do not follow symlinks when copying /etc/resolv.conf (#1933454) (rvykydal) +- Make contributor tests work on braneched Fedora (vslavik) +- Remove container refresh workaround for ELN (jkonecny) +- Use the volume UUID to search for the GRUB config in btrfs partitions + (javierm) +- network: remove unneeded line wrap (rffontenelle) +- Drop python3-syspurpose dependency (mkolman) +- Remove crun build folder after crun build (jkonecny) +- Remove crun version abort for container refresh workflow (jkonecny) +- Split the packages configuration data (vponcova) +- Hide members of the DNF payload (vponcova) +- Replace the FlatpakInstallError exception (vponcova) +- Replace the PayloadInstallError exception in the Payloads module (vponcova) +- Replace the InstallError exception (vponcova) +- Build new crun version for ELN container refresh (jkonecny) +- Adjust github owner tests for this (master) branch (vslavik) +- Create a task for tearing down OSTree mount targets (vponcova) +- Include some of the payload installation tasks by default (vponcova) +- Extend the DBus API of the Payloads service (vponcova) +- Add the service_proxy property (vponcova) +- Fix copypaste typo in github owner tests (vslavik) +- conscious lang: rename /etc/modprobe.d/anaconda-blacklist.conf (rvykydal) +- Fix running tests for the f34-devel branch (vslavik) +- change the grub2 user.cfg permission from 0600 to 0700 (854182924) +- Add the installation source for flatpaks (vponcova) +- Handle exceptions inside the CopyBootloaderDataTask class (vponcova) +- conscious lang: replace 'master store' with 'primary store' in a doc text + (rvykydal) +- conscious lang: replace 'slave' in network related code (rvykydal) +- conscious lang: replace 'master' in network related code (rvykydal) +- conscious lang: replace slaves with ports in network GUI (rvykydal) +- conscious lang: remove blacklist from pylint configuration file (rvykydal) +- conscious lang: rename payload function for adding a module do a denylist + (rvykydal) +- conscious lang: remove warning for removed blacklist and nofirewire commands + (rvykydal) +- conscious lang: replace blacklisting in boot options documentation (rvykydal) + +* Tue Mar 02 2021 Martin Kolman - 35.7-1 +- Wrap text in spoke title labels, if needed (vslavik) +- Wrap welcome spoke title if needed (vslavik) +- Choose the best locale more carefully (#1933384) (vponcova) +- Make the user interface context safe for the initial setup (vponcova) +- Add support for tear-down of the payload modules (vponcova) +- Add the GetKernelVersionList method (vponcova) + +* Thu Feb 25 2021 Martin Kolman - 35.6-1 +- The network spoke should be visible in live spins (#1932961) (vponcova) +- Ignore Pylint errors on DNF API (vslavik) +- Ignore Pylint errors for PropertiesChanged.connect (vslavik) +- Silence false Pylint warning (vslavik) +- Ignore false Pylint errors for Enum subclasses (vslavik) +- Determine GRUB directory relative path to use in config file (javierm) + +* Mon Feb 22 2021 Martin Kolman - 35.5-1 +- Add the "Encrypt my data" checkbox to the custom partitioning spoke + (vponcova) +- Don't translate prompt keys (#1892830) (vponcova) +- Fix RHEL zram conditional in spec file (mkolman) +- Use older Ubuntu for container auto-update workflow (jkonecny) +- Remove interactive parameter from container-rpm-test (jkonecny) +- Use docker as container engine for time required (jkonecny) +- Add container push for rpm containers (jkonecny) +- Enable our and blivet COPR repositories for rpm tests (jkonecny) +- Add support for anaconda-rpm containers to refresh workflow (jkonecny) +- Fix base container specification in refresh workflow (jkonecny) +- Store logs from container refresh separately (jkonecny) +- vconsole font selection to cover more langs (suanand) + +* Thu Feb 18 2021 Martin Kolman - 35.4-1 +- Do not try to push latest from ELN tag (jkonecny) +- Adapt Packit configuration for master (jkonecny) +- Add support for f34 and eln branches to container refresh workflow (jkonecny) +- [Storage] add btrfs_compression option (#1928857) (michel) +- Adjust branch config ater merge (vslavik) +- Enable Makefiles and Dockerfiles for branched Fedora (vslavik) +- packit: make tests ⊂ builds for the chroot set (ttomecek) +- packit: run all actions in a single action (ttomecek) +- configure.ac: make the Copyright up to date (ttomecek) +- ovirt: rebase on CentOS Stream (sbonazzo) +- Use a custom stylesheet to define RHEL-specific stylesheet data (vponcova) +- Remove unused variables from Makefile (vslavik) +- Drop astroid hotfix patch (jkonecny) +- Add table of git branches (jkonecny) +- Drop astroid hotfix patch (jkonecny) +- Don't block the start of the Network module by the hostname service + (vponcova) +- Remove unused variables related to mock (vslavik) +- Save lorax-packages.log to installed system (rvykydal) + +* Mon Feb 15 2021 Martin Kolman - 35.3-1 +- Do not hard-require zram-generator-default on RHEL just yet (mkolman) +- Switch back Packit testing to rawhide after merge from f34-devel (jkonecny) +- Improve Packit configuration to use fedora-development (jkonecny) +- Add a kickstart specification for the main process (vponcova) +- Adapt Packit configuration to a newly branched Fedora (jkonecny) +- Create swap by default in RHEL-based installations (#1915297) (vponcova) +- Add missing space to a message (vslavik) +- Use Linux HOST_NAME_MAX hostname length limit (xiaqirong1) + +* Fri Feb 12 2021 Martin Kolman - 35.2-1 +- Rename pyanaconda.modules.common.typing (vponcova) + +* Thu Feb 11 2021 Martin Kolman - 35.1-1 +- Add dependabot support for GitHub actions (jkonecny) +- Set volume id for iso built for kickstart test (rvykydal) +- Guess the default product name from the os-release files (vponcova) +- Apply overrides for the anaconda widgets only in the test environment + (vponcova) +- Create real updates images (vponcova) +- Remove deprecated support for add-ons (vponcova) +- Don't run installation tasks of add-ons in a meta task (vponcova) +- network: wrap IP addresses showed in GUI for wireless devices (#1925781) + (rvykydal) +- Install support for non-ascii keyboard layouts (#1919483) (vponcova) + +* Mon Feb 08 2021 Martin Kolman - 34.24-1 +- Modify spec file to add patches required on rhel-9 rebuild (#1907566) + (jkonecny) +- Unify GRUB configuration file location across all platforms (javierm) +- Do not use redirector for rawhide repository for iso building on PR + (rvykydal) +- Move finding flatpak size to a task (vslavik) +- Move flatpak installation code to a task (vslavik) +- Move and rename FlatpakPayload (vslavik) +- Abort with a message on invalid host name in kickstart (vslavik) +- Use redirector for rawhide repository for iso building on PR (rvykydal) +- Add tests for the inst. prefix requirement (#1912502) (jkonecny) +- Do not support no inst. Anaconda boot args in systemd services (#1912502) + (jkonecny) +- Remove check to avoid process of help and version boot args (#1912502) + (jkonecny) +- Remove Anaconda boot arguments without inst. prefix from stage2 (#1912502) + (jkonecny) +- Add support for non-critical installation errors (vponcova) +- Don't run a canceled task (vponcova) +- Fix exclude arguments of tar payload extracting. (rvykydal) +- Remove support for boot arguments without 'inst.' prefix from Dracut + (#1912502) (jkonecny) +- Cache flatpak size instead of persistent instance (vslavik) + +* Fri Feb 05 2021 Martin Kolman - 34.23-1 +- Add a metapackage for image (boot.iso) dependencies (vslavik) +- Take dnf substitutions from installer environment configuration (rvykydal) +- Fix getting kernel version list for liveimg (rvykydal) + +* Wed Feb 03 2021 Martin Kolman - 34.22-1 +- Don't initialize the software selection if the payload is not set up + (#1916114) (vponcova) +- Unify the ready methods of the software selection spokes (vponcova) +- Deprecate the interactive-defaults.ks file (vponcova) +- Deprecate the %%anaconda section and the pwpolicy command (vponcova) +- Apply the pwpolicy kickstart command (vponcova) +- Upate repo url for kickstart tests run on PR (rvykydal) +- Adjust RHV-H product config to match real implementation (sbonazzo) +- Add DBus support for the password policies (vponcova) +- Don't use the pwpolicy kickstart command (vponcova) +- Create a DBus structure for the password policy (vponcova) +- Add the password_policies configuration option (vponcova) +- Move Users module tests to a directory (vslavik) +- Move Security module tests to a directory (vslavik) +- Move partitioning specification test to directory (vslavik) +- Move Payloads module and source tests to a directory (vslavik) +- Move Network module tests to a directory (vslavik) +- Add the configuration options can_change_root and can_change_users (vponcova) +- Remove some unused methods from the FSSet class (vponcova) +- Mount the /tmp of the installed system as a tmpfs (#1306452) (vponcova) +- Create the get_system_filesystems function (vponcova) +- Create the collect_filesystems method (vponcova) +- Do not use cache for container build (jkonecny) +- Update list of projects to test after move from Zanata to Weblate (vtrefny) +- Ignore fallback ITS rule warning from gettext (vtrefny) +- Switch the license to LGPL (dshea) + +* Thu Jan 28 2021 Martin Kolman - 34.21-1 +- Allow to disable the Security module (vponcova) +- Add important files for container build to rebuild check (jkonecny) +- Avoid using DockerHub because of limits (jkonecny) +- anaconda should add only s390utils-core (dan) +- Fix root password and LUKS passphrase visibility toggle (#1911360) (mkolman) +- Fix the should_run methods of the network spoke (vponcova) +- Prevent shell injection from a /kickstart-test comment (jkonecny) +- network: validate bond options on our side after change in NM (#1918744) + (rvykydal) +- network: fix bond confiuration for empty bond options (#1918744) (rvykydal) +- Allow to disable the Services module (vponcova) + +* Fri Jan 22 2021 Martin Kolman - 34.20-1 +- Add master unit-tests to contributors (gated) workflow (jkonecny) +- Add master test execution for owners for this repository (jkonecny) +- Rename validate-rhel-8 workflow to tests-contributors (jkonecny) +- Specify version 3 of GTK+ and GDK for fedora-welcome (awilliam) + +* Thu Jan 21 2021 Martin Kolman - 34.19-1 +- Fix nose tests execution command when installed from pip (jkonecny) +- Add missing nose test dependency back from pip (jkonecny) +- Use RHEL help content for RHV/Ovirt (mkolman) +- Remove build-time dependencies for nose tests (vslavik) +- Allow to disable the Localization module (vponcova) +- Rename kickstart status reporting to kickstart-test (jkonecny) +- Skip storage-related spokes in the initial setup (#1918048) (vponcova) +- Support should_run for standalone GUI spokes (vponcova) +- GH workflow: do not fail all matrix jobs on failure of one (jkonecny) +- Update versions of the kickstart commands (vponcova) +- network: handle wireless configure button sensitiveness (rvykydal) +- Allow to disable the network installation (vponcova) +- Allow to disable the Users module (vponcova) +- Allow to disable the Timezone module (vponcova) +- Select disks for implicit partitions (vponcova) +- Extend the PartSpec class (vponcova) +- for non-ascii keyboard layouts, set 'native' to the virtual console + explicitly Resolves: rhbz#1912609 (suanand) + +* Mon Jan 18 2021 Martin Kolman - 34.18-1 +- Skip payload-related spokes in the initial setup (#1915541) (vponcova) +- Always show pykickstart parse warnings (vslavik) +- Grab GitHub notifications for periodic workflows (jkonecny) +- Split OSTree sysroot-setting to a task (vslavik) +- Split OSTree pull to a task (vslavik) +- Split OSTree deployment to a task (vslavik) +- Stop the timer that calls a callback for clicking on the continue button + (vponcova) +- Formatting fixes (vslavik) +- Split OSTree bootloader configuration to a task (vslavik) +- Split OSTree remote changes to a task (vslavik) +- Split OSTree fs and repo initialization to a task (vslavik) +- Split OSTree bootloader data copying to a task (vslavik) +- Split OStree mount target preparation to a task (vslavik) +- Move the RPM OSTree test to a directory (vslavik) +- Move the safe_exec_with_redirect function (vslavik) +- Save logs correctly after container update GH action run (jkonecny) + +* Mon Jan 11 2021 Martin Kolman - 34.17-1 +- Always report IPMI events from the exit dialog windows (vponcova) +- Always report IPMI events from the exception handler (vponcova) +- Always log IPMI events (vponcova) +- Add a new handler for PayloadSetupError and SourceSetupError (vponcova) +- Remove the error handlers for removed or unused DNF errors (vponcova) +- Refactorize the code for handling marking errors (vponcova) +- Don't run the error handler in the installation code (vponcova) +- Don't run the error handler if there is no callback (vponcova) +- Reorganize the mapping of error handlers (vponcova) +- Remove the error handler for no such group (vponcova) +- Remove the error handler for invalid image size (vponcova) +- Flush stdout during the TUI installation (vponcova) +- Set the PR status ASAP for kickstart tests (jkonecny) +- Always update container images before running workflow (jkonecny) +- Solve problem with missing loop device for kstest run (jkonecny) +- Remove the error handler for the missing image (vponcova) +- Remove the error handler for the unsupported algorithm (vponcova) +- Handle errors in the installation tasks (vponcova) +- Initialize librepo logger (#1908286) (pkratoch) +- Add rpm-tests support for external contributors (jkonecny) +- Don't run the execute method in the kickstart installation in TUI by default + (vponcova) +- Don't run spokes that don't support live payloads (vponcova) +- Don't run spokes that don't support dir installations (vponcova) +- Don't run spokes that don't support non-package payloads (vponcova) +- Create a user interface context (vponcova) +- Add how to run a subset of nosetests to tests README (jkonecny) +- Fix warning when running a subset of nosetests (jkonecny) +- network: fix double-free using libnm function filter_connections() (rvykydal) +- Provide a hint for the desired capacity (vponcova) +- Fix python3 rpm package name in spec file (jkonecny) +- Allow to interrupt media verification (#1349152) (honza.stodola) +- Use correct identity for ELN (sgallagh) +- virtualization: add missing /var/crash (sbonazzo) + +* Mon Jan 04 2021 Martin Kolman - 34.16-1 +- Enable rpm-tests on Fedora ELN (mpitt) +- Fix create_rpm_test on Fedora ELN/RHEL (mpitt) +- Fix container-rpm-test log output (mpitt) +- Define container for running rpm-tests (mpitt) +- Move to official fedora ELN container image (mpitt) +- Remove 'firstboot --enable' from interactive defaults (vponcova) +- Build real boot.iso for /kickstart-tests runs (mpitt) +- Fix artifact name in kickstart-tests.yml workflow (mpitt) +- Import imp on demand (vponcova) +- Adapt UI and tests to localhost.localdomain setting removal (rvykydal) +- Stop trying to set the default hostname (zbyszek) +- Document how to run kickstart tests in anaconda PRs (mpitt) +- Update the GitHub workflow documentation (mpitt) +- Add description of our GH workflow to tests/README file (jkonecny) +- Remove the support for updates on a floppy disk (vponcova) +- Fix list of Anaconda tests (jkonecny) +- Disable the debug solver debugging (vponcova) +- Select groups from a kickstart file in GUI (vponcova) +- Remove kickstart packages from GUI (vponcova) +- Remove kickstart packages from TUI (vponcova) +- Remove kickstart packages from the DNF payload class (vponcova) +- Remove kickstart packages from the installation tasks (vponcova) +- Remove kickstart packages from the DNF utilities (vponcova) +- Remove kickstart packages from the DNF manager (vponcova) +- Handle the %%packages section in the DBus module (vponcova) +- Add the PackagesSeen property (vponcova) +- Add CentOS Stream config (riehecky) +- Deprecate the level option of the logging kickstart command (vponcova) + +* Mon Dec 07 2020 Martin Kolman - 34.15-1 +- Drop old WiFi & geocoding based geolocation support (mkolman) +- Add bot PR comment to run kickstart tests (mpitt) +- Migrate Anaconda daily COPR builds to Packit (jkonecny) +- Fix missing inst. prefixes for bootloader options in documentation (jkonecny) +- network: make generating of kickstart more robust (#1897832) (rvykydal) +- Fixup category sorting (mkolman) +- Place the user tasks into the right task queue (rvykydal) +- Lower geolocation connection timeout to 5 seconds (#1774873) (mkolman) +- Remove unused hubQ messages (vponcova) +- Remove the justUpdate argument (vponcova) +- Don't run the execute method in the kickstart installation in GUI by default + (vponcova) +- Don't use an empty string as a system root (vponcova) +- Fix logs from the get_os_release_value function (vponcova) +- Don't enter spokes after we leave the Summary hub (vponcova) +- network: rename Gtk cell renderer to prevent name collision (rvykydal) +- network: add unit tests for SecretsAgent (rvykydal) +- network: make SecretAgentDialog a bit more robust (rvykydal) +- network: move wireless secret agent bits into a separate file (rvykydal) +- Fix the logic for enabling latest updates (vponcova) +- Add better explanation what the `make admin user` means (#1803251) (jkonecny) +- Define the updates repositories in the Anaconda configuration files + (#1642513) (vponcova) +- Migrate User spoke glade file to 3.38 version (jkonecny) +- network: migrate SecretAgent from python-dbus to dasbus (rvykydal) +- Translate spoke category title directly at runtime (mkolman) +- Add description and links for bug keyword searches (vslavik) +- Apply pylint excessive memory usage fix (mpitt) +- Set shorter workflow timeouts (mpitt) +- Fix issue when ns_info cannot be retrieved for NVDimm namespace (jkonecny) +- Allow encryption of thin logical volumes (vponcova) +- Fix error in initrd: shift count out of range (honza.stodola) + +* Tue Nov 24 2020 Martin Kolman - 34.14-1 +- Set workflow temp mail and user to GH actions rebase (jkonecny) +- Rebase test pull request also for rhel-8 contributors (jkonecny) +- Build Anaconda for ELN (jkonecny) +- Create the get_kernel_version_list function for the DNF payload (vponcova) +- Create the sort_kernel_version_list function (vponcova) +- Move the unit tests for the payload base utils to a new file (vponcova) +- Remove the duplicate code for kernel version lists (vponcova) +- Move the get_kernel_version_list function to the Live OS utilities (vponcova) +- network: do not use dialog for just single wireless connection to configure + (rvykydal) +- Add the apply_specs function (vponcova) +- Add the get_installation_specs function (vponcova) +- Add the get_default_environment function (vponcova) +- Add the environments property to the DNF manager (vponcova) +- Set the RPM macros with an installation task (vponcova) +- network: fix configuration of wireless networks (rvykydal) +- Rebase branches to current master before testing (mpitt) +- network: use dialog instead of combobox to select wireless network (rvykydal) +- network: deal with obsolete ssid when configuring wireless (rvykydal) +- network: use function instead of assigned lambda in wireless activation + (rvykydal) +- network: do not update wireless AP combo active item when not necessary + (rvykydal) +- network: do not use obsolete access points in wireless configuration + (rvykydal) +- Add upstream tag hint for Packit (jkonecny) +- Create an installation task for import of RPM keys (vponcova) +- Remove leftover bootloader-related code from the Payloads service (vponcova) +- Add workflow for daily RHEL COPR build (mpitt) +- Remove the storage logger (vponcova) +- Remove the loglevel option (vponcova) +- Remove the support for changing the log level (vponcova) +- Handle missing spice-vdagent (#1897153) (vponcova) +- rhbz#1888697 list important major languages (suanand) +- Run master tests on Fedora ELN (mpitt) +- Fix handling of empty $CI_TAG (mpitt) +- Skip blivet-gui tests on Fedora ELN (mpitt) +- Drop obsolete id: from validate workflow (mpitt) +- Create the get_download_size method (vponcova) +- Create the get_installation_size method (vponcova) +- Create the dump_configuration method (vponcova) +- Create the configure_base function (vponcova) +- Create the configure_proxy method (vponcova) +- Create an abstraction of the DNF base (vponcova) +- Create the configure_dnf_logging function (vponcova) +- Create the get_os_release_value function (vponcova) +- Create the get_product_release_version function (vponcova) +- Drop testing in mock (mpitt) +- Remove the method command (vslavik) +- Fix incomplete configuration of repositories loaded from treeinfo (#1745064) + (honza.stodola) +- Fix checking ssl certificate for metadata (#1745064) (honza.stodola) +- Root password is mandatory if there is *not* admin user. (rvykydal) + +* Thu Nov 12 2020 Martin Kolman - 34.13-1 +- Skip add-on modules that failed to start (vponcova) +- Return the exit status of a Python module that failed to start (vponcova) +- Fix the priority of the ostreesetup kickstart command (#1896761) (vponcova) +- Drop obsolete dependency_solver.py script from rpm-tests (mpitt) +- Run a DBus task to configure FIPS on the installed system (vponcova) +- Run a DBus task to set up FIPS for the payload installation (vponcova) + +* Thu Nov 12 2020 Martin Kolman - 34.12-1 +- Use podman for pushing the nightly container update (mpitt) +- Robustify container-autoupdate workflow (mpitt) +- Disable seccomp profile when running containers on Ubuntu host (mpitt) +- Use podman in GitHub workflows (mpitt) +- Remove deviceprobe and install commands (vslavik) +- Change handling of UID and GID values (vslavik) +- Send UID and GID over D-Bus as UInt32 (vslavik) +- Correct limits for UIDs and GIDs in GUI (vslavik) +- Rename Subscription module tests (vslavik) +- Rename common module tests (vslavik) +- Rename Boss module tests (vslavik) +- Remove autostep functionality (vslavik) +- Don't include unknown files in the updates image (vponcova) +- Clean up the code for the platform-specific partitioning requirements + (vponcova) +- Use a property for the platform-specific stage1 constraints (vponcova) +- Use a property for the stage1 device descriptions (vponcova) +- Use a property to provide a suggestion for the stage1 device (vponcova) +- Use a property to define non-linux format types (vponcova) +- Use a property to define platform-specific packages (vponcova) +- Do not fail user check job in rhel-8 validate workflow (jkonecny) +- Move the code that sets up the default disklabel type from platform.py + (vponcova) +- Add unit tests for platform.py (vponcova) +- Revert "Standardize calls to parent via super()" in platform.py (#1858649) + (vponcova) + +* Thu Nov 05 2020 Martin Kolman - 34.11-1 +- Fix user permission checking for rhel-8 validate task (jkonecny) +- Adjust rhel-8 log retrieval for changed container volume handling (mpitt) +- Don't clobber host checkout on `make container-ci` (mpitt) +- Drop anaconda-ci container entrypoint (mpitt) +- workflows: Add manual triggering of tests (mpitt) +- Fix and robustify validate workflow (mpitt) +- Mock os.stat in the unit tests (vponcova) +- Fix traceback when starting installation with inst.console (no args) + (jkonecny) +- Add container image build badge (jkonecny) +- Rename our GH action for container build to a better name (jkonecny) +- Improve the documentation of inst.variant (vponcova) +- Add selinux=0 boot parameter when SELinux is set to disabled (#1882464) + (omosnace) +- Clean up the Payload class (vponcova) +- Update the NVDIMM actions before we generate the output kickstart (vponcova) +- Make the storage available to the NVDIMM module (vponcova) +- Remove the execWithCaptureBinary function (vponcova) +- Remove unused getters from the Subscription spoke (vponcova) +- Remove an unused getter from the NetworkControlBox class (vponcova) +- Remove the URLType enum (vponcova) +- Remove the method_type property from the source classes (vponcova) +- Remove the subscription-related unused code (vponcova) +- Remove the DBus method GetPartitioned (vponcova) +- Remove the active attribute from the FSSet class (vponcova) +- Remove the short_label attribute from the BootLoaderImage class (vponcova) +- Remove the can_dual_boot attribute from the Bootloader class (vponcova) +- Remove the langcode_matches_locale function (vponcova) +- Remove unused properties from the GeocodingResult class (vponcova) +- Remove payload-related unused code (vponcova) +- Remove unused code (vponcova) +- kickstart.py: fix typo (kai.kang) +- Remove the debug flag (vponcova) +- Add workaround to fix support for installtree without repo (jkonecny) +- Build container image only if the container files changed (jkonecny) +- Names of signal handlers should have the on_ prefix (vponcova) +- Move UI test to a directory (vslavik) +- Move Storage module tests to directories (vslavik) +- Move Localization module tests to directory (vslavik) +- Change documentation - it's not required to build the container (jkonecny) +- Push also latest tag just for master container (jkonecny) +- Push new image only if unit tests went well (jkonecny) +- Add GH workflow to build and push master container to registry (jkonecny) +- Add anaconda-ci-push to Makefile to push container (jkonecny) +- Use our container registry to tag anaconda-ci container (jkonecny) +- Rename ci-tasks container to anaconda-ci (jkonecny) + +* Fri Oct 23 2020 Martin Kolman - 34.10-1 +- Move the code for the kernel package selection to new functions (vponcova) +- Remove the support for PAE (vponcova) +- Move Timezone module tests to a directory (vslavik) +- Move Subscription module tests to a directory (vslavik) +- Move Boss module tests to a directory (vslavik) +- Move common module tests to a directory (vslavik) +- Add directory for module tests (vslavik) +- Move UI tests to a directory (vslavik) +- Move core tests to directory (vslavik) +- Do not exclude English from available languages (vslavik) +- Add ELN support (sgallagh) +- Fix testing target branch instead of PR branch (jkonecny) +- Remove the old support for the requirements (vponcova) +- Move the code for the requirements of the DBus modules to the Boss module + (vponcova) +- Move the requirements for FIPS to the Security module (vponcova) +- Move the code for the driver disk requirements to a new function (vponcova) +- Move the code for platform requirements to a new function (vponcova) +- Move the code for language requirements to new functions (vponcova) +- Remove the support for language groups (vponcova) +- Use constants for the types of requirements (vponcova) +- Move constants to prevent circular dependency (vslavik) +- Hardening of our GH action event trigger (jkonecny) +- network: handle None values of team configuration correctly (rvykydal) +- Verify RPM exists before running it (vslavik) +- Relabel the anaconda logs after copying them to the installed system + (jstodola) +- post-scripts need to be sorted (honza.stodola) +- Fix ci-tasks container shell instructions (mpitt) +- Collect pylint and nosetests logs in validate workflow (mpitt) +- Clean up s390 partitioning check (#1855724) (vslavik) +- Show test-suite.log in validate workflow on failure (mpitt) +- More aggressive pylint downscaling (mpitt) +- Fix pylint downscaling (mpitt) +- fix “0 storage devices selected”abnormality (69908158+xqrustc2020) + +* Wed Oct 14 2020 Martin Kolman - 34.9-1 +- Add link to metacity enums schema (mpitt) +- Fix local tests run inside of container (jkonecny) +- Clean up the live image payload module (vponcova) +- Calculate required space from sources (vponcova) +- Provide the set-up and tear-down tasks of the live image source (vponcova) +- Use sources in the live image payload (vponcova) +- Create a DBus structure for the live image (vponcova) +- Create a basic file structure for the live image source (vponcova) +- Restrict pylint parallelism to available RAM (mpitt) +- Fix crash on nonexisting network config directories (mpitt) +- Allow running tests with docker (mpitt) +- Clean up container build/run rules and variables (mpitt) +- Robustify GitHub actions runner download in ci-tasks container (mpitt) +- Add variable for extra labels to GitHub action runner entry point (mpitt) +- Don't stop unit tests when the tests failed (jkonecny) +- Document possibility to run container tests without autotools (jkonecny) +- Make it possible to call make -f Makefile.am (jkonecny) +- Don't ignore the timezone kickstart command in the tests (vponcova) +- Run validate workflow in ci-tasks container (mpitt) +- Fix SECTION headers in docstrings (mpitt) +- Add GitHub actions runner to ci-tasks container (martin) +- Make it easier to run make commands (jkonecny) +- Remove support for the nfsiso: pseudo-protocol (vslavik) +- Fix formatting of contribution guidelines document (jkonecny) +- Fix missing space in Makefile (jkonecny) +- Add more options how to start the tests container (jkonecny) +- Fix dependency_solver to not require spec file for pip dependencies + (jkonecny) +- Add container workflow to tests README file (jkonecny) +- Add Makefile target to run tests in container (jkonecny) +- Add Makefile target to build container (jkonecny) +- Add Dockerfile for anaconda unit-tests (jkonecny) +- Allow to format selected DASDs (vponcova) +- Test for wrong spellings of OSTree (vslavik) +- network: remove function that is not used anymore (rvykydal) +- network: do not create ifcfg files in initramfs (rvykydal) +- network: handle special binding for ifname= also when updating a connection + (rvykydal) +- network: update comments in method for dumping default connections (rvykydal) +- network: update apply kickstart for everything applied in stage2 (rvykydal) +- network: remove task for consolidating of initramfs connections (rvykydal) +- network: remove task for setting real ONBOOT values (rvykydal) +- Run rpm tests in a GitHub action (martin) +- Separate RPM installability test from rpm_tests (martin) +- Define make targets for building source and binary rpms (martin) +- Drop superfluous build in `make run-rpm-tests-only` (martin) +- Fix spelling/name of OSTree (vslavik) +- Remove the inst.singlelang boot option (vslavik) +- Set up proxy environmental variables with a function (vponcova) +- Show in the first screen only translated locales (vslavik) +- Run unit tests in a GitHub action (martin) +- Mark the ostreesetup kickstart command as useless (vponcova) +- Use the RPM OSTree module in the UI (vponcova) +- Implement SetUpSourcesWithTask and TearDownSourcesWithTask (vponcova) +- Finalize the code that sets up and tear downs the RPM OS Tree source + (vponcova) +- Improve the string representation of the RPM OSTree source (vponcova) +- Implement network_required of the RPM OSTree source (vponcova) +- Mock system operations in MountFilesystemsTask task (martin) +- Add missing "rpm-build" test dependency (martin) +- Add missing "make" BuildRequires (martin) +- Fix mock installation/usage instructions (martin) +- Fix nosetests name in tests/README.rst (martin) +- Fix tests/README.rst syntax (martin) +- Stop passing rd.{dm,md,lvm,luks}=0 in installer environment (awilliam) + +* Thu Oct 01 2020 Martin Kolman - 34.8-1 +- fix remove unkown partition in sda failed (69908158+xqrustc2020) +- Fix show missing inst. prefix warning appropriately (#1875561) (jkonecny) +- Fix unit test dependency installation for boolean expressions (martin) +- Drop obsolete Py_Initialize link check in configure (martin) +- Document the mount points of the target system (vponcova) +- fix remove unkown partition in sda failed (69908158+xqrustc2020) +- Import RPM certificates at end of installation (vslavik) + +* Tue Sep 29 2020 Martin Kolman - 34.7-1 +- Remove the Packages module (vponcova) +- Handle the %%packages section in the DNF module (vponcova) +- Create the DBus property Packages (vponcova) +- Create the DBus structure for the packages configuration (vponcova) +- network: commit changes synchronously when dumping autoconnections (rvykydal) +- Run the user instance of systemd (vponcova) +- network: do not bind virtual devices to mac (rvykydal) + +* Fri Sep 25 2020 Martin Kolman - 34.6-1 +- network: split add_and_activate_connection_sync function (rvykydal) +- network: add support for bridged bond to stage 2 kickstart (%%pre) (rvykydal) +- Never mount partitions on a disk with the iso9660 filesystem (vponcova) +- packit: use tar-pax instead of tar-ustar (ttomecek) +- Change default Packit jobs (#1697339) (jkonecny) +- Enable Packit for Anaconda (#1697339) (jkonecny) +- Change text on the Reset All button in custom part. (vslavik) +- Add a rule for translated strings to code conventions (#1619530) (vponcova) +- Never convert translated strings to uppercase (vponcova) +- Never change first letters of translated strings to uppercase (vponcova) +- network: update docstring of clone_connection_async (rvykydal) +- network: add support for vlan over bond to stage 2 kickstart (pre) (rvykydal) +- Move the execute method of the logging command (vponcova) + +* Thu Sep 17 2020 Martin Kolman - 34.5-1 +- Fix the combo box for an URL type of additional repositories (#1879127) + (vponcova) +- Add DBus support for the ostreesetup kickstart command (vponcova) +- Create the structure for RPM OSTree configuration (vponcova) +- Create the RPM OSTree source module (vponcova) +- Create the RPM OSTree module (vponcova) +- network: clone connections from intramfs to persistent config (rvykydal) +- network: set addr-gen-mode of Anaconda default connections to eui64 + (rvykydal) +- network: default to addr-gen-mode eui64 (rvykydal) +- network: do not reset ipv6.addr-gen-mode in tui network configuration + (rvykydal) +- network: get hwadddr when binding to mac more robustly (rvykydal) +- Improve the error dialog for storage reset (vponcova) +- Remove the needs_storage_configuration property (vponcova) +- Remove the is_hmc_enabled property (vponcova) +- Remove the install_device attribute (vponcova) +- Move the proxy property to the base payload class (vponcova) +- Fix CDN button visibility (mkolman) +- subscription: Assure payload restart on DVD install after registration + (mkolman) +- Remove the handles_bootloader_configuration property (vponcova) +- Run the CreateBLSEntriesTask task (vponcova) +- Add the CreateBLSEntriesTask task (vponcova) +- Call the DBus method InstallBootloaderWithTasks (vponcova) +- Add the CreateRescueImagesTask task (vponcova) +- Call the DBus method GenerateInitramfsWithTasks (vponcova) +- Add the RecreateInitrdsTask task (vponcova) +- network: set addr-gen-mode of Anaconda default connections to eui64 + (rvykydal) +- network: default to addr-gen-mode eui64 (rvykydal) +- network: do not reset ipv6.addr-gen-mode in tui network configuration + (rvykydal) +- network: get hwadddr when binding to mac more robustly (rvykydal) +- subscription: Only restart payload when needed (mkolman) +- Document the restart_payload argument of subscription helper functions + (mkolman) +- network: fix missing log message argument (rvykydal) +- Propagate verify_ssl to RHSM (mkolman) +- Check if original partitions are mounted, too (vslavik) +- network: do not add superfluous quotes to inst.dhcpclass identifier + (rvykydal) +- Add the DBus method IsDeviceShrinkable (#1875677) (vponcova) +- Show warning message when entered size is not valid (vslavik) +- Extend unit tests for generate_device_factory_request (vponcova) +- Differentiate between RAID levels of a device and its container (vponcova) +- Don't generate container data for non-container device types (vponcova) +- network: fix parsing of hostname from ip= if mac is defined in dhcp + (rvykydal) +- network: fix inst.dhcpclass boot option (rvykydal) +- Do not push pot files just tell user that he should update (jkonecny) +- Add support for booting installation media with plain SquashFS (bkhomuts) +- Do not check ro mount in Dracut for overlay (jkonecny) +- network: apply kickstart network --nodefroute also from stage2 (rvykydal) +- list major common keyboard layouts first (suanand) + +* Mon Sep 07 2020 Martin Kolman - 34.4-1 +- Apply onboot policy even when network was configured in UI. (rvykydal) +- network: fix kickstart network --dhcpclass option (rvykydal) +- network: use constants instead of enum to hold stirng values of connection + type (rvykydal) +- network: fix using of values of NMConnectionType enum (rvykydal) +- Always clear treeinfo metadata (#1872056) (jkonecny) +- Do not check ro mount in Dracut for overlay (jkonecny) +- Propagate a lazy proxy of the storage model (vponcova) +- Add TODO to check if biospart support is required for DUD (jkonecny) +- Remove failure messages about not supported biospart (jkonecny) +- Switch to a new HardDrive command version with removed biospart (jkonecny) +- Make custom storage summary dialog resizeable (1626555) (mkolman) +- network: add constants for NM connection types (rvykydal) +- Recognize systemd.unit=anaconda.target in anaconda-generator (m.novosyolov) +- The underline character should not be displayed (honza.stodola) +- network: create default connection also for slave devices (rvykydal) +- network: remove ONBOOT hack for slave connections (rvykydal) +- network: replace ifcfg module with config_file module (rvykydal) +- network: remove unused functions from ifcfg module (rvykydal) +- network: generate kickstart via NM API (connections) (rvykydal) +- network: get master slaves via NM API (rvykydal) +- network: use NM API to look for config files for DeviceConfigurations + (rvykydal) +- network: use NM API to look for config files when setting final ONBOOT + (rvykydal) +- network: use NM API to look for config files when setting real ONBOOT + (rvykydal) +- network: use NM API to look for config files when applying kickstart + (rvykydal) +- network: use NM API to look for config files when consolidating connections + (rvykydal) +- network: check for missing device config via NM api (rvykydal) +- network: use underscore in the names of slave devices created from kickstart + (rvykydal) +- network: log also content of keyfiles (rvykydal) +- We won't support inst.ks=bd: (jkonecny) +- network: do not enforce network standalone spoke on default source (rvykydal) + +* Tue Sep 01 2020 Martin Kolman - 34.3-1 +- Move slower part of Subscription spoke initialization to a thread (mkolman) +- Add test to detect every RW mount command in Dracut (jkonecny) +- subscription: Convert the RHSM default config values to expected format + (mkolman) +- Implement get_source_proxy() in payload base class (mkolman) +- Use spec file macros for all requires version specifications (jkonecny) +- Fix spec macro for version name (jkonecny) +- Correctly work with package boolean logic in our setup scripts (jkonecny) +- Wait for payload initialization to finish in Subscription spoke (mkolman) +- Unify usage of BootLoaderArguments add() & update() (vslavik) +- Rename Arguments to BootLoaderArguments (vslavik) +- Remove usage of OrderedSet (vslavik) +- Add tests for the boot loader Arguments class (vslavik) +- Do not mount as RW in Dracut (jkonecny) +- network: do not crash when updating a connection without wired settings + (rvykydal) +- Fix traceback when removing additional repository (jkonecny) +- subscription: Handle cases where CDN should not be the default (mkolman) +- subscription: Set DNF payload source via config file option (mkolman) +- subscription: Manual CDN selection support (mkolman) +- subscription: Handle source switching at registration/unregistration + (mkolman) +- subscription: Introduce the default_source configuration option (mkolman) +- Use "raise from" to link exceptions (vslavik) +- Fix branching documentation (mkolman) +- Change keyboard ordering to US layout first, 'native' second. Resolves: + rhbz#1039185 (suanand) +- Remove docs where we tell users that inst. prefix is not required (jkonecny) +- Print warning for boot options without inst. prefix (jkonecny) +- Add missing dracut commands as missing inst. prefix warning (jkonecny) +- Enable warning when inst. prefix is not used (jkonecny) +- Reset the state of the custom partitioning spoke (vponcova) +- Reset the RAID level of the device request (#1828092) (vponcova) +- Protect all devices with the iso9660 file system (vponcova) +- Don't ignore NVDIMM devices with the iso9660 file system (vponcova) +- Add tests for the DBus method FindOpticalMedia (vponcova) +- Fix everything in payload should be mounted as read only (jkonecny) +- Add support for mount options to device_tree.MountDevice (jkonecny) +- Adapt tests for CDRom for the new inst.stage2 discovery (jkonecny) +- CDRom source should prioritize stage2 device during discover (jkonecny) + +* Fri Aug 21 2020 Martin Kolman - 34.2-1 +- Fix dependency_solver failure with spec file boolean logic syntax (jkonecny) +- Avoid unnecessarily pulling in glibc-langpack-en (sgallagh) +- Set up the ignored_device_names variable (vponcova) + +* Thu Aug 20 2020 Martin Kolman - 34.1-1 +- network: do not try to activate connection that has not been found (rvykydal) +- network: add timeout for synchronous activation of a connection (rvykydal) +- network: fix configuration of virtual devices by boot options (rvykydal) +- Handle exceptions from threads without new instances (vslavik) +- Do not use disabled --install-scripts command of pip (jkonecny) +- Use bootlist command to update the PowerPC-64 Boot Order (javierm) +- Discard current boot list when updating the boot-device NRVAM variable + (javierm) +- Automatically break lines in labels in software selection spoke (vslavik) +- Set up FIPS in the target system (vponcova) +- Update the service anaconda-sshd (vponcova) +- Set up FIPS in the installation environment (vponcova) +- Add Blivet version to generated kickstart (vslavik) +- Add Anaconda version to saved kickstart (vslavik) +- Fix kickstart file error with user groups (kai.kang) +- Get rid of add_disable_repo (jkonecny) +- Move parts together in the DNF repo (jkonecny) +- Fix issue that treeinfo repositories were never disabled (jkonecny) +- Keep treeinfo repositories disabled after payload reset (jkonecny) +- Fix crash on first entering of source spoke (jkonecny) +- Remove treeinfo repositories instead of disabling (jkonecny) +- Reload treeinfo repositories on every payload reset (jkonecny) + +* Mon Aug 10 2020 Martin Kolman - 33.25-1 +- Fix our tests with a newer rpmfluff library (jkonecny) +- network: pass also keyfile NM configuration to target system (#1858439) + (rvykydal) +- Unify the indentation in the Anaconda configuration files (vponcova) +- Remove the DBus method ConfigureNTPServiceEnablementWithTask (vponcova) +- Create ssh user using only existing fields (#1860058) (vslavik) +- Fix the position of the info bar in standalone spokes (vponcova) +- Add the function is_service_installed (vponcova) +- Drop the dependency on python3-ntplib (vponcova) +- Remove Blivet's tests (vponcova) +- Remove gui tests (vponcova) +- Generate the coverage report for tests (vponcova) +- Fix the util tests (vponcova) +- Simplify the regex tests (vponcova) +- Fix the module tests (vponcova) +- Clean up the driver tests (vponcova) +- Fix the kickstart dispatcher tests (vponcova) +- Fix the localization tests (vponcova) +- drop workarounds for the TLS exhaustion issue on aarch64 and ppc64le (dan) + +* Fri Jul 31 2020 Martin Kolman - 33.24-1 +- Run actions of the Resize dialog in the reversed order (#1856496) (vponcova) +- Reset repositories from the main thread (vponcova) +- Initialize the closest mirror from the main thread (vponcova) +- Remove the mirrors_available property (vponcova) +- Rename ActivateFilesystemsTask (vponcova) +- Document the Anaconda configuration files (vponcova) +- Remove the encrypted attribute (vponcova) +- subscription: Fix rhsm --proxy kickstart command usage with no username + specified (mkolman) +- subscription: Fix RHSM HTTP proxy configuration crash in the GUI (mkolman) +- Log the information about the original exception (vponcova) +- Update the documentation of the Anaconda sysconfig file (vponcova) +- Make spoke tiles stack more tightly (vslavik) +- Add NTS support to time sources in GUI (mlichvar) +- Add connection test for NTS (mlichvar) +- Parse NTP server options from config file (mlichvar) +- Run bash instead of sh in rescue mode (vslavik) + +* Thu Jul 16 2020 Martin Kolman - 33.23-1 +- Mangle Fedora IoT Edition product identifier to "Fedora-IoT" (ngompa13) +- Fix creating cached LVs on encrypted PVs (vtrefny) +- Add Fedora IoT product override (ngompa13) + +* Tue Jul 14 2020 Martin Kolman - 33.22-1 +- Add support for the timesource kickstart command (vponcova) +- Use the structure for time sources in GUI (vponcova) +- Use the structure for time sources in TUI (vponcova) +- Add support for generating a summary of the NTP servers (vponcova) +- Add support for the NTP server status cache (vponcova) +- Use the structure for time sources in network.py (vponcova) +- Use the structure for time sources in anaconda.py (vponcova) +- Use the structure for time sources in the Timezone module (vponcova) +- Use the structure for time sources in ntp.py (vponcova) +- Create a new DBus structure for time sources (vponcova) +- Replace the zram service (vponcova) +- Fix software spoke message when source changes (mkolman) +- ostree: set rootflags when installing on btrfs (#1753485) (dcavalca) +- Only pass one initrd image to kexec (javierm) +- Prevent crash on unregistration (mkolman) +- Add LVM with inconsistent sector size disks to common bugs (jkonecny) +- Don't create swap by default (vponcova) +- Don't require fcoe-utils (vponcova) +- Temporarily ignore the new timezone kickstart command (vponcova) +- Schedule timed actions with the right selector (#1851647) (vponcova) +- Reconfigure DNF payload after options are set (vslavik) +- Fix displaying of empty software group description (rvykydal) +- Fix passing of arguments when creating dracut arguments for FCoE (rvykydal) +- network: fix obtaining of s390 options of a wired connection (rvykydal) +- Exclude stderr from returned output when executing powerpc-utils tools + (javierm) +- Fix imports of Blivet-GUI in unit tests (vponcova) +- Don't mount DBus sources at /run/install/source (vponcova) +- Always specify the boot disk (vponcova) +- Create the initial storage model during the initialization (vponcova) +- Use LUKSDevice.raw_device instead of LUKSDevice.slave (vtrefny) +- Use modinfo to check ko before modprobe (t.feng94) +- Fix EFI bootloader install (#1575957) (butirsky) + +* Wed Jul 08 2020 Martin Kolman - 33.21-1 +- Use Btrfs for all Fedora variants installed by Anaconda except Server + (ngompa13) +- Remove the support for language filtering (vponcova) +- Remove the support for locale filtering (vponcova) +- Don't override the eula command with the same command (vponcova) +- Improve logs for validation of stage1 and stage2 devices (vponcova) +- Document an issue with invalid partitioning in the output kickstart file + (vponcova) +- Remove support for check_supported_locales (vponcova) +- Remove the support for Fedora Atomic Host (vponcova) +- Move Subscription spoke under Software (vslavik) +- Update the function get_default_partitioning (vponcova) +- Update the property default_partitioning (vponcova) +- Change the default_partitioning option (vponcova) +- Fix hiding of network device activation switch (#1847493) (rvykydal) +- Typo fix (sh.yaron) + +* Mon Jun 22 2020 Martin Kolman - 33.20-1 +- Add test for NFS URL with ISO in path (#1848718) (jkonecny) +- Fix issue when NFS path is pointing directly to ISO (#1848718) (jkonecny) +- Rename function for a simple check for DNF repository (jkonecny) +- Add tests for verify_valid_installtree function (#1844287) (jkonecny) +- Move verify_valid_installtree to source module utils (#1844287) (jkonecny) +- Do not test if repo is valid based on .treeinfo file (#1844287) (jkonecny) +- Relabel whole /etc instead of only some parts (vslavik) +- Clean up lists of files and directories to relabel (vslavik) +- Use allowlist and blocklist in the Anaconda configuration file (vponcova) +- Correctly set up the LUKS version when we click on a mount point (#1689699) + (vponcova) +- Fix the mock function for DBus.get_proxy (vponcova) +- Fix the mock function for DBus.get_proxy (vponcova) +- Simplify the workaround for the RHSM configuration proxy (vponcova) +- Show pylint version in logs (vslavik) +- Don't use the private attribute for a message bus (vponcova) +- Ignore unknown variable (vslavik) +- Split storage spoke dialogs to a separate module (vslavik) +- Fix more SElinux contexts (vslavik) +- Fix regression reading kernel list when collecting configurations (#1846156) + (jkonecny) + +* Mon Jun 15 2020 Martin Kolman - 33.19-1 +- Document common issues and bugs (vponcova) +- Add logging messages to %%post scripts (vslavik) +- Don't prompt the user to ssh in VNC installations (vponcova) +- Extend the function prompt_for_ssh (vponcova) +- Allow having /boot on a btrfs volume (i.gnatenko.brain) +- network: do not parse IPADDR0 anymore (rvykydal) +- Do not use kwargs when creating network_data from ifcfg file (rvykydal) +- Extend unit tests for generating network data from ifcfg file (rvykydal) +- Fix updating of user gid/uid value checkbox in gui (rvykydal) +- Fix crash on user uid/gid unchecked in gui (rvykydal) +- Add daily build status badge (jkonecny) +- Fix the pylint warning in the Payloads module (vponcova) +- Add pointer to kickstart tests to tests README (rvykydal) +- resolved a user created password verification issue that could not exit + (57519382+huzunhao) +- Don't use data.method.proxy (vponcova) +- Use sshd_config drop in directory to allow root login (jjelen) +- localization: do not crash on failed parsing of X layout (#1836047) + (rvykydal) +- Catch Blivet's exceptions when we reset a device (#1843278) (vponcova) +- Fix wireless network configuration on get_ssid() returning None (#1838357) + (rvykydal) +- Unify definition of directory for ifname and prefixdevname config (rvykydal) +- Use constants when mocking paths for network installation test (rvykydal) +- Create /etc/systemd/network dir for ifname= renaming if needed. (rvykydal) +- Use the Blivet's property is_empty (vponcova) + +* Wed Jun 03 2020 Martin Kolman - 33.18-1 +- Set up LD_PRELOAD for the Payloads module (vponcova) +- Extend the start-module script (vponcova) +- subscription: Fix authentication method switching in GUI (mkolman) +- subscription: Make sure CDN repos are loaded and usable (mkolman) +- Add NFS ISO support back to the NFS SetupSourceTask (jkonecny) +- Add NFS ISO support to the NFSSourceModule (jkonecny) +- Tear down HDD device mount if no valid installation source is found + (jkonecny) +- Extract ISO find algorith from harddrive (jkonecny) + +* Mon Jun 01 2020 Martin Kolman - 33.17-1 +- Update required ack in makebumpver script for rhel > 7 (rvykydal) +- Close responses from session.get (vponcova) +- Improve the documentation of the SetUpMountTask class (vponcova) +- Raise an exception if the source's mount point is not unmounted (vponcova) +- Change the default source to CDROM (vponcova) +- Don't set up sources in the refresh method of the Source spoke (vponcova) +- Make cppcheck ignore the G_DEFINE_TYPE macros (vslavik) +- Fix issue that unified ISO from URL is not loaded (jkonecny) +- Add split_protocol payload helper function (jkonecny) +- Fix string based on translator comments (vslavik) + +* Mon May 25 2020 Martin Kolman - 33.16-1 +- subscription: Only require Insights package if subscribed (mkolman) +- subscription: Do not pass payload to unregister() helper function (mkolman) +- subscription: Fix typos related to ParseAttachedSubscriptions task (mkolman) +- subscription: Make sure /etc/yum.repos.d exists (mkolman) +- subscription: Fix disconnect() for RHSM observer (mkolman) +- subscription: Fix SystemPurposeData equality checking (mkolman) +- subscription: Set RHSM configuration before registration attempt (mkolman) +- subscription: Initial CDN source switching (mkolman) +- subscription: Fix Insights configuration in GUI (mkolman) +- subscription: Fix setting username to SubscriptionRequest in GUI (mkolman) +- Change connection flags for the RHSM private bus (vponcova) +- Create a proxy of the RHSM Config object for a specific interface (vponcova) +- Skip the btrfs command if deprecated (vponcova) +- Use a specific kickstart version in handle-sshpw (vponcova) +- Avoid concatenation of iso name twice (jkonecny) +- Do not mount harddrive sources as RO (jkonecny) +- Fix the access to a DBus proxy of the Subscription module (vponcova) +- Set up LANG for tests (vponcova) +- Resolve traceback when HDD ISO is not found (jkonecny) +- Don't set up the HMC source again (vponcova) +- Remove the changed property of the Source spoke in GUI (vponcova) +- Specify the default source type for the DNF payload (vponcova) +- Support all source types based on repo files (vponcova) +- Use the closest mirror source in UI (vponcova) +- Add a new source for the closest mirror (vponcova) +- Change the description of the repo files source (vponcova) +- Fix adding to the protected devices list (jkonecny) +- Remove not used API of dnf payload (jkonecny) +- Rename GetISOPath to GetIsoPath which is correct API name (jkonecny) +- Fix python3 requires in spec file (rvykydal) +- Use the source proxy to get the device name (vponcova) +- Collect package requirements of the Subscription module (vponcova) +- Add ignored field to rpm_tests (rvykydal) +- Require subscription manager on rhel (rvykydal) +- Remove the property is_iso_mounted (vponcova) +- Run the set-up tasks of sources with signals enabled (vponcova) +- Set default url type combobox value (jkonecny) +- Fix lang_locale_handler have payload property from parents (jkonecny) +- Remove kickstart sources from GUI (vponcova) +- Remove kickstart sources from TUI (vponcova) +- Log the result of the HDD set-up task (vponcova) +- Always try to unmount the HDD ISO (vponcova) +- Fix typo resulting to use mirrorlist instead of metalink (jkonecny) +- Handle DBus errors of the task returned by SetUpSourcesWithTask (vponcova) +- Remove useless attributes from the class Anaconda (vponcova) +- Remove kickstart sources from anaconda.py (vponcova) +- Remove kickstart sources from the class DNFPayload (vponcova) +- Call nose python module instead of nosetests binary (jkonecny) +- root spoke: set value of root ssh login checkbox from module (rvykydal) +- users module: fix check of existence of admin user (rvykydal) +- Always clear kickstarted status for GUI time&date spoke (vslavik) +- Always protect CD-ROM devices (vponcova) +- Fix the DBus task that sets up the SE/HMC source (vponcova) +- Move lxml test dependency from pip to RPM (jkonecny) +- subscription: Show data about attached subscriptions (mkolman) +- Setup RHEL rebuilds to exclude + org.fedoraproject.Anaconda.Modules.Subscription (riehecky) +- Tear down sources before setting new one in SourceSwitchHandler (jkonecny) +- Remove unused properties from SourceSwitchHandler (jkonecny) +- Migrate set Closest mirror of SourceSwitchHandler (jkonecny) +- Migrate set HMC of SourceSwitchHandler to source modules (jkonecny) +- Migrate set CDROM of SourceSwitchHandler to source modules (jkonecny) +- Migrate set NFS of SourceSwitchHandler to source modules (jkonecny) +- Migrate set URL of SourceSwitchhandler to source modules (jkonecny) +- Implement the DBus methods SetUpSourcesWithTask and TearDownSourcesWithTask + (vponcova) +- Move removal of blivet-gui in rhel upstream (rvykydal) +- Migrate set HDD of SourceSwitchHandler to source modules (jkonecny) +- Migrate SourceSwitchHandler to use module for cleanups (jkonecny) +- Add payload property to SourceSwitchHandler (jkonecny) +- Avoid imports from blivet.devicefactory (vponcova) +- Mark kickstart commands of RPM sources as useless (vponcova) +- Generate kickstart from the Payloads module (vponcova) + +* Tue May 19 2020 Martin Kolman - 33.15-1 +- Update the bootloader configuration after live installation (javierm) +- subscription: Registration button sensitivity handling (mkolman) +- subscription: Make credential checking functions usable in GUI (mkolman) +- Add exclude to the dependency_solver (jkonecny) +- Add the method is_complete to the class DNFPayload (vponcova) +- Add the property source_type to the class DNFPayload (vponcova) +- Add the method get_source_proxy to the class DNFPayload (vponcova) +- Fix call to super() with missing parameters (vslavik) +- Change string according to translator comments (vslavik) +- Remove gjs dependency exclude which is no more needed with anaconda-live + (rvykydal) +- Remove sphinx test dependency (jkonecny) +- Extend the objects for parsing the cmdline installation method (vponcova) +- Add functions to set up and tear down of DBus sources (vponcova) +- Switch call of pip3 to python3 -m pip (jkonecny) +- Move for_publication as second method in sources (jkonecny) +- Move sources private methods on top of the file (jkonecny) +- Fix RPMSourceMixin class documentation (jkonecny) +- Switch MountingSourceBase to MountingSourceMixin (jkonecny) +- Remove tear_down_with_tasks from MountingSourceBase (jkonecny) +- Do not implement get_state in MountingSourceBase (jkonecny) +- Change gui test relative imports to absolute (vslavik) +- Disable spurious pylint warning (vslavik) +- Add CDN source (vslavik) +- Test the DBus method IsNetworkRequired (vponcova) +- Add the DBus method IsNetworkRequired (vponcova) +- Detect HTTPS as a protocol that requires the network (michel) +- Remove unused variable (vslavik) + +* Thu May 14 2020 Martin Kolman - 33.14-1 +- subscription: Hook up state update methods (mkolman) +- subscription: Make it possible to register/unregister from the GUI (mkolman) +- subscription: Register & subscribe during automated installation (mkolman) +- subscription: Add asynchronous registration helper functions (mkolman) +- subscription: Add IsRegistered property (mkolman) +- Add functions for DBus sources (vponcova) +- Implement DeviceName API for CDrom payload source (jkonecny) +- Return device name from SetUpCdromSourceTask (jkonecny) +- Add GetISOPath HardDrive payload source API (jkonecny) +- subscription: Add the ParseAttachedSubscriptionsTask (mkolman) +- Add new Hard drive source property to tell that iso is used (jkonecny) +- Change return of SetUpHardDriveSourceTask (jkonecny) +- Add __repr__ to payload sources (vslavik) +- Create a DBus proxy of the DNF module (vponcova) +- Work around pylint 2.5.0 issue with _ in warning id (vslavik) +- subscription: Add network connectivity check to the Subscription spoke + (mkolman) +- Split find_and_mount_iso_image source helper func (jkonecny) +- subscription: Add main Subscription spoke structure (mkolman) +- Add the DBus method ActivatePayload (vponcova) +- Add the DBus property CreatedPayloads (vponcova) +- Replace the DBus method GetActivePayload with a property (vponcova) +- subscription: Add helper functions for Subscription spoke (mkolman) +- Remove the DBus method IsPayloadSet (vponcova) +- subscription: Add glade file for Subscription spoke (mkolman) +- subscription: Simplify system purpose configuration (mkolman) +- subscription: Implement equality testing for SystemPurposeData (mkolman) +- subscription: Add check_system_purpose_set() helper function (mkolman) +- Add generate_repo_configuration for URL payload source (jkonecny) +- Add gererate_repo_configuration for all mount sources (jkonecny) +- Add GetRepoConfigurations API for DNF payload (jkonecny) +- Create ABC class declaring interface for RPM sources (jkonecny) +- Add the combo box for choosing a LUKS version in the container dialog + (#1714120) (vponcova) +- Use the combo box for choosing a LUKS version only for encrypted devices + (vponcova) +- Provide the LUKS version of the encrypted container (vponcova) +- Add the function set_container_data (vponcova) + +* Thu May 07 2020 Martin Kolman - 33.13-1 +- Remove a missed use of has_source() to fix tests (vslavik) +- Change string to new format (vslavik) +- Add DBus property Description for all sources (vslavik) +- subscription: Add AttachedSubscription DBus structure (mkolman) +- Pre-select disk initialization mode in TUI (honza.stodola) +- Remove the HasSource D-Bus function (vslavik) +- Add kickstart support to URL payload source (jkonecny) +- Add NFS source kickstart support (jkonecny) +- Add function to create NFS from components (jkonecny) +- Move ProxyString to core.payload (jkonecny) +- Move parse_nfs_url to the new core/payload file (jkonecny) +- Fail on harddrive --biospart in HDD payload source (jkonecny) +- Add kickstart support for HDD payload source (jkonecny) +- Add SE/HMC payload source kickstart support (jkonecny) +- Add CDROM payload source kickstart support (jkonecny) +- Pick HMC as the last DNF source when processing KS data (jkonecny) +- Add DNF module kickstart processing for sources (jkonecny) +- subscription: Run installation tasks of the Subscription module (mkolman) +- subscription: Add is_module_available() utility function (mkolman) +- Ignore the required package dmraid in RHEL (honza.stodola) +- subscription: Attach subscription task (mkolman) +- subscription: Add unregistration task (mkolman) +- Activate the set/remove buttons in the "Select disks and boot loader" window + only when a disk is selected (honza.stodola) +- Properly update UI after removing the boot device (honza.stodola) +- Do not offer disk selection when encrypting existing partition + (honza.stodola) +- Destroy the disk selection dialog on escape (honza.stodola) +- Add the DBus method GetModules to the Boss service (vponcova) +- subscription: Fix registration tasks docstring typo (mkolman) +- Add payload source __repr__ support to improve logging (jkonecny) +- Fix calling payloads service with empty kickstart (jkonecny) +- Rename check_set_sources to set_and_check_sources (jkonecny) +- Create two parts of the set_check_sources payload test (jkonecny) +- Add payload base add_source() module scope API (jkonecny) +- Fix payload log message (jkonecny) +- Add new commands for DNF payload recognition (jkonecny) +- Disable %%packages from DNF module (jkonecny) +- Add new supported sources to DNF payload (jkonecny) +- Add kickstart commands for DNF payload (jkonecny) +- Use new F33 Repo command from pykickstart (jkonecny) +- subscription: Add subscription related package requirements (mkolman) +- subscription: Add registration tasks (mkolman) +- subscription: Add RegistrationError exception (mkolman) +- network: don't try to use DeviceConfigurations on live cd (#1827999) + (rvykydal) +- subscription: Add TransferSubscriptionTokensTask (mkolman) +- subscription: Add RestoreRHSMLogLevelTask (mkolman) + +* Wed Apr 29 2020 Martin Kolman - 33.12-1 +- Add tests for ReadKickstart (vponcova) +- Remove pyanaconda.storage (vponcova) +- Move the initialization functions from pyanaconda.storage (vponcova) +- Move create_storage from pyanaconda.storage (vponcova) +- Move the model from pyanaconda.storage (vponcova) +- Move the utils from pyanaconda.storage (vponcova) +- Move the installation functions from pyanaconda.storage (vponcova) +- Move the storage checker from pyanaconda.storage (vponcova) +- Move pyanaconda.platform (vponcova) +- Move PartSpec from pyanaconda.storage (vponcova) +- Don't use pyanaconda.platform in UI (vponcova) +- Separate the "Reset All" button from the edge of the screen (honza.stodola) +- Fix the warning messages from ReadKickstart (vponcova) +- Unify module source test variable names (vslavik) +- Add resolv.conf to log-capture (riehecky) +- Reload NTP server list in dialog on every run (vslavik) +- Fix the line number in the kickstart message data (vponcova) +- Remove TODO to solve is_ready for payload sources (jkonecny) +- Use the new task class with the harddrive source (vslavik) +- Detect the live OS image automatically (vponcova) +- Add constants for the source types (vponcova) +- Exclude liveimg from the kickstart command method (vponcova) +- Access the kickstart command liveimg directly (vponcova) +- Create a base class for live payloads (vponcova) +- Remove pyanaconda.payload.livepayload (vponcova) +- Run %%onerror and %%traceback scripts for all types of exceptions (vponcova) +- gui source spoke: fix the key used to check proxy for additional repo + (rvykydal) +- Respect changesok password policy for root password (#1584145) (rvykydal) +- rootpw gui: make root spoke insensitive if rootpw is set in ks (#1584145) + (rvykydal) +- subscription: RHSM runtime configuration support (mkolman) +- Move the bootloader-related code to the module (vponcova) +- Add the is_ready method to the Payload class (vponcova) +- Rename NOT_SUPPORTED to NOT_APPLICABLE (jkonecny) +- subscription: Add missing declaration for rhsm_observer property (mkolman) +- subscription: Fixup a docstring (mkolman) +- Remove payload tests for empty sources (jkonecny) +- Improve HDD payload source test (jkonecny) +- Change tests for new payload ready states (jkonecny) +- Use new source states in payload sources (jkonecny) +- Create source state enum (jkonecny) +- date time gui: no empty space in combo for day and month selection (#1823130) + (rvykydal) +- Reset the partitioning of Blivet-GUI (#1826286) (vponcova) +- Remove the logic with sources from the network standalone spoke (vponcova) +- Move remaining DNF-related code to the DNF payload (vponcova) +- subscription: Add SystemPurposeConfigurationTask (mkolman) +- Rename payload source is_ready to get_state (jkonecny) +- Remove the tip about the user name (#1823015) (vponcova) +- Add payload base tests (jkonecny) +- Improve payload shared test source creation (jkonecny) +- Fix exception string when incompatible payload source (jkonecny) +- Translate names of OS installations on demand (#1823126) (vponcova) +- subscription: Add helper function to SystemPurposeData DBus structure + (mkolman) +- network tui: fix getting of network device configurations (#1823011) + (rvykydal) + +* Tue Apr 21 2020 Martin Kolman - 33.11-1 +- Reset the partitioning of Blivet-GUI (#1826286) (vponcova) +- Fix the validation of a device label (#1823221) (vponcova) +- Use the new base classes in sources (vslavik) +- Add base classes for mounting sources (vslavik) +- Add test if the spokes ordering is correct (jkonecny) +- Fix ordering of spokes with the same priority (jkonecny) +- Fix TUI Kernel and Unsupported HW spokes ordering (jkonecny) +- Switch collecting & ordering action classes to static (jkonecny) +- Add TUI/GUI tests for standalone spokes priority (jkonecny) +- Use join_paths instead of os.path.join in sources (vslavik) +- Get ui/__init__.py closer to pep8 (jkonecny) +- Allow to remove incomplete devices (#1823232) (vponcova) +- subscription: RHSMObserver & StartRHSMTask (mkolman) +- Make sure that the summary button is really hidden (#1823467) (vponcova) +- Use default priority in the GUI spokes (jkonecny) +- Fix TUI spokes priorities (jkonecny) +- Add back default priority for standalone spokes (jkonecny) +- subscription: Add initial RHSM DBus API identifiers (mkolman) +- Install scripts at /usr/bin (vponcova) +- Remove mock from the test dependencies (vponcova) +- Install test dependencies from pip when possible (vponcova) +- Fix the indentation of the test dependencies (vponcova) +- Expand the selector with swap (#1823127) (vponcova) +- Fix default value for pwpolicy emptyok (#1664704) (mkolman) +- Only quit GTK mainloop on GUI quit request (#1643111) (mkolman) +- Print correct message if no linux partitions were found in rescue mode + (#1823222) (honza.stodola) +- Use black color for errors in bottom bar (#1823004) (honza.stodola) + +* Thu Apr 16 2020 Martin Kolman - 33.10-1 +- subscription: Implement install_with_tasks() method (mkolman) +- subscription: Add the IsSubscriptionAttached property (mkolman) +- subscription: Add ConnectToInsights task (mkolman) +- Create product configuration files for Red Hat Virtualization (vponcova) +- Create the configuration section Storage Constraints (vponcova) +- Extend tests for the default storage checker (vponcova) +- Represent the constraint STORAGE_MIN_RAM by an instance of Size (vponcova) +- Remove the constraint STORAGE_MIN_ROOT (vponcova) +- Extend support for custom storage checking (vponcova) +- Add a new type of the default partitioning for virtualizations (vponcova) +- Add the configuration option default_scheme (vponcova) +- Add the configuration option help_directory (vponcova) +- Accept `harddrive --dir` without absolute paths (jkonecny) +- Make the kickstart support for the btrfs command optional (vponcova) +- Fix non-root dir of install tree HD installation (#1689194) (jkonecny) +- subscription: Add missing pieces for the Subscription DBus module (mkolman) +- Add UI support for the ZIPL Secure boot (vponcova) +- Add DBus support for the ZIPL Secure Boot (vponcova) +- Add code convention to prefer join_paths over os.path.join (jkonecny) +- Add helper function force_path_join (jkonecny) +- Fix get anaconda version test after test file rename (vponcova) +- Rename iutil_test to util_test (jkonecny) + +* Wed Apr 08 2020 Martin Kolman - 33.9-1 +- Fix bad import of general errors (jkonecny) +- Improve code convention code formatting (jkonecny) + +* Wed Apr 08 2020 Martin Kolman - 33.8-1 +- Fix the indentation of false positives (vponcova) +- Don't try to format FBA DASD devices (#1715303) (vponcova) +- Disable the SMT warning by default (vponcova) +- Detect and warn if SMT is enabled (#1684056) (vponcova) +- Use constants to check the type of the payload object (#1820418) (vponcova) +- Provide the DBus types of the payloads (vponcova) +- Add Harddrive (HDD, HDISO) source (vslavik) +- Add utility functions for sources (vslavik) +- subscription: SubscriptionRequest DBus structure (mkolman) +- Remove the abstraction for the event loop (vponcova) +- Upgrade findFirstIsoImage (vslavik) +- Make sure that all Anaconda's DBus errors are registered (vponcova) +- Remove the mapping to a DBus error for KickstartError (vponcova) +- Don't use the default error register (vponcova) +- Set new repo configuration after validation is done (jkonecny) +- Add packaging constrains to URL payload source (jkonecny) +- Add repo cost to the URL payload source (jkonecny) +- Add proxy url to URL payload source (jkonecny) +- Add ssl configuration structure to URL payload source (jkonecny) +- Add ssl verification flag to URL payload source (jkonecny) +- Add Name to the URL payload source (jkonecny) +- Add URL repo configuration to the url source (jkonecny) +- Add empty repository configuration DBus structure (jkonecny) +- Add install_repo_enabled flag to URL payload source (jkonecny) +- Add tests for set up and tear down for url source (jkonecny) +- Add is_ready tests for URL source module (jkonecny) +- Add simple tests for a new URL payload source (jkonecny) +- Add payload URL source base structure (jkonecny) + +* Fri Apr 03 2020 Martin Kolman - 33.7-1 +- Don't clear errors by expanding pages in the custom spoke (vponcova) +- Fix the permission for changing a mount point (#1818500) (vponcova) +- Allow to use an existing unlocked LUKS in one special case (#1772902) + (vponcova) +- Fix the encryption checkbox in the custom spoke (#1819360) (vponcova) +- Don't manually trigger a device encryption change (vponcova) + +* Thu Apr 02 2020 Martin Kolman - 33.6-1 +- Fix the test for complex data with secrets (vponcova) +- Update generate_request_description (vponcova) +- Add support for secrets in DBus structures (vponcova) +- Rename _test_dbus_property to _check_dbus_property (jkonecny) +- Fix text color on info bars (mkolman) +- Add NFS source (vslavik) + +* Tue Mar 31 2020 Martin Kolman - 33.5-1 +- Don't call the DBus method IsNodeFromIbft from the Storage module (#1817529) + (vponcova) +- Use the right partitioning method in the storage spoke (vponcova) +- Improve logging of storage spokes in GUI and TUI (vponcova) +- Don't log an empty string (vponcova) +- Handle translation of an empty string in widgets (#1815461) (vponcova) +- Replace lambda by partial (jkonecny) +- Implement updating changed Anaconda files in a mock (jkonecny) +- Add possibility to add/remove specific dir in mock (jkonecny) +- Remove prepare parameter disable when running tests (jkonecny) +- Add missing arguments from the main command check (jkonecny) +- Move check for required setup-mock commands (jkonecny) +- Simplify test calling in setup-mock-test-env script (jkonecny) +- storage gui: keep expanded mountpoints info on actions in UI by default + (#1210944) (rvykydal) +- Support updating Anaconda files in the mock (jkonecny) +- Handle invalid disk selection (vponcova) +- Set up advanced storage on the right device tree (#1812561) (vponcova) +- Remove storage tests (jkonecny) +- Use the right field of DiskStoreRow (#1816256) (vponcova) +- Add Repo files source (vslavik) +- Clean up and rename parseNfsUrl (vslavik) +- Do not show quarterly release part of the version in UI. (rvykydal) +- Add license to the __main__.py file for DBus modules (mkolman) +- Pass nosmt boot option to installed system (rvykydal) +- Adapt makebumpver to rhel-devel -> rhel-8 branch renaming. (rvykydal) +- Revert "Fix PR tests with mock version 2" (jkonecny) +- Remove the class PackagePayload (vponcova) +- Remove pyanaconda.payload.dnfpayload (vponcova) +- Improve help of dd_extract tool (jkonecny) +- Add missing period in iscsi login failure message. (rvykydal) +- Rename add-ons to additional software (#1674011) (rvykydal) +- Fix dd test RPM generation with binary files (jkonecny) +- Enable back skipped DD test (jkonecny) +- Fix translation of one nvdimm related GUI string (rvykydal) +- Fix memory leak in utils (yubihong) +- Fix code formatting of DUD tests (jkonecny) +- Fix dud test names (jkonecny) +- Small optimization in setup-mock-test-env script (jkonecny) +- Fix setup-test-env for other than pyanaconda tests (jkonecny) +- Create pyanaconda.payload.dnf (vponcova) +- Create pyanaconda.payload.__init__ (vponcova) +- Rename pyanaconda.payload.__init__ (vponcova) +- subscription: add system purpose support (mkolman) +- subscription: run Subscription module on RHEL (mkolman) +- subscription: add initial subscription module structure (mkolman) +- Wrap iscsi login error messages in GUI (#1811382) (rvykydal) +- Add tests for CD-ROM source (vslavik) +- Add CD-ROM source (vslavik) +- Add tests for the new utils file (vslavik) +- Move verifyMedia to sources as is_valid_install_disk (vslavik) +- Add the DBus module for SE/HMC (vponcova) +- Don't return anything from setup_kickstart (vponcova) +- Fix fd leak while fchmod failed (yubihong) + +* Tue Mar 17 2020 Martin Kolman - 33.4-1 +- Remove the configuration of the Blivet's logger (vponcova) +- Support logging of Anaconda DBus modules to files (#1812380) (vponcova) +- Fix a typo in s390 znet options configuration (rvykydal) +- Remove empty lines at the test source file (jkonecny) +- Source type is already tested by Interface (jkonecny) +- Remove the logging from the method process_kickstart (vponcova) +- Don't override the method generate_kickstart (vponcova) +- Show the help again (#1812896) (vponcova) +- gui: make description column of disk list resizable (#1530410) (rvykydal) +- gui: add tooltip to descriptions in disk list (#1530410) (rvykydal) +- gui: ellipsize description in disk list (#1530410) (rvykydal) +- Fix '\' is correctly forwarded by udev rules (jkonecny) +- Add debug print to dracut driver_updates (jkonecny) +- Escape spaces in dracut partition specifications (bcl) +- Rename the file with unit tests for the Payloads module (vponcova) +- Split the code for the source and payload factories (vponcova) +- Remove BaseFactory (vponcova) +- Simplify kickstart processing in the Payloads module (vponcova) +- Replace stat.ST_SIZE by .st_size (jkonecny) +- Module backport to better handling of sparse images (jkonecny) +- Avoid downloading payload image in set up phase (jkonecny) +- Add fallbacks for the source and payload factories (vponcova) +- Test the source and payload factories for all types (vponcova) +- Rename the file with unit tests for the Live OS module (vponcova) +- Test the LVM storage check. (vslavik) +- Verify that LVM destruction is orderly (vslavik) +- Don't set up the locale if none is selected (#1649956) (vponcova) +- network: fix crash during connections consolidation (#1811649) (rvykydal) +- Execute a kickstarted partitioning (#1811242) (vponcova) +- Remove extra quotes from the doc strings (vponcova) +- Remove unused code (vponcova) +- Remove dead dracut code (jkonecny) +- Set liveimg min_size to be x3 the real size (yturgema) + +* Mon Mar 09 2020 Martin Kolman - 33.3-1 +- Fix typos, comments and style in the storage-related code (vponcova) +- Don't add None values to a combo box (#1810679) (vponcova) +- Fix the unit tests for BTRFS (vponcova) +- Adjust documentation for new localization solution (jkonecny) +- Check pykickstart imports are correct in branching (jkonecny) +- Be able to disable correct branch in check-branching (jkonecny) +- Add check for branch setting (jkonecny) +- Add localization branch testing (jkonecny) +- Move functions to pyanaconda.core.storage (vponcova) +- Move functions to pyanaconda.ui.lib.storage (vponcova) +- Update action buttons only for the selected row (vponcova) +- Fix action buttons in the resize dialog (#1809950) (vponcova) +- Add branch specific configuration to a separate file (jkonecny) +- Always use the Anaconda's kickstart version (vponcova) +- Remove the Baz module (vponcova) +- Add small badges for Read the Docs and translations (vponcova) +- Remove the temporary workaround for StorageError (vponcova) +- Remove the error handler from the storage-related code (vponcova) +- Handle storage installation errors (vponcova) +- Remove the handler for FSTabTypeMismatchError (vponcova) +- Handle ZIPL errors as a bootloader installation error (vponcova) +- Remove the handler for NoDisksError (vponcova) +- Remove the handler for PartitioningError (vponcova) +- Handle the unusable storage module in UI (#1808650) (vponcova) +- Don't mention new-kernel-pkg anymore in /etc/sysconfig/kernel (rvykydal) +- Don't print warnings for new-kernel-pkg not being present (javierm) +- Handle the unusable storage module in the DBus Storage module (vponcova) +- network: add network module tests for installation tasks (rvykydal) +- Fix incorrect docstrings (vslavik) +- Use the latest kernel version list (#1807252) (vponcova) +- Check free space in the correct device tree (#1807339) (vponcova) +- Change log-capture script date to remove `:` symbol (jkonecny) +- Add missing logs to the log-capture utility (jkonecny) + +* Tue Mar 03 2020 Martin Kolman - 33.2-1 +- prefixdevname: add to unit tests (rvykydal) +- prefixdevname: pass persistent configuration to installed system (rvykydal) +- Add L10N dir constant to makefile (jkonecny) +- Remove auto-discover of git branch (jkonecny) +- Adapt Makefile to new L10N repository structure (jkonecny) +- prefixdevname: pass net.ifnames.prefix option to installed system (rvykydal) +- prefixdevname: install package to target system if needed (rvykydal) +- prefixdevname: import state from initramfs to stage 2 (rvykydal) +- Handle invalid optical install media (#1806520) (vponcova) +- Start live CD with explicit GUI (#1765650) (vslavik) +- network: fix GUI crash on invalid devices in the list (rvykydal) +- Add translation badge (vslavik) +- Remove -devel and -release for L10N repository (jkonecny) +- Use git url instead of http for pot files creation (jkonecny) +- Fix documentation changes in release.rst (jkonecny) +- Ignore the required package btrfs-progs in RHEL (vponcova) + +* Mon Feb 24 2020 Martin Kolman - 33.1-1 +- Fix the multiselection in the custom spoke (vponcova) +- Handle installation errors from DBus tasks (vponcova) +- Wait for entropy in the DBus Storage module (vponcova) +- Don't remove unknown devices (#1806233) (vponcova) +- Call GetFormatData instead of GetFormatTypeData (vponcova) +- Show progress messages from DBus tasks (vponcova) +- Report Blivet's messages during the storage installation (vponcova) +- Handle a failed bootloader installation (#1806103) (vponcova) +- Fix the exit handler (#1805916) (vponcova) +- Add DBus methods GetDeviceMountOptions and SetDeviceMountOptions (vponcova) +- Don't show the disk free space in bytes (vponcova) +- Fix the default disk selection (#1805553) (vponcova) + +* Thu Feb 20 2020 Martin Kolman - 32.24-1 +- Initialize disks in interactive and Blivet partitioning modules (vponcova) +- Fix the function get_device_partitions (vponcova) +- Fix the function unlock_device (vponcova) +- Apply extra arguments before the bootloader installation (vponcova) +- Remove configure_storage (vponcova) +- Remove the support for resetting the custom storage data (vponcova) +- Remove the support for on-disk snapshots of storage (vponcova) +- Remove collect_selected_disks (vponcova) +- Remove the local storage object from the custom spoke (vponcova) +- Remove the local storage object from the custom storage helpers (vponcova) +- Update the storage model of device tree modules (vponcova) +- Use the exception DeviceSetupError (vponcova) +- Change the task MountExistingSystemTask (vponcova) +- Change the task AddDeviceTask (vponcova) +- Extend the task ChangeDeviceTask (vponcova) +- Add the container specification to the device factory request (vponcova) +- Extend the DBus method ValidateContainerName (vponcova) +- Add the DBus method UpdateContainerData (vponcova) +- Add the DBus method GenerateContainerData (vponcova) +- Add the DBus method GenerateContainerName (vponcova) +- Add the method reset_container_data to the device factory request (vponcova) +- Add the DBus method GetContainerFreeSpace (vponcova) +- Add the DBus method CollectContainers (vponcova) +- Add permissions for changing the container (vponcova) +- Filter unsupported disklabel devices (vponcova) +- Add the DBus method IsDeviceEditable (vponcova) +- Add the DBus method CheckCompleteness (vponcova) +- Add the DBus method IsDeviceLocked (vponcova) +- Add a new permission for changing a list of disks (vponcova) +- Update the permission for the device encryption (vponcova) +- Add the DBus method ResetDevice (vponcova) +- Add the DBus method DestroyDevice (vponcova) +- Add the DBus method SchedulePartitionsWithTask (vponcova) +- Remove the local storage object from the accordion (vponcova) +- Remove the local storage object from the source spoke in GUI (vponcova) +- TUI: Use get_hdiso_source_description (vponcova) +- Remove the local storage object from the storage spoke (vponcova) +- Remove the local storage object from the advanced storage spoke (vponcova) +- Use the Blivet partitioning module in Blivet-GUI (vponcova) +- Remove the local storage object from the resize dialog (vponcova) +- Remove the local storage object from the action dialog (vponcova) +- Extend the class DeviceActionData (vponcova) +- Remove the local storage object from the selected disks dialog (vponcova) +- Remove the local storage object from the refresh dialog (vponcova) +- Remove the local storage object from dialogs for specialized disks (vponcova) +- Remove the local storage object from run_installation (vponcova) +- Remove the local storage object from FileSystemSpaceChecker (vponcova) +- TUI: Use create_partitioning (vponcova) +- TUI: Extend apply_disk_selection (vponcova) +- TUI: Simplify default disk selection in Storage spoke (vponcova) +- Move is_local_disk to pyanaconda.ui.lib (vponcova) +- Use apply_partitioning from pyanaconda.ui.lib (vponcova) +- Move try_populate_devicetree to pyanaconda.ui.lib (vponcova) +- Move the UI support for device protection to pyanaconda.ui.lib (vponcova) +- Move get_disks_summary to pyanaconda.ui.lib (vponcova) +- Move apply_disk_selection to pyanaconda.ui.lib (vponcova) +- Move the UI support for storage initizalization to pyanaconda.ui.lib + (vponcova) +- Remove the storage argument from the storage initialization (vponcova) +- Move the UI support for DASD formatting to pyanaconda.ui.lib (vponcova) +- Remove the storage and data arguments from DasdFormatting (vponcova) +- Add the function find_partitioning (vponcova) +- Remove the static partitioning modules (vponcova) +- Remove the Enabled property from the partitioning modules (vponcova) +- Mark storage kickstart commands as useless (vponcova) +- Remove the UI workaround for storage kickstart data (vponcova) +- Remove the UI code for the storage configuration (vponcova) +- Remove the local storage object from TUI (vponcova) +- Don't use the local storage object in storage utils (vponcova) +- Don't use the local storage object for the installation (vponcova) +- Don't use the local storage object for formatting DASDs from UI (vponcova) +- Remove automatic push of pot files during release (jkonecny) +- Remove zanata from release.rst (jkonecny) +- Remove deprecated translations.txt document (jkonecny) +- Update Readme link to translation project (jkonecny) +- Remove Zanata from translation canary (jkonecny) +- Remove zanata from setup test env scripts (jkonecny) +- Remove zanata from makebumpver (jkonecny) +- Remove zanata configuration file (jkonecny) +- Remove Zanata from po/Makefile (jkonecny) +- Remove zanata from Makefile (jkonecny) +- Remove unnecessary sed from configure.ac (jkonecny) +- Use l10n repository for pushing changed pot file (jkonecny) +- Pull po files from our l10n repo instead of Zanata (jkonecny) +- Offer only supported sector sizes in NVDIMM reconfiguration dialog (rvykydal) +- Fix PR tests with mock version 2 (jkonecny) +- Don't use the local storage object for the storage initialization (vponcova) +- Don't use device objects in the payload classes (vponcova) +- Remove the attribute for storage from the payload classes (vponcova) +- Don't use local storage objects in the image utils (vponcova) +- Don't use the local storage objects in the payload utils (vponcova) +- Run a DBus task to create the pre-installation snapshot (vponcova) +- Don't set up the local storage checker object (vponcova) +- Don't use the local storage object during the start of anaconda (vponcova) +- Remove the local storage object from the rescue mode (vponcova) +- Don't use the local storage object to initialize time (vponcova) +- Don't reset the local storage object (vponcova) +- Don't create the local storage object (vponcova) +- Don't modify the list of device names (vponcova) + +* Thu Feb 13 2020 Martin Kolman - 32.23-1 +- Test kickstart warnings from modules (vslavik) +- Use kickstart parsing warnings coming from boss (vslavik) +- Log kickstart warnings in modules (vslavik) +- Disable package download to / /tmp (#1781517) (jkonecny) +- Handle the variant in SetConstraint (vponcova) +- Handle the variant from GetResult (#1798392) (vponcova) +- Fix the function _del_xdg_runtime_dir (vponcova) +- Do not crash on adding fcoe device in gui when there are no nics (#1798402) + (rvykydal) +- Fix checking of network device type in Add FCoE gui dialog (#1798876) + (rvykydal) +- Use check_task_creation_task in timezone tests (rvykydal) +- Move timezone setup kickstart method to dbus module (rvykydal) +- Do not restart NTP service during its installation (rvykydal) +- Add fixme to ntp from dhcp setting (rvykydal) +- Change "not...in" to "...not in" (vslavik) +- Line length fixes (PEP8) + typos (vslavik) +- Add the DBus method GenerateDeviceFactoryPermissions (vponcova) +- Generate the device factory permissions (vponcova) +- Add the DBus structure DeviceFactoryPermissions (vponcova) +- Move the class DeviceFactoryRequest to a new file (vponcova) +- Set up the environment for pylint (vponcova) +- Unify geoloc logging and enable/disable decision logic (vslavik) +- Disable geoloc by opts.geoloc instead of kernel cmdline (vslavik) +- Add a fallback for a disk of the live device (vponcova) +- If no usable boot drive is found, raise an exception (vponcova) + +* Mon Feb 03 2020 Martin Kolman - 32.22-1 +- Don't set the device names (#1797274) (vponcova) +- Fix line spacing in UI (vslavik) +- Fix line spacing in pyanaconda (vslavik) +- Extend the start-module script (vponcova) +- Remove start() from pylint defining attrs methods (jkonecny) +- Refactor pylintrc file a bit (jkonecny) +- Remove pylint CVS ignore directory (jkonecny) +- Add TODO to enable C and R in pylint (jkonecny) +- Remove bad-option-value disables from pylint (jkonecny) +- Add TODO for future work (jkonecny) +- Remove use of eval from pylint disabled (jkonecny) +- Ignore attributes of Namespace class (jkonecny) +- Fix GError message False positive (jkonecny) +- Move unnecessary pass statement from false positives (jkonecny) +- Add mock to the list of pylint deprecated modules (jkonecny) +- Fix pylint errors (jkonecny) +- Adapt runpylint to use pocketlint replacement (jkonecny) +- Add pylint censorship - replacement of pocketlint (jkonecny) + +* Wed Jan 29 2020 Martin Kolman - 32.21-1 +- Add the path-id attribute to the DBus structure for device data (vponcova) +- Use id_path as a long identifier of a disk (vponcova) +- Migrate authselect to dbus tasks (mkolman) +- Remove pyanaconda.flags.cmdline and KernelArguments.getbool() (vslavik) +- Remove duplicated definition of PayloadContainer (vslavik) +- Fix typos in docstrings (vslavik) +- Fix setup-mock-test-env with multiple test commands (jkonecny) +- Add support to run pylint only check (jkonecny) +- Fix most of pep8 issues in pyanaconda/modules subfolder (rvykydal) +- Convert VG reserved_space to Size (vtrefny) +- Do not set default fstype for blivet-gui (vtrefny) + +* Mon Jan 20 2020 Martin Kolman - 32.20-1 +- Add the DBus method ChangeDevice (vponcova) +- Add the task ChangeDeviceTask (vponcova) +- Add pep8 check (rvykydal) +- Fix max-line-length setting for pep8speaks (rvykydal) +- Extend PayloadFactory tests (jkonecny) +- Add test for payload type DBus API (jkonecny) +- Rename payload shared testing objects (jkonecny) +- Add type property to payloads (jkonecny) +- Rename payload dnf tests to packages tests (jkonecny) +- Add FIXME/TODO about GetActivePayload (jkonecny) +- Move Publishable to PayloadBase (jkonecny) +- Adapt tests to a new Payload publishing (jkonecny) +- Generate %%packages only when DNF module was used (jkonecny) +- Fix payloads shared testing class (jkonecny) +- Move payload Packages kickstart processing to Payloads (jkonecny) +- Change GetActivePayloadPath to GetActivePayload (jkonecny) +- Publish payload instead of payload path (jkonecny) +- Change payloads objects to interfaces (jkonecny) +- Migrate LiveOS payload to dynamic publishing (jkonecny) +- Migrate LiveImage payload to dynamic publishing (jkonecny) +- Migrate DNF payload for dynamic publishing (jkonecny) +- Use container to publish payloads (jkonecny) +- Add payload container (jkonecny) +- Rename PAYLOAD_BASE to PAYLOAD (jkonecny) +- Remove unnecessary space (jkonecny) +- Remove DNF DBus namespace (jkonecny) +- Move Packages module publishing to Payloads service (jkonecny) +- Move payload packages out of DNF module (jkonecny) +- Add basic configuration for pep8speaks github app (rvykydal) +- Be more strict when checking for mounted dvd source (rvykydal) +- Protect cdroms during tree population for image installs (rvykydal) +- Finish code conventions rules migration to upstream (jkonecny) +- Require new pykickstart version (jkonecny) +- Revert "Revert "Fix Timezone pykickstart command version"" (jkonecny) +- Add the task AddDeviceTask (vponcova) +- Add the DBus method ValidateDeviceFactoryRequest (vponcova) +- Add the DBus field 'reformat' to the device factory request (vponcova) +- Add the DBus method GetDeviceTypesForDevice (vponcova) +- Add the DBus method GetFileSystemsForDevice (vponcova) +- Add the DBus method GetRawDevice (vponcova) +- Add the DBus method GenerateDeviceName (vponcova) +- Add the DBus method GetDefaultLUKSVersion (vponcova) +- Add the DBus method GenerateDeviceFactoryRequest (vponcova) +- Add the DBus method ValidateRaidLevel (vponcova) +- Add the DBus method ValidateContainerName (vponcova) +- Add the DBus method AddDevice (vponcova) +- Add the DBus method ValidateMountPoint (vponcova) +- Add the DBus method CollectUnusedMountPoints (vponcova) +- Add the DBus method GetSupportedRaidLevels (vponcova) +- Add the DBus method GetDefaultFileSystem (vponcova) +- Add the DBus method CollectSupportedSystems (vponcova) +- Add the DBus method GetDiskTotalSpace (vponcova) +- Add the DBus method CollectBootLoaderDevices (vponcova) +- Add the DBus method CollectUnusedDevices (vponcova) +- Add the DBus method CollectNewDevices (vponcova) +- Add the DBus method GetPartitioned (vponcova) +- Add the DBus method GenerateSystemData (vponcova) +- Add the DBus method GenerateSystemName (vponcova) +- Create the device tree scheduler (vponcova) +- Always create and publish the DASD and ZFCP modules (vponcova) +- Add the DBus method IsSupported to the zFCP module (vponcova) +- Add the DBus method IsSupported to the NVDIMM module (vponcova) +- Add the DBus method IsSupported to the DASD module (vponcova) +- Add the DBus method IsSupported to the iSCSI module (vponcova) +- Add the DBus method IsSupported to the FCoE module (vponcova) +- Allow arch filtering for comps (jmracek) +- Remove duplicated exception handler usage (vslavik) + +* Mon Jan 13 2020 Martin Kolman - 32.19-1 +- Revert "Fix Timezone pykickstart command version" (vponcova) +- Improve payload packages test for languages (jkonecny) +- Update payload Packages properties tests (jkonecny) +- Update payload LiveImage properties tests (jkonecny) +- Fix Timezone pykickstart command version (jkonecny) +- Fix failed tests introduced by merging multiple PRs (jkonecny) +- Clean up for PEP257, PEP8, etc. in localization and its tests (vslavik) +- Add tests for the rewritten localization module (vslavik) +- Fix wrong code in localization found while writing tests (vslavik) +- Remove parse_langcode(), LANGCODE_RE, and associated tests (vslavik) +- Fix dosctrings by removing mentions of LANGCODE_RE (vslavik) +- Replace remaining uses of parse_langcode by langtable's parsing (vslavik) +- Add and use a convenience function to get language id (vslavik) +- Add and use a mechanism for aborting early with invalid locale (vslavik) +- Add failure tests for %%packages --ignorebroken (jkonecny) +- Raise error on --ignorebroken when is disabled (jkonecny) +- Fail to set packages IgnoreBroken when disabled (jkonecny) +- Add enable_ignore_broken_packages configuration (jkonecny) +- Add test for the new Packages API (jkonecny) +- Support --ignorebroken by packages module (#1642013) (jkonecny) +- Support possibility to skip broken packages (#1642013) (jkonecny) +- Do not crash on disk.wwn value being None (#1711571) (rvykydal) +- Fix a callback of the PropertiesChanged signal (vponcova) +- Test unwrapped DBus values (vponcova) +- Replace the default DBus error (vponcova) +- Extend check_task_creation_list (vponcova) +- Simplify langtable method calls (vslavik) +- Require langtable 0.0.49 for its new parsing method (vslavik) +- Fix import, add license statement in dracut driver updates test (vslavik) + +* Tue Jan 07 2020 Martin Kolman - 32.18-1 +- Fix cppcheck problem with undefined macros (jkonecny) +- Fix C variable use before check for NULL (jkonecny) +- Calculate ip address for kickstart URL ending in / (imsedgar) +- Enable /boot on btrfs subvolume with GRUB2 (ngompa13) +- Remove the workaround in the Resize dialog (vponcova) +- Move the support for resizing devices (vponcova) +- Add KernelArguments.is_enabled() as a replacement for getbool() (vslavik) +- Fix tests broken by renamed modules (vslavik) +- keyboard: pass shared module instance of localed wrapper to tasks (rvykydal) +- keyboard: replace safe_dbus with dasbus in LocaledWrapper (rvykydal) +- Add tests for the KernelArguments class (vslavik) +- Stop KernelArguments inheriting from a dictionary (vslavik) +- Change tests to use kernel.cmdline instead of flags.cmdline (vslavik) +- Change all uses of flags.cmdline to kernel.kernel_arguments (vslavik) +- Rename variables to prevent conflict with importing "kernel_arguments" + (vslavik) +- Change flags.cmdline to use kernel.kernel_arguments (vslavik) +- Add kernel.kernel_arguments providing same functionality as flags.cmdline + (vslavik) +- Only attempt to open the ibm,max-boot-devices sysfs entry if it exists + (javierm) +- Don't add more devices in boot-device NVRAM than the maximum allowed + (javierm) + +* Thu Dec 12 2019 Martin Kolman - 32.17-1 +- Calculate the space on uninitialized disks (#1782449) (vponcova) +- Define a method required by _schedule_actions (#1782463) (vponcova) +- Split the partitioning code (vponcova) +- Add the attribute children to the device data (vponcova) + +* Tue Dec 10 2019 Martin Kolman - 32.16-1 +- Add a DBus method for checking resizable devices (vponcova) +- Add DBus methods for partitioned devices (vponcova) +- Add a DBus method for getting device size limits (vponcova) +- Add the attribute protected to the device data (vponcova) +- keyboard: make populating of missing values part of installation task + (rvykydal) +- keyboard: fix write_x_configuration method (rvykydal) +- Reduce progress spinner repaints to save CPU (rhbz#1204242) (vslavik) +- Document the storage setters (vponcova) +- Rename the file with tests for the Blivet partitioning method (vponcova) +- Change the type of AppliedPartitioning (vponcova) +- Rename the callbacks on_storage_reset (vponcova) +- Add the DBus method ResetPartitioning (vponcova) +- Rename the DBus method for resetting the storage (vponcova) +- Test the boot loader factory (vponcova) +- Set up the boot loader factory (vponcova) +- Create the boot loader factory (vponcova) +- Add a new configuration option for the type of the bootloader (vponcova) +- network: wrap IPv4 addresses showed in GUI (#1777706) (rvykydal) +- keyboard: do not return None value from apply configuration task (rvykydal) +- keyboard: fix reference before assignment in apply keyboard task (rvykydal) +- keyboard: add localization module unit tests for keyboard (rvykydal) +- keyboard: fix return value of LocaledWrapper.layouts_variants property + (rvykydal) +- keyboard: fix setting from generic keyboard in ks parsing (rvykydal) +- keyboard: move setting of default value into related task (rvykydal) +- Raise MountFilesystemError from DBus methods (vponcova) +- keyboard: make update_settings_from_task private (rvykydal) +- Add the mount point attribute to the device format data (vponcova) +- Change mock imports to use the unittest.mock full import path (vslavik) +- Rename an attribute of the action data structure (vponcova) +- Change service_start_timeout (vponcova) +- keyboard: update a comment for future refactorisations (rvykydal) +- keyboard: remove superfluous call to write_x_configuration (rvykydal) +- Calculate the space on disks with supported disk labels (vponcova) +- keyboard: guard activation of keyboard configuration in the module (rvykydal) +- keyboard: when converting values restore both console and X (#1775712) + (rvykydal) +- keyboard: do not store generic keyboard setting at all (rvykydal) +- keyboard: split populating of missing keyboard values (rvykydal) +- Fix __all__ in pyanaconda.modules.common.structure.* (vponcova) +- keyboard: do not convert from X value if we have vconsole in apply (#1776148) + (rvykydal) +- Change the DBus support for collecting ancestors (vponcova) +- Add the attribute removable to the device data (vponcova) +- Extend the attributes of the device data (vponcova) +- keyboard: fix getting options from LocaledWrapper (rvykydal) +- keyboard: move LocaledWrapper into localization module (rvykydal) +- keyboard: apply configuration with a task (rvykydal) +- keyboard: populate missing keyboard items with a task (rvykydal) +- keyboard: write configuration with module task (rvykydal) +- keyboard: split out populating of missing values into separate task + (rvykydal) +- keyboard: remove doc for unused weight parameter. (rvykydal) +- keyboard: remove keyboard command from anaconda (rvykydal) +- Rename payload sources to source (jkonecny) +- Rename PayloadService to PayloadsService (jkonecny) +- Rename payloads.payloads to payload.payload (jkonecny) +- Rename payload to payloads for DBus services (jkonecny) +- Rename payload module to payloads (jkonecny) +- Publish main payload under Payloads (jkonecny) +- Create PayloadContainer for dynamic provisioning (jkonecny) +- Rename payload base to payload (jkonecny) +- Use a variable when calling Zanata client in makefile (mkolman) +- Clean up the spoke for the advanced storage (vponcova) +- Rename payload DBus constants (jkonecny) +- Remove handler word from payload leftovers (jkonecny) +- Remove handler word from tests (jkonecny) +- Rename LiveOSHandler* classes to LiveOS* (jkonecny) +- Rename LiveImageHandler* classes to LiveImage* (jkonecny) +- Rename DNFHandler* classes to DNF* (jkonecny) +- Rename handlers from DNF internal variables (jkonecny) +- Rename PackagesHandler* classes to Packages* (jkonecny) +- Rename handler to payload in PayloadBase class (jkonecny) +- Rename publish_handler to publish_payload (jkonecny) +- Rename create_handler to create_payload (jkonecny) +- Rename get_active_handler_path to payload path (jkonecny) +- Rename is_handler_set to is_payload_set (jkonecny) +- Rename payload handler getter and setter to payload (jkonecny) +- Rename HandlerFactory to PayloadFactory (jkonecny) +- Rename HandlerType to PayloadType (jkonecny) +- Remove handler from factories variables (jkonecny) +- Rename HandlerNotSetError to PayloadNotSetError (jkonecny) +- Rename handler in logs for payload service class (jkonecny) +- Rename payload handler internals in payload service (jkonecny) + +* Mon Nov 18 2019 Martin Kolman - 32.15-1 +- Fix wrong kdump boot option in boot options docs (vslavik) +- Remove unused pylint false positive (jkonecny) +- Remove the DBus library (vponcova) +- Remove the extra support for PropertiesChanged (vponcova) +- Normalize the pretty XML output (vponcova) +- Update the unit tests (vponcova) +- Reorganize the DBus library (vponcova) +- Remove signal subscriptions from anaconda (vponcova) +- Add support for disconnection of a DBus proxy (vponcova) +- Clean up the anaconda's signal (vponcova) +- Remove the anaconda's DBus from the DBus library (vponcova) +- Remove the anaconda's signal from the DBus library (vponcova) +- Remove the anaconda's logger from DBus library (vponcova) +- Create the DBus library (vponcova) + +* Tue Nov 12 2019 Martin Kolman - 32.14-1 +- network: restrict applying of config from ks in initramfs with NM (#1768791) + (rvykydal) +- network: try to apply kickstart in initramfs only if neeeded (#1768791) + (rvykydal) +- Use default required space solution for LiveOS payload (jkonecny) +- Fix Live Image module required value default (jkonecny) +- Add defaults to payload required space base (jkonecny) +- Move set up and tear down sources to payload base (jkonecny) +- Move installation task API to base payload (jkonecny) +- Move SpaceRequired API to payload base (jkonecny) +- Add tests payload shared API for sources handling (jkonecny) +- Add payload shared test API for sources (jkonecny) +- Tweak payload_shared test class (jkonecny) +- Use payload base interface for existing payloads (jkonecny) +- Add payload base interface implementation (jkonecny) +- Move payload base to payloads folder (jkonecny) +- Move source base classes to payload.sources (jkonecny) +- Add names to the network tests (vslavik) +- Forbid trailing period (dot) in hostname (#1648107) (vslavik) +- Remove the enum PartitioningMethod from the Storage spoke in GUI (vponcova) +- Collections of callbacks in signals can be changed during emitting (vponcova) +- Run the installation tasks of the DBus addons (vponcova) +- Add DBus support for installation tasks for addons in the Boss (vponcova) +- Provide fake installation tasks for the Baz addon (vponcova) +- Add DBus support for installation tasks for addons (vponcova) +- Add support for running DBus tasks in one task (vponcova) +- Don't enable BLS for Xen machines (javierm) + +* Tue Nov 05 2019 Martin Kolman - 32.13-1 +- Clean up ancient timezone tests (vslavik) +- Add missing quotation mark to tmux.conf (jkonecny) +- Fix too long lines in timezone module tests for PEP8 compliance (vslavik) +- Add timezone interface tests for creation of timezone and NTP tasks (vslavik) +- Add tests for the NTP D-Bus task (timezone module) (vslavik) +- Add tests for the timezone D-Bus task (timezone module) (vslavik) +- Move timezone and NTP from execute() to D-Bus configuration tasks (vslavik) +- Add Neal Gompa as community feature maintainer (jkonecny) +- Add pure community features documentation (jkonecny) + +* Tue Oct 29 2019 Martin Kolman - 32.12-1 +- Add a temporary hack to fix installations on ppc64le and aarch64 (#1764666) + (mkolman) + +* Thu Oct 24 2019 Martin Kolman - 32.11-1 +- Fix the timeout of DBus calls (vponcova) +- Remove pydbus from the spec file (vponcova) +- Test DBus support with Gio.TestDBus (vponcova) +- Update the support for DBus properties (vponcova) +- Create variants for the signal PropertiesChanged (vponcova) +- Test the extended support for the DBus observer (vponcova) +- Remove PropertiesCache (vponcova) +- Extend the DBus observer (vponcova) +- Test the extended support for DBus connection (vponcova) +- Extend the support for DBus connections (vponcova) +- Don't use pydbus in the function get_object_path (vponcova) +- Test the client support for DBus objects (vponcova) +- Add the client support for DBus objects (vponcova) +- Test the server support for DBus objects (vponcova) +- Add the server support for DBus objects (vponcova) +- Extend DBus constants (vponcova) +- Test the extended support for DBus specification (vponcova) +- Extend the support for DBus specification (vponcova) +- Test the support for parsing the XML specification (vponcova) +- Add support for parsing the XML specification (vponcova) +- Test the DBus signals (vponcova) +- Extend the Signal class (vponcova) +- Don't use signals from pydbus (vponcova) +- Test the DBus error registration (vponcova) +- Don't use DBus error registration from pydbus (vponcova) +- Remove pydbus from the comments (vponcova) +- Test the extended support for DBus typing (vponcova) +- Extend the support for DBus typing (vponcova) +- Don't import Variant from pydbus (vponcova) +- Fix other payload module cyclic imports (vponcova) +- Add code conventions to upstream (jkonecny) +- Fix payload module cyclic imports (jkonecny) +- Enable networking in the testing environment by default (vponcova) +- network: adapt network config via kickstart from disk to NM in initramfs + (#1757781) (rvykydal) +- network: fix handling of ksdevice=bootif in initramfs (rvykydal) +- Make sure we work with fresh data when trying to do netroot (vpodzime) +- Make our manual triggering on network in dracut work (#1082500) (vpodzime) +- iscsi: do not generate initiator for generated kickstart if iscsi is not used + (rvykydal) +- network: remove useless function (rvykydal) +- network: remove Network command from anaconda (rvykydal) +- network: remove parse method from Network command (rvykydal) +- network: remove packages attribute from Network command (rvykydal) +- Move payload live_os source under its directory (jkonecny) +- Create an empty payload source live_os folder (jkonecny) +- Move payload service constants to the main dir (jkonecny) +- Remove modules.payload.live folder (jkonecny) +- Move rest of payload utils to live_image utils (jkonecny) +- Move create_rescue_image to payload base utils (jkonecny) +- Move get_kernel_version_list to payload base (jkonecny) +- Move InstallFromTarTask to live_image payload (jkonecny) +- Move InstallFromImageTask to payload.base (jkonecny) +- Move UpdateBLSConfigurationTask to payload base (jkonecny) +- Move DownloadProgress to payload live_image (jkonecny) +- Move TeardownInstallationSourceImageTask to payload (jkonecny) +- Move SetupInstallationSourceImageTask to payload (jkonecny) +- Move CheckInstallationSourceImageTask to payload (jkonecny) +- Fix imports after move of live_image payload (jkonecny) +- Move lime_image code to the payloads folder (jkonecny) +- Fix imports after move of live_os payload (jkonecny) +- Move live_os code to the payloads folder (jkonecny) +- Fix imports after move of DNF payload (jkonecny) +- Move DNF handler to payloads folder (jkonecny) +- Remove useless support for boot loader update (vponcova) + +* Fri Oct 18 2019 Martin Kolman - 32.10-1 +- Return back AutoPart kickstart command (#1761901) (jkonecny) +- Update pyanaconda/exception.py (japokorn) +- Fix links to a new pykickstart GitHub group (jkonecny) +- Rename main modules to services (vponcova) +- don't treat s390 as headless when selecting UI mode (dan) +- Add link to the blog website to our README (jkonecny) +- Add links on our blog to upstream documentation (jkonecny) +- Add PARTUUID to lsblk_output log (japokorn) +- Fix a unit test for a boot loader task (vponcova) +- Test the DBus method FindFormattable (vponcova) +- Add DBus method that finds DASDs for formatting (vponcova) +- Move tests for the zFCP module (vponcova) +- Move tests for the FCoE module (vponcova) +- Move tests for the ISCSI module (vponcova) +- Move tests for the DASD module (vponcova) + +* Tue Oct 15 2019 Martin Kolman - 32.9-1 +- Don't mark the network command as removed (vponcova) + +* Mon Oct 14 2019 Martin Kolman - 32.8-1 +- Do not use module_debsolv_errors DNF method (jkonecny) +- Update pyanaconda/rescue.py (slavik.vladimir) +- Make small fixes in the errors file code (jkonecny) +- Make error string wrap more sane (jkonecny) +- Remove make updates (jkonecny) +- Fix regexp for iscsi initiator iqn name validation (#1750865) (rvykydal) +- Disable kickstart output from the Payload module (vponcova) +- Extend the tests for the Boss module (vponcova) +- Mark the network command as removed (vponcova) +- Generate the complete kickstart using the Boss (vponcova) +- Add DBus support for generating a complete kickstart (vponcova) +- Improve the DBus return value for reading a kickstart file (vponcova) +- Add DBus structure for a kickstart report (vponcova) +- Simplify the DBus support for reading a kickstart file (vponcova) +- Don't reimplement the run method in the Boss (vponcova) +- Start DBus modules in a task (vponcova) +- Remove AnacondaBossInterface (vponcova) +- Don't represent the modules observers by their DBus path (vponcova) +- Use a signal to propagate the module observers in the Boss (vponcova) +- Make the nomount boot option work again (vslavik) +- Skip buildins when processing kernel boot args (#1637472) (jkonecny) +- Remove ldconfig scriptlet from a spec file (jkonecny) +- Switch the makeupdates script to Python 3 (mkolman) +- Fix a couple issues identified by Pylint (mkolman) +- PEP8 for function names (mkolman) +- Remove disused support for automatically fetching packages from Koji + (mkolman) +- Support basic nested DBus structures (vponcova) +- Support resolving of simple type hints (vponcova) +- Generate DBus fields with DBusFieldFactory (vponcova) +- Fix a missing patch in unit tests (vponcova) +- Increase test coverage for payload sources (jkonecny) +- Improve docstring on payload source (jkonecny) +- Add logging to the payload source ready state (jkonecny) +- Adapt tests to a new is_ready solution (jkonecny) +- Implement is_ready for live os payload source (jkonecny) +- Switch payload source ready property to method (jkonecny) +- Remove payload source ready setter (jkonecny) +- Add tests for payload sources error propagation (jkonecny) +- Raise exception at the end of sources tear down (jkonecny) +- Payload sources can't be set when initialized (jkonecny) +- Fix doc strings in Live OS payload source (jkonecny) +- Fix doc strings in Payload module (jkonecny) +- Adapt tests to a new payload grouping tasks (jkonecny) +- Use TearDownSourcesTask in LiveOS payload (jkonecny) +- Add tear down payload sources task (jkonecny) +- Use SetUpSourcesTask in LiveOS payload (jkonecny) +- Add set up payload sources task (jkonecny) +- Rename Live OS Source specific tasks (jkonecny) +- Change test for Live payload source readiness (jkonecny) +- Adapt tests to new Installation task with source (jkonecny) +- Check source readiness in Payload install task (jkonecny) +- Remove handler check for source readiness (jkonecny) +- Remove payload sources validate API (jkonecny) +- Replace payload attach_source by set_sources (jkonecny) +- Rename kind to type (jkonecny) +- Rename tear down Live OS source task (jkonecny) +- Add source tests to Live OS (jkonecny) +- Adapt tests to the new Live OS source solution (jkonecny) +- Add check_task_creation_list helper function (jkonecny) +- Add source checkers to Live OS handler (jkonecny) +- Use source object in the Live OS handler (jkonecny) +- Add is source set method to payload handler base (jkonecny) +- Adapt Live OS test for detect image migration (jkonecny) +- Move Live OS image detection to source (jkonecny) +- Adapt payload Live OS handler/source tests (jkonecny) +- Migrate image path from Live OS handler to source (jkonecny) +- Live OS source can have only one source attached (jkonecny) +- Fix line longer than 99 characters in payload (jkonecny) +- Add check if payload source is supported (jkonecny) +- Add payload source type tests (jkonecny) +- Implement type to the payload source base (jkonecny) +- Move payload handler/sources types to constants (jkonecny) +- Implement source attach to the payload handlers (jkonecny) +- Add test for payload CreateSource API (jkonecny) +- Wrap payload source creation to DBusContainer (jkonecny) +- Add support for source creation to Payload module (jkonecny) +- Add payload SourceFactory test (jkonecny) +- Add payload source factory (jkonecny) +- Add test for the payload HandlerFactory class (jkonecny) +- Make payload HandlerFactory class more generic (jkonecny) +- Remove required parameter from the Live OS Source (jkonecny) +- Add Live OS source tear down test (jkonecny) +- Use moved tear down task in Live OS source (jkonecny) +- Move Live OS tear down task to Live OS source (jkonecny) +- Add test for Live OS source validation method (jkonecny) +- Learn Live OS source how to validate source (jkonecny) +- Add Validate API to the payload source base (jkonecny) +- Add test for Live OS Source set up task (jkonecny) +- Move and fix Live OS init source test (jkonecny) +- Use set up source task in the Live OS source (jkonecny) +- Rename set up task for live os source (jkonecny) +- Move set up source live os image task to sources (jkonecny) +- Add empty classes for Live OS payload interface (jkonecny) +- Add base payload source module (jkonecny) +- Add a new python module for payload sources (jkonecny) + +* Fri Oct 04 2019 Martin Kolman - 32.7-1 +- network: split configure hostname task out of network installation task + (#1757960) (rvykydal) +- Switch to pypi pylint from RPM (jkonecny) +- Allow to handle the return value of subprocess.run (vponcova) +- Remove the unexpected keyword argument 'env' (vponcova) +- Remove the assignment of the same variable to itself (vponcova) +- Remove unused false positives (vponcova) +- Improve updates repo configuration in GUI (#1670471) (mkolman) +- Don't touch storage until it is ready (vponcova) +- Run the manual partitioning task for the given requests (vponcova) +- Set the locale for unit tests (vponcova) +- Deprecate the current kickstart support for addons (vponcova) +- Add kickstart support for the Baz module (vponcova) +- Support the %%addon sections in the kickstart specification (vponcova) +- Handle the bootloader reset in the partitioning task (vponcova) +- Fix the DBus patching functions (vponcova) +- Patch DBus proxies in GUI and TUI simple import tests (vponcova) +- Add DBus method for validation of selected disks (vponcova) +- Enable faulthandler in DBus modules (vponcova) +- Reset the storage and the playground of partitioning modules (vponcova) +- Add support for getting an object path of a DBus proxy (vponcova) +- Remove pointless '../../' to clean up NFS mounts (riehecky) + +* Wed Sep 25 2019 Martin Kolman - 32.6-1 +- Switch between layouts without confirmation (#1333984) (vponcova) +- Remove the old and broken zram-stats script (#1561773) (mkolman) +- Rename _test_dbus_partitioning and _test_dbus_property (vponcova) +- Remove attributes for the static partitioning modules (vponcova) +- Test the custom partitioning from kickstart (vponcova) +- Test the property AppliedPartitioning (vponcova) +- Test the property CreatedPartitioning (vponcova) +- Test the dynamic partitioning modules (vponcova) +- Test the partitioning factory with kickstart (vponcova) +- Generate kickstart from the applied partitioning (vponcova) +- Create a partitioning module for the kickstart data (vponcova) +- Add tests for the storage installation tasks (vponcova) +- Add the installation task for BTRFS (vponcova) +- Add a simple import test for pyanaconda (vponcova) +- Fix the implementation of patch_dbus_publish_object (vponcova) +- Use the validation report for the storage validation (vponcova) +- Remove get_object_path of TaskInterface (vponcova) +- Add support for validation tasks (vponcova) +- Move the partitioning validation to the base class (vponcova) +- Add the installation task for ZIPL (vponcova) +- Improve installation tasks of the Storage module (vponcova) +- Don't initialize PartTypeSpoke from the Summary hub (vponcova) +- Add DBus support for the device ancestors (vponcova) +- Fix the DBus method GetUsableDisks (vponcova) +- network: split function for generating dracut arguments (#1751189) (rvykydal) +- network: generate dracut arguments from connections (#1751189) (rvykydal) +- network: do not touch iBFT connections created in initramfs (#1751189) + (rvykydal) +- Increase EFI System Partition (ESP) size to 200-600 MiB (javierm) + +* Tue Sep 17 2019 Martin Kolman - 32.5-1 +- payload module: update live image tar payload options with --numeric-owner + (rvykydal) +- payload module: add tests for live image payload interface (rvykydal) +- Only partitions have the is_magic attribute (#1625154) (vponcova) +- network gui: wrap multiple IP addresses in network spoke (#1593561) + (rvykydal) +- Don't use update_storage_ksdata in tests (vponcova) +- Verify existing unlocked LUKS devices without keys (#1624617) (vponcova) +- network tui: fix addr_str referenced before assignment (#1731415) (rvykydal) +- Fix the second screen of Welcome to Fedora (#1748203) (vponcova) +- Add a space after the comma in the description (junjieyuanxiling) +- Use numbers for user/group names when unpacking tar live image (356889) + +* Thu Sep 05 2019 Martin Kolman - 32.4-1 +- Add tests for the device factory requests (vponcova) +- Raise an exception if the device type is unsupported (vponcova) +- Fix: Move the code for getting the device LUKS versions (vponcova) +- Use a device factory request to populate the right side (vponcova) +- Improve logging of the custom spoke (vponcova) +- Use the device factory request to change devices (vponcova) +- Generate a device factory request (vponcova) +- Use a device factory request to add a mount point (vponcova) +- Add support for transforming device factory requests to arguments (vponcova) +- Add DBus support for the device factory request (vponcova) +- Fix tests after using flatpak format_ref method (jkonecny) +- Use flatpak API to create ref string (jkonecny) +- network: make sure configuration from boot options has ONBOOT=yes (#1727904) + (rvykydal) +- network: fix dumping of generic "Wired connection" created in initramfs + (#1727904) (rvykydal) +- Make clear where repo names are used not objects (jkonecny) +- Remove __main__ functions for testing (vponcova) +- Drop dhclient requirement (pbrobinson) +- Compare normalized XML strings (vponcova) +- Add temporal pylint false positive (jkonecny) +- Make default state of treeinfo repos configurable by product (riehecky) +- Fix pylint test by loading C extensions (jkonecny) +- Drop dhclient requirement (pbrobinson) +- Fall back to a boot drive with a valid stage1 device (#1168118) (vponcova) +- Use test dependencies from Fedora instead of pip (jkonecny) +- Do not crash test env setup in case of empty list (jkonecny) +- Fix parsing of hostname from cmdline for ipv6. (rvykydal) +- dnfpayload: repo in _fetch_md is a dnf repo not ksrepo (awilliam) +- Don't set up a warning label to None (#1745933) (vponcova) +- Add DBus support for shrinking devices (vponcova) +- Add DBus support for removing devices (vponcova) +- Devices to be shrinked are always resizable (vponcova) +- Identify devices by theirs names in the resize dialog (vponcova) +- Refactorize the ResizeDialog (vponcova) +- network module: guard onboot configuration task by environment (rvykydal) +- network: modify autoactivate via NM API with a separate task (rvykydal) +- network: get ONBOOT values from NM connections (rvykydal) +- network: activate connections during initramfs consolidation synchronously + (rvykydal) +- network: block autoactivation also when updating iniramfs connection + (rvykydal) +- network: find initramfs connections even without ifcfg files (#1727904) + (rvykydal) +- network: block autoactivation when adding connection from kickstart + (rvykydal) +- network: split the function for adding a connection from kickstart (rvykydal) +- network: implement NM connection change commit using Update2() (rvykydal) +- network: fix setting real ONBOOT for inactive vlan devices (rvykydal) +- network: modify ONBOOT via libnm during network initialization (rvykydal) +- network: set autoconnect/ONBOOT to yes for default connection in tui + (rvykydal) +- network: get rid of ONBOOT workaround in tui (rvykydal) +- More detailed addon logging (riehecky) +- Revert "Keep getSysroot for kdump-anaconda-addon" (vponcova) + +* Mon Aug 26 2019 Martin Kolman - 32.3-1 +- Use the task container to publish tasks (vponcova) +- Remove publish_task (vponcova) +- Make tasks publishable (vponcova) +- Create and set up the DBus container for tasks (vponcova) +- Add note to fix time consuming live os dbus task (jkonecny) +- Add notes for the future work on the module payloads (jkonecny) +- Move constants specific for copy dd task (jkonecny) +- Add test for updating bls entries task (jkonecny) +- Add test for Live OS post installation task (jkonecny) +- Add test for create_rescue_image function (jkonecny) +- Add Live OS handler test for install with task (jkonecny) +- Add live payload handler test for InstallWithImageTask (jkonecny) +- Improve tests for live os image detection code (jkonecny) +- Add live os test for kernel version list (jkonecny) +- Make consistent imports (jkonecny) +- Replace getSysroot by conf value (jkonecny) +- Move get_dir_size test to the payload module tests (jkonecny) +- Move get_dir_size function to the payload.base.utils (jkonecny) +- Rename GetDirSize to get_dir_size (jkonecny) +- Add sysroot param to the copy DD files task (jkonecny) +- Change write module blacklist to take sysroot param (jkonecny) +- Change create root dir func to take sysroot param (jkonecny) +- Add sysroot param to prepare installation task (jkonecny) +- Rename payload shared to base (jkonecny) +- Add Live OS handler space required test (jkonecny) +- Inline copy driver disk payload function to task (jkonecny) +- Add API for required space to live os payload handler (jkonecny) +- Add copy DD files task to live image payload handler (jkonecny) +- Use new task copy driver disks files to old payload (jkonecny) +- Add copy DD files as post install task to live os handler (jkonecny) +- Add post-installation task to live os payload handler (jkonecny) +- Do a facelift to the old copy driver disk function (jkonecny) +- Moved copy driver disk to the payload module shared (jkonecny) +- Use new shared task in the old payload module (jkonecny) +- Add test for prepare installation payload task (jkonecny) +- Add tests for payload module shared utils (jkonecny) +- Create and use task to prepare installation for LiveOS (jkonecny) +- Move payload shared code for handlers to a directory (jkonecny) +- Move write module blacklist to paylod module (jkonecny) +- Move create root directory to its own function (jkonecny) +- Add install task with API to Live OS handler (jkonecny) +- Add kernel version list support to live os handler (jkonecny) +- Fix noverifyssl when downloading .treeinfo file (#1723811) (jkonecny) +- Add the DBus property PartitioningMethod (vponcova) +- Add support for dynamic partitioning modules (vponcova) +- Make partitioning modules publishable (vponcova) +- Create the partitioning factory (vponcova) +- Use a DBus container for the device trees (vponcova) +- Add support for DBus containers (vponcova) +- Add a simple unit test for TUI and GUI (vponcova) +- Add logic to create flatpaks rpmostree payload (#1734970) (jkonecny) +- Move flatpak code to a new ostree payload class (#1734970) (jkonecny) +- Create flatpak in ostree payload only if available (#1734970) (jkonecny) +- Update tests for new class method is_available (#1734970) (jkonecny) +- Make flatpak is_available() a static method (#1734970) (jkonecny) +- Remove the fixed file:// from the flatpak remote (#1734970) (jkonecny) +- Fix payload prepare mount targets install task (#1734970) (jkonecny) +- Merge rpmostreepayload installation under one task (#1734970) (jkonecny) +- Move progress messaging from flatpak to rpmostree (#1734970) (jkonecny) +- Add test for flatpak change remote for refs (#1734970) (jkonecny) +- Replace remote for installed refs in rpmpayload (#1734970) (jkonecny) +- Use new flatpak replace remote on installed refs (#1734970) (jkonecny) +- Add flatpak remote replace for installed refs (#1734970) (jkonecny) +- Make flatpak ref full format method more generic (#1734970) (jkonecny) +- Create an flatpak base ref list object (#1734970) (jkonecny) +- Use flatpak add/remove remotes in ostree payload (#1734970) (jkonecny) +- Add flatpak tests for adding and removing remotes (#1734970) (jkonecny) +- Implement flatpak adding and removing remotes (#1734970) (jkonecny) +- Adapt flatpak tests to the new changes (#1734970) (jkonecny) +- Change flatpak remote logic (#1734970) (jkonecny) +- Rename flatpak REMOTE_NAME to LOCAL_REMOTE_NAME (#1734970) (jkonecny) +- Make flatpak ref lists object consistent (#1734970) (jkonecny) +- Implement object to get installed flatpak refs (#1734970) (jkonecny) +- Add flatpak error reporting implementation (#1734970) (jkonecny) +- Cleanup temp repository of flatpak before install (#1734970) (jkonecny) +- Add and fix tests for newly added flatpak cleanup (#1734970) (jkonecny) +- Add flatpak cleanup method (#1734970) (jkonecny) +- Split flatpak setup to two initialization methods (#1734970) (jkonecny) +- Fix tests after connecting to flatpak signals (#1734970) (jkonecny) +- Add callbacks to monitor flatpak transactions (#1734970) (jkonecny) +- Install flatpaks as part of ostree installation (#1734970) (jkonecny) +- Add test for the flatpak install method (#1734970) (jkonecny) +- Add support to install all remote flatpaks (#1734970) (jkonecny) +- Add flatpak required space test (#1734970) (jkonecny) +- Add get_required_space to the flatpak payload (#1734970) (jkonecny) +- Add flatpak object to abstract flatpak Ref list (#1734970) (jkonecny) +- Don't configure the default target without systemd (#1744115) (vponcova) +- Change flatpak remote name to constant (#1734970) (jkonecny) +- Use FlatpakPayload from the RPMOStreePayload (#1734970) (jkonecny) +- Add test for the flatpak setup method (#1734970) (jkonecny) +- Add method to setup flatpak objects (#1734970) (jkonecny) +- Add flatpak test for remote availability (#1734970) (jkonecny) +- Add check if flatpak remote repo is available (#1734970) (jkonecny) +- Add libflatpak dependency to the anaconda spec (#1734970) (jkonecny) +- Add an empty class to handle flatpak (#1734970) (jkonecny) +- Look for existing installations on existing devices (vponcova) +- Require a mount point only for mountable formats (vponcova) +- Handle the missing mountpoint attribute (#1743853) (vponcova) + +* Mon Aug 19 2019 Jiri Konecny - 32.2-1 +- Set the minimum required entropy only once (vponcova) +- Rename the icon (#1740864) (vponcova) +- Format strings with format in interactive utils (vponcova) +- Rename _get_device_info_description in the custom spoke (vponcova) +- Remove pyanaconda.storage.partitioning (vponcova) +- Use the partitioning request in TUI (vponcova) +- Use the partitioning request in GUI (vponcova) +- Update the storage initialization and configuration (vponcova) +- Use the partitioning request in the tests (vponcova) +- Use the partitioning request in the automatic partitioning module (vponcova) +- Use the partitioning request in the automatic partitioning task (vponcova) +- Exclude mount points from the automatic partitioning (vponcova) +- Create a DBus structure for the partitioning request (vponcova) +- Don't load the repo device path twice in the Payload class (vponcova) +- Rename device_path to repo_device_path in the Payload class (vponcova) +- Rename get_mount_device in payload utils (vponcova) +- Remove a redundant condition in the Payload class (vponcova) +- Specify types of arguments in the payload utils (vponcova) +- Use the payload utils in UI (vponcova) +- Add a new function unmount_device to payload utils (vponcova) +- Add a new function setup_device to payload utils (vponcova) +- Add a new function mount_device to payload utils (vponcova) +- Add a new function teardown_device to payload utils (vponcova) +- Move the support methods for image installations (vponcova) +- Change the method for finding potential HDISO sources (vponcova) +- Change the method for finding a valid optical install media (vponcova) +- Add a new function resolve_device to payload utils (vponcova) +- Rename variables and arguments in the Payload class (vponcova) +- Provide a documentation for the payload utils (vponcova) +- Don't propagate the storage and data to the payload again (vponcova) +- Collect addons after running the %%pre section (vponcova) +- Fix: Merge the code for the device info validation (vponcova) +- Fix: Generate the device info in interactive utils (vponcova) +- Fix: Simplify the code for validating mount points (vponcova) +- Handle a missing value of the mount point attribute (vponcova) +- Improve logging of the device info changes (vponcova) +- Remove the constants for the device type strings (vponcova) +- Move the code for collecting supported RAID levels (vponcova) +- Move the code for the device info validation (vponcova) +- Move the code for the raid level validation (vponcova) +- Simplify the code for validating mount points (vponcova) +- Move the code for validating mount points (vponcova) +- Generate the device info in interactive utils (vponcova) +- Simplify overriding disk set with container's (vponcova) +- Simplify the removal of the device (vponcova) +- Merge the code for changing the size (vponcova) +- Move code to the function revert_reformat (vponcova) +- Change arguments of the method for reformatting (vponcova) +- Merge the code for the device info validation (vponcova) +- Split the code for collecting the new device info (vponcova) +- Move the code for collecting the new device info (vponcova) +- Apply the device info changes in new methods (vponcova) +- Remove the code for comparing the device info (vponcova) +- Remove variables for new device info (vponcova) +- Remove variables for old device info (vponcova) +- Move the code for comparing the device info (vponcova) +- Simplify logging of the device infos (vponcova) +- Move the code for the new device info (vponcova) +- Move the code for the old device info (vponcova) +- Add squashfs+overlayfs base live image detection (bcl) +- liveinst: Add support for plain squashfs root filesystem (bcl) + +* Wed Aug 14 2019 Martin Kolman - 32.1-1 +- Use append_dbus_tasks() for DBus Task scheduling (mkolman) +- Add append_dbus_task method to TaskQueue (mkolman) +- Replace Firewall and Network command setup() method (mkolman) +- Add support for localization of modules (rvykydal) +- Don't measure code coverage during the installation (vponcova) +- Use the new discovery & join DBUS tasks (mkolman) +- Increase network timeout constant (jkonecny) +- Add DBUS Tasks for realm discovery & joining a realm (mkolman) +- Add the add_requirements() method for PayloadRequirements (mkolman) +- Extend RealmData (mkolman) +- Set timeout for all session.get calls (jkonecny) +- Add support for disabling modules via module --disable (mkolman) +- Don't check the format status in UI (vponcova) +- Fix updating of ifcfg files for ifname= bound devices (#1727904) (rvykydal) +- network module: be more strict when adding physical device configuration + (#1727904) (rvykydal) +- Adapt to changes caused by NM in initramfs (#1727904) (rvykydal) +- Change the documentation of the 'reason' attribute (vponcova) +- Fix traceback in network module installation task. (rvykydal) +- Remove the connect method of DBusObserver (vponcova) +- Remember which modules are addons (vponcova) +- Simplify the initialization of the module observer (vponcova) +- Remove the support for the object observer (vponcova) +- Move the module manager to a new subpackage (vponcova) + +* Wed Jul 31 2019 Martin Kolman - 31.22-1 +- Fix pylint warning (vponcova) +- Keep getSysroot for kdump-anaconda-addon (vponcova) +- Specify sizes of nonexistent devices in tests (vponcova) +- network tui: fix a typo concerning inifiniband device configuration + (rvykydal) +- Remove the object observers from UI (vponcova) +- Remove the method changed (vponcova) +- Move the preserved arguments to the Anaconda configuration file (vponcova) +- Remove system root from DBus methods (vponcova) +- Rename setSysroot (vponcova) +- Replace getSysroot (vponcova) +- Replace getTargetPhysicalRoot (vponcova) +- Replace publisher patches with the new solution (jkonecny) +- Handle disk selection errors in get_candidate_disks (vponcova) +- Don't verify mounted partitions of protected disks (vponcova) +- Always protect the live backing device (#1706335) (vponcova) +- Don't change the storage if the reset fails (vponcova) +- Remove support for teardown before storage reset (vponcova) + +* Thu Jul 25 2019 Jiri Konecny - 31.21-1 +- Always schedule the installation task for joining realm (#1732620) (vponcova) +- Fix issue raised by giving publisher as last parameter (jkonecny) +- Use the new publisher patch decorator in a tests (jkonecny) +- Add decorator as shortcut for a publisher patching (jkonecny) +- Add test for creating invalid payload handler (jkonecny) +- Fix tests after removing handlers publish method (jkonecny) +- Remove _publish_handler method from payload module (jkonecny) +- Fix tests because of new payload API change (jkonecny) +- Remove get_handler_path from payload handlers (jkonecny) +- Return path from payload handler publish methods (jkonecny) +- Join all the payload handler create methods (jkonecny) +- Publish payload handler after KS data are parsed (jkonecny) +- Add handler factory and use that in payload module (jkonecny) +- Add tests for new payload API (jkonecny) +- Do not create payload handler if already set (jkonecny) +- Add API to test if there is a payload handler set (jkonecny) +- Do not set default payload handler (jkonecny) +- Don't prune and sort actions in the partitioning task (vponcova) +- Fix imports in the tests (jkonecny) +- Adapt payload tests to a new task check function (jkonecny) +- Adapt network tests to a new task check function (jkonecny) +- Adapt localization tests to a new task check function (jkonecny) +- Adapt bootloader test to a new task check function (jkonecny) +- Adapt storage tests to a new check task function (jkonecny) +- Make a new test func to check task creation (jkonecny) +- Add test for new payload API on live image creation (jkonecny) +- Add new payload API to create live image handler (jkonecny) +- Add tests for new payload handlers solution (jkonecny) +- Fix tests after payload handler logic change (jkonecny) +- Add support to create DNF payload handler (jkonecny) +- Improve payload handler creation abstraction (jkonecny) +- Publish payload handler before it is set (jkonecny) +- Fix payload generate_kickstart with no handler (jkonecny) +- Add payload module API to get active handler (jkonecny) +- Publish handler in the creation method call (jkonecny) +- Propagate DBus path when creating handler (jkonecny) +- Use base handler class by the handler modules (jkonecny) +- Add payload handler base class (jkonecny) +- Change main payload handlers to property (jkonecny) +- Add root password SSH login override checkbox (#1716282) (mkolman) + +* Mon Jul 22 2019 Jiri Konecny - 31.20-1 +- Move code to exctract kernel version from tar to utils (jkonecny) +- Add link for our translations to README (#1729788) (jkonecny) +- Change Makefile zanata client check from pkg to bin (jkonecny) +- Add recommendation to release process guide (jkonecny) +- Remove unnecessary step from release in mock doc (jkonecny) +- Fix mock release dependency in a mock (jkonecny) +- Fix: Simplify the code for creating container store rows (vponcova) +- Fix a docstring of add_device (vponcova) +- Get the current device type only once (vponcova) +- Move the code for getting the name of the new root (vponcova) +- LiveImagePayload: move some functions to utils.py (rvykydal) +- LiveImagePayload: replace PostInstallTask with UpdateBLSConfigurationTask + (rvykydal) +- LiveImageHandler: make API and implementation method names consistent + (rvykydal) +- LiveImageHandler: use more descriptive names for installation tasks + (rvykydal) +- LiveImagePayload: Do not provide API for setting of required space (rvykydal) +- LiveImageHandler: prevent reusing of DownloadProgress instance (rvykydal) +- LiveImageHandler: simplify using of SetupInstallationSourceImageTask result + (rvykydal) +- LiveImageHandler: simplify using of CheckInstallationSourceImageTask result + (rvykydal) +- LiveImageHandler: remove interfaces for task results we don't need (rvykydal) +- Add logging to interactive utils (vponcova) +- Fix the FIXME comment for collect_selected_disks (vponcova) +- Rename the argument for the boot drive (vponcova) +- Remove empty lines in collect_used_devices (vponcova) +- Fix: Move the code for collecting device types (vponcova) +- Fix: Move the code for completing the device info (vponcova) +- Fix: Move the code for hiding protected disks to InstallerStorage (vponcova) +- Move the code for suggesting device names (vponcova) +- Fix: Move the code for getting a container device (vponcova) +- Fix: Move the code for collecting device types (vponcova) +- Fix pylint issues in the custom spoke (vponcova) +- Move the code for label validation (vponcova) +- Move the code for collecting supported mount points (vponcova) +- Show a detailed warning in the custom spoke (vponcova) +- Show a detailed error in the custom spoke (vponcova) +- Move the code for collecting containers (vponcova) +- Move the code for getting a container device (vponcova) +- Populate a container for the given device (vponcova) +- Simplify the code for creating container store rows (vponcova) +- Move the code for renaming containers (vponcova) +- Move the code for destroying devices (vponcova) +- Remove the method for removing empty parents (vponcova) +- Move the code for completing the device info (vponcova) +- Move the code for creating devices (vponcova) +- Move the function get_device_raid_level (vponcova) +- Refactor the code for setting up the device types (vponcova) +- Move the code for collecting device types (vponcova) +- Move the code for collecting file system types (vponcova) +- Move the code for getting the device LUKS version (vponcova) +- Move the code for the device reformatting (vponcova) +- Move the code for changed encryption (vponcova) +- Move the code for changing the device size (vponcova) +- Move the code for reverting reformat (vponcova) +- Collect roots with supported devices (vponcova) +- Move the code for adding the unknown page (vponcova) +- Move the code for adding the root page (vponcova) +- Move the code for creating a new root (vponcova) +- Move the code for adding the initial page (vponcova) +- Move the code for collecting roots to interactive utils (vponcova) +- Move constants and function from custom_storage.py (vponcova) +- Optimize the method _update_space_display of the custom spoke (vponcova) +- Remove the method _current_total_space from the custom spoke (vponcova) +- Remove the method _set_current_free_space of the custom spoke (vponcova) +- Move the code for hiding protected disks to InstallerStorage (vponcova) +- Don't check if disks have media present (vponcova) +- Rename _clearpart_devices in CustomPartitioningSpoke (vponcova) +- Rename get_new_devices in CustomPartitioningSpoke (vponcova) +- Fix: Remove bootloader_devices from CustomPartitioningSpoke (vponcova) +- Fix: Remove unused_devices from CustomPartitioningSpoke (vponcova) +- Remove bootloader_devices from CustomPartitioningSpoke (vponcova) +- Remove the attribute _devices from CustomPartitioningSpoke (vponcova) +- Remove unused_devices from CustomPartitioningSpoke (vponcova) +- Remove the property unused_devices from InstallerStorage (vponcova) +- Remove banners (vponcova) +- Replace the Progress hub (vponcova) +- Remove useless class attributes from SpokeCategory (vponcova) +- LiveImageHandler: add progress reporting of download (rvykydal) +- LiveImageHandler: split out Teardown task from PostInstall (rvykydal) +- LiveImageHandler: pass source image mount point as argument to tasks + (rvykydal) +- LiveImageHandler: PostInstallWithTask() 2/2 (rvykydal) +- LiveImagehandler: InstallWithTask() (rvykydal) +- LiveImageHandler: UpdateKernelVersionList() (rvykydal) +- LiveImageHandler: PostInstallWithTask() 1/2 (rvykydal) +- Change the sort order of the User Settings category (vponcova) +- Move all spokes to the Summary hub (vponcova) +- LiveImageHandler: PreInstallWithTask() (rvykydal) +- LiveImageHandler: SetupWithTask() (CheckInstallationSourceImage) (rvykydal) + +* Thu Jul 11 2019 Jiri Konecny - 31.19-1 +- Call teardown_all explicitly (vponcova) +- Don't publish the module in the loop (vponcova) +- Start swap on ZRAM service (cmurf) +- Use %%autosetup instead of %%setup (mkolman) +- Adjust the exclude arguments for livepayloads (bcl) +- Recreate the BLS entries when using liveimg (bcl) +- Cache the liveimg tar kernel list (bcl) +- Add common function for creating rescue images (bcl) +- move comment into docstring for PowerNVGRUB2 install method (dan) +- add PowerNV into BootloaderClassTestCase (dan) +- LiveImage payload: clean up directory used for image mounting (rvykydal) +- LiveImage payload: mount live image privately (rvykydal) +- introduce PowerNV variant for grub2 class (dan) +- initial PowerNV class support (dan) +- Add the option decorated_window to the Anaconda configuration (vponcova) +- Add test for Live OS detect live os image feature (jkonecny) +- Add Live OS base image detection code (jkonecny) +- Add tests for the new Live OS tasks (jkonecny) +- Add Live OS handler tests for ImagePath property (jkonecny) +- Implement teardown to Live OS payload handler (jkonecny) +- Add support to create Live OS handler manually (jkonecny) +- Implement SetupInstallationSource Live OS task (jkonecny) +- Add ImagePath property to the Live OS handler (jkonecny) +- Add an empty LiveOS payload handler (jkonecny) +- Don't use the auto partitioning module in the custom spoke (vponcova) +- Add support for decomposing DBus values (vponcova) +- Use the default file system type for /boot (vponcova) +- Move updates reponames to constants (riehecky) +- Fix setting and reporting ready state in Source Spoke. (rvykydal) + +* Tue Jun 25 2019 Jiri Konecny - 31.18-1 +- Add comprehensive unit tests for ConfigureFirewallTask (mkolman) +- Fix a typo (mkolman) +- Use FirewallMode enum firewall configuration DBus Task (#1722979) (mkolman) +- Don't encrypt devices in the interactive partitioning by default (vponcova) +- Provide a default passphrase for the PassphraseDialog (vponcova) +- Set the passphrase for the automatic partitioning from the dialog (vponcova) +- Don't use the global encryption passphrase (vponcova) +- Add support for passphrases in the device tree module (vponcova) +- Handle the passphrase requirements in the partitioning modules (vponcova) +- Use _get_passphrase in the custom partitioning task (vponcova) +- Don't generate passphrases in a kickstart file (vponcova) +- Fix the unit tests for the Services module (vponcova) +- Convert names of attributes and variables in custom storage helpers + (vponcova) +- Fix code alignment in the custom storage helpers (vponcova) +- Convert names of attributes and variables in the custom spoke (vponcova) +- Remove local variables with unused values in the custom spoke (vponcova) +- Fix code alignment in the custom spoke (vponcova) +- Initialize attributes in the __init__ method of the custom spoke (vponcova) +- Reorganize imports in the custom spoke (vponcova) + +* Mon Jun 24 2019 Martin Kolman - 31.17-1 +- Move graphical login detection to a DBus Task (#1722950) (mkolman) +- Add DBus support for device trees of partitioning modules (vponcova) +- Create the interactive partitioning module (vponcova) +- Fix misleading comment (riehecky) + +* Thu Jun 20 2019 Martin Kolman - 31.16-1 +- Replace the XConfig execute() method by DBus Tasks (mkolman) +- Fix list-screens script reference (gpchelkin) +- Fix protecting of the live device (#1699387) (vponcova) +- Adapt tests for new Live payload handler changes (jkonecny) +- Add setters to LiveImage payload handler (jkonecny) +- Rename Live payload handler to LiveImage (jkonecny) +- Extend payload live handler with new properties (jkonecny) +- Add read only properties to payload Live handler (jkonecny) +- Add the apply-updates script (vponcova) +- Add payload live handler tests (jkonecny) +- Update payload DNF handler tests (jkonecny) +- Create a new payload handler mixin class for tests (jkonecny) +- Improve the documentation of inst.stage2.all and inst.ks.all (vponcova) +- Add DBus support for teardown tasks (vponcova) +- Tear down images with teardown_disk_images (vponcova) +- Move get_anaconda_version_string to util (vponcova) +- Support multiple payload handlers (jkonecny) +- Add kickstart processing to payload live handler (jkonecny) +- Create Live payload handler module (jkonecny) +- Deprecate the method changed (vponcova) +- Calculate free space for the physical root in dir installations (vponcova) +- Use the actual sysroot to pick up a mount point for downloading (vponcova) +- Use the physical root for mounting existing systems (vponcova) +- Change the path to the system root (vponcova) +- Read files in /etc/anaconda/conf.d on demand (vponcova) + +* Thu Jun 13 2019 Martin Kolman - 31.15-1 +- iscsi: require relevant blivet version for iscsi module (rvykydal) +- iscsi: add unit tests for iscsi module (rvykydal) +- iscsi: fix name of some method arguments (target -> portal) (rvykydal) +- iscsi: use proper iscsi interface mode constants in ui (rvykydal) +- iscsi: update the CanSetInitiator docstring to reflect the reality (rvykydal) +- iscsi: move conversion to IscsiInterfacesMode from implementation to + interface (rvykydal) +- iscsi: use better name for a NodeIsFromIbft method (rvykydal) +- iscsi: move kickstart iscsi processing into the iSCSI module (rvykydal) +- iscsi: attach iBFT targets in early kickstart by the iSCSI module (rvykydal) +- iscsi gui: show target in Target column (not initiator) (rvykydal) +- iscsi: rename iSCSI node info attribute holding name of iscsi interface + (rvykydal) +- iscsi: move dracut argument generating into the iSCSI module (rvykydal) +- iscsi: get info about target being added from iBFT from the iSCSI module + (rvykydal) +- iscsi: use attributes added blivet iscsi device replacing iscsi node object + (rvykydal) +- iscsi: rename Target to Portal where appropriate (rvykydal) +- iscsi: move kickstart data update to the iSCSI module (rvykydal) +- iscsi: write configuration by the iSCSI module (rvykydal) +- iscsi: use the iSCSI module by kickstart iscsi command (rvykydal) +- iscsi: use the iSCSI module in GUI (rvykydal) +- Adapt iSCSI structures to dbus structure updates (rvykydal) +- Use the ISCSI module in the ISCSIDialog (vponcova) +- Create DBus tasks for discovering iSCSI nodes (vponcova) +- Create the basic structure for the iSCSI module (vponcova) +- Hide spokes in Silverblue and Workstation (vponcova) +- Remove the screen access management (vponcova) +- Hide spokes with the Anaconda configuration file (vponcova) +- Run the DBus task for configuration of post-installation tools (vponcova) +- Replace the lang execute() method (mkolman) +- Collect requirements of the Storage module (vponcova) +- Add DBus support for module requirements (vponcova) +- Replace the Services execute() method by a DBus Task (mkolman) +- Replace the SELinux execute() method by a DBus Task (mkolman) +- Replace the Firewall execute() method by a DBus Task (mkolman) +- Add FirewallConfigurationTask DBus Task (mkolman) +- Add root parameter to execInSysroot utility function (mkolman) +- Improve post install tools configuration (mkolman) + +* Fri May 31 2019 Martin Kolman - 31.14-1 +- Require langtable-0.0.44, drop langtable-data requirement (mfabian) +- Extend the format data with the mountable property (vponcova) +- Add DBus support for supported file system types (vponcova) +- Add DBus support for getting format type data (vponcova) +- Add DBus support for gathering mount point requests (vponcova) +- Move tests for partitioning modules to new files (vponcova) +- Add DBus support for populating a device tree (vponcova) +- Don't define the __eq__ method of DBusData (vponcova) +- Add DBus support for mounting the existing system (vponcova) +- Extend the function mount_existing_system (vponcova) +- Add DBus support for finding existing operating system (vponcova) +- Simplify generate_string_from_data (vponcova) +- Define the __eq__ method of DBusData (vponcova) + +* Mon May 27 2019 Martin Kolman - 31.13-1 +- Parse the output of df correctly (#1708701) (vponcova) +- Skip scaling if there is no primary monitor (#1592014) (vponcova) +- Document how to report a bug (vponcova) +- Handle post inst tools toggling in screen access manager (mkolman) +- Fix a typo in Initial Setup configuration task (mkolman) +- Remove methods _setup_mount_data and _process_mount_data (vponcova) +- Rename MountPoint to MountPointRequest (vponcova) +- Add tests for the storage checker module (vponcova) +- Add DBus support for setting a constraint (vponcova) +- Don't check the storage in a separate thread (vponcova) +- Remove HMC from flags (jkonecny) +- Rename the method add_new_constraint (vponcova) +- Rename the method add_constraint (vponcova) +- Remove the update_constraint method (vponcova) +- Create the DBus module for the storage checker (vponcova) +- Use MountPoint in TUI (vponcova) +- Use MountPoint in ManualPartitioningTask (vponcova) +- Use MountPoint in tests (vponcova) +- Use MountPoint as DBus structure (vponcova) +- Cleanup long removed "headless" option from docs (mkolman) + +* Wed May 15 2019 Martin Kolman - 31.12-1 +- Fix condition for running GUI User spoke in Initial Setup (mkolman) +- Expose individual user group, user and root password DBus tasks (mkolman) +- Use a DBus task for Initial Setup configuration (mkolman) +- Add ConfigureInitialSetupTask (mkolman) +- Sysroot support for enable_service() and disable_service() (mkolman) +- Fix documentation for nosslverify (jkonecny) +- Replace noverifyssl flag in anaconda (jkonecny) +- Adjust verify_ssl config from cmdline (jkonecny) +- Move payload nosslverify to the config files (jkonecny) +- Skip some of the driver disk tests (vponcova) +- Use the absolute paths to set the testing environment (vponcova) +- Use DBus consistently (mkolman) +- Test generate_string_from_data with invalid argument (vponcova) +- Make from_structure and to_structure more strict (vponcova) + +* Thu May 02 2019 Martin Kolman - 31.11-1 +- Remove no longer needed kickstart command overrides (mkolman) +- Use Users DBUS module for user configuration in GUI (mkolman) +- Use Users DBUS module for user configuration in TUI (mkolman) +- Adjust Users module DBus API for better kickstart root configuration + (mkolman) +- Use DBusData base class for data holders (mkolman) +- Add a string representation for UserData (mkolman) +- Add ui/lib/users.py (mkolman) +- Use a constant for the UID/GID not set value (mkolman) +- Improve ksdata <-> user data methods in Users DBUS module (mkolman) +- Do root, group, user and SSH key configuration with DBUS tasks (mkolman) +- Add tasks for root, user, group and ssh key configuration (mkolman) +- Fix indentation for user creation method docstring (mkolman) +- Drop support for using custom password crypt algorithm (mkolman) +- Make clear_root_password() into set_root_password() alias (mkolman) +- Lock root & user accounts if password in kickstart is empty (mkolman) +- Convert create_user() from kwargs to optional args (mkolman) +- Convert create_group() from kwargs to optional args (mkolman) +- Mark the root account as locked by default (mkolman) +- Add docstrings & some signature tweaking in users.py (mkolman) +- Move methods from User class to module top-level (mkolman) +- Apply PEP8 for method names in users.py (mkolman) +- Move user management code to core (mkolman) +- Use Pykickstart data classes via handler (mkolman) +- Add API for easy admin user detection (mkolman) +- Add support for SSH key management via the users DBUS module (mkolman) +- Add support for group management via the users DBUS module (mkolman) +- Add support for managing multiple users to the users module (mkolman) + +* Tue Apr 30 2019 Martin Kolman - 31.10-1 +- get_iface_from_hwaddr: be more careful about hwaddr (#1703152) (awilliam) +- network: fix a typo in infiniband connections creating (#1698937) (rvykydal) +- network: do not crash on --device bootif when BOOTIF is not specified + (#1699091) (rvykydal) +- Add DBus support for the device specifier for use in /etc/fstab (vponcova) +- Set swap devices for fstab in the interactive partitioning (vponcova) +- Refactor the passphrase setup on unconfigured LUKS devices (vponcova) +- Add DBus support for UUID (vponcova) +- Add DBus support for device format (vponcova) +- Add DBus support for unlocking LUKS devices (vponcova) +- Add DBus support for finding mountable partitions (vponcova) +- We inherit self.data.repo.dataList() from parent class. (riehecky) + +* Thu Apr 11 2019 Martin Kolman - 31.9-1 +- Remove the function get_structure (vponcova) +- Remove the function apply_structure (vponcova) +- Remove the decorator (vponcova) +- Add the class DBusData (vponcova) +- Give payload a hook for adding disabled repos. (riehecky) +- Extend the function generate_string_from_data (vponcova) +- Blivet-GUI should wait for the storage threads to finish (#1696478) + (vponcova) +- network: do not pass None value from NM device object to data holder + (#1695967) (rvykydal) +- Handle bytes and strings from RPM (#1693766) (vponcova) +- network module: add network module unit tests (rvykydal) + +* Tue Apr 09 2019 Martin Kolman - 31.8-1 +- network: create systemd .link files for ifname= boot options (#1695894) + (rvykydal) +- Bump Workstation root partition max size to 70 GiB (klember) +- Add DBus support for finding optical media (vponcova) +- Add DBus support for handling a device (vponcova) +- Do not use ISO source as install tree root (#1691832) (jkonecny) +- Fix bad assumption about base repo identification (#1691832) (jkonecny) +- network tui: fix updating of a connection from UI (#1692677) (rvykydal) +- network: fix copying of resolv.conf for cases where target /etc does not + exist (#1695990) (rvykydal) +- network: fix crash ensuring single connections for unplugged devices + (#1695899) (rvykydal) +- Add support for skipping attributes in the string representation (vponcova) +- Raise the UnknownDeviceError exception (vponcova) +- Add DBus support for resolving devices (vponcova) +- Add DBus support for the available space (vponcova) +- Move GetRequiredDeviceSize to the device tree module (vponcova) +- Create the device tree module (vponcova) +- Don't set the __repr__ methods of data classes (vponcova) +- network: for vlan set DEVICE only if interfacename is specified in kickstart + (rvykydal) +- Change fips package requirement reason (jkonecny) +- payload: raise exception on invalid Languages (jkonecny) +- payload: Mark DefaultEnvironment API as temporary (jkonecny) +- payload: fix default values for packages section (jkonecny) +- Remove unused import for DNF (jkonecny) +- payload: add converter for kickstart groups (jkonecny) +- payload: switch multilib policy to names (jkonecny) +- payload: add rest of the DNF/Packages attributes (jkonecny) +- payload: add packages controlling properties (jkonecny) +- payload: add package groups interface to Packages (jkonecny) +- payload: adjust packages section attributes (jkonecny) +- payload: move %%packages parsing to DNF/Packages (jkonecny) +- payload: add DBus packages dnf submodule (jkonecny) +- payload: add the empty DNF handler (jkonecny) +- payload: create internal Packages class (jkonecny) +- payload: parse %%packages section in module (jkonecny) + +* Tue Apr 02 2019 Martin Kolman - 31.7-1 +- Create the initialization config in _get_initialization_config (vponcova) +- Remove config from InstallerStorage (vponcova) +- Update DiskInitializationConfig only before clearpart (vponcova) +- Create the method can_initialize (vponcova) +- Remove should_clear from InstallerStorage (vponcova) +- Remove clear_partitions from InstallerStorage (vponcova) +- Replace StorageDiscoveryConfig (vponcova) +- Update the protected devices in the Storage module (vponcova) +- Import the bootloader classes on demand (vponcova) +- Remove bootloader_device from InstallerStorage (vponcova) +- Remove update_bootloader_disk_list from InstallerStorage (vponcova) +- Remove boot_fstypes of InstallerStorage (vponcova) +- Remove set_up_bootloader from InstallerStorage (vponcova) +- Define all bootloader attributes in the __init__ method (vponcova) +- Remove workarounds for the unset bootloader (vponcova) +- Clean up the do_it method of the storage (vponcova) +- Validate the GRUB2 configuration in the Bootloader module (vponcova) +- Add DBus support for the bootloader arguments (vponcova) +- Add DBus support for detecting Windows OS (vponcova) +- Add DBus support for EFI (vponcova) +- Add DBus support for the bootloader installation tasks (vponcova) +- Add DBus support for usable disks (vponcova) +- Apply the disks selection in the partitioning modules (vponcova) +- Remove the function get_available_disks (vponcova) +- Organize actions in InteractivePartitioningTask (vponcova) +- Add DBus support for device actions (vponcova) +- Simplify ActionSummaryDialog (vponcova) +- Set up the clearpart command from the storage (vponcova) +- payload: request /usr/bin/fips-mode-setup (zbyszek) +- Fix the entry for swap in /etc/fstab (#1258322) (vponcova) +- Add DBus support for disk images (vponcova) +- Remove askmethod flag (jkonecny) +- Fix two typos (zbyszek) +- Disable updates-testing (#1670091) (vponcova) +- network module: return slaves in set and order them predictably in generated + ks (rvykydal) +- network module: update ifcfg.py unit tests for getting ifcfg file on s390 + (rvykydal) +- network module: fix getting ifcfg file for s390 (rvykydal) +- network module: remove unused functionality from get_ifcfg_file (rvykydal) +- network module: unit tests for update onboot functions in ifcfg.py (rvykydal) +- network module: add TODO to ifcfg.py tests (rvykydal) +- network module: ifcfg.py tests - no need for ifcfg for vlan bound to device + (rvykydal) +- network module: add ifcfg.py unit tests (rvykydal) +- network module: do not try to generate ksdata from wireless device ifcfg + (rvykydal) +- network module: fix a typo in function name (rvykydal) +- network module: allow to generate ifcfg files in optional root (rvykydal) +- network module: fix thinko (rvykydal) +- network module: rename _ifcfg_files method (rvykydal) +- network module: fix a super call (rvykydal) +- Fix the unit tests (vponcova) + +* Thu Mar 21 2019 Martin Kolman - 31.6-1 +- Test the DBus support for the device tree (vponcova) +- Add DBus support for the device tree (vponcova) +- Fix the initialization of BootInfo (#1599378) (vponcova) +- network module: update module API unit tests (rvykydal) +- network module: guard some methods on NM availability (rvykydal) +- Remove useless swapoff (vponcova) +- Always specify the LUKS version in CustomPartitioningSpoke (#1689699) + (vponcova) +- Remove the property free_space_snapshot from InstallerStorage (vponcova) +- network: fix setting of NetworkDeviceInfo from NM Device (rvykydal) +- Hide the encryption checkbox for the interactive partitioning (vponcova) +- Deprecate DBusObjectObserver (vponcova) +- Remove DBusCachedObserver (vponcova) +- Add the method get_file_system_free_space to InstallerStorage (vponcova) +- Use get_disk_free_space and get_disk_reclaimable_space in StorageSpoke + (vponcova) +- Use get_disk_free_space in ResizeDialog (vponcova) +- Use get_disk_free_space in CustomPartitioningSpoke (vponcova) +- Use get_disk_free_space in SelectedDisksDialog (vponcova) +- network: adapt a unit test to get_supported_devices change (rvykydal) +- Don't estimate the free space based on the clearpart settings (vponcova) +- Update the kickstart data for iSCSI and NVDIMM during the installation + (vponcova) +- network: share single NM Client in anaconda (rvykydal) +- network: handle ONBOOT in ifcfg by network module (rvykydal) +- network: network.py cleanup (rvykydal) +- Don't generate temporary kickstart in the Storage module (vponcova) +- Remove attributes for autopart encryption from the InstallerStorage + (vponcova) +- Make invalid installation from HDD more visible (jkonecny) +- network module: fix updating of ONBOOT value on installed system (rvykydal) +- network: remove nm.py (rvykydal) +- network: use libnm to get device IP addresses (rvykydal) +- network: use libnm to get ntp servers from dhcp options (rvykydal) +- network module: provide and use GetActivatedInterfaces (rvykydal) +- network: remove unused stuff from nm.py (rvykydal) +- network: use GetSupportedDevices API (rvykydal) +- network module: provide GetSupportedDevices (rvykydal) +- Remove the encrypted_autopart property of the InstallerStorage (vponcova) +- Remove the autopart_type property of the InstallerStorage (vponcova) +- Remove the autopart_requests property of the InstallerStorage (vponcova) +- Remove the do_autopart property of the InstallerStorage (vponcova) +- Move the support for scheduling partitions to the Storage module (vponcova) +- Move do_autopart to the Storage module (vponcova) +- Move do_reqpart to the Storage module (vponcova) +- Add a new task for interactive auto partitioning (vponcova) +- Replace the function do_kickstart_storage (vponcova) +- Replace partitioning executors with tasks (vponcova) +- Move partitioning executors to the Storage module (vponcova) +- Move swap_suggestion to pyanaconda.storage.utils (vponcova) +- network: remove ifcfg.log (rvykydal) +- network module: log configuration state after installation task (rvykydal) +- network: remove low-level debug logging on IfcfgFile modifications (rvykydal) +- network module: use module for logging of configuration state (rvykydal) +- network module: move ifcfg logging into the module (rvykydal) +- network module: do not log secrets (rvykydal) +- network module: rename and add doc to network initialization task interface + (rvykydal) +- network module: guard initialization tasks by anaconda system configuration + (rvykydal) +- network: log network initialization better (rvykydal) +- network module: use task to dump missing ifcfg files (rvykydal) +- network module: use task to set real onboot values (rvykydal) +- network module: use task for initramfs connections consolidation (rvykydal) +- network module: use task for apply kickstart (rvykydal) +- payload: separate blivet.utils & blivet.arch call (jkonecny) +- Improve content of the top-level README file (mkolman) + +* Tue Mar 12 2019 Martin Kolman - 31.5-1 +- Don't run the storage checker to check autopart (vponcova) +- Remove the SnapshotValidateTask class (vponcova) +- Validate post-installation snapshot requests with the storage checker + (vponcova) +- Add a new type of the installation system for the initial setup (vponcova) +- Simplify update_storage_ksdata (vponcova) +- Don't set anything if the partitioning fails (vponcova) +- Reset the bootloader with reset_bootloader (vponcova) +- Add support for scanning all devices in the system (vponcova) +- Add the ExclusiveDisks property (vponcova) +- Move tests for the disk selection module to a new file (vponcova) +- Replace initialize_storage with reset_storage (vponcova) +- Remove the shutdown method (vponcova) +- payload: don't force host-only mode when executing dracut (javierm) +- Simplify the code for protected devices (vponcova) +- Define the quit message in TUI (#1686116) (vponcova) +- efi: don't include the grub2-pc package on EFI installs (javierm) +- Small optimization in boot arg parsing method (jkonecny) +- Fix bad --addrepo command line parsing (jkonecny) +- Raise correct exception on bad addrepo boot param (jkonecny) +- payload: migrate TUI software spoke to pep8 (jkonecny) +- payload: switch from CamelCase in software spoke (jkonecny) +- payload: remove unused radio button (jkonecny) +- payload: solve basic pep 8 errors (jkonecny) + +* Wed Mar 06 2019 Martin Kolman - 31.4-1 +- Add tests for UnsupportedPartitioningError (vponcova) +- Handle missing support for Blivet-GUI in the Storage module (#1685645) + (vponcova) +- Create the default partitioning requests on demand (vponcova) + +* Tue Mar 05 2019 Martin Kolman - 31.3-1 +- Fix live payload error introduced by clean-up (#1685258) (jkonecny) + +* Mon Mar 04 2019 Martin Kolman - 31.2-1 +- Get the summary about selected disks from a function (vponcova) +- Replace warnings about disks with constants (vponcova) +- Rename and reorganize members of the storage spoke in TUI and GUI (vponcova) +- Add tests for the Blivet partitioning module (vponcova) +- Add DBus support for Blivet-GUI (vponcova) +- Create the Blivet partitioning module (vponcova) +- Don't override bg color of gtk-themes (mate) +- Fix the import of ZFCP (#1684583) (vponcova) +- Set up the disk initialization module from the partitioned storage (vponcova) +- Move the tests for the disk initialization module (vponcova) +- Set the default filesystem type for /boot in the Storage module (vponcova) +- Replace the default autopart type in the Storage module (vponcova) +- Set the correct attribute of the bootloader kickstart data (vponcova) +- network: Get FCoE nics from the DBus module (vponcova) +- Set up the kickstart partitioning from the storage by default (vponcova) +- Get the required device size for the given space from DBus (vponcova) +- network module: remove DisableIPV6 API (rvykydal) +- network module: fix disabling of ipv6 (rvykydal) +- Fixes for pylint-2.3.0 (vponcova) +- network module: remove API for applying boot options (rvykydal) +- network: use DEVICETYPE for team when updating virtual slaves ifcfgs + (rvykydal) +- dracut/parse-kickstart: Set DEVICETYPE instead of TYPE in a team master ifcfg + file (ptalbert) +- network module: take DEVICETYPE for team into account (rvykydal) +- payload: fix pep8 errors in TUI source spoke (jkonecny) +- network: fix network spoke status message (rvykydal) +- payload: switch source spoke from CamelCase (jkonecny) +- payload: solve pep8 errors in GUI source spoke (jkonecny) +- network module: fix missing argument in a log message (rvykydal) +- network module: honor ifname boot option for kickstart %%pre and missing + ifcfg (rvykydal) + +* Mon Feb 25 2019 Martin Kolman - 31.1-1 +- Use apply_disk_selection (vponcova) +- Use filter_disks_by_names (vponcova) +- Exclude zFCP and NVDIMM devices in is_local_disk (vponcova) +- Move code from pyanaconda.ui.lib.disks (vponcova) +- Remove the support for fake disks (vponcova) +- Add tests for the Snapshot module (vponcova) +- Remove the extra code for protecting live devices (vponcova) +- payload: switch from CamelCase in utils.py (jkonecny) +- payload: switch from CamelCase in rpmostreepayload.py (jkonecny) +- payload: switch from CamelCase in manager.py (jkonecny) +- payload: switch from CamelCase in livepayload.py (jkonecny) +- payload: switch from CamelCase in dnfpayload.py (jkonecny) +- payload: switch from CamelCase in the __init__.py (jkonecny) +- payload: move versionCmp to a separate file (jkonecny) +- payload: convert manager states to enum (jkonecny) +- payload: use ABCMeta for abstract classes (jkonecny) +- payload: move manager to a separate file (jkonecny) +- payload: remove ImagePayload abstract class (jkonecny) +- payload: move requirements code to a separate file (jkonecny) +- payload: move requirements exception to payload.errors (jkonecny) +- payload: import exceptions directly in dnf payload (jkonecny) +- payload: move exceptions to a separate file (jkonecny) +- payload: remove unused code parts (jkonecny) +- payload: fix pep8 issues (jkonecny) +- Specify the sysroot when you call the DBus method InstallWithTasks (vponcova) +- Remove the obsolete check for unknown sources (vponcova) +- network tui: guard use of NMClient by system configuration (rvykydal) +- network tui: handle device configuration in proper spoke (rvykydal) +- Use unformatted DASDs for the partitioning (vponcova) +- Fix the storage reset in TUI (vponcova) +- Use the Snapshot module in UI (vponcova) +- Use the Snapshot module in the Storage module (vponcova) +- Create a task for creation of snapshots (vponcova) +- Create a task for validation of snapshot requests (vponcova) +- Handle the command snapshot in the Snapshot module (vponcova) +- Create the Snapshot module (vponcova) +- network: rename sanityCheckHostname function (rvykydal) +- network: remove code which is no more needed/used with network module + (rvykydal) +- network ui: share some code (will be provided by module) (rvykydal) +- network gui: update model instead of recreating it on config changes + (rvykydal) +- network gui: connect to network module DeviceConfigurations (rvykydal) +- network: use NM Client for networking status message (rvykydal) +- network tui: use NetworkDeviceConfiguration structure (rvykydal) +- network tui: let network module handle updating kickstart data (rvykydal) +- network: remove no more used code (rvykydal) +- network tui: use network module and libnm (rvykydal) +- Add tests for the NVDIMM module (vponcova) +- Use the NVDIMM module in the NVDIMMDialog (vponcova) +- Create a task for the NVDIMM namespace reconfiguration (vponcova) +- Move the support for setting NVDIMM namespaces to use on DBus (vponcova) +- Move the support for updating NVDIMM actions on DBus (vponcova) +- Move the support for ignoring NVDIMM devices on DBus (vponcova) +- Create the NVDIMM module (vponcova) + +* Tue Feb 19 2019 Martin Kolman - 30.25-1 +- Remove one more obsolete group tag (mkolman) + +* Tue Feb 19 2019 Martin Kolman - 30.24-1 +- Add tests for the bootloader installation tasks (vponcova) +- Move the bootloader tests to a new file (vponcova) +- Create the DBus installation tasks for the bootloader (vponcova) +- Check for dirinstall target on s390 (bcl) +- Remove the menu_auto_hide attribute from Bootloader (vponcova) +- Remove the efi_dir attribute from EFIBase (vponcova) +- Clean up the Anaconda class (vponcova) +- Move pyanaconda.ihelp (vponcova) +- Update the stylesheet data (vponcova) +- Add tests for new methods of the Storage module (vponcova) +- Apply the partitioning in the Storage module (vponcova) +- Fix missing space in translatable string (mail) + +* Wed Feb 13 2019 Martin Kolman - 30.23-1 +- Reorganize the code for the boot loader installation (vponcova) +- Remove a useless argument from write_boot_loader (vponcova) +- Remove useless arguments from methods of the kickstart commands (vponcova) +- Create installation tasks for the Storage module (vponcova) +- Add tests for the custom partitioning module (vponcova) +- Create the custom partitioning module (vponcova) +- Process the btrfs command in the Storage module (vponcova) +- Remove the data from the execute method of the partitioning executors + (vponcova) +- Remove unmaintained signal handler (#1676683) (vponcova) +- Change a confusing message for headless systems (vponcova) +- Mount the file systems in a different installation task (vponcova) +- Write the escrow packets later (vponcova) +- Replace the writeStorageEarly and writeStorageLater methods (vponcova) + +* Tue Feb 12 2019 Martin Kolman - 30.22-1 +- Don't use the network manager client in a mock environment (vponcova) +- Don't load storage plugins in dir installations (#1674605) (vponcova) +- Test the storage configuration and validation in the Storage module + (vponcova) +- Implement configuration and validation in the partitioning modules (vponcova) +- Create the storage validation task (vponcova) +- Create the storage configuration task (vponcova) +- Create base classes for the partitioning modules (vponcova) +- Check if we can access a DBus service (vponcova) + +* Thu Feb 07 2019 Martin Kolman - 30.21-1 +- Drop the temporary anaconda-live dependency (mkolman) +- network module: update tests for generating dracut arguments (rvykydal) +- network_module: return set from function for getting dracut arguments + (rvykydal) +- network module: pass ifcfg to the function for getting dracut arguments + (rvykydal) +- network module: split add_connection_from_ksdata function (rvykydal) +- network module: split bind_connection function (rvykydal) +- network module: move looking for first device with link into a function + (rvykydal) +- network module: split and fix device configuration functions (rvykydal) +- network module: fix device configuration update for GUI (rvykydal) +- network module: add docstring to ifcfg.py (rvykydal) +- network module: use super() (rvykydal) +- network module: update docstrings and style of kickstart.py (rvykydal) +- network module: do not generate kickstart data for onboot value tweaking + (rvykydal) +- network module: decide better when to apply onboot policy (rvykydal) +- network module: move functions getting network data to better places + (rvykydal) +- network module: update docstrings of installation task methods (rvykydal) +- network module: remove unused return values from installation task methods + (rvykydal) +- network module: fix ONBOOT log message for installation task (rvykydal) +- network module: remove devel debugging log messages (rvykydal) +- network module: transform device configurations to structures in interface + (rvykydal) +- network module: update doc strings for DeviceConfigurations API (rvykydal) +- network module: connect DisableIPv6 to implementation signal (rvykydal) +- network module: fix generating of kickstart --activate option (rvykydal) +- network module: clean up typos and style (rvykydal) +- network module: use already existing function (rvykydal) +- Reset the storage object in the Storage module (vponcova) +- Protect devices in the Storage module (vponcova) +- Create the storage object in the Storage module (vponcova) +- Initialize Blivet in the Storage module (vponcova) +- Create a task with a result in the Baz module (vponcova) +- Allow to publish a task with a different interface (vponcova) +- Add the GetResult method (vponcova) +- Add the Succeeded signal (vponcova) +- network module: update unit tests (rvykydal) +- newtork module: put use of NM client under control of network module + (rvykydal) +- network module: use constant for nm connection uuid length (rvykydal) +- network module: use network module to get dracut arguments (rvykydal) +- network module: add support for getting dracut arguments (rvykydal) +- network module: support renaming of devices with ifname= boot option + (rvykydal) +- network module: generate kickstart from network module (rvykydal) +- network module: set current hostname using network module directly (rvykydal) +- network module: remove dependency of configuration task on nm_client + (rvykydal) +- network module: use module task for network configuration writing (rvykydal) +- network module: ifcfg.py cleanup (rvykydal) +- network module: dump missing ifcfg files via network module (rvykydal) +- network module: add support for dumping missing ifcfg files (rvykydal) +- network module: set real ONBOOT values via network module (rvykydal) +- network module: add support for updating ONBOOT ifcfg value (rvykydal) +- network module: apply kickstart via network module (rvykydal) +- network module: fix list of devices for which kickstart was applied + (rvykydal) +- network module: work with ifcfg file objects, not paths (rvykydal) +- network module: set bootif kickstart value from boot options (rvykydal) +- network module: provide apply_kickstart (rvykydal) +- network module: consolidate initramfs connections via Network module + (rvykydal) +- network module: provide initramfs connections consolidation (rvykydal) +- network module: set default value for missing network --device from ksdevice. + (rvykydal) +- network module: handle default network --device value (rvykydal) +- network module: handle hostname only network commands correctly (rvykydal) +- network module: use DBus Structure for DeviceConfiguration (rvykydal) +- network module: provide dbus API for DeviceConfigurations (rvykydal) +- network module: fix looking up vlan parent if specified by UUID (rvykydal) +- network module: fix kickstart generating for vlan interface name (rvykydal) +- network module: generate kickstart data from DeviceConfigurations (rvykydal) +- network module: add a module providing NM.Client (rvykydal) +- network module: connect DeviceConfigurations to signals from NM (rvykydal) +- network module: add DeviceConfigurations for persistent config state + (rvykydal) + +* Wed Feb 06 2019 Martin Kolman - 30.20-1 +- Remove obsolete Group tag & obsolete scriptlets (mkolman) +- Move the write method of the InstallerStorage class (vponcova) +- Clean up the reset method of the InstallerStorage class (vponcova) +- Allow non-ASCII characters in passphrases again (#1619813) (vponcova) +- Remove the argument protected from initialize_storage (vponcova) +- Remove multiboot support for tboot (javierm) +- Move the code for ignoring disks labeled OEMDRV (vponcova) +- Set default entry to the BLS id instead of the entry index (javierm) +- Remove the ksdata argument from the initialize_storage function (vponcova) +- Remove the ksdata attribute from the InstallerStorage class (vponcova) +- Move the code for ignoring nvdimm devices to pyanaconda.storage.utils + (vponcova) +- Use new ssl certificate kickstart options (lars) +- Remove the data argument from the do_autopart function (vponcova) +- Call refreshAutoSwapSize from the do_autopart function (vponcova) +- Move getAvailableDiskSpace to pyanaconda.storage.utils (vponcova) +- Move lookupAlias to pyanaconda.storage.utils (vponcova) +- Move getEscrowCertificate to pyanaconda.storage.utils (vponcova) +- Move get_ignored_nvdimm_blockdevs to pyanaconda.storage.utils (vponcova) +- Remove update_ksdata from the InstallerStorage class (vponcova) +- Remove obsolete ldconfig scriptlets (mkolman) +- Do not try to use disks without partition slots for autopart (vtrefny) +- dracut: Add deps for fetch-kickstart-disk (walters) + +* Mon Jan 28 2019 Martin Kolman - 30.19-1 +- Move code for the storage creation (vponcova) +- Move code for the storage initialization (vponcova) +- Remove the GRUB class (javierm) +- Remove support for deprecated bootloaders (javierm) +- Spelling fix in Boot Options documentation (josephvoss14) +- Put 'lock' checkbox under 'Confirmation field' (frederic.pierret) +- Don't create an extra instance of the bootloader (vponcova) +- Remove the preStorage method in payload (vponcova) +- Use LUKS2 by default (vponcova) +- Clean up the space checkers (#1520749) (vponcova) +- Don't show time and date controls in live installations (#1510425) (vponcova) +- anaconda: add option to lock root account (frederic.epitre) + +* Mon Jan 21 2019 Martin Kolman - 30.18-1 +- Relabel X11/xorg.conf.d directory (#1666892) (jkonecny) +- Reorder items in selinux relabeling post script (#1666892) (jkonecny) +- Fix jumping boxes in root password spoke (jkonecny) +- Move the execute method of the bootloader command (vponcova) +- Remove ksdata from the execute method of the bootloader command (vponcova) +- Move writeBootLoader to pyanaconda.bootloader.installation (vponcova) +- Move EXTLINUX to pyanaconda.bootloader.extlinux (vponcova) +- Move ZIPL to pyanaconda.bootloader.zipl (vponcova) +- Move Yaboot to pyanaconda.bootloader.yaboot (vponcova) +- Move EFIBase to pyanaconda.bootloader.efi (vponcova) +- Move GRUB2 to pyanaconda.bootloader.grub2 (vponcova) +- Move GRUB to pyanaconda.bootloader.grub (vponcova) +- Move Bootloader to pyanaconda.bootloader.base (vponcova) +- Move BootLoaderImage to pyanaconda.bootloader.image (vponcova) +- Create the pyanaconda.bootloader module (vponcova) +- Tweak tests documentation (jkonecny) +- Fix requires in dependency solver (jkonecny) +- Remove the unused method add_re_check (vponcova) +- Remove the unused attribute _lHome (vponcova) +- Remove the unused attribute _actionStore (vponcova) +- Remove unused constants ERROR_WEAK and ERROR_NOT_MATCHING (vponcova) +- Remove the unused attributes _repoNameWarningBox and _repoNameWarningLabel + (vponcova) +- Remove the unused attribute _configureBox (vponcova) +- Remove the unused attribute _addDisksButton (vponcova) +- Remove the unused attribute orig_fstab (vponcova) +- Remove the unused attribute ignore_disk_interactive (vponcova) +- Remove the unused class TarPayload (vponcova) +- Remove the unused method environmentGroups (vponcova) +- Remove the unused exception NoSuchPackage (vponcova) +- Remove the unused function get_locale_territory (vponcova) +- Remove the unused variable upgrade_log (vponcova) +- Remove unused classes RegexpCheck and FunctionCheck (vponcova) +- Remove the unused property check_request (vponcova) +- Remove the unused constant PASSWORD_DONE_TO_CONTINUE (vponcova) +- Remove the unused constant SECRET_MIN_LEN (vponcova) +- Remove the unused variable bugzillaUrl (vponcova) +- Remove the unused attribute stage1_device_types (vponcova) +- Move attributes from the Blivet class to Anaconda (vponcova) +- Remove the Blivet's gpt flag (vponcova) +- Set Automatic Installation Media for HDD not ISO (jkonecny) +- Adapt old code to new partition name translation (jkonecny) +- Fix source spoke status for expanded tree on HDD (jkonecny) +- Enable installation from install tree on HDD (jkonecny) +- Remove the unused class IPSeriesYaboot (vponcova) +- Fix the name of the attribute stage2_device_raid_levels (vponcova) +- Remove the useless attribute stage2_max_end_mb (vponcova) +- Remove the unused attribute problems (vponcova) +- Remove the unused logger to stderr (vponcova) +- Move the code from format_by_default to the storage checker (vponcova) +- Move the code from must_format to the storage checker (vponcova) + +* Wed Jan 09 2019 Martin Kolman - 30.17-1 +- Fix anaconda-live package temporary Requires: (mkolman) +- Add a new configuration option allow_imperfect_devices (vponcova) +- Remove the selinux flag (vponcova) +- Rename the Services section (vponcova) +- Fix Arm EFI package selection and 32 bit status (pbrobinson) +- Remove support for the undocumented option force_efi_dir (vponcova) +- Remove the flag extlinux (vponcova) +- Remove the flag nombr (vponcova) +- Remove the flag leavebootorder (vponcova) +- Remove the flag nonibftiscsiboot (vponcova) + +* Tue Jan 08 2019 Martin Kolman - 30.16-1 +- Use the file system type provided by Blivet by default (#1663585) (vponcova) +- Move remaining GUI related files to anaconda-gui (mkolman) +- Create anaconda-live sub-package (mkolman) +- Don't acquire the imp's lock (#1644936) (vponcova) + +* Thu Jan 03 2019 Martin Kolman - 30.15-1 +- Remove install classes from the code (vponcova) +- Remove files with install classes (vponcova) +- Use the Anaconda configuration to configure the storage (vponcova) +- Use the Anaconda configuration to configure the bootloader (vponcova) +- Use the correct name of the variant AtomicHost (vponcova) +- Use the Anaconda configuration to configure payload (vponcova) +- Use the Anaconda configuration to configure network devices (vponcova) +- Use the Anaconda configuration to customize the user interface (vponcova) +- Use the Anaconda configuration to show EULA (vponcova) +- Use the Anaconda configuration to detect unsupported hardware (vponcova) +- Remove the kickstart command installclass (vponcova) +- Fix the anaconda documentation (vponcova) +- Add support for inst.product and inst.variant (vponcova) +- Use the product configuration files in Anaconda (vponcova) + +* Wed Jan 02 2019 Martin Kolman - 30.14-1 +- Require password confirmation in GUI (#1584064) (mkolman) +- Run zipl again after generating initramfs (#1652727) (vponcova) +- Preserve the boot option zfcp.allow_lun_scan (#1561662) (vponcova) +- Don't allow /boot on LVM (#1641986) (vponcova) +- The encoding should be always set to UTF-8 (#1642857) (vponcova) +- Make sure fips is correctly enabled on target system (#1619568) (mkolman) +- Remove workaround for bd_s390_dasd_online (vponcova) +- Clean up /run/install (#1562239) (vponcova) +- Make it possible to exit empty user spoke (#1620135) (mkolman) +- Don't allow to use LDL DASD disks (#1635825) (vponcova) +- Remove initThreading method from pyanaconda.threading (vponcova) +- Drop the inst.noblscfg option (javierm) + +* Tue Dec 04 2018 Martin Kolman - 30.13-1 +- Extend tests for the configuration support (vponcova) +- Split the Anaconda configuration handler to more files (vponcova) +- Add tests for the product configurations (vponcova) +- Read only *.conf files from /etc/anaconda/conf.d (vponcova) +- Create the product configuration loader (vponcova) +- Disable BLS config if new-kernel-pkg script is installed (javierm) +- Drop xorg-x11-server-Xorg check from graphical target detection (#1583958) + (mkolman) +- Create a basic structure of the product configuration files (vponcova) +- Fix pylint errors (vponcova) +- dracut/parse-kickstart: don't abort on --device=link (lkundrak) +- Add provides_network_config system property (rvykydal) +- Get rid of network system capability which does not make sense. (rvykydal) +- Prohibit network configuration on Live OS. (rvykydal) +- Use check_supported_locales to filter unsupported locales (vponcova) +- Replace filterSupportedLangs and filterSupportedLocales (vponcova) +- Remove help-related constants from install classes (vponcova) +- Remove setup_on_boot from the install classes (vponcova) +- Convert a keymap into a list of layouts (vponcova) +- RPM: anaconda-core requires dbus-daemon (awilliam) +- Remove use_geolocation_with_kickstart from install classes (vponcova) + +* Thu Nov 22 2018 Martin Kolman - 30.12-1 +- Simplify the task Activate filesystems (vponcova) +- Remove the flag livecdInstall (vponcova) +- Overwrite network configuration for the live image payload (vponcova) +- Write tests for the installation system configuration (vponcova) +- Resolve the name conflicts in exception.py (vponcova) +- Use the Anaconda configuration in the network module (vponcova) +- Revert "Don't try to get hostnamed proxy in non-installer-image environments + (#1616214)" (vponcova) +- Remove the function can_touch_runtime_system (vponcova) +- Add rules for the installation system (vponcova) +- Configure the installation system (vponcova) +- Replace setNetworkOnbootDefault (vponcova) +- Add tests for the FCoE module (vponcova) +- Discover an FCoE device with a DBus task (vponcova) +- Reload the FCoE module on the storage reset (vponcova) +- Let the FCoE module to provide the dracut arguments (vponcova) +- Let the FCoE module to write the configuration (vponcova) +- Move kickstart support to the FCoE module (vponcova) +- Create the basic structure for the FCoE module (vponcova) + +* Mon Nov 19 2018 Martin Kolman - 30.11-1 +- Install grubby-deprecated when using the extlinux bootloader (javierm) +- Remove configurePayload (vponcova) +- Resolve the name conflicts with conf (vponcova) +- Write tests for the target support (vponcova) +- Simplify the code (vponcova) +- Replace the dirInstall flag (vponcova) +- Replace the imageInstall flag (vponcova) +- Configure the installation target (vponcova) +- Write tests for the default partitioning (vponcova) +- Define the default partitioning statically (vponcova) +- Remove l10n_domain from the install classes (vponcova) +- Re-generate BLS loader file snippets on live installs (#1648472) (awilliam) +- Remove the attribute bootloaderTimeoutDefault (vponcova) +- Remove the attribute bootloaderExtraArgs (vponcova) +- Remove the method setPackageSelection (vponcova) +- Remove the setStorageChecker method (vponcova) +- Remove the getBackend method (vponcova) +- Add doc to make a release in a mock environment (jkonecny) +- Support in our scripts creating release in a mock (jkonecny) +- Add dependencies to make a new release to dependency_solver (jkonecny) + +* Tue Nov 06 2018 Martin Kolman - 30.10-1 +- Make the pyanaconda/image.py more pep8 (jkonecny) +- Test image repodata folder based on treeinfo file (jkonecny) +- Use var instead of strings in findFirstIsoImage (jkonecny) +- Use new InstallTreeMetadata instead of TreeInfo (jkonecny) +- Add InstallTreeMetadata class (jkonecny) +- Move DEFAULT_REPOS to the constants (jkonecny) +- Don't check for firmware compatibility to enable BootLoaderSpec support + (javierm) +- Update kernel command line parameters in BLS files (javierm) +- Add support for GRUB_ENABLE_BLSCFG and inst.noblscfg (pjones) +- Get rid of new-kernel-pkg invocations (pjones) +- Minor pylint cleanups (pjones) + +* Mon Nov 05 2018 Martin Kolman - 30.9-1 +- Load configuration files from /etc/anaconda/conf.d (vponcova) +- Let the DBus launcher to set up the modules (vponcova) +- Start modules that are enabled in the configuration file (vponcova) +- Enable the DBus modules and addons via the configuration file (vponcova) + +* Thu Nov 01 2018 Jiri Konecny - 30.8-1 +- Remove flags from anaconda_logging (vponcova) +- Remove blivet-specific flags from pyanaconda.flags (vponcova) +- The armplatform option is deprecated (vponcova) +- Create a class for the Anaconda bus connection (vponcova) +- Fix local repo files aren't enabled (#1636739) (jkonecny) +- Write RPM tests for the Anaconda configuration file (vponcova) +- Write tests for the configuration support (vponcova) +- Create a class for handling the Anaconda configuration (vponcova) +- Provide a better support for handling the configuration files (vponcova) +- Create the Anaconda configuration file (vponcova) + +* Thu Oct 18 2018 Martin Kolman - 30.7-1 +- installclass: fix variant string for Atomic Host (#1640409) (dusty) +- Remove EXPERIMENTAL label for mountpoint assignment in TUI (#1636940) + (mkolman) + +* Mon Oct 15 2018 Martin Kolman - 30.6-1 +- nvdimm: update ks data for actions in UI (rvykydal) +- nvdimm: use pykickstart constant for setting reconfigure mode (rvykydal) +- Revert "Don't allow booting from nvdimm devices" (rvykydal) +- Add --no-pip to setup-mock-test-env script (jkonecny) +- Fix error message in setup-mock-test-env script (jkonecny) +- Add shortcut function to get dependency script (jkonecny) +- Add install-pip parameter to setup-mock-test-env (jkonecny) +- Small optimalization in setup-mock-test-env (jkonecny) +- Add package installation from pip for test script (jkonecny) +- Fix wrong pylint false positive regex (jkonecny) + +* Mon Oct 08 2018 Martin Kolman - 30.5-1 +- Adjust to some DNF 3.6 changes (#1637021) (mkolman) +- Ignore errors when trying to activate unsupported swaps (#1635252) (vtrefny) +- Add option to set kernel.hung_task_timeout_secs option (rvykydal) +- Move the glade adaptor to a separate plugin (dshea) + +* Wed Oct 03 2018 Martin Kolman - 30.4-1 +- Fix strings not marked for translation (jkonecny) +- Drop attempt to add 'nocrypto' to tsflags (awilliam) +- Fix librepo logging with new DNF (jkonecny) +- Revert "Remove librepo imports from Anaconda (#1626609)" (jkonecny) +- Set the VNC password directly (#1592686) (vponcova) +- Update the spoke for unsupported hardware in TUI (#1601545) (vponcova) +- Update the dialog for unsupported hardware in GUI (#1601545) (vponcova) +- Support detection of kernel taints (vponcova) +- Fix the rescue mode (#1631749) (vponcova) +- Fix the sanity check verify_gpt_biosboot (#1593446) (vponcova) +- Flags shouldn't process the kernel options (vponcova) +- Fully support the inst.gpt option (vponcova) +- Don't set Anaconda-specific flags in Blivet (vponcova) +- Remove the class for kernel arguments from pyanaconda.flags (vponcova) +- Remove unused false positives (vponcova) +- Don't connect to signals of the Network Manager DBus objects (#1582233) + (vponcova) +- Fix documentation for setting Pykickstart command version (mkolman) +- Don't try to get hostnamed proxy in non-installer-image environments + (#1616214) (rvykydal) +- Use realm data in UI (vponcova) +- Use realm data in the DBus module (vponcova) +- Create a DBus structure for realm data (vponcova) +- Add support for DBus structures (vponcova) +- docs/commit-log.rst: Don't wrap example firstlines (ferdnyc) +- Detect that there is not enough space on a device (#1613232) (vponcova) +- Add Silverblue InstallClass (jkonecny) + +* Tue Sep 11 2018 Martin Kolman - 30.3-1 +- Save lsblk output to the Anaconda traceback file (vtrefny) +- Remove librepo imports from Anaconda (#1626609) (jkonecny) +- DNF 3.5 compatibility (mkolman) +- Use the default LUKS version for auto partitioning (#1624680) (vponcova) +- Remove the testing flag (vponcova) + +* Thu Aug 30 2018 Martin Kolman - 30.2-1 +- Add initial 32-bit ARMv7 EFI support (pbrobinson) +- Drop legacy get_arm_machine pieces (pbrobinson) +- arch: arm: drop omap checks and specifics (pbrobinson) + +* Mon Aug 27 2018 Martin Kolman - 30.1-1 +- Fix the processing of the live CD source (#1622248) (vponcova) + +* Wed Aug 22 2018 Martin Kolman - 29.24-1 +- Fix crash in tui when default partitioning scheme is not supported. + (rvykydal) +- Fix pylint errors (vponcova) +- Add libtool build dependency (jkonecny) +- Remove shebang from DUD test (jkonecny) +- Add inst.addrepo documentation for HD variant (jkonecny) +- Warn when repo names are not unique (jkonecny) +- HD addon repos have mount directories permanent (jkonecny) +- Unmount hard drive additional repositories (jkonecny) +- Move RepoData copy creation to the RepoData class (jkonecny) +- Show empty file protocol on HD addon repo fail (jkonecny) +- Mount and use HDD additional repositories (jkonecny) +- Separate _find_and_mount_iso from _setup_media (jkonecny) +- Load hard drive repo type from inst.addrepo (jkonecny) +- Do not fail if .discinfo file can't be read (jkonecny) +- Use productmd to parse .discinfo file (jkonecny) +- Add payload sources tests (jkonecny) +- Cleanup payload tests source file (jkonecny) +- Add documentation for inst.addrepo boot option (jkonecny) +- Add additional repositories to KS data (jkonecny) +- Use new source solution (jkonecny) +- Add payload sources implementation (jkonecny) +- Don't resize a device if the size is same as the old size (#1572828) + (vponcova) +- Mark disks with additional repos as protected (jkonecny) +- Support boot args parsing to list (jkonecny) +- Add inst.addrepo new options (jkonecny) +- Make parenthesis consistent (jkonecny) +- Remove unused parameter from live_startup method (jkonecny) +- Disable treeinfo based repos only once (jkonecny) +- Disable treeinfo repos when base repo change (jkonecny) +- Treeinfo repos can't be changed nor removed (jkonecny) +- Add all repositories from the treeinfo file (jkonecny) +- Load base repository location from treeinfo (jkonecny) +- Add limited file:// protocol to GUI Source spoke (jkonecny) +- Add BaseOS between default base repositories (jkonecny) +- Split _setupInstallDevice method in payload (jkonecny) +- Check the LUKS2 memory requirements (vponcova) +- Add an option for choosing version of LUKS in GUI (vponcova) +- Add tests for LUKS2 in the auto partitioning module (vponcova) +- Apply the LUKS2 options from the auto partitioning module (vponcova) +- Support LUKS2 options in the auto partitioning module (vponcova) +- Support LUKS2 options in logvol, part and raid commands (vponcova) +- Enable to set a default version of LUKS (vponcova) +- Update dependencies and kickstart commands to support LUKS2 (#1547908) + (vponcova) +- Revert back to running DNF in a subprocess (mkolman) +- Use SimpleConfigFile to get PLATFORM_ID from /etc/os-release (mkolman) +- Fix a 5 year old typo in the spec file (mkolman) +- Use wwn attr instead of removed wwid. (#1565693) (dlehman) + +* Tue Aug 07 2018 Martin Kolman - 29.23-1 +- Bump required DNF version (mkolman) +- Fix some small issues with the platform id patch (mkolman) +- Set platform id for DNF (mkolman) +- Fix crash when software environment is False (jkonecny) +- Allow to delete all file systems used by Unknown (#1597199) (vponcova) +- DD: Use text mode when calling tools with subprocess (rvykydal) +- Update RHEL placeholder names (mkolman) +- Typo fixup (rvykydal) +- Define if blivet-gui is supported via installclasses (rvykydal) +- Offer Blivet-GUI partitioning only if supported (rvykydal) +- Only show the "closest mirror" source option where appropriate (mkolman) +- Starting from 3.0 DNF expects strings in comps queries (mkolman) +- Use the manual partitioning module in TUI (vponcova) +- Use the manual partitioning module in UI (vponcova) +- Add tests for the manual partitioning module (vponcova) +- Create the manual partitioning module (vponcova) +- Reserve enough static space for 2 lines in spoke status on hub (#1584160) + (rvykydal) +- Fix disable additional repositories (jkonecny) +- Show better messages for NoSuchPackage and NoSuchGroup (#1599190) (vponcova) +- Bootloader stage2 can't be on btrfs on rhel (#1533904) (rvykydal) + +* Fri Jul 27 2018 Martin Kolman - 29.22-1 +- Handle new module specific error states (mkolman) +- Handle missing package errors reported by the install_specs() function + (mkolman) +- Initial module enablement and installation support (mkolman) +- Use productmd library to parse .treeinfo (#1411673) (jkonecny) +- Import kickstart classes as version-less in the dracut script (vponcova) +- Use only version-less kickstart classes (vponcova) +- Define version-less variants of kickstart classes (vponcova) + +* Wed Jul 25 2018 Martin Kolman - 29.21-1 +- Pylint should skip the file livepayload.py (vponcova) +- Fix pylint errors (vponcova) +- Change the pop-up text with the pre-release warning (#1542998) (vpodzime) +- Sort categories on the hub by defined order (#1584160) (rvykydal) +- Show a note about EULA where relevant (mkolman) +- Change message log level to INFO when adding repo (jkonecny) +- Set packaging log level to DEBUG by default (jkonecny) +- Remove the python-wrapt dependency (vponcova) +- Do not use capitals for spoke names (#1584160) (rvykydal) +- Wrap category label and add space between columns (#1584160) (rvykydal) +- Use 32 px icons (instead of 16 px) on hubs (#1584160) (rvykydal) +- Replace deprecated dracut options for booting with ibft. (rvykydal) +- Improve handling of unsupported filesystems in UI. (rvykydal) +- Reserve two lines for status message (#1584160) (rvykydal) +- Use three spoke columns on hub for better scaling (#1584160) (rvykydal) + +* Wed Jul 18 2018 Martin Kolman - 29.20-1 +- Make pyanaconda.dbus.typing work with Python 3.7 (#1598574) (awilliam) +- Protected devices might be hidden (#1561766) (vponcova) +- fstab: include a note about systemctl daemon-reload (zbyszek) +- Access the ZFCP module only on s390x (vponcova) +- Tell libreport if it is a final release or not (#1596392) (vpodzime) +- bootloader: GRUB2: Set menu_auto_hide when enabled by the instClass + (hdegoede) +- installclass: Add bootloader_menu_autohide property (hdegoede) +- Add tests for the zFCP module (vponcova) +- Handle the zfcp command in the zFCP module (vponcova) +- Use the zFCP discovery task in UI (vponcova) +- Create the zFCP discovery task (vponcova) +- Create the zFCP module (vponcova) + +* Wed Jun 27 2018 Martin Kolman - 29.19-1 +- DNF 3: progress callback constants moved to dnf.transaction (awilliam) +- DNF 3: Update size calculations for transaction item changes (awilliam) +- DNF 3: config substitutions moved from dnf to libdnf (awilliam) + +* Mon Jun 25 2018 Martin Kolman - 29.18-1 +- Add tests for the DASD module (vponcova) +- Run the DASD formatting task in UI (vponcova) +- Extend the sync_run_task method with a callback (vponcova) +- Create a task for formatting DASDs (vponcova) +- Run the DASD discovery task from UI (vponcova) +- Create a task for discovering DASDs (vponcova) +- Create the DASD module (vponcova) +- Add tests for the language installation task (vponcova) +- Run an installation task to install a language (vponcova) +- nvdimm: fix crash on non-block devices (rvykydal) + +* Tue Jun 12 2018 Martin Kolman - 29.17-1 +- Wait for kickstart modules to quit (vponcova) +- Ask for a default passphrase if required (vponcova) +- Add support for setting different types of passwords in TUI (vponcova) + +* Thu Jun 07 2018 Martin Kolman - 29.16-1 +- Add tests for changes in tasks and the install manager (vponcova) +- Add a simple installation task in the Baz module (vponcova) +- Update the boss classes (vponcova) +- Update the base clases for modules (vponcova) +- Use the system installation task in the install manager (vponcova) +- Add the system installation task (vponcova) +- Add methods for running remote DBus tasks (vponcova) +- Improved base clases for DBus tasks (vponcova) +- Do not manually create LUKSDevice when unlocking a LUKS format (vtrefny) +- Fix pylint errors (vponcova) +- Skip the pylint check for the bootloader.py (vponcova) +- Enable DNF depsolver debugging in debug mode (mkolman) +- Don't reset locale of our DBus daemon (vponcova) +- Close the DNF base later (#1571299) (vponcova) +- Add 10%% for storage metadata to the total required space (#1578395) + (vponcova) +- Add hook to prevent mistake upstream pushes (jkonecny) +- Revert "WIP" (vponcova) +- WIP (vponcova) +- Set locale to en_US.UTF-8 in every module (#1575415) (vponcova) +- Move initial module configuration to the init function (vponcova) +- Fix the mount command (vponcova) +- Use the auto partitioning module in UI (vponcova) +- Only check space during a tui kickstart if ksprompt is enabled (bcl) +- Fix can't exit TUI storage spoke (jkonecny) +- Use PROCESSED_AND_CLOSE and PROCESSED_AND_REDRAW (jkonecny) +- Remove not required PROCESSED return (jkonecny) +- Remove PROCESSED from refresh method (jkonecny) + +* Wed May 16 2018 Martin Kolman - 29.15-1 +- nvdimm: make debug messages more clear (rvykydal) +- nvdimm: use libblockdev enum to check namespace mode (rvykydal) +- Add data loss warning to nvdimm reconfigure dialog. (rvykydal) +- Add UI feedback for disk repopulating after nvdimm reconfiguration. + (rvykydal) +- Fix ignoring of nvdimm devices (rvykydal) +- Don't allow booting from nvdimm devices (rvykydal) +- Improve UI feedback for invalid boot on non-iBFT iSCSI devices. (rvykydal) +- Add inst.nonibftiscsiboot boot option. (rvykydal) +- Use only devices specified by nvdimm command for installation. (rvykydal) +- Add option to reconfigure nvdimm devices into sector mode. (rvykydal) +- Allow only devices in sector mode to be selected. (rvykydal) +- Add nvdimm devices to Advanced Storage spoke. (rvykydal) +- Add kickstart support for nvdimm reconfiguration to sector mode. (rvykydal) +- Ignore nvdimm disks which are not in sector mode. (rvykydal) +- Do not ignore nvdimm (pmemX) devices (rvykydal) +- Update the pykickstart commands (vponcova) +- Fix firewall DBUS module API usage (#1577405) (mkolman) +- Fix formatting in the TUI storage spoke (jkonecny) +- Fix TUI crash in mountpoint assignment (#1564067) (jkonecny) +- Fix KS logvol metadata and chunksize parameters (#1572511) (jkonecny) +- Show correct bootloader error on the MacEFI platform (vponcova) +- Revert "Fix broken kickstart command test" (rvykydal) +- Support fcoe --autovlan option (#1564096) (rvykydal) + +* Fri May 04 2018 Martin Kolman - 29.14-1 +- Increase module startup timeout to 600 seconds (mkolman) +- Fix name of the Zanata Python client package (mkolman) +- Add tests for the auto partitioning module (vponcova) +- Create the auto partitioning module (vponcova) +- Add the firewall submodule (mkolman) +- Once again fix cmdline error handling. (#1360223) (sbueno+anaconda) +- Extend the timeout period to 180s in the case of cmdline error. (#1360223) + (sbueno+anaconda) +- Fix the clearpart test with disklabel option (vponcova) +- The specified nosetests failed to run (vponcova) + +* Tue Apr 24 2018 Martin Kolman - 29.13-1 +- Show correct root account locked status in reconfig mode (#1507940) (mkolman) +- Add missing lines and modularization only log to test coverage (jkonecny) +- Remove makebumpver dependency from spec file (jkonecny) +- network module: use connectivity checking in anaconda (rvykydal) +- network module: add connectivity checking (rvykydal) +- Permit adding disabled external repos to installation. (riehecky) +- Handle empty active attribute for consoles (#1569045) (mkolman) +- Support temporary kickstart generating (vponcova) +- Create the dynamic module User (vponcova) +- Select Workstation install class for Workstation live (#1569083) (awilliam) +- Rename the main module User to Users (vponcova) + +* Thu Apr 19 2018 Martin Kolman - 29.12-1 +- Save logs to result folder after rpm-tests (jkonecny) +- Add Installed pyanaconda tests (jkonecny) +- Fix name of the RPM test (jkonecny) +- Support running just chosen rpm test (jkonecny) +- Add test cache files to gitignore (jkonecny) +- Move test install test from Makefile to rpm tests (jkonecny) +- Create structure to run rpm tests (jkonecny) +- Move all nosetests to separate directory (jkonecny) +- Fix broken kickstart command test (jkonecny) +- Fix broken kickstart command test (jkonecny) +- localization: use LanguageKickstarted module property (#1568119) (rvykydal) +- Start only the specified kickstart modules (#1566621) (vponcova) +- Use the Bootloader module in UI (vponcova) +- Add tests for the bootloader module (vponcova) +- Create the bootloader module (vponcova) +- rpmostreepayload: do not require network for dvd installation (#1565369) + (rvykydal) +- Fix double logging to stdout (vponcova) +- Don't try to create required partitions if there are none (vponcova) + +* Thu Apr 12 2018 Martin Kolman - 29.11-1 +- Add anaconda-install-env-deps as dependency of the anaconda package (mkolman) +- Add %%files for install-env-deps so it actually exists (awilliam) + +* Tue Apr 10 2018 Martin Kolman - 29.10-1 +- Bump simpleline version (mkolman) +- Do not redraw screen after text YesNo dialog (#1557951)(jkonecny) +- Revert "Adapt to a new simpleline changes (#1557472)(jkonecny) +- authselect: enable silent last log (pbrezina) +- authselect: fix typo to enable fingerprint authentication (pbrezina) + +* Mon Apr 09 2018 Martin Kolman - 29.9-1 +- Move install time dependencies to a metapackage (mkolman) + +* Thu Apr 05 2018 Martin Kolman - 29.8-1 +- Fix forgotten usage of the selinux kickstart command (vponcova) +- Fix tests for the storage module (vponcova) +- Use the disk selection and initialization modules in UI (vponcova) +- Enable to use object identifiers instead of object paths (vponcova) + +* Thu Mar 29 2018 Martin Kolman - 29.7-1 +- Add Makefiles for disk initialization and selection modules (vponcova) +- Remove the invalid self argument (vponcova) +- Run all unit tests (vponcova) + +* Tue Mar 27 2018 Martin Kolman - 29.6-1 +- Create the disk initialization and disk selection modules (vponcova) +- Use watch_property to watch changes of DBus properties (vponcova) +- Better organize the base classes for modules (vponcova) +- Fixed KS forcing zerombr onto RO disk (japokorn) +- Add tests for the kickstart specifications (vponcova) +- Standardize calls to parent via super() (riehecky) +- Fix 'isDisk' property name (#1558906) (vtrefny) +- Make the class for removed kickstart commands more strict (vponcova) +- Fix the progress bar steps (vponcova) +- Use enum for the first boot action (vponcova) +- Use enum for the SELinux modes (vponcova) +- datetime spoke: still pass ksdata to NTPconfigDialog (UIObject) (rvykydal) + +* Mon Mar 19 2018 Martin Kolman - 29.5-1 +- Write rootpw command to kickstart (#1557529) (mkolman) +- Don't make safe to observe services on buses that don't run (vponcova) +- Add the LanguageKickstarted property (vponcova) +- Don't autoquit by default if the last hub is empty (#1553935) (mkolman) +- Use the Services module in UI (vponcova) +- Create the Services module (vponcova) +- Enable hibernation only on x86 (#1554345) (vponcova) +- Add the Storage module with no API (vponcova) +- Add the Payload module with no API (vponcova) +- Remove DBus modules Foo and Bar (vponcova) +- network module: fix accessing org.freedesktop.hostname1 for current hostname + (rvykydal) + +* Mon Mar 12 2018 Martin Kolman - 29.4-1 +- network module: add basic test (rvykydal) +- Add prepare command to setup-mock-test-env script (jkonecny) +- Mark partition live device's disk protected. (#1524700) (dlehman) + +* Fri Mar 09 2018 Martin Kolman - 29.3-1 +- Remove useless constants from pyanaconda.dbus.constants (vponcova) +- Use identifiers to get observers and proxies (vponcova) +- Remove the publish method from DBus interfaces (vponcova) +- Replace constants in publish and register methods (vponcova) +- Replace constants in DBus interface names (vponcova) +- Define DBus errors with the dbus_error decorator (vponcova) +- Use namespaces and identifiers to describe Anaconda DBus objects (vponcova) +- Add support for identification of DBus objects and services (vponcova) +- User module should parse only rootpw for now (#1553488) (vponcova) +- localization module: plug localization module into keyboard GUI spoke + (rvykydal) +- localization module: add KeyboardKickstarted property (rvykydal) +- localization module: add KS support for keyboard command (rvykydal) +- localization module: don't use Kickstarted so another command can be added + (rvykydal) +- Fix release docs (mkolman) +- network: set TYPE value in ifcfg from kickstart in initrmfs (rvykydal) +- Make formatting consistent in AnacondaWidgets.xml (riehecky) + +* Mon Mar 05 2018 Martin Kolman - 29.2-1 +- Use the user DBUS module in the UI (mkolman) +- Use the user DBUS module for the rootpw command in kickstart.py (mkolman) +- Add initial user DBUS module (mkolman) +- Add tests for the Security module (vponcova) +- Use the Security module in UI (vponcova) +- Don't send empty kickstart to DBus modules (vponcova) +- Add the Security module (vponcova) +- Fix makeupdates script to work with new DBus structure (jkonecny) +- Fix Makefile of the kickstart manager (vponcova) +- Fix check if dbus daemon quit properly (jkonecny) +- Remove check if dbus is running (#1551096) (jkonecny) +- Use Anaconda's special env variable for dbus address (#1551096) (jkonecny) +- Migrate Anaconda to our private dbus session (#1551096) (jkonecny) +- localization module: use l12 shortcut for module name in UI (rvykydal) +- localization module: replace ksdata.lang with the module in anaconda. + (rvykydal) +- localization module: add KS support for lang command (rvykydal) +- Return restorecon utility to Fedora 28 mock (jkonecny) +- Include dbus.log when exporting logs (mkolman) +- Reorganize pyanaconda.modules.boss (vponcova) +- Move all DBus errors to pyanaconda.modules.common.errors (vponcova) +- Move common classes and functions to pyanaconda.modules.common (vponcova) +- Close DBus log file when quitting DBus session (jkonecny) +- Enable payload configuration for Install classes (jkonecny) +- Rename files that provide kickstart specifications (vponcova) +- Move the kickstart specification to pyanaconda.core.kickstart (vponcova) +- Start and quit Boss properly (jkonecny) +- Make class from dbus.launcher module (jkonecny) +- Add the kernel option resume= by default (#1206936) (vponcova) + +* Wed Feb 28 2018 Martin Kolman - 29.1-1 +- Use observers to access the hostname service (vponcova) +- Make safe to observe services on buses that don't have to run (vponcova) +- DBus logs are now saved to /tmp/dbus.log (jkonecny) +- Add tests for toplevel installclass attribs (riehecky) +- Wait for DBus modules for longer time (vponcova) +- Drop dependency on authselect and firewalld (vponcova) +- Fix kickstart version test (vponcova) +- Authconfig is replaced with authselect (#1542968) (vponcova) +- Add support for different message buses (vponcova) +- Fix makeupdates script (vponcova) +- Set up basic logging for DBus modules (vponcova) +- Remove get_dbus_module_logger (vponcova) +- Fix logging of the DBus modules (vponcova) +- Fix the reimport error (vponcova) +- Fix the network module specification (vponcova) +- network module: update_network_data test (rvykydal) +- network module: use Module.Kickstarted instead of ksdata.seen (rvykydal) +- network module: use for hostname in tui (rvykydal) +- network module: handle current hostname (rvykydal) +- network module: handle ksdata.network.hostname (rvykydal) +- network module: add module skeleton (rvykydal) +- Log changes in the kickstart modules. (vponcova) +- Use the Timezone module in UI. (vponcova) +- Start Boss from Anaconda (jkonecny) +- Do not use System DBus (jkonecny) +- Remove anaconda-boss.service (jkonecny) +- Move Anaconda dbus services and confs to session dbus (jkonecny) +- Run DBus session if not present (jkonecny) +- Change pykickstart version (vponcova) +- Move system-logos dependency from anaconda-core to anaconda-gui (mkolman) +- makebumpver: fix parsing of -m option (rvykydal) +- makebumpver: fix -i option (rvykydal) +- Fix tests of the Timezone module (vponcova) +- installclass: add comments to server install class (dusty) +- Don't use deprecated formatErrorMsg (vponcova) +- Use the KickstartError attributes (vponcova) +- kickstart: "clearpart --list" does not work (#1410335) (marcel) +- Use handler in the Timezone module (vponcova) +- Fix the specification of the Bar module (vponcova) +- Use the KickstartHandler class (vponcova) + +* Mon Feb 19 2018 Martin Kolman - 28.22-1 +- Prevent anaconda-core requiring gjs-console (awilliam) +- Temporarily don't test versions of specified kickstart objects (vponcova) + +* Mon Feb 19 2018 Martin Kolman - 28.21-1 +- Explain when run dependency_solver without options (jkonecny) +- Clean dd_test code (jkonecny) +- We can't set file permission mode for .so in dd test (jkonecny) +- Rename installclass_atomic to Fedora Atomic Host (jkonecny) +- Support running only nosetests or only some nosetests (jkonecny) +- Do not run tests as root (jkonecny) +- Save start and end time for pylint run (jkonecny) +- Separate grab-logs from ci target in Makefile (jkonecny) +- Remove false positive but disable Pylint in makeupdates script (jkonecny) +- Add copyright to scripts in ./scripts/testing (jkonecny) + +* Thu Feb 15 2018 Adam Williamson - 28.20-2 +- Prevent anaconda-core requiring gjs-console (awilliam) + +* Fri Feb 09 2018 Martin Kolman - 28.20-1 +- Check the proxy attribute before accessing it (vponcova) +- Check the noverifyssl attribute before accessing it (vponcova) +- Don't access the url attribute (#1530428) (vponcova) +- Use Fedora Server default partitioning in Atomic (jkonecny) +- Clean code of Atomic install class (jkonecny) +- Migrate Atomic install class (#1491287) (jkonecny) +- Move Atomic install class to Anaconda (#1491287) (#1536853) (jkonecny) +- Make sure that fetch_url is defined. (vponcova) + +* Mon Feb 05 2018 Martin Kolman - 28.19-1 +- Change pykickstart version. (vponcova) +- Do not deepcopy the kickstart data in the storage (vponcova) +- Replace deepcopy of the method command (vponcova) +- Use pykickstart 3 (vponcova) +- Provide comprehensive log messages about the display mode (vponcova) +- Fix missing logging in some cases of update of ONBOOT value. (rvykydal) +- Fix tests for the timezone module. (vponcova) +- Add the Kickstarted property to the kickstart modules. (vponcova) +- Connect to the observed service and other stuff. (vponcova) +- Prevent 99-copy-lgs.ks from exiting with a 1 (bcl) +- Rename SetUTC to SetIsUTC in the timezone module. (vponcova) + +* Thu Jan 18 2018 Martin Kolman - 28.18-1 +- Move how to use setup-mock-test-env script to help (jkonecny) +- Add --init as new parameter to setup-mock-test-env (jkonecny) +- Initialize the thread manager at the first import. (vponcova) +- Added tests for the timezone module and other. (vponcova) +- Remove 'i' from iutil module (jkonecny) +- Remove 'i' from isignal module (jkonecny) +- Move isignal module to core/isignal (jkonecny) +- Extract process watch functions to a static class (jkonecny) +- Move regexes module to core/regexes (jkonecny) +- Move i18n module to core/i18n (jkonecny) +- Move constants module to core/constants (jkonecny) +- Move iutil module to core/iutil (jkonecny) +- Move async_utils to core/async_utils (jkonecny) +- Replace gobject GLib by our core/glib (jkonecny) +- Rename run_in_main_thread to run_in_loop (jkonecny) +- Add Timer and PidWatcher abstraction above GLib (jkonecny) +- Create abstraction above GLib event loop (jkonecny) +- Add core/glib module for GLib access (jkonecny) +- Ignore errors for KickstartSpecificationHandler. (vponcova) +- Try to use the PropertiesChanged signal. (vponcova) +- Add timezone module. (vponcova) +- Collect properties changes before emit. (vponcova) +- Use Ping method from the standard interface. (vponcova) +- Recognize members of standard interfaces. (vponcova) +- Add an object observer with cached properties (vponcova) +- Rename modules with Fedora install classes. (vponcova) +- Add support for Variant in .buildstamp (vponcova) +- Fix the Bar module. (vponcova) +- Add pykickstart version to branching policy doc (jkonecny) +- Remove `unstable` branch from documentation (jkonecny) +- Move system-logos to anaconda-core (#1529239) (bcl) + +* Fri Jan 05 2018 Martin Kolman - 28.17-1 +- Modules should use the proxy pattern. (vponcova) +- Variants need to be instances of the Variant class (vponcova) +- kickstart: support firewall --use-system-defaults (#1526450) (dusty) +- Check payload is set before accessing its data (#1524785) (mkolman) +- Do not fail when test are failing in setup-env script (jkonecny) +- Support running multiple commands at once (jkonecny) +- Support copy Anaconda result dir out of mock (jkonecny) +- Remove dependencies from Makefile (jkonecny) +- Add path to Anaconda in mock to constant (jkonecny) +- Properly exclude packages from the install set (ngompa13) +- Add the _prepare_command helper function to setup-test-env (jkonecny) +- Add run-tests parameter to setup-test-env script (jkonecny) +- Remove /anaconda in mock before copying new one (jkonecny) + +* Tue Jan 02 2018 Martin Kolman - 28.16-1 +- Improve password checking status and error messages (mkolman) +- Spin kickstarts shouldn't be test dependency (jkonecny) + +* Wed Dec 20 2017 Martin Kolman - 28.15-1 +- Remove spurious echo call from tmux service file (#1526861) (mkolman) +- Restore fix for RHBZ #1323012 (`set_name` not `setName`) (awilliam) +- Fix Makefile for modules/[foo,bar]/tasks and for install_manager (rvykydal) +- Make passing kickstart to boss more visible. (rvykydal) +- Add tests for KickstartManager. (rvykydal) +- Add kickstart dispatching to anaconda. (rvykydal) +- Add kickstart dispatching to local boss run script (rvykydal) +- Add KickstartManager for Boss. (rvykydal) +- Add method for getting line mapping from kickstart elements to kickstart + (rvykydal) +- Add info about handled kickstart commands to modules (rvykydal) +- Add missing Makefile for kickstart_dispatcher (rvykydal) + +* Mon Dec 18 2017 Martin Kolman - 28.14-1 +- Use observers in the install manager (vponcova) +- Modify readme file for tests (jkonecny) +- Do not bump version when testing installation (jkonecny) +- Add set up test environment script (jkonecny) +- Add dependency solver script (jkonecny) +- Differentiate upstream and build-time version (#1493952) (mkolman) +- Fix bad bash '*' expansion when loading kernel modules (#1525841) (jkonecny) +- Fix connection to a signal in the install manager (vponcova) +- Use the InterfaceTemplate in the InstallationInterface (vponcova) +- Use the InterfaceTemplate in the TaskInterface (vponcova) +- Add a base class for DBus interfaces (vponcova) +- Update module manager to use observers (vponcova) +- Add DBus observers for better access to proxies. (vponcova) +- Remove running CI in mock from Makefile (jkonecny) +- Add xfsprogs and git to the test requirements (jkonecny) +- The gettext-devel is required by autogen (jkonecny) +- Remove kickstart-test dependencies from test requires (jkonecny) + +* Tue Dec 12 2017 Martin Kolman - 28.13-1 +- Unregister and unpublish all DBus services and objects (vponcova) +- Add tests for InstallManager (jkonecny) +- Add tests for Tasks (jkonecny) +- Add run_in_glib decorator for tests (jkonecny) +- Instantiate and publish InstallManager in Boss (jkonecny) +- Add Makefile for install_manager (jkonecny) +- Implement InstallManager with interface (jkonecny) +- Init threading in modules (jkonecny) +- Provide installation tasks from modules (jkonecny) +- Remove *.Anaconda.Modules interface from Boss (jkonecny) +- Implementing example tasks for modules (jkonecny) +- Add Makefile for Task (jkonecny) +- Base implementation of Task (jkonecny) +- Add Task interface class (jkonecny) +- Remove in-memory kickstart representation from traceback file (#1519895) + (mkolman) +- Support call_when_thread_terminates in ThreadManager (jkonecny) +- Change gtk_action_wait/nowait as general use decorators (jkonecny) +- Add controllable loop to run_boss_locally script (jkonecny) +- Tweak run_boss_locally script (jkonecny) +- Enable SE/HMC file access to repo (vponcova) +- Change string formatting to format method (jkonecny) +- Pass handler instance, not class to SplitKickstartParser (rvykydal) +- Add kickstart parser for splitting kickstart (rvykydal) + +* Thu Dec 07 2017 Martin Kolman - 28.12-1 +- Fix unit tests (mkolman) +- Fixes in makefiles (vponcova) +- Use the input_checking module for TUI password validation (mkolman) +- Use the input_checking module for user checking (mkolman) +- Use the input_checking module for root password checking (mkolman) +- Use the input_checking module for checking the LUKS passphrase (mkolman) +- Reflect GUISpokeInputCheckHandler changes in installation source spoke + (mkolman) +- Convert the input checking helpers to use the input_checking module (mkolman) +- Provide more robust method of using the warning message bar (mkolman) +- Remove the validatePassword() method (mkolman) +- Add new input checking module (mkolman) +- fixup! Migrate Workstation InstallClass to anaconda (sgallagh) +- Handle an invalid install class style sheet (vponcova) +- Enhance password checking constants (mkolman) +- Fix interactive defaults (mkolman) +- Modify the PYTHONPATH in run_boss_locally (vponcova) +- Replace get_bus with the class DBus (vponcova) +- Migrate Workstation InstallClass to anaconda (sgallagh) +- Point at new path for fedora-server.css (sgallagh) +- Rename dbus_constants to constants (vponcova) +- Add the boot option inst.ks.all (vponcova) +- Add the boot option inst.stage2.all (vponcova) +- Remove errors for mounting and unmounting (vponcova) +- Override the right method in the task (vponcova) +- Remove useless code (vponcova) +- Support timeout and retries options in %%packages section (vponcova) +- Fix device_name_is_disk to fully support raid devices (vponcova) +- Onlyuse devices of the ignoredisk command should be only disks (vponcova) +- Add the boot option inst.xtimeout (vponcova) +- Do not shadow build-in module variable (jkonecny) +- Module manager is replaceable (jkonecny) +- Remove pyanaconda.constants_text module (vponcova) + +* Mon Nov 27 2017 Martin Kolman - 28.11-1 +- Bump Blivet GUI version (mkolman) +- Change path to start-module script when running locally (mkolman) +- Handle DBUS module related files in makeupdates (mkolman) +- Handle DBUS_STARTER_ADDRESS not being defined (mkolman) +- Use start-module script in DBUS service files (mkolman) +- Add a DBUS module startup script (mkolman) +- Add Makefile.am for DBUS modules an addons (mkolman) +- Add the setup-updates script (mkolman) +- Add __init__.py file to anaconda/modules (mkolman) +- Add a unit file for Boss startup (mkolman) +- Really install all the right packages on Mac UEFI installs (awilliam) +- Refactor DASD formatting and support detection of LDL DASDs. (vponcova) +- Remove unused import sys from run_boss_locally script (jkonecny) +- Fix blivet imports in the Fedora Server install class (#1513024) (vponcova) +- Update the use of suggest_container_name method (vponcova) +- Devicetree doesn't have protected_dev_names (vponcova) +- Add pyanaconda.dbus to Makefile (vponcova) +- Add pyanaconda.storage to Makefile (#1511735) (vponcova) +- network: GUI, be more robust when displaying vlan parent and id (#1507913) + (rvykydal) +- network: GUI, fix lookup of existing device configurations (#1507913) + (rvykydal) +- network: GUI, don't crash on added vlan without device name specified + (#1507913) (rvykydal) +- Add a script for running Boss & modules locally (mkolman) +- Add an example addon (mkolman) +- Add DBUS module examples (mkolman) +- Add Boss (mkolman) +- Add a base class for DBUS modules (mkolman) +- Add .service and .conf files for the DBUS modules (mkolman) +- Add constants for DBUS module namespaces (mkolman) +- Add support for logging from DBUS modules (mkolman) +- Add the get_bus() method (mkolman) +- Remove storage check for too small swap (#1466964) (vponcova) +- Migrate fedora-server installclass into the anaconda repository (#1466967) + (rvykydal) + +* Thu Nov 09 2017 Martin Kolman - 28.10-1 +- Bump required Blivet version to 3.0 (mkolman) +- Add modular server repo to the base repositories (#1506894) (jkonecny) +- Split addon and environment refresh in software TUI (jkonecny) +- Fix changing source don't erase old environment TUI (#1505090) (jkonecny) +- Add logging to TUI software selection spoke (#1505090) (jkonecny) +- Do not try to use protected disks for autopart (vtrefny) +- Adapt new storage tui spoke to storage code move. (dlehman) +- Update blivet upstream URL in testing README. (dlehman) +- Adapt to devicefactory API change. (dlehman) +- Adapt to removal of default rounding in blivet.size.Size. (dlehman) +- Use anaconda's logic for ostree sys/physical root. (dlehman) +- Adapt to removal of blivet.udev.device_is_realdisk. (dlehman) +- Adapt to move of disklabel type logic into DiskLabel. (dlehman) +- Move blivet.partspec into pyanaconda.storage. (dlehman) +- Move blivet.platform to pyanaconda.platform. (dlehman) +- Fix traceback from mocked partitions in clearpart test. (dlehman) +- Move blivet.osinstall to pyanaconda.storage. (dlehman) +- Move autopart from blivet to pyanaconda.storage. (dlehman) + +* Thu Oct 26 2017 Martin Kolman - 28.9-1 +- Mac EFI installs need grub2-tools (#1503496) (awilliam) +- network: create default ifcfg also for missing default NM connection + (#1478141) (rvykydal) +- Print screen stack next to exception in TUI (jkonecny) +- Enable Custom GRUB2 Password Utility (#985962) (rmarshall) + +* Tue Oct 17 2017 Martin Kolman - 28.8-1 +- Bump simpleline version requires (jkonecny) +- Remove DataHolder class (jkonecny) +- Remove EditTUISpoke EditTUIDialog and EditTUISpokeEntry (jkonecny) +- Replace EditTUI* from the TUI Storage spoke (jkonecny) +- Replace EditTUI* from the TUI User spoke (jkonecny) +- Replace EditTUI* from the TUI Source spoke (jkonecny) +- Replace EditTUI* from the TUI Network spoke (jkonecny) +- Password spoke is using PasswordDialog now (jkonecny) +- Return default policy if nothing match (jkonecny) +- Add Dialog and PasswordDialog TUI objects (jkonecny) +- Remove EditTUIDialog from time_spoke (jkonecny) +- packaging: clear downloaded packages repo cache before using it (#1480790) + (rvykydal) +- Do substitutions only after translating the string (mkolman) +- Fix a translation check error (mkolman) +- Do not run commands in messages in Makefile (jkonecny) +- Fix storage spoke completeness checking (#1496416) (rvykydal) + +* Thu Oct 12 2017 Martin Kolman - 28.7-1 +- Mark the mount point assignment in TUI as experimental (vpodzime) +- Reset storage on change in text mode (vpodzime) +- Only allow the supported file systems in text mode (vpodzime) +- Textual configuration of mount points (vpodzime) +- Add support for the new 'mount' kickstart command (vpodzime) +- Fix dnf exception repository not set (#1495211) (jkonecny) +- Add logging of complete spokes in GUI. (rvykydal) +- Do not execute storage when the spoke is left with no selected disk + (#1496327) (rvykydal) +- Reflect building from master branch in the release docs (mkolman) +- Add checks for group names (#1497676) (vponcova) +- Add new checks for user names (#1491006) (vponcova) + +* Fri Sep 29 2017 Martin Kolman - 28.6-1 +- Add changelog entries from the unstable branch (mkolman) +- Log when we are executing command in chroot (jkonecny) +- Use name instead of index in TUI env selection (#1495204) (jkonecny) +- Fix missing container in TUI source spoke (#1494801) (jkonecny) +- Add MOCK_EXTRA_ARGS to Makefile (jkonecny) +- tui source spoke: initialize nfs values when switching to nfs (rvykydal) +- Deselect encryption when switching to blivet-gui partitioning (vtrefny) +- Add 2 spaces between functions in iutil (jkonecny) +- rpmostreepayload: Fix logic for copying of EFI data (walters) +- rpmostreepayload: Avoid recursing for fstab mounts (walters) +- payload: Add handlesBootloaderConfiguration(), teach bootloader.py (walters) + +* Thu Sep 21 2017 Martin Kolman - 28.5-1 +- Fix missing id to name environment transition (#1491119) (jkonecny) +- Fix test for unset TUI software environment (#1491119) (jkonecny) +- Rename processingDone to processing_done variable (jkonecny) + +* Mon Sep 18 2017 Martin Kolman - 28.4-1 +- network: add support for kickstart --bindto=mac for virtual devices + (#1328576) (rvykydal) +- network: support mac bound network settings as first class (#1328576) + (rvykydal) +- network: add support for kickstart --bindto=mac for wired devices (#1328576) + (rvykydal) +- Don't setup the hub twice (#1491333) (vponcova) +- rpmostreepayload: Substitute ${basearch} in ostreesetup ref (walters) +- Perform repo checks only when there are checks available. (rvykydal) +- Add support for repo --metalink (GUI) (#1464843) (rvykydal) +- Add support for repo --metalink (kickstart, tui) (#1464843) (rvykydal) +- Add inst.notmux option (dusty) + +* Mon Sep 11 2017 Martin Kolman - 28.3-1 +- Add missing dot to the availability status message (mail) +- Bump Simpleline version (jkonecny) +- Make EFIGRUB._efi_binary a property, not a method (awilliam) +- Better storing logs from build and tests (jkonecny) +- Provide a default install class. (vponcova) +- Do not use hidden install classes. (vponcova) +- Make geolocation with kickstart possible (#1358331) (mkolman) +- Run python-meh as modal in TUI (jkonecny) +- Use GLib event loop in the simpleline (jkonecny) +- TUI progress reporting is handled by show_all (jkonecny) +- Add efi_dir to the BaseInstallClass (#1412391) (vponcova) +- Use /usr/bin/python3 shebang once again (miro) + +* Mon Sep 04 2017 Martin Kolman - 28.2-1 +- Fix catch TUI not main thread exceptions (jkonecny) +- Document Anaconda branching workflow (mkolman) +- Use constants for version number bumps and additions (mkolman) +- Fix closest mirror now needs network (jkonecny) +- Fix restart payload thread in Network spoke GUI (#1478970) (jkonecny) +- Network spoke freeze when testing availability (#1478970) (jkonecny) +- Add support for adding version numbers to makebumpver (mkolman) +- Add support for major version bump to makebumpver (mkolman) +- Fix proxy settings badly used when testing repos (#1478970) (jkonecny) + +* Tue Aug 29 2017 Martin Kolman - 28.1-1 +- Remove the metacity theme. (vponcova) +- Add the option inst.decorated to allow title bar in GUI (vponcova) +- Move python3-gobject Requires to core (jkonecny) +- Return simpleline removed ipmi calls back (jkonecny) +- Use new list container from Simpleline (jkonecny) +- Remove old simpleline from anaconda (jkonecny) +- Ask multiple times for wrong input (jkonecny) +- Show TUI exception only first time (jkonecny) +- Add simpleline logger to the Anaconda (jkonecny) +- Modify TUI to use new Simpleline package (jkonecny) +- Make 64-bit kernel on 32-bit firmware work for x86 efi machines (pjones) +- Add missing gtk3 required version to spec file (jkonecny) +- Sort spec required versions alphabetically (jkonecny) +- Fix testing of the kickstart version (vponcova) +- Move the installclass command to the %%anaconda section. (vponcova) +- Fix SL install class to use right efi dir (riehecky) +- Fix accelerator key for blivet-gui partitioning (#1482438) (vtrefny) +- Add blivet-gui logs to python-meh file list (vtrefny) +- Remove the title bar in anaconda by default (#1468801) (vponcova) +- Add simple script to read journal with message code source and thread info. + (rvykydal) + +* Mon Aug 14 2017 Martin Kolman - 27.20-1 +- Add support for automatic generating of DBus specification. (vponcova) +- Add support for generating XML (vponcova) +- Add support for DBus typing system (vponcova) +- dnfpayload: do not try to contact disabled repo (artem.bityutskiy) +- Add message to setup-test-env is ran (jkonecny) +- Use SHA256 instead of MD5 for repoMDHash (#1341280) (bcl) +- Add lorax-packages.log to bug report. (rvykydal) +- Use SHA256 instead of MD5 for repoMDHash (#1341280) (jkonecny) +- 80-setfilecons: Add a few paths (/var/run, /var/spool) (walters) +- Also capture anaconda-pre logs if they exist (riehecky) +- Don't mock modules with sys in unit tests (vponcova) +- logging: replace SyslogHandler with JournalHandler (rvykydal) +- Add setup-test-env target to the Makefile (jkonecny) +- Add tests for the install class factory (vponcova) +- Support for the installclass kickstart command (vponcova) +- Modules with install classes should define __all__ (vponcova) +- Refactorization of the installclass.py (vponcova) +- docs: minor fixups of release document (rvykydal) +- rescue: add RTD documentation (rvykydal) +- rescue: clean up method for mounting root (rvykydal) +- rescue: separate UI and execution logic (rvykydal) +- Make kickstart rescue command noninteractive. (rvykydal) +- Remove unused argument and code. (rvykydal) + +* Thu Jul 27 2017 Radek Vykydal - 27.19-1 +- rpmostreepayload: Set up /var first (walters) +- rpmostreepayload: Explicitly create /var/lib before tmpfiles (walters) +- rpmostreepayload: Rework mount setup to support admin-defined mounts + (walters) +- rpmostreepayload: try to verify local ostree repo cache (dusty) +- rpmostreepayload: ignore - 27.18-1 +- rpmostreepayload: Reuse the local repo as a cache (walters) +- Document how to create Anaconda releases and package builds (mkolman) + +* Sat Jul 01 2017 Martin Kolman - 27.17-1 +- Require "blivet-gui-runtime" instead of "blivet-gui" (vtrefny) +- Fix a typo in python-meh initialization (#1462825) (mkolman) + +* Mon Jun 26 2017 Martin Kolman - 27.16-1 +- Install class shouldn't set the default boot fstype (#1463297) (vponcova) +- Store testing logs properly (jkonecny) +- Fix location of the blivet-gui user help (vtrefny) +- netowrk: fix noipv6 option check regression (#1464297) (rvykydal) +- Refactor imports in kickstart.py (jkonecny) +- Use context manager to check KickstartError (jkonecny) + +* Wed Jun 21 2017 Martin Kolman - 27.15-1 +- Honor --erroronfail kickstart option in cmdline mode (rvykydal) +- Fix import from a renamed module (#1462538) (vponcova) +- Fix the 'non-ASCII characters in password' checks (#1413813) (awilliam) +- Move mock config files to slaves (jkonecny) + +* Thu Jun 15 2017 Martin Kolman - 27.14-1 +- Bump version of Pykickstart and Blivet (#1113207) (jkonecny) +- Add XFS uuid changer (#1113207) (jkonecny) +- Support --when parameter in snapshot (#1113207) (jkonecny) +- Add snapshot support (#1113207) (jkonecny) + +* Wed Jun 14 2017 Martin Kolman - 27.13-1 +- Fix source.glade renaming mixup (#1461469) (mkolman) +- Separate blivet-daily builds in mock config (jkonecny) +- network: bind to device name (not hwaddr) when dumping connections (#1457215) + (rvykydal) + +* Tue Jun 13 2017 Martin Kolman - 27.12-1 +- Show warning if swap is smaller then recommended (#1290360) (vponcova) + +* Tue Jun 06 2017 Martin Kolman - 27.11-1 +- Fix renaming error (mkolman) +- Add a getter for the Anaconda root logger (mkolman) +- Disable test-install in Makefile (jkonecny) + +* Thu Jun 01 2017 Martin Kolman - 27.10-1 +- Bump Blivet version (mkolman) +- Remove GUI logging prefixes from Network spoke (mkolman) +- Rename TUI spokes (mkolman) +- Rename GUI spokes (mkolman) +- Rename anaconda_argparse.py to argument_parsing.py (mkolman) +- Rename install_tasks.py to installation_tasks.py (mkolman) +- Rename install.py to installation.py (mkolman) +- Rename threads.py to threading.py (mkolman) +- Get special purpose loggers from anaconda_loggers (mkolman) +- Use structured logging in Anaconda modules (mkolman) +- Use unique 3 letter log level names (mkolman) +- Use constants for special purpose logger names (mkolman) +- Add the anaconda_loggers module (mkolman) +- Rename anaconda_log.py to anaconda_logging.py (mkolman) +- Add support for structured logging to the anaconda logger (mkolman) +- Make it possible to set filters for file handlers (mkolman) +- Add custom filter and formatter support for the syslog handler (mkolman) +- Add AnacondaPrefixFilter (mkolman) +- Fixes for Pylint 1.7 (vponcova) +- Add support for IPoIB in tui (#1366935) (rvykydal) +- Fix pylint unused import error (jkonecny) +- network: handle multiple connections for one device better (#1444887) + (rvykydal) +- Fix setting errors and warnings in the StorageCheckHandler (vponcova) +- Add inst.waitfornet option (#1315160) (rvykydal) +- network: catch exception when reading in-memory connection being removed + (#1439220) (rvykydal) + +* Thu May 25 2017 Martin Kolman - 27.9-1 +- Add support for DNF-2.5.0 (jkonecny) +- Fix simpleline_getpass related Pylint warning (mkolman) +- Provide access to simpleline App instance (mkolman) +- Make it possible to use a custom getpass() (mkolman) +- Set the default filesystem type from a kickstart file (vponcova) +- Adapt to our new daily builds of Anaconda (jkonecny) +- Provide access to simpleline App instance (mkolman) +- Make it possible to use a custom getpass() (mkolman) +- Perform recursive copying of driver disk RPM repo contents (esyr) +- network: fix setting hostname via boot options (#1441337) (rvykydal) +- Fix a typo in an error message (esyr) +- Use the function we already have for applying disk selection (#1412022) + (rvykydal) +- Ignore disks labeled OEMDRV (#1412022) (rvykydal) +- network: create dracut arguments for iSCSI root accessed via vlan (#1374003) + (rvykydal) +- Test if Anaconda can be installed inside of mock (jkonecny) +- Remove run_install_test test (jkonecny) +- rpmostreepayload: Handle /var as a user-specified mountpoint (walters) +- Fix the addon handlers for the checkbox (#1451754) (vponcova) +- Show the text of completions in the datetime spoke. (vponcova) +- Use new daily-blivet copr builds (jkonecny) +- Prevent TUI from crashing with a single spoke on a hub (mkolman) + +* Tue May 09 2017 Martin Kolman - 27.8-1 +- Bump Pykickstart version (mkolman) + +* Fri May 05 2017 Martin Kolman - 27.7-1 +- Make some missed adjustments to blivet API changes. (#1440134) (dlehman) +- Bump required version for blivet-gui (vtrefny) +- BlivetGuiSpoke: Set keyboard shortcuts for blivet-gui (#1439608) (vtrefny) +- BlivetGuiSpoke: Refresh blivet-gui UI after spoke is entered (vtrefny) +- Really fix with tmux 2.4 (version comparison was busted) (awilliam) +- Show or hide the content of the expander on Fedora (vponcova) +- itertools.chain can be iterated only once (#1414391) (vponcova) + +* Fri Apr 28 2017 Martin Kolman - 27.6-1 +- Use `time.tzset()` to apply timezone changes when we can (awilliam) +- Tweak epoch definition to fix system clock setting (#1433560) (awilliam) +- Optimize payload thread restart on network change (jkonecny) +- Add unit test for RepoMDMetaHash object (#1373449) (jkonecny) +- Make the formating in payload consistent (#1373449) (jkonecny) +- Fix Anaconda forces payload restart when network (not)change (#1373449) + (jkonecny) +- Catch race-condition error reading from in-memory connection being removed + (#1373360) (rvykydal) +- network tui: fix changing ipv4 config from static to dhcp (#1432886) + (rvykydal) +- Allow setting up bridge for fetching installer image from kickstart + (#1373360) (rvykydal) + +* Thu Apr 27 2017 Martin Kolman - 27.5-1 +- make anaconda working back again with tmux2.4 (pallotron) +- Trigger the entered signal only once the screen is shown (#1443011) (mkolman) +- Use constants in storage checker constraints. (vponcova) +- Gtk: Fix creating images from resources. (vponcova) +- Fix partial kickstart software selection in GUI (#1404158) (jkonecny) +- Removed unused code in the Software spoke (#1404158) (jkonecny) +- Fix selection logic in Software spoke (#1404158) (jkonecny) +- Fix Driver Disc documentation (#1377233) (jkonecny) +- Support DD rpm loading from local disk device (#1377233) (jkonecny) +- Gtk: Replace deprecated get_misc_set_alignment in widgets. (vponcova) +- Gtk: Replace deprecated Gtk.Viewport.get_v/hadjustment. (vponcova) +- Gtk: Replace deprecated methods. (vponcova) +- Set the info bar only once if the partitioning method changes. (vponcova) +- Fix pylint issue Catching too general exception Exception (jkonecny) +- Support --noboot and --noswap options in autopartitioning (#1220866) + (vponcova) +- Support --nohome option in the autopartitioning (vponcova) + +* Tue Apr 11 2017 Martin Kolman - 27.4-1 +- Hide options based on storage configuration method (#1439519) (mkolman) +- Catch exception when reading from in-memory connection being removed + (#1439051) (rvykydal) +- docs/boot-options.rst: Fix #dhcpd anchor (mopsfelder) +- docs/boot-options.rst: Remove trailing spaces (mopsfelder) +- Fix logging of the storage checker report. (vponcova) +- Fix a property name of luks devices in storage checking (#1439411) (vponcova) +- Bump required version for blivet-gui (vtrefny) +- Use newly created swaps after the installation (#1439729) (vtrefny) +- docs/boot-options.rst: Fix #dhcpd anchor (mopsfelder) +- docs/boot-options.rst: Remove trailing spaces (mopsfelder) +- Set default FS type for blivet-gui (#1439581) (vtrefny) +- Display progress for the post installation phase (mkolman) +- Display progress for the post installation phase (mkolman) +- Increase verbosity of lvmdump in pre logging script (#1255659) (jkonecny) + +* Thu Mar 30 2017 Martin Kolman - 27.3-1 +- Enable the install class to customize the storage checking (vponcova) +- Replace sanity check with more advanced storage checker (vponcova) +- Various log-capture script improvements (mkolman) +- Rename StorageChecker to StorageCheckHandler (vponcova) + +* Thu Mar 16 2017 Martin Kolman - 27.2-1 +- Correction of some typographic mistakes in documentation. (rludva) +- Fix bullet point formatting in contribution guidelines (mkolman) +- Propagate firstboot --disable to Screen Access Manager (mkolman) +- util: Add script to capture logs (riehecky) +- Fix a typo (mkolman) +- Correction of some typographic mistakes in documentation. (rludva) +- Enhance git-find-branch script (jkonecny) +- Improve how storage configuration settings are displayed (mkolman) +- util: Add script to capture logs (riehecky) +- Propagate firstboot --disable to Screen Access Manager (mkolman) + +* Mon Mar 06 2017 Martin Kolman - 27.1-1 +- We should not have pyanaconda submodules on PYTHONPATH (vponcova) +- Lock empty root password during kickstart installation (#1383656) (mkolman) +- Use system Python when running Anaconda (mkolman) +- Remove unused false positives for pylint (vtrefny) +- Fix pylint error in BlivetGUI spoke (vtrefny) +- Fix tests by renaming packaging to payload (jkonecny) +- Rescue mode should wait for the storage and luks devices (#1376638) (vponcova) + +* Mon Feb 27 2017 Martin Kolman - 26.21-1 +- Add blivet-gui as requirement for the GUI package (vtrefny) +- Add a bottom bar to the Blivet GUI spoke (mkolman) +- Hide storage config spokes marked by SAM as visited (mkolman) +- Keep last used partitioning method selected (mkolman) +- Rollback planned storage changes if partitioning method changes (mkolman) +- Add blivet-gui spoke (vpodzime) +- docs: fix formating a bit for Links (Frodox) +- Fix a typo (mkolman) +- Polish unsupported filesystems in the custom spoke (jkonecny) + +* Tue Feb 07 2017 Martin Kolman - 26.20-1 +- Update dracut test for network --ipv6gateway (rvykydal) +- Correctly propagate --ipv6gateway to ifcfg files(#1170845) (mkolman) +- network: respect --activate value for bridge from kickstart (rvykydal) +- network: fix --activate for bridge slaves configured via %%pre ks (rvykydal) +- network: activate bridge for first network command in ks via %%pre (rvykydal) +- network: unify slave connection names for ks %%pre with ks and gui (rvykydal) +- network: bind slave connections to DEVICE, not HWADDR (#1373360) (rvykydal) +- Do not allow creating ntfs filesystem in custom spoke (vtrefny) +- Various minor formatting fixes (mkolman) +- PEP8 and refactoring for packaging (mkolman) +- PEP8 and refactoring for vnc.py (mkolman) +- PEP8 and refactoring for storage_utils.py (mkolman) +- PEP8 and refactoring for network.py (mkolman) +- PEP8 and refactoring for kickstart.py (mkolman) +- PEP8 and refactoring for image.py (mkolman) +- Cosmetic PEP8 and refactoring for flags.py (mkolman) +- PEP8 and refactoring for exception.py (mkolman) +- PEP8 and refactoring for bootloader.py (mkolman) +- PEP8 and refactoring for anaconda_log.py (mkolman) +- Validate dasd and zfcp user input (#1335092) (vponcova) +- network: use introspection data from libnm instead of libnm-glib (lkundrak) + +* Mon Jan 16 2017 Martin Kolman - 26.19-1 +- Use initialization controller for spoke initialization (mkolman) +- Add module initialization controller (mkolman) +- Fix link to the documentation in the README file (jkonecny) +- There is no thread for dasd formatting in tui. (vponcova) +- Move the (mkolman) +- Fix the status of the StorageSpoke for dasd formatting (#1274596) (vponcova) + +* Mon Jan 09 2017 Martin Kolman - 26.18-1 +- Always refresh the size of swap before autopartitioning. (vponcova) +- Run the space check only if the spokes are complete (#1403505) (vponcova) +- Ignore result directory with logs from tests (jkonecny) +- Disable pylint no-member error for re.MULTILINE (jkonecny) +- Fix nosetests to use newest python3 (jkonecny) +- Disable the button if iscsi is not available (#1401263) (vponcova) +- Include Python 3.6 sysconfigdata module in initramfs (#1409177) (awilliam) +- Nicer __repr__ for hubs and spokes (mkolman) +- Close the .treeinfo file after the retrieve. (vponcova) + +* Wed Jan 04 2017 Martin Kolman - 26.17-1 +- Fix a GTK Widget related deprecation warning (mkolman) +- Fix GTK screen/display related deprecation warnings (mkolman) +- Fix GObject and GLib deprecation warnings (mkolman) +- Fix selection of no software environment (#1400045) (vponcova) +- Use signals for Spoke & Hub entry/exit callbacks (mkolman) +- Fix the name of StorageDiscoveryConfig attribute (#1395350) (vponcova) +- Iutil PEP8 & formatting fixes (mkolman) +- Add inst.ksstrict option to show kickstart warnings as errors. (vponcova) +- Use the structured installation task classes (mkolman) +- Improved password quality checking (mkolman) +- Add unit tests for password quality checking (mkolman) +- Use Enum for password status constants (mkolman) +- Use a sane unified password checking policy (mkolman) +- Add install task processing classes and unit tests (mkolman) +- Add a signal/slot implementation (mkolman) +- Set correctly the default partitioning. (vponcova) + +* Wed Dec 14 2016 Martin Kolman - 26.16-1 +- rpmostreepayload: Rework binds to be recursive (walters) +- Let DNF do its own substitutions (riehecky) +- Bump Blivet version due to systemd-udev dependency (mkolman) +- Don't log "Invalid bridge option" when network has no --bridgeopts. + (rvykydal) +- Fix updating of bridge slave which is bond. (rvykydal) + +* Mon Dec 05 2016 Martin Kolman - 26.15-1 +- Don't pass storage to firstboot.setup() (mkolman) +- RTD fixes (mkolman) +- Catch ValueError from LVM part in Blivet library (jkonecny) +- Handle unexpected storage exception from blivet (jkonecny) +- Add sudo to test requires (jkonecny) +- network: fix network --noipv4 in %%pre (rvykydal) +- fix typo in systemd service keyword (mail) +- Fix pylint issue in ks_version_test (jkonecny) +- Move Anaconda tests to mock (jkonecny) +- Add checks to git-find-branch script (jkonecny) +- Remove intermediate pot files in po-push (mkolman) +- Allow install classes to set alternate states for firstboot/initial-setup + (riehecky) + +* Wed Nov 23 2016 Martin Kolman - 26.14-1 +- Changed the required version of BlockDev to 2.0. (vponcova) +- Remove auto generated documentation (mkolman) +- Fix generated zanata.xml from https unstable branch (jkonecny) +- Don't crash if the UIC file can't be written (#1375702) (mkolman) + +* Wed Nov 23 2016 Martin Kolman - 26.13-1 +- Fix calling of can_touch_runtime_system function (jkonecny) +- fix formating a bit (gitDeveloper) +- Fix zanata.xml.in in substitution variables (mkolman) + +* Thu Nov 17 2016 Martin Kolman - 26.12-1 +- Mock chroot environment is chosed by a git branch (jkonecny) +- Set Zanata branch from git-find-branch script (jkonecny) +- Add git-find-branch script for finding parent branch (jkonecny) +- fix pykickstart docks link (gitDeveloper) +- aarch64 now has kexec-tools (pbrobinson) +- Resolve directory ownership (mkolman) +- Fix user interaction config handling in image & directory install modes + (#1379106) (mkolman) +- tui: Available help system (vponcova) +- network: index team slave connection names starting with 1 (rvykydal) + +* Thu Nov 10 2016 Martin Kolman - 26.11-1 +- Relax blivet dependency to >= 2.1.6-3 (awilliam) +- Bump required Blivet version (#1378156) (mkolman) +- Fix bad exception handling from blivet in iscsi (#1378156) (jkonecny) +- tui: New class for prompt (vponcova) +- iSCSI: adjust to change in blivet auth info (#1378156) (awilliam) +- Disable false positive pylint error (jkonecny) +- Add some error checking when users don't provide input for DASD devices. + (sbueno+anaconda) +- Add some error checking when users don't provide input for zFCP devices. + (sbueno+anaconda) +- Fix tui timezone region selection by name (vponcova) + +* Fri Nov 04 2016 Martin Kolman - 26.10-1 +- F26_DisplayMode was added by non-interactive mode (jkonecny) +- Fix pyanaconda tests for display mode (jkonecny) +- Fix parse-dracut to support new kickstart displaymode (jkonecny) +- Add boot option inst.noninteractive to the docs (jkonecny) +- Abort installation when Playload exc rise in a NonInteractive mode (jkonecny) +- Support non interactive mode in standalone spokes (jkonecny) +- Non-interactive mode support for Password and User spokes (jkonecny) +- Raise NonInteractive exception in Hubs event loop (jkonecny) +- Raise exception for noninteractive mode in Hub (jkonecny) +- Add new pykickstart noninteractive mode (jkonecny) +- Disable bad kickstart command on F25 (jkonecny) +- Improve DNF error message to be more understandable (jkonecny) +- tui: Add software group selection (vponcova) +- use blivet iSCSI singleton directly in storage spoke (awilliam) +- Correct deviceLinks to device_links (blivet renamed it) (awilliam) +- Instantiate the zFCP object ourselves now. (#1384532) (sbueno+anaconda) +- Fix the way DASD list is determined. (#1384532) (sbueno+anaconda) +- Add tests for payload location picking (#1328151) (jkonecny) +- Fix picking mountpoint for package download (#1328151) (jkonecny) +- Improve packaging logs without DEBUG logging (jkonecny) + +* Tue Oct 25 2016 Martin Kolman - 26.9-1 +- Move the collect() function to iutil (mkolman) +- Update messiness level (mkolman) +- PEP8 and general refactoring for the main anaconda.py (mkolman) +- Move kickstart file parsing code to startup_utils (mkolman) +- Don't directly import items from anaconda_log (mkolman) +- Remove old useless code (mkolman) +- Move the rescue ui startup code to the rescue module (mkolman) +- Move set-installation-thod-from-anaconda code to startup_utils (mkolman) +- Move the live startup code to startup_utils (mkolman) +- Move code printing the startup note to startup_utils (mkolman) +- Move the pstore cleanup function to startup_utils (mkolman) +- Move the prompt_for_ssh function to startup_utils (mkolman) +- Move logging setup to startup_utils (mkolman) +- Move the geolocation startup code to a separate function (mkolman) +- Unify addons path variable name (mkolman) +- PEP 8 for startup_utils.py (mkolman) +- PEP 8 for display.py (mkolman) +- Move VNC startup checking to a separate function (mkolman) +- Move imports to the top of the file in display.py (mkolman) +- Refactor display mode handling (mkolman) +- Move display setup & startup tasks out of anaconda.py (mkolman) +- Remove main and extra Zanata pot files on master (jkonecny) +- Remove main and extra pot files before zanata push (jkonecny) +- Don't send intermediate pot files to zanata (gh#791) (awilliam) +- Improve message to be clearer in rescue.py (jkonecny) +- Add option to show password in password field (vponcova) +- Generate a list of DASDs in GUI storage spoke. (#1378338) (sbueno+anaconda) +- Echoing 4de0ec44bdf0f68545bb55bb5fea00464b65fcab May as well include the SL + file (riehecky) +- Fixup class name for CentOS install class (riehecky) +- Fix a typo in SAM file header (mkolman) +- Skip live image on usb when checking storage for mounted partitions + (#1369786) (rvykydal) + +* Mon Oct 03 2016 Martin Kolman - 26.8-1 +- Fix network spoke being incorrectly marked as mandatory (#1374864) (mkolman) + +* Fri Sep 30 2016 Samantha N. Bueno - 26.7-1 +- Increse python3-blivet version to 1:2.1.5 (jkonecny) +- Fix dnf.repo.Repo now requires dnf.conf.Conf (jkonecny) +- Provides compatibility with DNF-2.0 (jmracek) + +* Tue Sep 27 2016 Martin Kolman - 26.6-1 +- Don't deactivate all storage in anaconda-cleanup. (#1225184) (dlehman) +- Stop setting ANACONDA udev environment variable. (#1225184) (dlehman) + +* Tue Sep 27 2016 Martin Kolman - 26.5-1 +- Improved driver disk copying (#1269915) (mkolman) +- Fix screenshot taking logic (#1327456) (mkolman) +- Change blank lines to pep8 for Dracut DUD test (jkonecny) +- Tweak lambda use in Dracut test (jkonecny) +- Add Dracut test for reloading mod dependencies (jkonecny) + +* Wed Sep 21 2016 Martin Kolman - 26.4-1 +- Fix NTP server list fetching when running in IS (#1374810) (mkolman) +- rpmostreepayload: Clean up use of sysroot files a bit (walters) +- rpmostreepayload: Fix remote handling to use correct sysroot (walters) + +* Mon Sep 19 2016 Martin Kolman - 26.3-1 +- network: set onboot correctly for vlan on bond device in ks (#1234849) + (rvykydal) +- network: don't show ibft configured devices in UI (#1309661) (rvykydal) +- iscsi: don't generate kickstart iscsi commands for offload devices (#1252879) + (rvykydal) +- iscsi: allow installing bootloader on offload iscsi disks (qla4xxx) + (#1325134) (rvykydal) +- network: adapt to changed NM ibft plugin enablement configuration (#1371188) + (rvykydal) +- network: don't activate bond/team devices regardless of --activate (#1358795) + (rvykydal) +- Fix traceback when payload have None as url (#1371494) (jkonecny) +- Add new Dracut test and fix another ones (#1101653) (jkonecny) +- Fix bug when we add set to list (#1101653) (jkonecny) +- Add new helper script files to build system (#1101653) (jkonecny) +- Document new helper scripts to the DriverDisk README (#1101653) (jkonecny) +- Fix driver unload is disabling network settings (#1101653) (jkonecny) +- dud: fix multiple inst.dd=http:// instances stalling in dracut (#1268792) + (rvykydal) +- network: fix ksdata generating for for non-active virtual devices (#1321288) + (rvykydal) +- network: update kickstart data also with bond bridge slaves (#1321288) + (rvykydal) +- network: add support for bridge bond slaves (#1321288) (rvykydal) +- screen_access: Ensure we write config to real sysroot (walters) +- Add release commit support to makebumpver (mkolman) +- Makefile improvents for separate release commits & tarball creation + (mkolman) +- network: add support for --no-activate kickstart opton (#1277975) (rvykydal) +- fixup! Add base.close() after base.do_transaction (RhBug:1313240) (jmracek) +- Add base.close() after base.do_transaction (RhBug:1313240) (jmracek) + +* Tue Sep 06 2016 Martin Kolman - 26.2-1 +- Add git merging examples to the contribution guidelines (mkolman) +- network: don't stumble upon new Device.Statistics NM dbus iface (#1370099) + (rvykydal) +- Current Anaconda is not compatible with DNF 2.0.0 (jkonecny) +- Filter out all merge commits from the changelog (mkolman) +- Make it possible to override Zanata branch name (mkolman) +- Switch to argparse & autodetect name, version and bug email address (mkolman) +- Fix multi-inheritance (phil) +- Fix replacement of deprecated DNF method (jkonecny) +- Replace deprecated method of DNF (jmracek) +- Static checker recommended improvements (mkolman) +- Fix replacement of deprecated DNF method (jkonecny) +- Replace deprecated method of DNF (jmracek) + +* Mon Aug 29 2016 Samantha N. Bueno - 26.1-1 +- Fix a pylint no-member warning (mkolman) +- Translate press-c-to-continue correctly in TUI (#1364539) (mkolman) +- Fix bootDrive driveorder fallback (#1355795) (jkonecny) +- Fix bootloader when re-using existing /boot part (#1355795) (jkonecny) +- Add support for device specification variants (#1200833) (mkolman) +- Revert "Update zanata.xml for f25-devel branch." (sbueno+anaconda) +- Update zanata.xml for f25-devel branch. (sbueno+anaconda) +- Add option to override efi_dir (phil) +- efiboot: stderr= is not an option to efibootmgr (phil) +- Fix EFI grub1 case (phil) +- Make Fedora module not so grabby (phil) +- Add centos module to pyanaconda (phil) +- network: don't require gateway for static ipv4 config in TUI (#1365532) + (rvykydal) +- Improve connection network change detection (jkonecny) +- Revert "Revalidate source only if nm-con-ed change settings (#1270354)" + (jkonecny) +- Fix anaconda-pre.service wasn't properly installed (#1255659) (jkonecny) +- Rename function for better consistency (#1259284) (rvykydal) +- Update error message for consistency (#1259284) (rvykydal) +- Add more specific username check messages also to gui (#1360334) (rvykydal) +- fix style guide test false positive on username variable (#1350375) + (rvykydal) +- tui: use functions instead of fake REs for checking values (#1350375) + (rvykydal) +- tui: get proper index of entry we are handling in input (#1331054) (rvykydal) +- tui: fix user name validity checking (#1350375) (rvykydal) +- More descriptive message on invalid username (kvalek) +- Fix another pep8 name issue (jkonecny) +- iscsi: fix getting iscsi target iface of bound target (#1359739) (rvykydal) +- Fix needsNetwork testing only additional repositories (#1358788) (jkonecny) +- Fix restart payload only when repo needs network (#1358788) (jkonecny) +- Cleanup remaining runlevel references (mkolman) +- Clarify a nosave related log message (mkolman) +- Use Screen Access Manager (mkolman) +- Add screen entry/exit callbacks (mkolman) +- Add screen access manager (mkolman) +- A simple formatting fix (mkolman) +- Fix another blivet-2.0 pep8 error (jkonecny) +- Quickfix of failing test (japokorn) +- Some docstring refactoring & typo fixes for the TUI base classes (mkolman) +- Add a file about contributing. (sbueno+anaconda) +- Store logs before anaconda starts (#1255659) (japokorn) +- DD can now replace existing drivers (#1101653) (japokorn) +- Use the F25 timezone kickstart command version (mkolman) +- Use sshd-keygen.target instead of hardcoded sshd-keygen script (jjelen) +- Make it possible to disable sshd service from running. (#1262707) + (sbueno+anaconda) +- Change bootloader boot drive fallback (jkonecny) +- Fix of Python3x uncompatible commands (japokorn) +- Add NTP server configuration to the TUI (#1269399) (mkolman) +- Move the NTP server checking constants to constants.py (mkolman) +- Use a constant for the NTP check thread name prefix (mkolman) +- Fix another victim of the python 2->3 conversion. (#1354020) (dshea) +- Attempt to unload modules updated by a driver disk (dshea) +- Fix the processing of device nodes as driver disks (dshea) + +* Fri Jul 08 2016 Brian C. Lane - 25.20-1 +- Allow kickstart users to ignore the free space error (dshea) +- Stop kickstart when space check fails (bcl) +- Service anaconda-nm-config is missing type oneshot (jkonecny) +- Fix dhcpclass to work both via kickstart and the boot cmdline. (clumens) +- network: handle also ifcfg files of not activated virtual devices (#1313173) + (rvykydal) +- network: check onboot value in ksdata, not NM connections (#1313173) + (rvykydal) +- network: do not activate device on kickstart --onboot="yes" (#1341636) + (rvykydal) + +* Fri Jun 24 2016 Brian C. Lane - 25.19-1 +- hostname: don't set installer env hostname to localhost.localdomain + (#1290858) (rvykydal) +- hostname: add tooltip to Apply button (#1290858) (rvykydal) +- hostname: fix accelerator collision (#1290858) (rvykydal) +- hostname: don't set hostname in initrafms of target system (#1290858) + (rvykydal) +- hostname: set current hostname from target system hostname on demand + (#1290858) (rvykydal) +- hostname: suggest current hostname for storage containers (#1290858) + (rvykydal) +- hostname: don't set target system static hostname to current hostname + (#1290858) (rvykydal) +- network tui: do not activate device when setting its onboot value (#1261864) + (rvykydal) +- network tui: edit persistent configuration, not active connection (#1261864) + (rvykydal) +- network: validate netmask in tui (#1331054) (rvykydal) +- Add wordwrap to text mode and use it by default (#1267881) (rvykydal) +- Fix adding new VG in Custom spoke can't be applied (#1263715) (jkonecny) +- Fix SimpleConfigFile file permissions (#1346364) (bcl) +- Re-configure proxy when updateBaseRepo is called (#1332472) (bcl) + +* Fri Jun 17 2016 Brian C. Lane - 25.18-1 +- Only use <> for markup (#1317297) (bcl) +- Update iscsi dialog for Blivet 2.0 API change (bcl) +- Use the signal handlers to set initial widget sensitivies (dshea) +- Fix bad sensitivity on boxes in source spoke (jkonecny) +- Fix install-buildrequires (bcl) +- Added optional [/prefix] as pattern (kvalek) +- Require network for network-based driver disks (dshea) +- Add missing pkgs to install-buildrequires (#612) (phil) +- Increase the required version of gettext (dshea) +- Fix the name sensitivity in the custom spoke. (dshea) + +* Fri Jun 10 2016 Brian C. Lane - 25.17-1 +- Revert "Temporarily disable translations" (bcl) +- Change where to look for the iscsi object (#1344131) (dshea) +- Fix old blivet identifiers (#1343907) (dshea) +- Fix a covscan warning about fetch-driver-net (#1269915) (bcl) +- Fix crash when NM get_setting* methods return None (#1273497) (jkonecny) +- Overwrite network files when using ks liveimg (#1342639) (bcl) +- Stop using undocumented DNF logging API (bcl) +- Use the LUKS device for encrypted swap on RAID (dshea) +- Keep the subdir in driver disk update paths (dshea) +- Warn about broken keyboard layout switching in VNC (#1274228) (jkonecny) +- Make the anaconda-generator exit early outside of the installation + environment (#1289179) (mkolman) + +* Fri Jun 03 2016 Brian C. Lane - 25.16-1 +- Add a button to refresh the disk list. (dlehman) +- Only try to restart payload in the Anaconda environment (mkolman) +- Make current runtime environment identifiers available via flags (mkolman) +- Display storage errors that cause no disks to be selected (#1340240) (bcl) +- Fix the SourceSwitchHandler pylint errors differently. (clumens) +- Fix pylint errors. (clumens) +- Update the disk summary on Ctrl-A (dshea) +- Revert "Refresh the view of on-disk storage state every 30 seconds." + (dlehman) +- Refresh the view of on-disk storage state every 30 seconds. (dlehman) +- Handle unsupported disklabels. (dlehman) +- Use a blivet method to remove everything from a device. (dlehman) +- Tighten up ResizeDialog._recursive_remove a bit. (dlehman) +- Only look for partitions on partitioned disks. (dlehman) +- NFS DDs installation now works correctly (#1269915) (japokorn) +- Remove unused on_proxy_ok_clicked from Source spoke (jkonecny) +- send all layouts to localed for keymap conversion (#1333998) (awilliam) +- Small cleanup (mkolman) + +* Fri May 27 2016 Brian C. Lane - 25.15-1 +- Resolve shortcut conflict between "Desired Capacity" and "Done" (yaneti) +- network: don't crash on devices with zero MAC address (#1334632) (rvykydal) +- Remove Authors lines from the tops of all files. (clumens) +- Related: rhbz#1298444 (rvykydal) +- New Anaconda documentation - 25.14 (bcl) +- Catch DNF MarkingError during group installation (#1337731) (bcl) +- Fix TUI ErrorDialog processing (#1337427) (bcl) +- Clean up yelp processes (#1282432) (dshea) + +* Fri May 20 2016 Brian C. Lane - 25.14-1 +- Temporarily disable translations (bcl) +- Don't crash when selecting the same hdd ISO again (#1275771) (mkolman) + +* Thu May 19 2016 Brian C. Lane - 25.13-1 +- Fix writeStorageLate for live installations (#1334019) (bcl) +- Remove the locale list from zanata.xml (dshea) +- Ditch autopoint. (dshea) +- Ditch intltool. (dshea) +- Rename fedora-welcome to fedora-welcome.js (dshea) +- Fix UEFI installation after EFIBase refactor (bcl) +- Fix error handling for s390 bootloader errors (sbueno+anaconda) +- Deselect all addons correctly (#1333505) (bcl) +- gui-testing needs isys to be compiled. (clumens) +- Add more to the selinux check in tests/gui/base.py. (clumens) + +* Fri May 13 2016 Brian C. Lane - 25.12-1 +- Add single language mode (#1235726) (mkolman) +- Move default X keyboard setting out of the Welcome spoke (mkolman) +- Rerun writeBootLoader on Live BTRFS installs (bcl) +- Check for mounted partitions as part of sanity_check (#1330820) (bcl) +- Merge pull request #620 from dashea/new-canary (dshea) +- Update the required pykickstart version. (dshea) +- Implement %%packages --excludeWeakdeps (#1331100) (james) +- Fix bad addon handling when addon import failed (jkonecny) +- Add retry when downloading .treeinfo (#1292613) (jkonecny) +- Return xprogressive delay back (jkonecny) +- Change where tests on translated strings are run. (dshea) +- Merge the latest from translation-canary (dshea) +- Squashed 'translation-canary/' changes from 5a45c19..3bc2ad6 (dshea) +- Add new Makefile target for gui tests (atodorov) +- Define missing srcdir in run_gui_tests.sh and enable coverage (atodorov) +- Split gui test running out into its own script. (clumens) +- Look higher for the combobox associated with an entry (#1333530) (dshea) +- Use createrepo_c in the ci target. (dshea) +- Compile glib schema overrides with --strict. (dshea) + +* Fri May 06 2016 Brian C. Lane - 25.11-1 +- Don't join two absolute paths (#1249598) (mkolman) +- Don't crash when taking a screenshot on the hub (#1327456) (mkolman) +- Fix pylint errors. (phil) +- Factor out common grub1/grub2 stuff into mixin, and other factoring (phil) +- Add GRUB1 (legacy) support back to Anaconda (phil) + +* Fri Apr 29 2016 Brian C. Lane - 25.10-1 +- Handle unmounting ostree when exiting (bcl) +- ostree: Use bind mounts to setup ostree root (bcl) +- ostree: Skip root= setup when using --dirinstall (bcl) +- disable_service: Specify string format args as logging params. (clumens) +- Ignore failure when disable services that do not exist (phil) +- Get rid of an unused variable in the network spoke. (clumens) +- Revalidate source only if nm-con-ed change settings (#1270354) (jkonecny) +- Merge solutions for test source when network change (#1270354) (jkonecny) +- Changes in network state revalidate sources rhbz#1270354 (riehecky) + +* Wed Apr 27 2016 Brian C. Lane - 25.9-1 +- Use the iutil functions for interacting with systemd services. (dshea) +- Add methods to enable and disable systemd services. (dshea) +- Do not add .service to the end of service names. (dshea) +- Remove detach-client from tmux.conf (dshea) +- Use Blivet 2.0 for set_default_fstype (#607) (sgallagh) +- Remove dnf from the list of required packages. (#605) (dshea) +- Add access to the payload from addons (#1288636) (jkonecny) +- Disable pylint warnings related to the log handler fixer. (dshea) +- Allow the metacity config dir to be overriden. (dshea) +- Do not include /usr/share/anaconda files in the gui package. (dshea) +- Work around logging's crummy lock behavior. (dshea) +- Use rm -r to remove the temporary python site directory. (dshea) +- Remove the subnet label for wired devices. (#1327615) (dshea) +- Fix how unusued network labels are hidden (#1327615) (dshea) +- Remove yum_logger (bcl) +- Remove the lock loglevel (bcl) +- Use a temporary user-site directory for the tests. (dshea) +- Build everything for make ci. (dshea) +- Ignore some E1101 no-member errors when running pylint (bcl) +- Sprinkle the code with pylint no-member disable statements (bcl) +- Catch GLib.GError instead of Exception (bcl) +- Update storage test for Blivet 2.0 API change. (bcl) +- Initialize missing private methods in BasePage class (bcl) +- Update kickstart.py for Blivet 2.0 API change. (bcl) +- Use namedtuple correctly in kexec.py (bcl) +- Add more requires to make password checking still work. (#1327411) (dshea) +- Rename isS390 to match the renames in blivet. (dshea) +- Suppress signal handling when setting zone from location (#1322648) (dshea) +- Refresh metadata when updates checkbox changes (#1211907) (bcl) + +* Fri Apr 15 2016 Brian C. Lane - 25.8-1 +- network: handle null wireless AP SSID object (#1262556) (awilliam) +- Change new_tmpfs to new_tmp_fs. (clumens) +- Add support for kickstart %%onerror scripts. (clumens) +- Show network spoke in the TUI reconfig mode (#1302165) (mkolman) +- network: copy static routes configured in installer to system (#1255801) + (rvykydal) +- network: fix vlan over bond in kickstart (#1234849) (rvykydal) +- network: use NAME to find ifcfg on s390 with net.ifnames=0 (#1249750) + (rvykydal) +- Get rid of the reimport of MultipathDevice. (clumens) +- Fix iSCSI kickstart options aren't generated (#1252879) (jkonecny) +- Fix adding offload iSCSI devices (vtrefny) +- Make the list-harddrives script mode robust (mkolman) + +* Fri Apr 08 2016 Brian C. Lane - 25.7-1 +- Blivet API change getDeviceBy* is now get_device_by_* (bcl) +- network: don't set 803-3-ethernet.name setting (#1323589) (rvykydal) +- Log non-critical user/group errors (#1308679) (bcl) +- Fix btrfs metadata raid level kwarg. (dlehman) +- docs: Add release building document (bcl) +- Minor improvements - README and test dependencies (atodorov) +- Add more matches for network connectivity (atodorov) + +* Mon Apr 04 2016 Brian C. Lane - 25.6-1 +- Remove an unused import from anaconda-cleanup. (clumens) +- Don't use booleans in Requires (#1323314) (dshea) +- Set CSS names on all of the anaconda classes. (#1322036) (dshea) +- Don't crash if no groups are specified (#1316816) (dshea) +- Fix only one address is shown in anaconda (#1264400) (jkonecny) +- Fix call to update optical media format. (#1322943) (dlehman) +- Reset invalid disk selection before proceeding. (dlehman) +- Multiple Dogtail tests improvements (atodorov) +- Do not allow liveinst with --image or --dirinstall (#1276349) (dshea) +- New Anaconda documentation - 25.5 (bcl) + +* Wed Mar 30 2016 Brian C. Lane - 25.5-1 +- Don't provide subclasses of the multipath or dmraid commands. (clumens) +- Add support for chunksize raid kickstart parameter. (vtrefny) +- Convert to blivet-2.0 API. (dlehman) + +* Thu Mar 24 2016 Brian C. Lane - 25.4-1 +- Require that the English locale data be available. (#1315494) (dshea) +- Revert "Change the default locale to C.UTF-8 (#1312607)" (#1315494) (dshea) +- Make windows in metacity closable (#1319590) (dshea) +- Fix the use of CSS psuedo-classes in the widgets. (dshea) +- Add reason when logging invalid repository (#1240379) (jkonecny) + +* Sat Mar 19 2016 Brian C. Lane - 25.3-1 +- Apply language attributes to all labels within anaconda. (dshea) +- Add a function to apply a PangoAttrLanguage to a label. (dshea) +- Add functions to watch changes to a container widget. (dshea) +- Switch to the adwaita icon theme. (dshea) +- Fix duplicate network settings in dracut (#1293539) (jkonecny) +- Fix create device with bad name when parsing KS (#1293539) (jkonecny) +- Use a lock for repoStore access (#1315414) (bcl) +- Add missing inst prefix to the nokill option in docs (mkolman) +- Merge pull request #551 from wgwoods/master-multiple-initrd-dd-fix (wwoods) +- fix multiple inst.dd= args (rhbz#1268792) (wwoods) + +* Fri Mar 11 2016 Brian C. Lane - 25.2-1 +- Load the system-wide Xresources (#1241724) (dshea) +- Use an icon that exists in Adwaita for the dasd confirmation (dshea) +- Make it possible to skip saving of kickstarts and logs (#1285519) (mkolman) +- Add a function for empty file creation (#1285519) (mkolman) +- Run actions for argparse arguments (#1285519) (mkolman) + +* Wed Mar 09 2016 Brian C. Lane - 25.1-1 +- don't install kernel-PAE on x86_64 (#1313957) (awilliam) +- except block in py3.5 undefines the variable (bcl) +- Remove some history from the liveinst setup. (dshea) +- Do not run the liveinst setup if not in a live environment. (dshea) +- Set GDK_BACKEND=x11 before running anaconda from liveinst. (dshea) +- Run zz-liveinst as an autostart application (dshea) +- Translate the help button. (dshea) +- Translate the required space labes in resize.py (dshea) + +* Fri Mar 04 2016 Brian C. Lane - 25.0-1 +- Add device id to dasdfmt screen. (#1269174) (sbueno+anaconda) +- Unify displayed columns in custom spoke dialogs. (#1289577) (sbueno+anaconda) +- Show some confirmation to users if adding a DASD was successful. (#1259016) + (sbueno+anaconda) +- Hotfix for missing storage in payload class (#1271657) (jkonecny) +- Check to see if DD repo is already in addOn list (#1268357) (bcl) +- Use the default levelbar offset values. (dshea) +- Do not change the GUI language to a missing locale. (#1312607) (dshea) +- Don't crash when setting an unavailable locale (#1312607) (dshea) +- Change the default locale to C.UTF-8 (#1312607) (dshea) +- Update the libtool version-info. (dshea) +- Use CSS to style the internal widgets. (dshea) +- Move the widgets pixmaps into resources. (dshea) +- Add a resource bundle to libAnacondaWidgets (dshea) +- Rename show_arrow and chosen_changed to show-arrow and chosen-changed (dshea) +- Remove an invalid transfer notation. (dshea) +- Stop using SGML in the docs. (dshea) +- Change the install test URL. (dshea) +- Fix nfs source crash when options change (#1264071) (bcl) +- makebumpver: Add a --dry-run option (bcl) +- NTP should have better behavior (#1309396) (jkonecny) +- Manually set clock shifts on UI idle (#1251044) (rmarshall) +- Don't remove selected shared part when Delete all (#1183880) (jkonecny) +- Don't delete shared/boot parts in deleteAll (#1183880) (jkonecny) + +* Fri Feb 19 2016 Brian C. Lane - 24.13-1 +- tests/gui enhancements (atodorov) +- Fix gui tests for anaconda move to anaconda.py (atodorov) +- Use a different ipmi command to log events. (clumens) +- Clarify that a string in list-screens is actually a regex. (clumens) +- Merge pull request #513 from wgwoods/update-dd-docs (wwoods) +- updated driver updates docs (wwoods) +- Add specification for the user interaction config file (mkolman) +- Update zanata webui URL in translation doc. (dlehman) +- Tweak partition removal in Custom spoke (jkonecny) +- Do not skip evaluation after removing partitions (jkonecny) +- Import iutil earlier so we can use ipmi_report from check_for_ssh. (clumens) +- Make disconnect_client_callbacks more resilient (#1307063). (clumens) +- Move the langpacks install into to a separate function. (dshea) +- Fix _find_by_title method in Accordion (jkonecny) + +* Fri Feb 12 2016 Brian C. Lane - 24.12-1 +- Use host storage for directory or image install dnf download (bcl) +- Log payloadError so we know why installation failed. (bcl) +- Add the addons directory to the rpm. (dshea) +- Use the packaged version of ordered-set (dshea) +- Remove an unused import (dshea) +- Add an uninstall hook for the renamed anaconda (dshea) +- Make langpack work in DNF (#1297823) (jsilhan) +- New Anaconda documentation - 24.11 (bcl) + +* Fri Feb 05 2016 Brian C. Lane - 24.11-1 +- Fix makeupdates for anaconda move to anaconda.py (bcl) +- Rename ./anaconda to ./anaconda.py to work around coverage.py #425 (atodorov) +- Remove special handling for interruptible system calls. (dshea) +- Handle PEP 3101 strings in the gettext context check (dshea) +- Improve RHS summary strings in multiselection (#1265620) (jkonecny) +- Increase GI version required of AnacondaWidgets (jkonecny) +- Increment version of g-introspection for widgets (jkonecny) +- Increment the AnacondaWidgets version (jkonecny) +- Switch to the new Initial Setup unit name (#1299210) (mkolman) +- Uncomment self.check_lang_locale_views in tests/gui/ (atodorov) +- Add dogtail to test requirements (atodorov) +- Add config for easier combining of kickstart and Jenkins coverage data + (atodorov) +- Apply the fallback style to anaconda selectors. (dshea) +- Redo the stylesheet for Gtk 3.19+ (dshea) +- Directly overwrite /usr/share/anaconda/anaconda-gtk.css (dshea) +- Merge pull request #463 from dashea/translation-tests (dshea) +- Display the name of the addon while executing it (bcl) +- Add page selection summary to the right side (#1265620) (jkonecny) +- Ask when removing new items in multiselection (#1265620) (jkonecny) +- Add multiselection with SHIFT key (#1265620) (jkonecny) +- Use show_arrow feature implemented in Selector (#1265620) (jkonecny) +- Add new property to show/hide arrow in Selector (#1265620) (jkonecny) +- Change selection logic when opening Page (#1265620) (jkonecny) +- Add new BasePage class (#1265620) (jkonecny) +- Add signal and methods to MountpointSelector (#1265620) (jkonecny) +- Fix errors with multiselection (#1265620) (jkonecny) +- Accordion class now process events for selectors (#1265620) (jkonecny) +- Change cammel case for accordion.py to new pep8 (jkonecny) +- Move selection logic from custom spoke to accordion (#1265620) (jkonecny) +- Modify ConfirmDeleteDialog now the checkbox is optional (#1265620) (jkonecny) +- Multiselection works in GUI with remove (#1265620) (jkonecny) +- Add multiselection to Accordion with control key (#1265620) (jkonecny) +- Remove bad translations from the source tarball. (dshea) +- Treat warnings from xgettext as errors. (dshea) +- Run translation-canary tests from make check. (dshea) +- Do not run pylint on translation-canary (dshea) +- Squashed 'translation-canary/' content from commit 5a45c19 (dshea) + +* Fri Jan 29 2016 Brian C. Lane - 24.10-1 +- Add a finished method to spokes (#1300499) (bcl) +- Handle DeviceConfiguration with con = None (#1300499) (bcl) +- Log detailed information about installed packages (bcl) +- s/KickstartValueError/KickstartParseError. (clumens) +- Move requiredDeviceSize to the main Payload class (#1297905) (dshea) + +* Fri Jan 08 2016 Brian C. Lane - 24.9-1 +- Handle unexpected DNF exit (bcl) +- Fix bad space needed messages (jkonecny) +- nosetests-3.5 is now the right version. (clumens) +- Ignore a pylint error about how we're using Popen (dshea) +- Mark an unused variable as unused (dshea) +- Ignore type-related errors for types pylint can't figure out (dshea) +- Import errors are just regular errors now (dshea) +- Replace the remaining log.warn calls with log.warning. (dshea) +- Fix an erroneously bare raise statement (dshea) +- Replace the deprecated assertEquals with assertEqual (dshea) +- Don't add a None to the list of things to unmount on ostree installs. + (clumens) + +* Wed Dec 02 2015 Brian C. Lane - 24.8-1 +- Fix pylint problems in the gui testing code. (clumens) +- Merge 9c5e02392d0401a3bd0adecedea03535595773ef into + 67b569253c724639c2490f5fab70f7111f699b3f (atodorov) +- Fix the replacement suggestion for "hostname" (dshea) +- Automatically generate sr (dshea) +- Fix PropertyNotFoundError PermHwAddress (#1269298) (jkonecny) +- Make sure python3.5 code can run in early initrd (bcl) +- Replace .delete() with .remove() in user.py (sujithpandel) +- Rename everything that still refers to LiveCD (atodorov) +- Updates to progress and storage tests (atodorov) +- Multiple changes to DogtailTestCase (atodorov) +- Move all Python files into the main gui/ directory (atodorov) +- Simplify tests by removing OutsideMixin and update Creator (atodorov) +- Modify existing tests to match latest anaconda behavior and environment + (atodorov) +- Temporary disable test code which doesn't work (atodorov) +- Make tests/gui/ execute ./anaconda from git (atodorov) +- Add window title (#1280077) (mkolman) +- Replace execReadlines with check_output in parse-kickstart_test.py (bcl) +- Fix a spelling error in the hardware error message (#1284165). (clumens) + +* Wed Nov 18 2015 Brian C. Lane - 24.7-1 +- Collect test-suite.log from all 'make check' invocations. Closes #452 + (atodorov) +- Fix parse-kickstart_test.py. (clumens) +- Remove mkdud.py. (clumens) +- Remove the kickstart_tests directory. (clumens) +- Always quote values in ifcfg- files (#1279131) (bcl) +- Include original kickstart in /root/original-ks.cfg (#1227939) (bcl) +- strip spaces from extlinux label and default (#1185624) (bcl) +- Report kernel failures during kickstart tests. (clumens) +- Make sure unicode in kickstart works. (dshea) +- Set the window icon (dshea) +- Only run space check in TUI if spokes are complete. (#1279413) + (sbueno+anaconda) +- Allow a user's primary group to be created in --groups (#1279041) (dshea) +- Remove uses of broad-except. (dshea) +- Add a test for all that container minimization stuff. (clumens) +- Use the partition command in one of the kickstart_tests. (clumens) +- Don't clear the _currentIsoFile if another iso was selected (bcl) +- makeupdates: Include utils/handle-sshpw (bcl) +- Add --sshkey to kickstart sshpw command (#1274104) (bcl) +- Split exception description from exception traceback (jkonecny) +- Show DNF exception instead of silent exit (jkonecny) +- Combine results from all gettext_tests into one log file (atodorov) +- Try to run make ci with real translations. (dshea) +- Untranslate undisplayed TreeView column headers. (dshea) +- Add a test for hidden translatable strings (dshea) +- Add the translated string to markup error messages. (dshea) +- Test glade translations by default (dshea) +- Change the way glade tests are run. (dshea) +- Remove the accelerator test. (dshea) +- Add the test lib directory to $PYTHONPATH in the commit hook (dshea) +- network: create ifcfg files in tui if needed (#1268155) (rvykydal) +- Do not limit ONBOOT default setting to url and nfs installation methods + (#1269264) (rvykydal) +- ibft: fix setting dracut boot args for static ibft nic configuration + (#1267526) (rvykydal) +- network: Don't set --device link default for hostname only network cmd + (#1272274) (rvykydal) +- network: assume --device=link as default also for ks on hd (#1085310) + (rvykydal) +- network: use ibftx interface for iSCSI from iBFT in dracut (#1077291) + (rvykydal) +- network: add s390 options to default ifcfg files (#1074570) (rvykydal) + +* Fri Nov 06 2015 Brian C. Lane - 24.6-1 +- Fix a pylint error in the previous commits. (clumens) +- Honor ANACONDA_WIDGETS_OVERRIDES (atodorov) +- Load anaconda-gtk.css from ANACONDA_DATA if specified (atodorov) +- Use the correct path for ui categories (atodorov) +- Typo fix, it's ANACONDA_WIDGETS_DATA not ANACONDA_WIDGETS_DATADIR (atodorov) +- Allow wired network properties more grid space. (dshea) +- Improve language selection at low resolutions. (dshea) +- Make reclaim work with small screens and big labels (dshea) +- allow repo with only a name if it's a pre-defined one (#1277638) (awilliam) +- Only raise thread exceptions once (#1276579) (bcl) +- Use py3.4 crypt and salt (bcl) +- Be more careful with incomplete device types (#1256582) (dshea) +- Fix an import error in rpmostreepayload.py. (clumens) +- Fix Testing docs inclusion in Sphinx (bcl) +- Ignore interfaces with invalid VLAN IDs. (dshea) +- Cleaner logging of .treeinfo return conditions in dependant function. + (riehecky) +- Update link to upstream kickstart docs (opensource) +- rpmostreepayload: Also unmount internal mounts during shutdown (walters) +- rpmostreepayload: Fix two issues with mounting (walters) +- Add a README for kickstart tests. (clumens) +- Make the documentation match the environment variable. (clumens) +- Check that cache PVs (if any) are in the VG the LV belongs to (#1263258) + (vpodzime) +- Fix the alignment of the "Label" label in custom (dshea) +- Use unsafe caching during kickstart tests. (clumens) + +* Wed Oct 28 2015 Brian C. Lane - 24.5-1 +- Improve install space required estimation (#1224048) (jkonecny) +- Update the on-disk snapshot of storage when adv. disks are added (#1267944) + (vpodzime) +- Check that ipv6 kickstart outputs the right ip= (dshea) +- Change a variable name for pylint. (dshea) +- Do not run time_initialize for image and directory installations (#1274103) + (bcl) +- Remove unused properties (dshea) +- Do not modify the kickstart user data until apply() (dshea) +- Make AdvancedUserDialog.run() more readable (dshea) +- Improve the behavior of the home directory input. (dshea) +- Stop setting inappropriate properties in ksdata. (dshea) +- Update the password strength bar during the password strength check. (dshea) +- Remove unnecessary grab_focus and set_sensitive calls (dshea) +- Use signal handlers in the user spoke more sensibly. (dshea) +- Fix potential issues with the username guesser. (dshea) +- Make kickstart tests growing LVs stricter (vpodzime) +- Point coverage.py to the full path of pyanaconda/ (atodorov) +- Don't set BOOTPROTO= when it isn't set (jbacik) +- Pass strings to blockdev.dasd_format, not a DASDDevice object. (#1273553) + (sbueno+anaconda) +- Revert "Use yum to install the mock buildroot for now." (dshea) +- decode package name for /etc/sysconfig/kernel (RHBZ #1261569) (awilliam) +- Add tests for the more complicated command line options (dshea) +- Store fewer kinds of things in the dirinstall option. (dshea) +- Fix the parsing of selinux=0 (#1258569) (dshea) +- Include a local $ANACONDA_DATADIR in the test environment. (dshea) +- Move the command line arguments to anaconda_argparse. (dshea) +- Don't crash while logging binary output. (dshea) +- Decode program output even if there is no output (#1273145) (dshea) +- Add a test for _run_program with binary output (dshea) +- Test execWithCapture when the command outputs nothing. (dshea) +- Fix a long line in kickstart_tests/functions.sh. (clumens) +- Merge pull request #414 from vpodzime/master-lvm_log (vpodzime) +- Save the lvm.log Blivet may produce (vpodzime) + +* Fri Oct 16 2015 Brian C. Lane - 24.4-1 +- Hide the places sidebar in the ISO chooser widget. (dshea) +- Use GtkResponseType values in the iso chooser dialog (dshea) +- Do not use deprecated getDevicesByInstance method (vtrefny) +- By default, skip those kickstart tests we know to be failing. (clumens) +- Fix pylint unused import (jkonecny) +- network: handle bridge device appearing before its connection (#1265593) + (rvykydal) +- Use $KSTEST_URL in tests that still had dl.fp.o hardcoded. (dshea) +- Support CONNECT in the test proxy server. (dshea) +- Extract the file used by liveimg as a prereq (dshea) +- Convert the proxy script to a prereq. (dshea) +- Add a prereqs function to kickstart tests. (dshea) +- Fix traceback when trying to create list of unformatted DASDs. (#1268764) + (sbueno+anaconda) +- network: handle missing connections of a device configured in GUI better + (rvykydal) +- network: don't set NM_CONTROLLED=no for root on SAN. (rvykydal) +- Add support for other systemd units to kickstart service command (bcl) +- Merge pull request #388 from wgwoods/dd-in-initrd-fix (wwoods) +- Set the password checkbox for empty kickstart passwords. (dshea) +- Do not set the password input text with unencrypted passwords. (dshea) +- Install input checks before modifying the user GUI (#1256065) (dshea) +- Fix a lying error message in style_guide.py (dshea) +- Use "Enter" instead of "Return" for the keyboard key. (dshea) +- New Anaconda documentation - 24.3 (bcl) +- Include missing test files and scripts in Makefile.am/tarball (atodorov) +- dracut: accept inst.dd=[file:]/dd.iso (#1268792) (wwoods) +- Do not override StorageChecker.errors in StorageSpoke (#1252596) (vtrefny) +- Lookup IPv6 address without brackets (#1267872) (bcl) +- Mangle the boot device differently for systemd (#1241704) (dshea) +- Fail the media check if the systemd service failed to start. (dshea) + +* Fri Oct 02 2015 Brian C. Lane - 24.3-1 +- Properly translate c-to-continue on the root selection screen (mkolman) +- Check minimal memory requirements properly (#1267673) (jstodola) +- Allow users to be created with an existing GID. (dshea) +- Add a test for creating a user with an existing GID. (dshea) +- Add tests for gids embmedded in the user groups list. (dshea) +- Allow the kickstart --groups list to specify GIDs. (dshea) +- Add a --groups argument to the user ks test. (dshea) +- Fix the locale pattern packages-instlangs-3 looks for. (dshea) +- Raise an error if osimg cannot be found (#1248673) (bcl) +- Use the bootloader raid levels for bootloader installation (#1266898) (bcl) +- Use otps.display_mode during early startup (#1267140) (mkolman) +- Mount stage2 cdrom after running driver-updates (#1266478) (bcl) +- Get rid of an unused import in the user spoke. (clumens) +- Log crashes from the signal handler. (dshea) +- Save a core file when anaconda crashes. (dshea) +- Keep environment selection when reentering the software spoke (#1261393) + (mkolman) +- Only show the user spoke if no users are specified in kickstart (#1253672) + (mkolman) +- Fix 'cat: /tmp/dd_disk: No such file or directory' (#1251394) (jkonecny) +- Do not display curl 404 errors that can be safely ignored (vtrefny) +- Catch blkid failure in driver-updates (#1262963) (bcl) +- Add kickstart tests for %%packages --instLangs (dshea) +- Do not display markup in showDetailedError. (dshea) +- Skip OEMDRV if interactive DD is requested (#1254270) (bcl) +- Drivers are simply under /run/install/DD-x/ (#1254270) (bcl) +- Fix branding when iso is downloaded from nfs or hd (#1252756) (jkonecny) +- Use yum to install the mock buildroot for now. (dshea) +- Rename the gettext tests (dshea) +- Bring back the KSTEST_HTTP_ADDON_REPO substitution in nfs-repo-and-addon.sh + (clumens) +- Run substitution checks on the right kickstart file. (clumens) +- Tell gettext that anaconda is not a GNU package. (dshea) +- Ignore environment modification warnings in docs/conf.py (dshea) +- Check for unsubstituted strings before running a test. (dshea) +- Autopart use 90%% of disk capacity for required space compare (#1224048) + (jkonecny) +- Fix include packages install size when downloading on root (#1224048) + (jkonecny) +- Enable and improve the check for swap LV size in LVM cache kickstart tests + (vpodzime) +- make-sphinx-docs: Add modules needed to document tests (bcl) +- Add test documentation (atodorov) +- Fix how the reqpart test checks for /boot, again. (clumens) +- Add a way to get default settings when running the kickstart_tests. (clumens) +- Change how we ignore non-tests in kickstart_tests. (clumens) +- Various fixes to substitution strings in kickstart_tests. (clumens) +- Move kickstart_test .ks files to .ks.in. (clumens) + +* Fri Sep 11 2015 Brian C. Lane - 24.2-1 +- Handle driver rpms retrieved via network (#1257916) (bcl) +- Fix the types passed to chown_dir_tree (#1260318) (dshea) +- Add a test for home directory reuse (dshea) +- Use MDRaidArrayDevice.members instead of .devices (dshea) +- Make sure anaconda reads in ks file from OEMDRV device. (#1057271) + (sbueno+anaconda) +- Try to deal with expected errors from devicetree.populate (#1257648) + (vpodzime) +- Revert "Temporarily disable generating a coverage report." (clumens) +- Fix a DBus InvalidProperty handling (jkonecny) +- Fix another bash syntax problem in kickstart-genrules.sh (#1057271) + (sbueno+anaconda) +- Add a test for the rootpw kickstart command (dshea) +- Add tests for setRootPassword (dshea) +- Add a /boot partition to the reqpart test. (clumens) +- Fix up a statement that's not assigned to anything. (clumens) +- Temporarily disable generating a coverage report. (clumens) +- Don't try to concatenate a list with a string (#1252444) (mkolman) +- Activate coverage for tests executed with sudo (atodorov) +- set sysroot correctly when setting root password (#1260875) (awilliam) +- Add a test for kickstarts that %%include a URL (dshea) +- Add missing python dependencies for requests. (#1259506) (dshea) +- Serve the http addon repos from the test tmpdir (dshea) +- Make make-addon-pkgs easier to use from within a test (dshea) +- Add a simple http server for use in kickstart tests. (dshea) +- Add a script to print an IP address for the host. (dshea) +- Add a cleanup hook that can be defined by kickstart tests (dshea) +- Move kickstart test support files into a separate directory. (dshea) +- Fix a python3 related error in the pre-commit hook (dshea) +- network: gui spoke TODO cleanup (rvykydal) +- libnm in spoke: add missing connection for eth device with Configure + (rvykydal) +- libnm in spoke: allow adding missing connection for eth device externally + (rvykydal) +- libnm in spoke: wait for valid state of added device before adding to list + (rvykydal) +- libnm in spoke: use libmn objects instead of names an uuids (device on/off) + (rvykydal) +- libnm in spoke: to check if device is activated just use its object + (rvykydal) +- libnm in spoke: use connnection objects instead of uuids (edit connection) + (rvykydal) +- libnm in spoke: refresh early when device is added (rvykydal) +- libnm in spoke: use connection object instead of uuid (DeviceConfiguration) + (rvykydal) +- libnm in spoke: share nm client in standalone and normal spoke (rvykydal) +- libnm in spoke: add enterprise wpa connection using libnm client (rvykydal) +- libnm in spoke: use AccessPoint object in place of ssid bytearray (rvykydal) +- libnm in spoke: delete connection using libnm client (rvykydal) +- libnm in spoke: replace python-dbus workaround calls for ap security flags + (rvykydal) +- libnm in spoke: call get_data() on ap.get_ssid() result to get ssid bytes + (rvykydal) +- libnm in spoke: showing ip configuration of a device (rvykydal) +- libnm in spoke: NMClient -> NM.Client (rvykydal) +- libnm in spoke: gi.NetworkManager -> gi.NM (rvykydal) +- libnm in spoke: Revert "Fix crash when new device appear in Welcome screen + (#1245960)" (rvykydal) +- libnm in spoke: Revert "Fix crash when connections are changing (#1245960)" + (rvykydal) +- Add an ignoredisk --drives= test. (clumens) +- Add a test for the reqpart command. (clumens) +- Grab anaconda.coverage on tests that reimplement validate(). (clumens) +- Install driver-updates (dshea) +- Fix a typo in service enablement in kickstart.py. (clumens) +- Get rid of the extraneous cats and greps in user.ks. (clumens) +- Add sshkey testing to the user kickstart_test. (clumens) +- Add a kickstart test in Arabic. (clumens) +- Verify Initial Setup services are present before turning them ON/OFF + (#1252444) (mkolman) +- Don't crash if the Japanese PC-98 keyboard is selected (#1190589) (mkolman) +- Report on all local files and exclude what we don't need instead of + explicitly including paths we may not be aware of. (atodorov) +- Change "failed to download" messages from critical to warning. (clumens) +- getcode -> status_code in a live payload error message. (clumens) +- Fix a bash error in kickstart-genrules.sh (#1057271) (sbueno+anaconda) +- specify if=virtio,cache=none for VM drives (atodorov) +- update the test b/c latest anaconda doesn't allow weak passwords (atodorov) +- Specify format=raw to avoid warning from qemu (atodorov) +- update for Python3 nose (atodorov) +- Add a services.sh file to match the existing services.ks. (clumens) +- Add types to all existing kickstart tests. (clumens) +- Add the ability to mark kickstart tests with a type. (clumens) +- Run nm-connection-editor with the --keep-above flag (#1231856) (mkolman) + +* Mon Aug 31 2015 Brian C. Lane - 24.1-1 +- Add a test for the user and group creation functions. (dshea) +- Get rid of libuser. (#1255066) (dshea) +- s/$releasever/rawhide/ (clumens) +- LVM on RAID kickstart test (vpodzime) +- unbuffered read in python3 only works for binary (bcl) +- don't crash if no environment set in interactive (#1257036) (awilliam) +- network: compare with ssid bytes, not str (rvykydal) +- Add dependencies for running the tests/gui tests (atodorov) +- Fix first run environment setup in software spoke (#1257036) (jkonecny) +- Stop pretending liveinst+rescue is supported (#1256061). (clumens) +- Defer to Fedora distro-wide settings for password strength (#1250746) (dshea) +- New Anaconda documentation - 24.0 (bcl) +- Do a better job reporting failures from kickstart_tests. (clumens) +- Preserve coverage results from running the kickstart_tests. (clumens) + +* Mon Aug 24 2015 Brian C. Lane - 24.0-1 +- Remove from the docs repo=hd installation with installable tree (jkonecny) +- Fix a race between a window continuing and the next starting (#1004477) + (dshea) +- Start hubs with the buttons insensitive. (dshea) +- Do not replace the standard streams if not necessary. (dshea) +- Fix inst.repo=hd: is not working (#1252902) (jkonecny) +- Kickstart: Added SELinux test. (kvalek) +- Kickstart tests related to SELinux. (kvalek) +- Package install and debug message logging. (kvalek) +- Don't crash if incorrect environment is set in kickstart (#1234890) (mkolman) +- Fix I/O issues when anaconda is started without a locale. (dshea) +- Move locale environment logic into localization.py (dshea) +- network: fix configuring team in kickstart pre (#1254929) (rvykydal) +- Merge pull request #311 from atodorov/add_local_coverage (clumens) +- Merge pull request #308 from atodorov/rawhide_missing_deps (clumens) +- Enable test coverage in CI (atodorov) +- Fix the single-spoke TUI message for Python 3. (dshea) +- Merge pull request #291 from atodorov/update_coverage_switch (clumens) +- Add missing requirements (atodorov) +- Add basic kickstart tests for LVM Thin Provisioning (vpodzime) +- Use the default mirrorlist instead of fixed repo URL in kickstart tests + (vpodzime) +- Destroy the keyboard layout dialog when finished (#1254150) (dshea) +- Do not encode the geoloc timezone to bytes (#1240812) (dshea) +- use inst.debug as alternative option to start coverage (atodorov) + +* Mon Aug 17 2015 Brian C. Lane - 23.20-1 +- Skip source url checks when network is off (#1251130) (bcl) +- Don't set net.device to link if there is no ksdevice (#1085310) (bcl) +- Reading carrier while link is down raises IOError (#1085310) (bcl) +- Don't write nfs repos to the target system (#1246212) (bcl) +- Make sure username entered in TUI if create a user chosen. (#1249660) + (sbueno+anaconda) +- Write the empty dnf langpacks.conf to the right directory (#1253469) (dshea) +- Add pyanaconda test for network.check_ip_address (jkonecny) +- Replace IPy package by ipaddress (jkonecny) +- Correctly check return code when running rpm from makeupdates (mkolman) +- Fix crash when new device appear in Welcome screen (#1245960) (jkonecny) +- Fix crash when connections are changing (#1245960) (jkonecny) +- Make LVM cache kickstart tests more robust (vpodzime) +- product.img buildstamp should override distribution buildstamp (#1240238) + (bcl) +- On incomplete ks, don't automatically proceed with install. (#1034282) + (sbueno+anaconda) +- Update the translation doc with zanata branching incantations. + (sbueno+anaconda) +- Merge pull request #287 from kparal/patch-1 (clumens) +- boot-options.rst: add a note about nfsiso (kamil.paral) +- Few fixes and amendments for the boot_options.rst file (vpodzime) +- Prevent issues with encrypted LVs on renamed VGs (#1224045) (vpodzime) +- Create and use snapshot of on-disk storage with no modifications (#1166598) + (vpodzime) +- Implement the class for storage snapshots (vpodzime) +- Prevent any changes in the StorageSpoke if just going back (vpodzime) +- Make StorageSpoke's on_back_clicked less complicated (vpodzime) +- Add kickstart tests for the LVM cache kickstart support (vpodzime) +- Disable packages-multilib, for now. (clumens) +- Make sure the liveimg test shuts down when it finishes. (clumens) +- Change how success is checked for the basic-ostree test. (clumens) + +* Fri Aug 07 2015 Brian C. Lane - 23.19-1 +- Add basic support for LVM cache creation in kickstart (vpodzime) +- Use labels for the rest of the non-autopart test results. (dshea) +- Use a disk label to find the filesystem for escrow results (dshea) +- Use someone else's code for PID file management. (dshea) +- Prevent incomplete translations from making the TUI unusable (#1235617) + (mkolman) +- Apply the environment substitutions more liberally in nfs-repo-and-addon + (dshea) +- Use stage2=hd: instead of stage2=live: (dshea) +- Add test for liveimg kickstart command (bcl) +- Fix pre-install script execution (bcl) +- test pre-install kickstart section (bcl) +- Use sys.exit() instead of the exit() created by site.py. (dshea) +- Call ipmi_report before sys.exit (dshea) +- Add a test for proxy authentication (dshea) +- Add optional authentication to the proxy server (dshea) +- Add more tests to proxy-kickstart (dshea) +- Show an alternative prompt if a hub contains only a single spoke (#1199234) + (mkolman) +- Add few docs and improvement in check_ip_address (jkonecny) +- Check whether files actually contain translatable strings. (dshea) +- Add specific error string to TUI user dialog (#1248421) (bcl) +- Make EditTUIDialog error generic (#1248421) (bcl) +- Fix and expand nfs-repo-and-addon.ks (dshea) +- Added a script to make the packages used by nfs-repo-and-addon (dshea) +- Implement the rest of the repo options in dnfpayload. (dshea) +- Fix kickstart test for bond interface creation (jkonecny) + +* Fri Jul 31 2015 Brian C. Lane - 23.18-1 +- Move the proxy server script into a common file. (dshea) +- Use python3 for the proxy server and remove python2 compatibility (dshea) +- makePickle now needs to return bytes (bcl) +- gi.require_version raises ValueError (bcl) +- Remove duplicate signal setup block (bcl) +- Fix three bugs discovered by driverdisk-disk.ks (clumens) +- Fix error with OEMDRV ks auto-load check. (#1057271) (sbueno+anaconda) +- Make sure TUI is readable for non-latin languages (#1182562) (mkolman) +- Equalize capacity & mount point entries (#1212615) (dshea) +- Disable GRUB os_prober on POWER (#1193281) (rmarshall) +- Cancel Container Edit Sensitizes Update (#1168656) (rmarshall) +- Fix SoftwareSpoke._kickstarted. (dshea) +- Disable a Pylint false-positive (#1234896) (mkolman) +- Add support for autostep and --autoscreenshot (#1234896) (mkolman) +- Escape \'s in doc strings (dshea) +- Ellipsize the file system type combo box (#1212615) (dshea) +- Add graphviz to make-sphinx-doc script (jkonecny) +- Remove many of a documentation compilation errors (jkonecny) +- Add class diagrams to existing spokes and hubs (jkonecny) +- Add class diagram settings to documentation (jkonecny) +- Fix the UnusuableConfigurationError dialog (#1246915) (dshea) +- Chase pygobject's stupid moving target (dshea) +- Add missing translation contexts (dshea) +- Actually translate the container type labels (dshea) +- Check whether a translated string requires a context or comment. (dshea) +- Clean up the temporary pools virt-install makes. (clumens) +- Return the same object for repeated calls to __get__ (#1245423) (dshea) +- Use sys.exit instead of os._exit. (clumens) +- Add parentheses around the IPV6 regex fragment. (dshea) +- Add tests for IPv6 literals in URLs (dshea) +- Modify Installation Source Proxy Label (#11688554) (rmarshall) + +* Fri Jul 24 2015 Brian C. Lane - 23.17-1 +- Fix Initial PPC PReP Boot Selector Name (#1172755) (rmarshall) +- Require a newer version of pykickstart (vpodzime) +- Use dictionaries is thread-safe manner. (dshea) +- Merge pull request #234 from wgwoods/master (wwoods) +- Auto-load ks.cfg if OEMDRV volume available. (#1057271) (sbueno+anaconda) +- Check the encrypt checkbox when encrypted specified in KS (vtrefny) +- Do not raise KickstartValueError for missing passphrase (vtrefny) +- Ask for encryption passphrase when not specified in ks (#1213096) (vtrefny) +- dracut: minor cleanup (wwoods) +- dracut: fix missing messages for inst.ks=cdrom (wwoods) +- Wait forever for kickstarts on CDROM (#1168902) (wwoods) +- Use abs_builddir instead of builddir so paths will look more reasonable. + (clumens) +- Add a new makefile target that does everything needed for jenkins. (clumens) +- Merge pull request #228 from AdamWill/logind (dshea) +- Fix crash when mirrorlist checkbox is checked (jkonecny) +- Fix crash when user start typing proxy credentials (jkonecny) +- Check repository URL before leaving Source Spoke (jkonecny) +- Add IDs to identify addon repositories (jkonecny) +- Repositories can be checked without a selection (jkonecny) +- Consolidate the language environment variables. (dshea) +- Change the generated API indices slightly (dshea) +- Ignore "mountpoint" used a format specifier (dshea) +- filesystems -> file systems, per the style guide (dshea) +- Properly parameterize a translated string (dshea) +- Fix pylint errors in rescue.py. (dshea) +- Remove unused imports (dshea) +- Remove text.py from spec file (#965985) (sbueno+anaconda) +- Merge pull request #220 from AdamWill/1243962 (dshea) +- Fix adding 'boot=' option in FIPS mode (vtrefny) +- anaconda.target: Wants systemd-logind.service (#1222413) (awilliam) +- Remove the last usage of newt and get rid of it as a dependency (#965985) + (sbueno+anaconda) +- Enable anaconda to use the new rescue mode. (#965985) (sbueno+anaconda) +- Get rid of unnecessary constants in constants_text. (#965985) + (sbueno+anaconda) +- Get rid of some unnecessary files. (#965985) (sbueno+anaconda) +- Display verbose packaging errors to the user (bcl) +- Show source errors from refresh method (bcl) +- Fix the validate functions in the btrfs kickstart_tests. (clumens) +- Connect kickstart lang data to dnf-langpacks (#1051816) (dshea) +- Add simple_replace config file function (bcl) +- Remove some vestiges of the old packaging module (dshea) +- Remove window boot block detection functions. (dshea) +- Remove iutil.xprogressive_delay. (dshea) +- Simplify iutil.mkdirChain. (dshea) +- Decode wifi SSIDs into strings. (#1240398) (dshea) +- Actually use the temp directory so test files get cleaned up (dshea) +- Disable the output from rpmbuild (dshea) +- Remove stray references to python2. (dshea) +- Fix possible to start installation without network (#1221109) (jkonecny) +- Fix 'q' (to quit) do not work in TUI hub (jkonecny) +- act on the right objects when stripping URL protocols (#1243962) (awilliam) +- Fix 'App' object has no attribute 'queue' (#1243316) (jkonecny) + +* Thu Jul 16 2015 Brian C. Lane - 23.16-1 +- fix storage writing for live and ostree installs (#1236937) (awilliam) +- Add O_CREAT to the open flags when extracting rpm files. (dshea) +- Move ostree gobject version check next to the import (#1243543) (bcl) +- Remove rpmfluff from the buildrequires. (dshea) +- Only import readline if readline is necessary. (dshea) +- use the right baseurl in run_install_test.sh. (clumens) +- Don't copy the environment when starting metacity. (dshea) +- Fix the use of a temporary file in SimpleConfig.write (dshea) +- Add a test for SimpleConfig.write(use_tmp=True). (dshea) +- Remove an unnecessary chmod when creating chrony.conf (dshea) +- Fix some bad uses of chmod. (dshea) +- Add a function to open a file with specific permission bits (dshea) +- Don't ask to start vnc if user specifies text mode. (#1202277) + (sbueno+anaconda) +- New Anaconda documentation - 23.15 (bcl) +- Add a helper for building Sphinx docs using mock. (bcl) +- Update Sphinx configuration for python3 (bcl) +- Running without a GUI can also raise ValueError in errors.py (bcl) +- parse-kickstart_test.py: fix driverdisk_test() (wwoods) +- Fix the spelling of "version" (dshea) + +* Mon Jul 13 2015 Brian C. Lane - 23.15-1 +- Some dracut modules anaconda needs have been split into their own package. + (clumens) +- User operation kickstart tests. (kvalek) +- Kickstart tests for UTC and LOCAL hwclock. (kvalek) +- Kickstart firewall tests. (kvalek) +- Fix Repository New_Repository has no mirror or baseurl (#1215963) (jkonecny) + +* Fri Jul 10 2015 Brian C. Lane - 23.14-1 +- Catch blivet formatDevice ValueError in custom (#1240226) (bcl) +- There's now a python3-rpmfluff, so revert this. (clumens) +- Fix a couple other pylint problems in the driver disk tests. (clumens) +- Merge pull request #194 from wgwoods/master (wwoods) +- dracut: fix boot failure waiting for finished/dd.sh (wwoods) +- Use builddir instead of srcdir to find the dd utils (dshea) +- Fix the dd_test for python3. (dshea) +- Fix %%files to deal with compiled python3 modules (dshea) +- Add a bunch of gi.require_version calls (dshea) +- Temporarily disable the error about not importing rpmfluff. (clumens) +- Don't try to iterate over threads directly in wait_all. (clumens) +- Update the btrfs kickstart tests to use functions.sh. (clumens) +- Merge pull request #182 from wgwoods/dd-refactor (wwoods) +- driver_updates: fixes from patch review (wwoods) +- Don't be too picky about what name is --device=link (dshea) +- Ignore stderr output from parse-kickstart. (dshea) +- Add an option to execReadlines to filter out stderr. (dshea) +- Ignore interruptible system calls in the dd test (dshea) +- Fix an undefined variable in writeStorageLate (dshea) +- Connect zfcp entries to the discovery buttons (dshea) +- Connect iscsi activations to buttons (dshea) +- Connect the dasd number entry to the discovery buttons. (dshea) +- Add keyboard layouts on the row-activated signal. (dshea) +- Connect dialog inputs to default actions. (dshea) +- Remove unnecessary GtkNotebooks. (dshea) +- Re-save some dialog glade files. (dshea) +- Merge pull request #181 from wgwoods/master (wwoods) +- dd-refactor: dracut + build bits (wwoods) +- Add kickstart test for RAID1 (bcl) +- pass PYTHONPATH to the kickstart test framework (bcl) +- Write servers to chronyd.conf even if it's off (#1197575) (wwoods) +- Refresh advanced disks after disk summary dialog (#1226354) (bcl) +- parse-kickstart: just emit 'inst.dd=XXX' for driverdisk (wwoods) +- parse-kickstart: pylint fixes (wwoods) +- dd-refactor: new driver_updates.py + tests (wwoods) +- payload: fix driverdisk repos (wwoods) +- dracut: fix boot with inst.ks and no inst.{repo,stage2} (#1238987) (wwoods) +- Use the most recent versions of the btrfs, logvol, part, and raid commands. + (clumens) +- Allow /boot partition on iscsi with ibft (#1164195) (jkonecny) +- Add kickstart tests to test btrfs installation (vtrefny) +- Fix broken test by infiniband patch (#1177032) (jkonecny) + +* Thu Jul 02 2015 Brian C. Lane - 23.13-1 +- Add a switch for the Airplane Mode label (dshea) +- Connect labels with keyboard accelerators to a widget (dshea) +- Add a test for dangling keyboard accelerators. (dshea) +- Use pocketlint for translation and markup checking (dshea) +- Flatten the glade test directory. (dshea) +- Add support for specifying arbitrary mkfs options. (clumens) +- Fix kickstart install with infiniband (#1177032) (jkonecny) +- anaconda-dracut: Fix sysroot mount for netroot (#1232411) (bcl) +- Add RAID swaps to /etc/fstab (#1234469) (bcl) +- network: catch another race when calling dbus methods on invalid devices + (rvykydal) +- network: GUI, add connection even when virtual device activation failed + (#1179276) (rvykydal) +- Fix IP / hostname mismatches when showing VNC server address (#1186726) + (rvykydal) +- Check also ipv6 default routes when looking for onboot=yes device (#1185280) + (rvykydal) +- Merge pull request #157 from wgwoods/master_dd_fixes (wwoods) +- Do not check dependencies on invalid payloads (dshea) +- network: don't set onboot=False for default autoconnections (#1212009) + (rvykydal) +- Fix the types used to write anaconda-tb-all.log (dshea) +- dd: drop unnecessary archive_read_data_skip (wwoods) +- dd_extract: -l should not extract modules+firmware (wwoods) +- dd: fix permissions on extracted files (#1222056) (wwoods) +- tests: add dd_tests (wwoods) + +* Fri Jun 26 2015 Brian C. Lane - 23.12-1 +- Revert "Add an optional conditional to progress_report." (bcl) +- Fix inconsistencies in the payload messages. (dshea) +- Fix install-requires and install-buildrequires (dshea) +- anaconda-dracut: Mount /dev/mapper/live-rw (#1232411) (bcl) +- Eliminate some false test results when running glade tests. (atodorov) +- Move the knowledge about network packages into ksdata.network. (clumens) +- Add an optional conditional to progress_report. (clumens) +- Move the big block of late storage writing out of install.py. (clumens) +- The attribute is named ostreesetup.nogpg. (clumens) +- Use the index in grubenv (#1209678) (bcl) +- Do not raise an exception on EINTR from os.close or os.dup2 (dshea) +- Merge pull request #154 from mulkieran/master-959701 (mulkieran) +- Improve focus behavior in the advanced user dialog (dshea) +- Re-save advanced_user.glade (dshea) +- Depsolve kickstarted packages on the summary hub (#961280) (dshea) +- Add a kickstart test for %%packages --ignoremissing (dshea) +- Remove descriptions for RAID levels (#959701) (amulhern) +- No kexec-tools on aarch64 (bcl) + +* Fri Jun 19 2015 Brian C. Lane - 23.11-1 +- Do not import iutil from flags (dshea) +- Ignore EINTR errors in files unlikely to encounter them (dshea) +- Reimplement the open override for the dracut scripts (dshea) +- Wrap the only non-open call found by the new pocketlint checks (dshea) +- Redefine open to retry on EINTR (dshea) +- Remove __future__ imports (dshea) +- Use python 3's OSError subclasses instead of checking errno (dshea) +- Allow kwargs in eintr_retry_call (dshea) +- Remove explicit uses of /dev/null (dshea) +- Do not retry calls to close or dup2 (dshea) +- Remove another function from isys (dshea) +- Make dialogs behave better with timed input validation (dshea) +- Fix the password/confirm checks to work with delayed validation (dshea) +- Move the URL protocol removal out of the input check (dshea) +- Remove the vestigal capslock label from the password spoke (dshea) +- Re-saved a few glade files (dshea) +- Run set_status unconditionally from update_check_status (dshea) +- Do not run input checks for every keystroke of input (#1206307) (dshea) +- Add a method to execute timed actions early (dshea) +- Use comps.environments instead of comps.environments_iter (#1221736) (dshea) +- Merge pull request #83 from mulkieran/master-requires (mulkieran) +- Only show supported autopart choices in choices combo. (amulhern) +- Strip out device types that blivet is not able to support. (amulhern) +- Update blivet required version. (amulhern) +- Fix nfs4 stage2 and repo handling (#1230329) (bcl) +- Update upd-kernel so that it actually works (#1166535) (bcl) +- Fix passing ,nfsvers=3 to dracut (#1161820) (bcl) +- Require the python3 version of iscsi-initiator-utils (dshea) +- Fix the pylint pre-commit hook for python3 and pocketlint (dshea) +- Fix a type check to work with python 3. (dshea) +- Do not log Xorg output to tty5 (dshea) + +* Wed Jun 10 2015 Brian C. Lane - 23.10-1 +- Deal with encrypted partitions not being readable by virt-cat. (clumens) +- Make use of the restore_signals Popen argument (dshea) +- Don't allow /boot on iSCSI. (#1164195) (sbueno+anaconda) +- Merge pull request #127 from mulkieran/master-kickstart (mulkieran) +- Actually distribute the clickable message test, too (dshea) +- Fix disk argument passing to virt-cat in the ostree test. (clumens) +- Relabel all password and group files in %%post (#1228489) (dshea) +- Deal with the order of ifcfg files not being guaranteed. (clumens) +- Add a __init__.py to fix up an error when running iutil_test.py. (clumens) +- Actually run the clickable message test (dshea) +- Add a false positive to pylint checking for S390Error. (clumens) +- Let the excludedocs test pass if there are only directories left. (clumens) +- Allow successful kstest results to provide more details. (clumens) +- The escrow_cert test cannot use autopart. (clumens) +- Don't warn on PyInit__isys being unused. (clumens) +- Test that root LV is encrypted. (amulhern) +- Deal with subprocess returning bytes in tests/lib/filelist.py, too. (clumens) +- Make anaconda+python3+pocketlint work. (clumens) +- Start using our new shared pylint framework in anaconda. (clumens) +- Remove our extra pylint checkers. (clumens) +- Remove a duplicate libselinux-python3 requires. (clumens) +- Run makeupdates with Python 2 for now (mkolman) +- Don't use the _safechars private property (#1014220) (mkolman) +- Make sure directory size is returned as int (#1014220) (mkolman) +- Only warn about missing yum-utils (#1014220) (mkolman) +- Make sure set_system_time() gets an integer (#1014220) (mkolman) +- Make sure the column number in TUI is an integer (#1141242) (mkolman) +- Python 3 compatible sorting fixes (#1014220) (mkolman) +- Make version comparison Python 3 compatible (#1014220) (mkolman) +- Don't apply numeric comparison on None (#1141242) (mkolman) +- Avoid comparing None to an integer (#1141242) (mkolman) +- Handle urllib split (#1014220) (mkolman) +- Don't try to decode strings (#1014220) (mkolman) +- Rename function attributes (#1014220) (mkolman) +- Replace raw_input() with input() (#1014220) (mkolman) +- Make iterators and their usage Python 3 compatible (#1014220) (mkolman) +- Convert Python 2 metaclass magic to Python 3 metaclass magic (#1014220) + (mkolman) +- Make the raise syntax Python 3 compatible (#1014220) (mkolman) +- Python 3 no longer does tuple parameter unpacking (#1014220) (mkolman) +- Make isys Python 3 compatible (#1014220) (mkolman) +- Set a correct mode for the tempfile (#1014220) (mkolman) +- Python 3 temp files no longer reflect external changes (#1014220) (mkolman) +- Make print usage Python 3 compatible (#1014220) (mkolman) +- Rename the warnings spoke to warnings_spoke (#1014220) (mkolman) +- Replace list comprehension with for at class level (mkolman) +- Make gettext usage Python 3 compatible (#1014220) (mkolman) +- Do not open tty5 for writing in the "a" mode (#1014220) (vpodzime) +- Do not use pykickstart's RepoData as a key in a dict (#1014220) (vpodzime) +- Do not run repo attrs' checks if they are not set up yet (#1014220) + (vpodzime) +- Don't depend on side effects of map() (#1141242) (mkolman) +- Don't use exceptions' message attribute (#1014220) (vpodzime) +- Addapt to string type changes (#1014220) (mkolman) +- Handle modules returning bytes in Python 3 (#1014220) (mkolman) +- Add and use function that makes sure we work with strings (#1014220) + (vpodzime) +- Handle modules requiring different string types in Python 3 (#1014220) + (mkolman) +- Remove sitecustomize (#1014220) (mkolman) +- Make ASCII conversions Python compatible (#1014220) (mkolman) +- Remove "is Unicode" tests (#1014220) (mkolman) +- Fix ASCII conversion tests (#1014220) (mkolman) +- Return a string when calling a program (#1014220) (mkolman) +- Handle subprocess returning bytes (#1014220) (mkolman) +- Handle latin-1 strings in locale -a output (#1014220) (mkolman) +- Open the VNC password file for binary writing (#1014220) (mkolman) +- Update parse-kickstart for python3 (#1014220) (bcl) +- Update driver-updates for python3 (#1014220) (bcl) +- Update python-deps for python3 (#1014220) (bcl) +- Add a test for parse-kickstart (#1014220) (bcl) +- Make the import Python 3 compatible (#1014220) (mkolman) +- Change configparser and queue imports (#1014220) (mkolman) +- Remove imports from the __future__ (#1014220) (mkolman) +- Use the imp module directly (#1014220) (mkolman) +- Use Python 3 versions of Python dependencies (#1014220) (mkolman) +- Use /usr/bin/python3 in scripts (#1014220) (mkolman) +- Use Python 3 versions of nose and Pylint (#1014220) (mkolman) +- Build the Anaconda widgets for Python 3 (#1014220) (mkolman) +- Update makebumpver for python3 (#1014220) (bcl) +- Fix Kickstart installation without default gateway errors out (jkonecny) +- Fix results checking in a couple ks tests. (clumens) + +* Wed Jun 03 2015 Brian C. Lane - 23.9-1 +- Fix a usage typo in run_once_ks script. (sbueno+anaconda) +- Add kickstart tests for keyboard settings. (sbueno+anaconda) +- Add a kickstart test for lang settings. (sbueno+anaconda) +- Fix a %% call inside _(). (clumens) +- Convert ntp-pools.* to using the new kstest functions and autopart. (clumens) +- Fix up the expected output in parse-kickstart_test.py. (clumens) +- Fix a couple more pylint problems in the s390 code. (clumens) +- Use the adapted Timezone class for kickstart data (vpodzime) +- Add a kickstart test for processing NTP servers/pools configuration + (vpodzime) +- Show error on invalid username attempts in TUI. (#1171778) (sbueno+anaconda) +- Fix dracut reads ksdevice from missing os enviromnent (jkonecny) +- Run kickstart tests through an LMC-like program, not LMC itself. (clumens) +- Move common kickstart_test code out into its own functions.sh file. (clumens) +- Switch to using autopart in the kickstart tests. (clumens) +- Fix a couple pylint errors. (sbueno+anaconda) +- Make anaconda changes necessary for libblockdev s390 plugin. + (sbueno+anaconda) +- Add a kickstart test for lvm with percentage-based sizes. (dlehman) +- Add kickstart test for basic fixed-size lvm layout. (dlehman) +- Add a kickstart test to validate the default fstype. (dlehman) +- Add kickstart test to test bond interface creation (jkonecny) +- Add kickstart test to test vlan creation (jkonecny) +- Fix --device=link and --device not specified (#1085310) (rvykydal) +- Add kickstart test to test hostname (jkonecny) +- Add a /boot to tmpfs-fixed_size.ks. (clumens) +- Fix bad warning message when user set illegal IP (jkonecny) +- Fix bad check of illegal ip address (jkonecny) +- Add a simple tmpfs kickstart test (mkolman) +- Add a kickstart test for escrow packets and backup passphrases (dshea) +- Fix a typo that caused us to discard corrected target sizes. (#1211746) + (dlehman) +- Don't pass anything to ./configure. (dshea) +- Fix a pylint problem in parse-kickstart_test.py. (clumens) +- Fix 0 choice in Language and Storage in TUI mode (jkonecny) +- Update html documentation for new boot-options section (bcl) +- Convert boot-options to ReST and include it in the Sphinx documents. (bcl) + +* Fri May 15 2015 Brian C. Lane - 23.8-1 +- Clean up after processKickstart in parse-kickstart_test.py. (clumens) +- Add support to dnfpayload.py for addon NFS repos. (clumens) +- Fix IndexError: list index out of range (#1219004) (jkonecny) +- Fix a typo in proxy-kickstart.sh that was causing a test time out. (clumens) +- iSCSI Name Validation using regexes (sujith_pandel) +- Add kickstart tests for proxy usage. (dshea) +- In dracut, do not display a warning for network lines with just a hostname. + (clumens) +- Add transport adapters to support ftp and file fetching (dshea) +- Fix for "Kickstart installation fails..." (#1197960) (jkonecny) +- Allow passing kickstart tests to be run on the command line. (clumens) +- Automatically collect environment variables to be passed to ks tests. + (clumens) +- Use isinstance instead of type for doing type checks. (clumens) +- Remove yumpayload.py, its support files, and most references to yum. + (clumens) +- Fix the packages-and-group wildcard exclusion test (dshea) +- Set the GUI-selected environment in the ksdata (#1192100) (dshea) +- Don't crash if the disk model is None (#1215251) (dshea) +- Correct an error message in packages-and-groups-1.ks. (clumens) +- Switch from testing for emacs* to kacst*. (clumens) +- Tests that end in a traceback are failures, not successes. (clumens) +- Don't run run_report.sh from within run_kickstart_tests.sh. (clumens) +- If a kickstart test failed due to a traceback, display that. (clumens) +- Wrap device labels earlier (#1212586) (dshea) +- Remove the angle property from the device label (dshea) +- Get rid of the find button in the filter spoke. (dshea) +- Rearrange filter.glade (dshea) +- Fix errors in the vendor column renderers. (dshea) +- Fix some minor inconsistencies in filter.glade (dshea) +- Fix issues with advanced storage searching. (dshea) +- Remove duplicate entries from search combo boxes (dshea) +- Use named IDs for the filter type combo boxes. (dshea) +- Rearrange filter.glade the way glade wants it now (dshea) +- Add a reporting support script to kickstart tests. (clumens) +- Return a specific error code when a test times out. (clumens) +- Fix indentation in run_one_ks.sh. (clumens) +- Also remove all the fonts in the packages-and-groups-1 test. (clumens) +- Enable the basic-ftp and basic-ftp-yum kickstart tests. (clumens) +- Fix a typo in groups-and-envs-2.ks (clumens) +- Get NTP pools and servers from ksdata for the runtime config (vpodzime) +- Adapt to the new argument list for save_servers_to_config. (clumens) +- Remove the restriction that /boot be below 2TB for grub (#1082331) (dshea) +- Distinguish between NTP pools and servers in GUI (vpodzime) +- Add support for chrony pool directive (mlichvar) +- Add a readme pointing to the documentation (bcl) +- Sphinx docs - use source order (bcl) +- Add html documentation for Anaconda v23.7 (bcl) +- Place html docs under ./docs/html/ (bcl) +- Configure proxy settings for dnf payload (#1211122) (bcl) +- Change online action to change (bcl) +- Check for images/install.img first for netboot (bcl) +- Ignore addon and anaconda sections in handle-sshpw (bcl) +- Ignore %%anaconda section in parse-kickstart (bcl) +- Change of label in iscsi storage spoke (jkonecny) + +* Wed Apr 22 2015 Brian C. Lane - 23.7-1 +- Fix doReqPartition import from autopart (bcl) +- Add support for reboot --kexec kickstart command (bcl) +- Add inst.kexec and --kexec support to reboot with kexec (bcl) +- Add setup_kexec method to prepare the system for a reboot with kexec (bcl) +- Add kickstart %%pre-install section support (bcl) +- Remove the custom help button from the toolbar (bcl) +- Use multiple streams for zRAM instead of multiple devices (vpodzime) +- iscsi: pass rd.* options of devices to be mouted in dracut (#1192398) + (rvykydal) +- Remove the unused productName import from custom_storage_helpers.py. + (clumens) +- Remove the old custom partitioning help dialog (mkolman) +- Implement the new reqpart command. (clumens) +- Sort disks by name when checking disk selection (vpodzime) +- Set both .format's and .originalFormat's passphrase on unlock (vpodzime) +- Make the Encrypt checkbox insensitive for encrypted non-BTRFS devices + (#1210254) (vpodzime) +- Check for Gtk before importing escape_markup (bcl) +- If the network is disabled, also disable the network part of the source + spoke. (#1192104) (clumens) +- Add handling for unusable storage configurations. (dlehman) +- Allow markup in the label/message of DetailedErrorDialog. (dlehman) +- Allow passing an optional button list to showDetailedError. (dlehman) +- Allow kwargs with gtk_action_wait, gtk_action_nowait decorators. (dlehman) +- Fix makeupdates handling of Release: (bcl) +- Make sure we unmount the path we mounted (bcl) +- Fix up one more back_clicked reference that got missed. (clumens) +- Don't unconditionally set ksdata.lang.seen to True (#1209927) (mkolman) +- Reset the back_clicked flag if we stay on the Storage spoke (#1210003) + (vpodzime) +- Mark the back_clicked attribute of the Storage spoke as private (vpodzime) +- TUI pwpolicy setup was supposed to be in __init__ not refresh (#1208607) + (bcl) +- Preserve the order of boot args added by kickstart. (clumens) +- Revert "allow /boot on btrfs subvol or filesystem" (bcl) +- Connect scroll adjustments in the right class (#1206472) (dshea) + +* Thu Apr 02 2015 Brian C. Lane - 23.6-1 +- Enforce sane disk selections. (dlehman) +- Add a test for parse-kickstart (bcl) +- Add --tmpdir to parse-kickstart for testing (bcl) +- Use the correct format for IPMI messages. (clumens) +- Do not use min_luks_entropy with pre-existing devices (#1206101) (dshea) +- Remove the dnf cache directory when resetting the repo (dshea) +- Do not add separators to the addon list when not needed (dshea) +- Only use the instclass environment if it actually exists. (dshea) + +* Fri Mar 27 2015 Brian C. Lane - 23.5-1 +- Mock external module dependencies for readthedocs (bcl) +- Generate the pyanaconda module documentation (bcl) +- Reformat kickstart.rst using better ReST markup (bcl) +- Add some deprecation-related false positives. (clumens) +- Add Sphinx documentation support (bcl) +- Add documentation on %%anaconda kickstart command (bcl) +- Prevent Storage spoke Done button method from multiple launch (jkonecny) +- Prevent spokes from being exited more times. (jkonecny) +- Only depend on pygobject3-base in anaconda-core (#1204469) (mkolman) +- Use proxy when configured for the base repo (#1196953) (sjenning) +- Assume UTC if setting the system time without a timezone (#1200444) (dshea) +- Add boolean as return to ThreadManager.wait (jkonecny) +- Make sure LANG is always set to something (#1201896) (dshea) +- Fix pylint/translation issues from the pwpolicy patches. (clumens) + +* Fri Mar 20 2015 Brian C. Lane - 23.4-1 +- Clean out the mock chroot before attempting to run the rest of the test. + (clumens) +- Implement %%anaconda kickstart section for pwpolicy (bcl) +- Add pwpolicy support to TUI interface (bcl) +- Add pwpolicy for the LUKS passphrase dialog. (bcl) +- Add pwpolicy for the user spoke. (bcl) +- Use pwpolicy for the root password spoke. (bcl) +- Add the text for weak passwords to constants (bcl) +- Add tests with an FTP instrepo (dshea) +- Add kickstart tests for an NFS instrepo and addon repos. (dshea) +- Handle /boot on btrfs for live (#1200539) (bcl) +- rpmostreepayload: write storage config after shared var is mounted (#1203234) + (rvykydal) +- Tweak tmux configuration file (jkonecny) +- Remove --device= from the new kickstart tests. (clumens) +- Add more kickstart-based packaging tests. (clumens) +- Fix enlightbox call in ZFCPDialog. (#1151144) (sbueno+anaconda) +- fix crash with bare 'inst.virtiolog' in boot args (wwoods) +- Do not attempt to set None as a warning (dshea) +- fix inst.ks.sendmac for static ip=XXX (#826657) (wwoods) + +* Fri Mar 13 2015 Brian C. Lane - 23.3-1 +- Only insert strings into the environment (#1201411) (dshea) +- Fix the rescue kernel version list in writeBootLoader (#1201429) (dshea) +- Missing local variable check (omerusta) +- Fix the handling of nfs:// URLs. (dshea) +- Add glob support for the -a/--add option in makeupdates (mkolman) +- White Space fixes (omerusta) +- Put all mock results into the top-level source dir. (clumens) +- Merge pull request #31 from dcantrell/master (david.l.cantrell) +- Require newt-python in anaconda-core (dshea) +- Make merge-pr executable (dshea) +- Display an error for exceptions during GUI setup (dshea) +- Remove unused invisible char properties (dshea) +- Add a check for invisible_char validity (dshea) +- Connect viewport adjustments to child focus adjustments (#1192155) (dshea) +- Support '%%packages --multilib' in dnfpayload.py (#1192628) (dcantrell) + +* Fri Mar 06 2015 Brian C. Lane - 23.2-1 +- Add rc-release target (bcl) +- Change --skip-tx to --skip-zanata in scratch-bumpver (bcl) +- Add --newrelease to makebumpver (bcl) +- Improve the addon repo name collision code (#1125322) (bcl) +- Fix the import of mountExistingSystem (vpodzime) +- Fix import error in anaconda-cleanup. (sbueno+anaconda) +- Use the new static method to get possible PE sizes (vpodzime) +- Try using the global LUKS passphrase if none is given for LV/part (#1196112) + (vpodzime) +- Fix the help button mnemonic display on spokes (dshea) +- Only set the hub message if the message has changed (dshea) +- Wrap the info bar in a GtkRevealer (dshea) +- Add links to clickable warning and error messages. (dshea) +- Add a test to look for clickable messages that aren't clickable enough. + (dshea) +- Increment the widgets version number (dshea) +- Allow markup and links in the info bar. (dshea) +- Add more links to gtk-doc comments (dshea) +- Handle New_Repository name collision source spoke (#1125322) (bcl) +- Fix a bad usage of execWithRedirect (#1197290) (dshea) +- Have to be root to delete /var/tmp/kstest-* on the remote machines. (clumens) +- Use the LUKS device for swap in fstab (#1196200) (vpodzime) +- Clear TUI source spoke errors that may have been leftover from a prior + attempt. (#1192259) (sbueno+anaconda) + +* Fri Feb 27 2015 Brian C. Lane - 23.1-1 +- Make sure python2 dnf is required (bcl) +- Fix pykickstart requirement. (clumens) +- Extract xattrs from tar payload (#1195462) (bcl) +- Add a script to rebase and merge pull requests (dshea) +- Update translation documentation for Zanata (bcl) +- Switch translation support to fedora.zanata.org (bcl) +- install.py: fix the 'is team device' check (awilliam) +- Explain why Anaconda requires rpm-devel and libarchive-devel during build + (mkolman) +- Revert "Switch to temporary transifex branch" (bcl) +- Revert "makebumpver needs to know about anaconda-1 transifex name" (bcl) +- Commit 23.0 anaconda.pot file (bcl) +- Rename queue.py to queuefactory.py. (clumens) +- Remove references to old_tests, which no longer exists. (clumens) +- Fix package and group removing with the dnf payload. (clumens) +- Don't try to run new-kernel-pkg if it doesn't exist. (clumens) + +* Fri Feb 20 2015 Brian C. Lane - 23.0-1 +- Remove unused imports (dshea) +- Check for unused imports in __init__ files (dshea) +- Remove timestamp-based version support. (dshea) +- Add test lib methods to check regexes (dshea) +- Cleanup BuildRequires (mkolman) +- Remove obsolete imports. (amulhern) +- Make print statement print output w/out surrounding parentheses. (amulhern) +- Remove an unused import (dshea) +- rpmostreepayload: Honor noverifyssl (walters) +- typo: packaging: Don't vary name of "verified" (walters) +- Disable the metacity mouse-button-modifier setting (dshea) +- Fix completion setting in TUI language spoke. (#1192230) (sbueno+anaconda) +- Remove the pylint false positives for the GLib module (dshea) +- Use ExtendAction for --ignore flag (amulhern) +- Use a simple ExtendAction for add_rpms option. (amulhern) +- Fix log message formating (mkolman) +- Don't clear nonexistent DNF package download location (#1193121) (mkolman) diff --git a/spec_files/anaconda/bazzite.patch b/spec_files/anaconda/bazzite.patch new file mode 100644 index 0000000000..6c8cd8d097 --- /dev/null +++ b/spec_files/anaconda/bazzite.patch @@ -0,0 +1,35 @@ +diff -Naur a/pyanaconda/display.py b/pyanaconda/display.py +--- a/pyanaconda/display.py ++++ b/pyanaconda/display.py +@@ -237,6 +237,14 @@ + :param str runres: a resolution specification string + :param gui_mode: an Anaconda display mode + """ ++ ++ # Get product name ++ with open("/sys/devices/virtual/dmi/id/product_name") as f: ++ dmi = f.read().strip() ++ ++ if "Jupiter" in dmi or "Galileo" in dmi: ++ runres = "1280x800" ++ + if runres and gui_mode and not flags.usevnc: + set_x_resolution(runres) + +diff -Naur a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py +--- a/pyanaconda/ui/gui/__init__.py ++++ b/pyanaconda/ui/gui/__init__.py +@@ -576,6 +576,13 @@ + if not primary_monitor: + return + ++ with open("/sys/devices/virtual/dmi/id/product_name") as f: ++ dmi = f.read().strip() ++ ++ if "Jupiter" in dmi or "Galileo" in dmi: ++ util.setenv("GDK_SCALE", "1") ++ return ++ + monitor_geometry = primary_monitor.get_geometry() + monitor_scale = primary_monitor.get_scale_factor() + monitor_width_mm = primary_monitor.get_width_mm() From 5bd636a1c91129930297acb34f38b920ed104578 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:22:32 -0700 Subject: [PATCH 39/58] chore: Flip location of version in PRETTY_NAME --- .../desktop/shared/usr/libexec/containerbuild/image-info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system_files/desktop/shared/usr/libexec/containerbuild/image-info b/system_files/desktop/shared/usr/libexec/containerbuild/image-info index 295a7064fa..81bbeb5de3 100755 --- a/system_files/desktop/shared/usr/libexec/containerbuild/image-info +++ b/system_files/desktop/shared/usr/libexec/containerbuild/image-info @@ -44,7 +44,7 @@ EOF # OS Release File sed -i "s/^VARIANT_ID=.*/VARIANT_ID=$IMAGE_NAME/" /usr/lib/os-release -sed -i "s/^PRETTY_NAME=.*/PRETTY_NAME=\"Bazzite (FROM Fedora ${BASE_IMAGE_NAME^} $FEDORA_MAJOR_VERSION)\"/" /usr/lib/os-release +sed -i "s/^PRETTY_NAME=.*/PRETTY_NAME=\"Bazzite $FEDORA_MAJOR_VERSION (FROM Fedora ${BASE_IMAGE_NAME^})\"/" /usr/lib/os-release sed -i "s/^NAME=.*/NAME=\"$IMAGE_PRETTY_NAME\"/" /usr/lib/os-release sed -i "s|^HOME_URL=.*|HOME_URL=\"$HOME_URL\"|" /usr/lib/os-release sed -i "s|^DOCUMENTATION_URL=.*|DOCUMENTATION_URL=\"$DOCUMENTATION_URL\"|" /usr/lib/os-release From 044c2e8079a10178cae1d7bbcfbd08842be23a1f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:25:18 -0700 Subject: [PATCH 40/58] chore: Update gamescope --- ...8dea137d2cedd4cf71fede560feb2ad3ffc5.patch | 35 - spec_files/gamescope/gamescope.spec | 4 +- spec_files/gamescope/upstream.patch | 1201 +++++++++++++++++ 3 files changed, 1203 insertions(+), 37 deletions(-) delete mode 100644 spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch create mode 100644 spec_files/gamescope/upstream.patch diff --git a/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch b/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch deleted file mode 100644 index 46db552f88..0000000000 --- a/spec_files/gamescope/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch +++ /dev/null @@ -1,35 +0,0 @@ -From e31b8dea137d2cedd4cf71fede560feb2ad3ffc5 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Fri, 2 Aug 2024 21:11:11 +0100 -Subject: [PATCH] DRMBackend: Fix mode fallback on connector changes - ---- - src/Backends/DRMBackend.cpp | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 2712994ef..ee2cbd3d9 100644 ---- a/src/Backends/DRMBackend.cpp -+++ b/src/Backends/DRMBackend.cpp -@@ -1040,6 +1040,9 @@ static bool setup_best_connector(struct drm_t *drm, bool force, bool initial) - return false; - } - -+ // Don't allow rollback of mode_id after connector change -+ drm->current.mode_id = drm->pending.mode_id; -+ - const struct wlserver_output_info wlserver_output_info = { - .description = description, - .phys_width = (int) best->GetModeConnector()->mmWidth, -@@ -2876,6 +2879,11 @@ bool drm_set_connector( struct drm_t *drm, gamescope::CDRMConnector *conn ) - return false; - } - -+ // If we are changing connector, zero out the current and pending mode IDs. -+ // So we don't try to use one mode from the old connector on the new one if we roll back. -+ drm->pending.mode_id = nullptr; -+ drm->current.mode_id = nullptr; -+ - drm->pConnector = conn; - drm->needs_modeset = true; - diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index ee1eebf9ad..d2c69a5703 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -26,8 +26,8 @@ Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch # https://github.com/ValveSoftware/gamescope/pull/1444 Patch5: 1444.patch -# https://github.com/ValveSoftware/gamescope/commit/e31b8dea137d2cedd4cf71fede560feb2ad3ffc5 -Patch6: e31b8dea137d2cedd4cf71fede560feb2ad3ffc5.patch +# https://github.com/ValveSoftware/gamescope +Patch6: upstream.patch BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build diff --git a/spec_files/gamescope/upstream.patch b/spec_files/gamescope/upstream.patch new file mode 100644 index 0000000000..1b1b682341 --- /dev/null +++ b/spec_files/gamescope/upstream.patch @@ -0,0 +1,1201 @@ +From 7f5c30200408ea7207d077ea30d8f1068cf48053 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Wed, 31 Jul 2024 03:32:41 +0100 +Subject: [PATCH 1/8] wlserver: Filter wp_linux_drm_syncobj_manager_v1 if + explicit sync is disabled by convar + +--- + src/wlserver.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index 79b9c5c..c4bfb25 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -72,6 +72,10 @@ + + static LogScope wl_log("wlserver"); + ++using namespace std::literals; ++ ++extern gamescope::ConVar cv_drm_debug_disable_explicit_sync; ++ + //#define GAMESCOPE_SWAPCHAIN_DEBUG + + struct wlserver_t wlserver = { +@@ -1426,6 +1430,10 @@ void wlserver_set_output_info( const wlserver_output_info *info ) + static bool filter_global(const struct wl_client *client, const struct wl_global *global, void *data) + { + const struct wl_interface *iface = wl_global_get_interface(global); ++ ++ if ( cv_drm_debug_disable_explicit_sync && iface->name == "wp_linux_drm_syncobj_manager_v1"sv ) ++ return false; ++ + if (strcmp(iface->name, wl_output_interface.name) != 0) + return true; + +-- +2.45.2 + + +From cbf274b05b446a81d94c89d1137a808bcb89791d Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Wed, 31 Jul 2024 03:40:56 +0100 +Subject: [PATCH 2/8] wlserver: Add cv_drm_debug_syncobj_force_wait_on_commit + +--- + src/wlserver.cpp | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index c4bfb25..c69f068 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -180,6 +180,8 @@ static std::optional TimelinePointToEventFd( cons + } + } + ++gamescope::ConVar cv_drm_debug_syncobj_force_wait_on_commit( "drm_debug_syncobj_force_wait_on_commit", false ); ++ + std::optional PrepareCommit( struct wlr_surface *surf, struct wlr_buffer *buf ) + { + auto wl_surf = get_wl_surface_info( surf ); +@@ -194,6 +196,17 @@ std::optional PrepareCommit( struct wlr_surface *surf, struct wl + pSyncState->acquire_timeline, + pSyncState->acquire_point + }; ++ ++ if ( pSyncState && cv_drm_debug_syncobj_force_wait_on_commit ) ++ { ++ int ret = drmSyncobjTimelineWait( pSyncState->acquire_timeline->drm_fd, &pSyncState->acquire_timeline->handle, &pSyncState->acquire_point, 1, INT64_MAX, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, nullptr ); ++ if ( ret ) ++ { ++ wl_log.errorf( "drmSyncobjWait failed!" ); ++ return std::nullopt; ++ } ++ } ++ + std::optional oAcquireState = TimelinePointToEventFd( oAcquirePoint ); + std::optional oReleasePoint; + if ( pSyncState ) +-- +2.45.2 + + +From f35e1b38665fa236ed21731d9de208ee55e82c2c Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Wed, 31 Jul 2024 04:52:49 +0100 +Subject: [PATCH 3/8] wlserver, backend: Fix explicit sync release not + accounting for backend fb referencing + +--- + src/Backends/HeadlessBackend.cpp | 2 +- + src/Backends/OpenVRBackend.cpp | 93 +++++++++++++++++--------------- + src/Backends/SDLBackend.cpp | 2 +- + src/backend.cpp | 29 ++++++++-- + src/backend.h | 6 ++- + src/gamescope_shared.h | 10 ++++ + src/steamcompmgr.cpp | 15 ++++-- + src/wlserver.hpp | 9 ---- + 8 files changed, 103 insertions(+), 63 deletions(-) + +diff --git a/src/Backends/HeadlessBackend.cpp b/src/Backends/HeadlessBackend.cpp +index 787abda..d65a9b3 100644 +--- a/src/Backends/HeadlessBackend.cpp ++++ b/src/Backends/HeadlessBackend.cpp +@@ -178,7 +178,7 @@ namespace gamescope + + virtual OwningRc ImportDmabufToBackend( wlr_buffer *pBuffer, wlr_dmabuf_attributes *pDmaBuf ) override + { +- return nullptr; ++ return new CBaseBackendFb( pBuffer ); + } + + virtual bool UsesModifiers() const override +diff --git a/src/Backends/OpenVRBackend.cpp b/src/Backends/OpenVRBackend.cpp +index 79b05d1..6e0fbca 100644 +--- a/src/Backends/OpenVRBackend.cpp ++++ b/src/Backends/OpenVRBackend.cpp +@@ -654,55 +654,59 @@ namespace gamescope + + virtual OwningRc ImportDmabufToBackend( wlr_buffer *pBuffer, wlr_dmabuf_attributes *pDmaBuf ) override + { +- if ( !UsesModifiers() ) +- return nullptr; +- +- vr::DmabufAttributes_t dmabufAttributes = ++ if ( UsesModifiers() ) + { +- .unWidth = uint32_t( pDmaBuf->width ), +- .unHeight = uint32_t( pDmaBuf->height ), +- .unDepth = 1, +- .unMipLevels = 1, +- .unArrayLayers = 1, +- .unSampleCount = 1, +- .unFormat = pDmaBuf->format, +- .ulModifier = pDmaBuf->modifier, +- .unPlaneCount = uint32_t( pDmaBuf->n_planes ), +- .plane = ++ vr::DmabufAttributes_t dmabufAttributes = + { ++ .unWidth = uint32_t( pDmaBuf->width ), ++ .unHeight = uint32_t( pDmaBuf->height ), ++ .unDepth = 1, ++ .unMipLevels = 1, ++ .unArrayLayers = 1, ++ .unSampleCount = 1, ++ .unFormat = pDmaBuf->format, ++ .ulModifier = pDmaBuf->modifier, ++ .unPlaneCount = uint32_t( pDmaBuf->n_planes ), ++ .plane = + { +- .unOffset = pDmaBuf->offset[0], +- .unStride = pDmaBuf->stride[0], +- .nFd = pDmaBuf->fd[0], +- }, +- { +- .unOffset = pDmaBuf->offset[1], +- .unStride = pDmaBuf->stride[1], +- .nFd = pDmaBuf->fd[1], +- }, +- { +- .unOffset = pDmaBuf->offset[2], +- .unStride = pDmaBuf->stride[2], +- .nFd = pDmaBuf->fd[2], +- }, +- { +- .unOffset = pDmaBuf->offset[3], +- .unStride = pDmaBuf->stride[3], +- .nFd = pDmaBuf->fd[3], +- }, +- } +- }; ++ { ++ .unOffset = pDmaBuf->offset[0], ++ .unStride = pDmaBuf->stride[0], ++ .nFd = pDmaBuf->fd[0], ++ }, ++ { ++ .unOffset = pDmaBuf->offset[1], ++ .unStride = pDmaBuf->stride[1], ++ .nFd = pDmaBuf->fd[1], ++ }, ++ { ++ .unOffset = pDmaBuf->offset[2], ++ .unStride = pDmaBuf->stride[2], ++ .nFd = pDmaBuf->fd[2], ++ }, ++ { ++ .unOffset = pDmaBuf->offset[3], ++ .unStride = pDmaBuf->stride[3], ++ .nFd = pDmaBuf->fd[3], ++ }, ++ } ++ }; + +- vr::SharedTextureHandle_t ulSharedHandle = 0; +- if ( !m_pIPCResourceManager->ImportDmabuf( vr::VRApplication_Overlay, &dmabufAttributes, &ulSharedHandle ) ) +- return nullptr; +- assert( ulSharedHandle != 0 ); ++ vr::SharedTextureHandle_t ulSharedHandle = 0; ++ if ( !m_pIPCResourceManager->ImportDmabuf( vr::VRApplication_Overlay, &dmabufAttributes, &ulSharedHandle ) ) ++ return nullptr; ++ assert( ulSharedHandle != 0 ); + +- // Take the first reference! +- if ( !m_pIPCResourceManager->RefResource( ulSharedHandle, nullptr ) ) +- return nullptr; ++ // Take the first reference! ++ if ( !m_pIPCResourceManager->RefResource( ulSharedHandle, nullptr ) ) ++ return nullptr; + +- return new COpenVRFb{ this, ulSharedHandle, pBuffer }; ++ return new COpenVRFb{ this, ulSharedHandle, pBuffer }; ++ } ++ else ++ { ++ return new COpenVRFb{ this, 0, pBuffer }; ++ } + } + + virtual bool UsesModifiers() const override +@@ -1169,7 +1173,8 @@ namespace gamescope + + COpenVRFb::~COpenVRFb() + { +- m_pBackend->GetIPCResourceManager()->UnrefResource( m_ulHandle ); ++ if ( m_ulHandle != 0 ) ++ m_pBackend->GetIPCResourceManager()->UnrefResource( m_ulHandle ); + m_ulHandle = 0; + } + +diff --git a/src/Backends/SDLBackend.cpp b/src/Backends/SDLBackend.cpp +index e508789..df0b356 100644 +--- a/src/Backends/SDLBackend.cpp ++++ b/src/Backends/SDLBackend.cpp +@@ -397,7 +397,7 @@ namespace gamescope + + OwningRc CSDLBackend::ImportDmabufToBackend( wlr_buffer *pBuffer, wlr_dmabuf_attributes *pDmaBuf ) + { +- return nullptr; ++ return new CBaseBackendFb( pBuffer ); + } + + bool CSDLBackend::UsesModifiers() const +diff --git a/src/backend.cpp b/src/backend.cpp +index 91ad0ef..e625d8d 100644 +--- a/src/backend.cpp ++++ b/src/backend.cpp +@@ -75,16 +75,37 @@ namespace gamescope + uint32_t CBaseBackendFb::DecRef() + { + wlr_buffer *pClientBuffer = m_pClientBuffer; ++ ++ std::optional oPoint = std::move( m_oPoint ); ++ m_oPoint = std::nullopt; ++ + uint32_t uRefCount = IBackendFb::DecRef(); +- if ( pClientBuffer && !uRefCount ) ++ if ( uRefCount ) + { +- wlserver_lock(); +- wlr_buffer_unlock( pClientBuffer ); +- wlserver_unlock(); ++ // TODO: The pulling out and re-assignment could be made better here ++ // Perhaps if we had a better way of knowing if the object was destroyed. ++ m_oPoint = oPoint; ++ } ++ else ++ { ++ if ( pClientBuffer || oPoint ) ++ { ++ wlserver_lock(); ++ if ( pClientBuffer ) ++ wlr_buffer_unlock( pClientBuffer ); ++ if ( oPoint ) ++ oPoint->Release(); ++ wlserver_unlock(); ++ } + } + return uRefCount; + } + ++ void CBaseBackendFb::SetReleasePoint( const GamescopeTimelinePoint &point ) ++ { ++ m_oPoint = point; ++ } ++ + ///////////////// + // CBaseBackend + ///////////////// +diff --git a/src/backend.h b/src/backend.h +index 85783c9..6c86349 100644 +--- a/src/backend.h ++++ b/src/backend.h +@@ -145,7 +145,8 @@ namespace gamescope + + class IBackendFb : public IRcObject + { +- // Dummy ++ public: ++ virtual void SetReleasePoint( const GamescopeTimelinePoint &point ) = 0; + }; + + class CBaseBackendFb : public IBackendFb +@@ -157,8 +158,11 @@ namespace gamescope + uint32_t IncRef() override; + uint32_t DecRef() override; + ++ void SetReleasePoint( const GamescopeTimelinePoint &point ) override; ++ + private: + wlr_buffer *m_pClientBuffer = nullptr; ++ std::optional m_oPoint; + }; + + class IBackend +diff --git a/src/gamescope_shared.h b/src/gamescope_shared.h +index 60e3829..863b03f 100644 +--- a/src/gamescope_shared.h ++++ b/src/gamescope_shared.h +@@ -1,5 +1,7 @@ + #pragma once + ++#include ++ + namespace gamescope + { + class BackendBlob; +@@ -62,6 +64,14 @@ enum GamescopePanelOrientation + GAMESCOPE_PANEL_ORIENTATION_AUTO, + }; + ++struct GamescopeTimelinePoint ++{ ++ struct wlr_drm_syncobj_timeline *pTimeline = nullptr; ++ uint64_t ulPoint = 0; ++ ++ void Release(); ++}; ++ + // Disable partial composition for now until we get + // composite priorities working in libliftoff + also + // use the proper libliftoff composite plane system. +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 4216555..eef2f45 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -1207,7 +1207,7 @@ static steamcompmgr_win_t * find_win( xwayland_ctx_t *ctx, struct wlr_surface *s + static gamescope::CBufferMemoizer s_BufferMemos; + + static gamescope::Rc +-import_commit ( steamcompmgr_win_t *w, struct wlr_surface *surf, struct wlr_buffer *buf, bool async, std::shared_ptr swapchain_feedback, std::vector presentation_feedbacks, std::optional present_id, uint64_t desired_present_time, bool fifo ) ++import_commit ( steamcompmgr_win_t *w, struct wlr_surface *surf, struct wlr_buffer *buf, bool async, std::shared_ptr swapchain_feedback, std::vector presentation_feedbacks, std::optional present_id, uint64_t desired_present_time, bool fifo, std::optional oReleasePoint ) + { + gamescope::Rc commit = new commit_t; + +@@ -1225,6 +1225,13 @@ import_commit ( steamcompmgr_win_t *w, struct wlr_surface *surf, struct wlr_buff + + if ( gamescope::OwningRc pTexture = s_BufferMemos.LookupVulkanTexture( buf ) ) + { ++ if ( oReleasePoint ) ++ { ++ if ( gamescope::IBackendFb *pBackendFb = pTexture->GetBackendFb() ) ++ { ++ pBackendFb->SetReleasePoint( *oReleasePoint ); ++ } ++ } + // Going from OwningRc -> Rc now. + commit->vulkanTex = pTexture; + return commit; +@@ -1236,6 +1243,9 @@ import_commit ( steamcompmgr_win_t *w, struct wlr_surface *surf, struct wlr_buff + { + pBackendFb = GetBackend()->ImportDmabufToBackend( buf, &dmabuf ); + } ++ ++ if ( pBackendFb && oReleasePoint ) ++ pBackendFb->SetReleasePoint( *oReleasePoint ); + gamescope::OwningRc pOwnedTexture = vulkan_create_texture_from_wlr_buffer( buf, std::move( pBackendFb ) ); + commit->vulkanTex = pOwnedTexture; + +@@ -6261,7 +6271,7 @@ void update_wayland_res(CommitDoneList_t *doneCommits, steamcompmgr_win_t *w, Re + return; + } + +- gamescope::Rc newCommit = import_commit( w, reslistentry.surf, buf, reslistentry.async, std::move(reslistentry.feedback), std::move(reslistentry.presentation_feedbacks), reslistentry.present_id, reslistentry.desired_present_time, reslistentry.fifo ); ++ gamescope::Rc newCommit = import_commit( w, reslistentry.surf, buf, reslistentry.async, std::move(reslistentry.feedback), std::move(reslistentry.presentation_feedbacks), reslistentry.present_id, reslistentry.desired_present_time, reslistentry.fifo, std::move( reslistentry.oReleasePoint ) ); + + int fence = -1; + if ( newCommit != nullptr ) +@@ -6299,7 +6309,6 @@ void update_wayland_res(CommitDoneList_t *doneCommits, steamcompmgr_win_t *w, Re + gpuvis_trace_printf( "pushing wait for commit %lu win %lx", newCommit->commitID, w->type == steamcompmgr_win_type_t::XWAYLAND ? w->xwayland().id : 0 ); + { + newCommit->SetFence( fence, mango_nudge, doneCommits ); +- newCommit->SetReleasePoint( reslistentry.oReleasePoint ); + if ( bKnownReady ) + newCommit->Signal(); + else +diff --git a/src/wlserver.hpp b/src/wlserver.hpp +index ec7809c..7a8c155 100644 +--- a/src/wlserver.hpp ++++ b/src/wlserver.hpp +@@ -40,15 +40,6 @@ struct wlserver_vk_swapchain_feedback + std::shared_ptr hdr_metadata_blob; + }; + +- +-struct GamescopeTimelinePoint +-{ +- struct wlr_drm_syncobj_timeline *pTimeline = nullptr; +- uint64_t ulPoint = 0; +- +- void Release(); +-}; +- + struct GamescopeAcquireTimelineState + { + int32_t nEventFd = -1; +-- +2.45.2 + + +From 8e62848d76fac3cb3316a39bfb182fe03980c141 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 03:51:18 +0100 +Subject: [PATCH 4/8] log: Create convars to control log level + +--- + src/Apps/gamescopereaper.cpp | 1 + + src/Backends/DRMBackend.cpp | 17 +++-- + src/Backends/WaylandBackend.cpp | 2 + + src/InputEmulation.cpp | 6 +- + src/convar.h | 4 +- + src/edid.cpp | 2 +- + src/log.cpp | 112 +++++++++++++++++++++++++------- + src/log.hpp | 44 ++++++++----- + src/meson.build | 17 +++-- + src/rendervulkan.cpp | 2 +- + src/steamcompmgr.cpp | 4 +- + src/wlserver.cpp | 2 +- + 12 files changed, 149 insertions(+), 64 deletions(-) + +diff --git a/src/Apps/gamescopereaper.cpp b/src/Apps/gamescopereaper.cpp +index 9e74937..0fd2c36 100644 +--- a/src/Apps/gamescopereaper.cpp ++++ b/src/Apps/gamescopereaper.cpp +@@ -3,6 +3,7 @@ + + #include + #include ++#include + + #include + #include +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index 24bbbf2..72bd1ec 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -539,8 +539,7 @@ extern GamescopePanelOrientation g_DesiredInternalOrientation; + + extern bool g_bForceDisableColorMgmt; + +-static LogScope drm_log("drm"); +-static LogScope drm_verbose_log("drm", LOG_SILENT); ++static LogScope drm_log( "drm" ); + + static std::unordered_map< std::string, std::string > pnps = {}; + +@@ -700,7 +699,7 @@ static void page_flip_handler(int fd, unsigned int frame, unsigned int sec, unsi + + // TODO: get the fbids_queued instance from data if we ever have more than one in flight + +- drm_verbose_log.debugf("page_flip_handler %" PRIu64, pCtx->ulPendingFlipCount); ++ drm_log.debugf("page_flip_handler %" PRIu64, pCtx->ulPendingFlipCount); + gpuvis_trace_printf("page_flip_handler %" PRIu64, pCtx->ulPendingFlipCount); + + { +@@ -1423,7 +1422,7 @@ gamescope::OwningRc drm_fbid_from_dmabuf( struct drm_t *d + + if ( !wlr_drm_format_set_has( &drm->formats, dma_buf->format, dma_buf->modifier ) ) + { +- drm_verbose_log.errorf( "Cannot import FB to DRM: format 0x%" PRIX32 " and modifier 0x%" PRIX64 " not supported for scan-out", dma_buf->format, dma_buf->modifier ); ++ drm_log.errorf( "Cannot import FB to DRM: format 0x%" PRIX32 " and modifier 0x%" PRIX64 " not supported for scan-out", dma_buf->format, dma_buf->modifier ); + return nullptr; + } + +@@ -1463,7 +1462,7 @@ gamescope::OwningRc drm_fbid_from_dmabuf( struct drm_t *d + } + } + +- drm_verbose_log.debugf("make fbid %u", fb_id); ++ drm_log.debugf("make fbid %u", fb_id); + + pBackendFb = new gamescope::CDRMFb( fb_id, buf ); + +@@ -2369,7 +2368,7 @@ drm_prepare_liftoff( struct drm_t *drm, const struct FrameInfo_t *frameInfo, boo + + if ( pDrmFb == nullptr ) + { +- drm_verbose_log.errorf("drm_prepare_liftoff: layer %d has no FB", i ); ++ drm_log.debugf("drm_prepare_liftoff: layer %d has no FB", i ); + return -EINVAL; + } + +@@ -2575,9 +2574,9 @@ drm_prepare_liftoff( struct drm_t *drm, const struct FrameInfo_t *frameInfo, boo + } + + if ( ret == 0 ) +- drm_verbose_log.debugf( "can drm present %i layers", frameInfo->layerCount ); ++ drm_log.debugf( "can drm present %i layers", frameInfo->layerCount ); + else +- drm_verbose_log.debugf( "can NOT drm present %i layers", frameInfo->layerCount ); ++ drm_log.debugf( "can NOT drm present %i layers", frameInfo->layerCount ); + + return ret; + } +@@ -3654,7 +3653,7 @@ namespace gamescope + m_uNextPresentCtx = ( m_uNextPresentCtx + 1 ) % 3; + m_PresentCtxs[uCurrentPresentCtx].ulPendingFlipCount = m_PresentFeedback.m_uQueuedPresents; + +- drm_verbose_log.debugf("flip commit %" PRIu64, (uint64_t)m_PresentFeedback.m_uQueuedPresents); ++ drm_log.debugf("flip commit %" PRIu64, (uint64_t)m_PresentFeedback.m_uQueuedPresents); + gpuvis_trace_printf( "flip commit %" PRIu64, (uint64_t)m_PresentFeedback.m_uQueuedPresents ); + + ret = drmModeAtomicCommit(drm->fd, drm->req, drm->flags, &m_PresentCtxs[uCurrentPresentCtx] ); +diff --git a/src/Backends/WaylandBackend.cpp b/src/Backends/WaylandBackend.cpp +index cc76f62..bac1d7d 100644 +--- a/src/Backends/WaylandBackend.cpp ++++ b/src/Backends/WaylandBackend.cpp +@@ -790,6 +790,8 @@ namespace gamescope + assert( m_pHostBuffer ); + assert( m_pHostBuffer == pBuffer ); + ++ xdg_log.debugf( "buffer_release: %p", pBuffer ); ++ + OnCompositorRelease(); + } + +diff --git a/src/InputEmulation.cpp b/src/InputEmulation.cpp +index 7a26868..460d0b4 100644 +--- a/src/InputEmulation.cpp ++++ b/src/InputEmulation.cpp +@@ -1,12 +1,14 @@ + #if HAVE_LIBEIS + + #include +-#include ++ ++#include ++#include + + #include "InputEmulation.h" + #include "wlserver.hpp" + +-static LogScope gamescope_ei("gamescope-ei"); ++static LogScope gamescope_ei("gamescope_ei"); + + namespace gamescope + { +diff --git a/src/convar.h b/src/convar.h +index f2a0485..0bcdcff 100644 +--- a/src/convar.h ++++ b/src/convar.h +@@ -129,7 +129,7 @@ namespace gamescope + template + class ConVar : public ConCommand + { +- using ConVarCallbackFunc = std::function; ++ using ConVarCallbackFunc = std::function &)>; + public: + ConVar( std::string_view pszName, T defaultValue = T{}, std::string_view pszDescription = "", ConVarCallbackFunc func = nullptr, bool bRunCallbackAtStartup = false ) + : ConCommand( pszName, pszDescription, [this]( std::span pArgs ){ this->InvokeFunc( pArgs ); } ) +@@ -160,7 +160,7 @@ namespace gamescope + if ( !m_bInCallback && m_Callback ) + { + m_bInCallback = true; +- m_Callback(); ++ m_Callback( *this ); + m_bInCallback = false; + } + } +diff --git a/src/edid.cpp b/src/edid.cpp +index 03e5de1..6c01813 100644 +--- a/src/edid.cpp ++++ b/src/edid.cpp +@@ -15,7 +15,7 @@ extern "C" + #include "libdisplay-info/cta.h" + } + +-static LogScope edid_log("josh edid"); ++static LogScope edid_log("edid"); + + namespace gamescope + { +diff --git a/src/log.cpp b/src/log.cpp +index f5fd828..50e5bb4 100644 +--- a/src/log.cpp ++++ b/src/log.cpp +@@ -1,29 +1,16 @@ +-#include +-#include +-#include +-#include ++#include ++#include ++#include ++#include + +-#include ++#include + + #include "Utils/Process.h" + #include "Utils/Defer.h" ++#include "convar.h" + #include "log.hpp" + +-LogScope::LogScope(const char *name) { +- this->name = name; +- this->priority = LOG_DEBUG; +-} +- +-LogScope::LogScope(const char *name, enum LogPriority priority) { +- this->name = name; +- this->priority = priority; +-} +- +-bool LogScope::has(enum LogPriority priority) { +- return priority <= this->priority; +-} +- +-static const char *GetLogName( LogPriority ePriority ) ++static constexpr std::string_view GetLogPriorityText( LogPriority ePriority ) + { + switch ( ePriority ) + { +@@ -36,10 +23,80 @@ static const char *GetLogName( LogPriority ePriority ) + } + } + +-void LogScope::vlogf(enum LogPriority priority, const char *fmt, va_list args) { +- if (!this->has(priority)) { +- return; ++static constexpr std::string_view GetLogName( LogPriority ePriority ) ++{ ++ switch ( ePriority ) ++ { ++ case LOG_SILENT: return "silent"; ++ case LOG_ERROR: return "error"; ++ case LOG_WARNING: return "warning"; ++ case LOG_DEBUG: return "debug"; ++ default: ++ case LOG_INFO: return "info"; + } ++} ++ ++static constexpr LogPriority GetPriorityFromString( std::string_view psvScope ) ++{ ++ if ( psvScope == "silent" ) ++ return LOG_SILENT; ++ else if ( psvScope == "error" ) ++ return LOG_ERROR; ++ else if ( psvScope == "warning" ) ++ return LOG_WARNING; ++ else if ( psvScope == "debug" ) ++ return LOG_DEBUG; ++ else ++ return LOG_INFO; ++} ++ ++struct LogConVar_t ++{ ++ LogConVar_t( LogScope *pScope, std::string_view psvName, LogPriority eDefaultPriority ) ++ : sName{ std::format( "log_{}", psvName ) } ++ , sDescription{ std::format( "Max logging priority for the {} channel. Valid options are: [ silent, error, warning, debug, info ].", psvName ) } ++ , convar ++ { sName, std::string( GetLogName( eDefaultPriority ) ), sDescription, ++ [ pScope ]( gamescope::ConVar &cvar ) ++ { ++ pScope->SetPriority( GetPriorityFromString( cvar ) ); ++ }, ++ } ++ { ++ ++ } ++ std::string sName; ++ std::string sDescription; ++ ++ gamescope::ConVar convar; ++}; ++ ++LogScope::LogScope( std::string_view psvName, LogPriority eMaxPriority ) ++ : LogScope( psvName, psvName, eMaxPriority ) ++{ ++} ++ ++LogScope::LogScope( std::string_view psvName, std::string_view psvPrefix, LogPriority eMaxPriority ) ++ : m_psvName{ psvName } ++ , m_psvPrefix{ psvPrefix } ++ , m_eMaxPriority{ eMaxPriority } ++ , m_pEnableConVar{ std::make_unique( this, psvName, eMaxPriority ) } ++{ ++} ++ ++LogScope::~LogScope() ++{ ++} ++ ++bool LogScope::Enabled( LogPriority ePriority ) const ++{ ++ return ePriority <= m_eMaxPriority; ++} ++ ++void LogScope::vlogf(enum LogPriority priority, const char *fmt, va_list args) ++{ ++ if ( !Enabled( priority ) ) ++ return; + + char *buf = nullptr; + vasprintf(&buf, fmt, args); +@@ -48,10 +105,15 @@ void LogScope::vlogf(enum LogPriority priority, const char *fmt, va_list args) { + defer( free(buf); ); + + for (auto& listener : m_LoggingListeners) +- listener.second( priority, this->name, buf ); ++ listener.second( priority, m_psvPrefix, buf ); + ++ std::string_view psvLogName = GetLogPriorityText( priority ); + if ( bPrefixEnabled ) +- fprintf(stderr, "[%s] %s \e[0;37m%s:\e[0m %s\n", gamescope::Process::GetProcessName(), GetLogName( priority ), this->name, buf); ++ fprintf(stderr, "[%s] %.*s \e[0;37m%.*s:\e[0m %s\n", ++ gamescope::Process::GetProcessName(), ++ (int)psvLogName.size(), psvLogName.data(), ++ (int)this->m_psvPrefix.size(), this->m_psvPrefix.data(), ++ buf); + else + fprintf(stderr, "%s\n", buf); + } +diff --git a/src/log.hpp b/src/log.hpp +index 9dec0bb..5d28da6 100644 +--- a/src/log.hpp ++++ b/src/log.hpp +@@ -1,11 +1,11 @@ + #pragma once + +-#include +-#include +-#include +-#include +-#include ++#include ++#include ++ ++#include + #include ++#include + + #ifdef __GNUC__ + #define ATTRIB_PRINTF(start, end) __attribute__((format(printf, start, end))) +@@ -13,7 +13,8 @@ + #define ATTRIB_PRINTF(start, end) + #endif + +-enum LogPriority { ++enum LogPriority ++{ + LOG_SILENT, + LOG_ERROR, + LOG_WARNING, +@@ -21,17 +22,17 @@ enum LogPriority { + LOG_DEBUG, + }; + +-class LogScope { +- const char *name; +- enum LogPriority priority; +- +- bool has(enum LogPriority priority); +- void vprintf(enum LogPriority priority, const char *fmt, va_list args) ATTRIB_PRINTF(3, 0); +- void logf(enum LogPriority priority, const char *fmt, ...) ATTRIB_PRINTF(3, 4); ++struct LogConVar_t; + ++class LogScope ++{ + public: +- LogScope(const char *name); +- LogScope(const char *name, enum LogPriority priority); ++ LogScope( std::string_view psvName, LogPriority eMaxPriority = LOG_INFO ); ++ LogScope( std::string_view psvName, std::string_view psvPrefix, LogPriority eMaxPriority = LOG_INFO ); ++ ~LogScope(); ++ ++ bool Enabled( LogPriority ePriority ) const; ++ void SetPriority( LogPriority ePriority ) { m_eMaxPriority = ePriority; } + + void vlogf(enum LogPriority priority, const char *fmt, va_list args) ATTRIB_PRINTF(3, 0); + +@@ -44,6 +45,17 @@ public: + + bool bPrefixEnabled = true; + +- using LoggingListenerFunc = std::function; ++ using LoggingListenerFunc = std::function; + std::unordered_map m_LoggingListeners; ++ ++private: ++ void vprintf(enum LogPriority priority, const char *fmt, va_list args) ATTRIB_PRINTF(3, 0); ++ void logf(enum LogPriority priority, const char *fmt, ...) ATTRIB_PRINTF(3, 4); ++ ++ std::string_view m_psvName; ++ std::string_view m_psvPrefix; ++ ++ LogPriority m_eMaxPriority = LOG_INFO; ++ ++ std::unique_ptr m_pEnableConVar; + }; +diff --git a/src/meson.build b/src/meson.build +index 0090629..cbe4113 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -181,15 +181,22 @@ gamescope_version = vcs_tag( + cpp_args: gamescope_cpp_args, + ) + ++gamescope_core_src = [ ++ 'convar.cpp', ++ 'log.cpp', ++ 'Utils/Process.cpp', ++ 'Utils/Version.cpp', ++] ++ + if pipewire_dep.found() +- executable( 'gamescopestream', ['Apps/gamescopestream.cpp', 'log.cpp', 'Utils/Process.cpp'], gamescope_version, protocols_client_src, dependencies: [ pipewire_dep, dep_wayland, libdecor_dep ], install: true ) ++ executable( 'gamescopestream', ['Apps/gamescopestream.cpp'], gamescope_core_src, gamescope_version, protocols_client_src, dependencies: [ pipewire_dep, dep_wayland, libdecor_dep ], install: true ) + endif + +-executable('gamescopereaper', ['Utils/Process.cpp', 'Apps/gamescopereaper.cpp', 'log.cpp'], gamescope_version, install:true ) ++executable('gamescopereaper', ['Apps/gamescopereaper.cpp', gamescope_core_src], gamescope_version, install:true ) + + benchmark_dep = dependency('benchmark', required: get_option('benchmark'), disabler: true) +-executable('gamescope_color_microbench', ['color_bench.cpp', 'color_helpers.cpp'], dependencies:[benchmark_dep, glm_dep]) ++executable('gamescope_color_microbench', ['color_bench.cpp', 'color_helpers.cpp'], gamescope_core_src, dependencies:[benchmark_dep, glm_dep]) + +-executable('gamescope_color_tests', ['color_tests.cpp', 'color_helpers.cpp'], dependencies:[glm_dep]) ++executable('gamescope_color_tests', ['color_tests.cpp', 'color_helpers.cpp'], gamescope_core_src, dependencies:[glm_dep]) + +-executable('gamescopectl', ['Apps/gamescopectl.cpp', 'convar.cpp', 'log.cpp', 'Utils/Version.cpp', 'Utils/Process.cpp'], gamescope_version, protocols_client_src, dependencies: [dep_wayland], install:true ) ++executable('gamescopectl', ['Apps/gamescopectl.cpp'], gamescope_core_src, gamescope_version, protocols_client_src, dependencies: [dep_wayland], install:true ) +diff --git a/src/rendervulkan.cpp b/src/rendervulkan.cpp +index 123d46e..f144611 100644 +--- a/src/rendervulkan.cpp ++++ b/src/rendervulkan.cpp +@@ -368,7 +368,7 @@ bool CVulkanDevice::selectPhysDev(VkSurfaceKHR surface) + vk.GetPhysicalDeviceSurfaceSupportKHR( cphysDev, computeOnlyIndex, surface, &canPresent ); + if ( !canPresent ) + { +- vk_log.debugf( "physical device %04x:%04x compute queue doesn't support presenting on our surface, using graphics queue", deviceProperties.vendorID, deviceProperties.deviceID ); ++ vk_log.infof( "physical device %04x:%04x compute queue doesn't support presenting on our surface, using graphics queue", deviceProperties.vendorID, deviceProperties.deviceID ); + computeOnlyIndex = ~0u; + } + } +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index eef2f45..2912750 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -7048,9 +7048,9 @@ static std::vector s_uRelativeMouseFilteredAppids; + static gamescope::ConVar cv_mouse_relative_filter_appids( "mouse_relative_filter_appids", + "8400" /* Geometry Wars: Retro Evolved */, + "Comma separated appids to filter out using relative mouse mode for.", +-[]() ++[]( gamescope::ConVar &cvar ) + { +- std::vector sFilterAppids = gamescope::Split( cv_mouse_relative_filter_appids, "," ); ++ std::vector sFilterAppids = gamescope::Split( cvar, "," ); + std::vector uFilterAppids; + uFilterAppids.reserve( sFilterAppids.size() ); + for ( auto &sFilterAppid : sFilterAppids ) +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index c69f068..a2e1985 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -1230,7 +1230,7 @@ static const struct gamescope_private_interface gamescope_private_impl = { + static void gamescope_private_bind( struct wl_client *client, void *data, uint32_t version, uint32_t id ) + { + struct wl_resource *resource = wl_resource_create( client, &gamescope_private_interface, version, id ); +- console_log.m_LoggingListeners[(uintptr_t)resource] = [ resource ](LogPriority ePriority, const char *pScope, const char *pText) ++ console_log.m_LoggingListeners[(uintptr_t)resource] = [ resource ]( LogPriority ePriority, std::string_view psvScope, const char *pText ) + { + if ( !wlserver_is_lock_held() ) + return; +-- +2.45.2 + + +From 6fc1aa3075bd175b27ab08fbb39ba4d1b4da7867 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 05:10:52 +0100 +Subject: [PATCH 5/8] steamcompmgr: Add paint_debug_pause_base_plane + +--- + src/steamcompmgr.cpp | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 2912750..e4738f9 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -1866,6 +1866,8 @@ wlserver_vk_swapchain_feedback* steamcompmgr_get_base_layer_swapchain_feedback() + return &(*g_HeldCommits[ HELD_COMMIT_BASE ]->feedback); + } + ++gamescope::ConVar cv_paint_debug_pause_base_plane( "paint_debug_pause_base_plane", false, "Pause updates to the base plane." ); ++ + static void + paint_window(steamcompmgr_win_t *w, steamcompmgr_win_t *scaleW, struct FrameInfo_t *frameInfo, + MouseCursor *cursor, PaintWindowFlags flags = 0, float flOpacityScale = 1.0f, steamcompmgr_win_t *fit = nullptr ) +@@ -1880,7 +1882,7 @@ paint_window(steamcompmgr_win_t *w, steamcompmgr_win_t *scaleW, struct FrameInfo + + if ( flags & PaintWindowFlag::BasePlane ) + { +- if ( lastCommit == nullptr ) ++ if ( lastCommit == nullptr || cv_paint_debug_pause_base_plane ) + { + // If we're the base plane and have no valid contents + // pick up that buffer we've been holding onto if we have one. +@@ -3876,12 +3878,15 @@ determine_and_apply_focus() + } + } + +- // Update last focus commit +- if ( global_focus.focusWindow && +- previous_focus.focusWindow != global_focus.focusWindow && +- !global_focus.focusWindow->isSteamStreamingClient ) ++ if ( !cv_paint_debug_pause_base_plane ) + { +- get_window_last_done_commit( global_focus.focusWindow, g_HeldCommits[ HELD_COMMIT_BASE ] ); ++ // Update last focus commit ++ if ( global_focus.focusWindow && ++ previous_focus.focusWindow != global_focus.focusWindow && ++ !global_focus.focusWindow->isSteamStreamingClient ) ++ { ++ get_window_last_done_commit( global_focus.focusWindow, g_HeldCommits[ HELD_COMMIT_BASE ] ); ++ } + } + + // Set SDL window title +@@ -5998,7 +6003,8 @@ bool handle_done_commit( steamcompmgr_win_t *w, xwayland_ctx_t *ctx, uint64_t co + // If this is the main plane, repaint + if ( w == global_focus.focusWindow && !w->isSteamStreamingClient ) + { +- g_HeldCommits[ HELD_COMMIT_BASE ] = w->commit_queue[ j ]; ++ if ( !cv_paint_debug_pause_base_plane ) ++ g_HeldCommits[ HELD_COMMIT_BASE ] = w->commit_queue[ j ]; + hasRepaint = true; + } + +@@ -6009,7 +6015,8 @@ bool handle_done_commit( steamcompmgr_win_t *w, xwayland_ctx_t *ctx, uint64_t co + + if ( w->isSteamStreamingClientVideo && global_focus.focusWindow && global_focus.focusWindow->isSteamStreamingClient ) + { +- g_HeldCommits[ HELD_COMMIT_BASE ] = w->commit_queue[ j ]; ++ if ( !cv_paint_debug_pause_base_plane ) ++ g_HeldCommits[ HELD_COMMIT_BASE ] = w->commit_queue[ j ]; + hasRepaint = true; + } + +-- +2.45.2 + + +From fa51eceec09c0bc9de0227e95cb6ec09ba5ff6ec Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 05:11:11 +0100 +Subject: [PATCH 6/8] DRMBackend: Clean up flip_lock usage + +This is better. +--- + src/Backends/DRMBackend.cpp | 33 +++++++++++++++++++-------------- + 1 file changed, 19 insertions(+), 14 deletions(-) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index 72bd1ec..c9e2400 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -479,13 +479,14 @@ struct drm_t { + std::vector> m_QueuedFbIds; + // FBs currently on screen. + // Accessed only on page flip handler thread. ++ std::mutex m_mutVisibleFbIds; + std::vector> m_VisibleFbIds; + +- std::mutex flip_lock; ++ std::atomic < bool > bPendingFlip = { false }; + +- std::atomic < bool > paused; +- std::atomic < int > out_of_date; +- std::atomic < bool > needs_modeset; ++ std::atomic < bool > paused = { false }; ++ std::atomic < int > out_of_date = { false }; ++ std::atomic < bool > needs_modeset = { false }; + + std::unordered_map< std::string, int > connector_priorities; + +@@ -693,23 +694,28 @@ static void page_flip_handler(int fd, unsigned int frame, unsigned int sec, unsi + if ( g_DRM.pCRTC->GetObjectId() != crtc_id ) + return; + ++ static uint64_t ulLastVBlankTime = 0; ++ + // This is the last vblank time + uint64_t vblanktime = sec * 1'000'000'000lu + usec * 1'000lu; + GetVBlankTimer().MarkVBlank( vblanktime, true ); + + // TODO: get the fbids_queued instance from data if we ever have more than one in flight + +- drm_log.debugf("page_flip_handler %" PRIu64, pCtx->ulPendingFlipCount); ++ drm_log.debugf("page_flip_handler %" PRIu64 " delta: %" PRIu64, pCtx->ulPendingFlipCount, vblanktime - ulLastVBlankTime ); + gpuvis_trace_printf("page_flip_handler %" PRIu64, pCtx->ulPendingFlipCount); + ++ ulLastVBlankTime = vblanktime; ++ + { +- std::unique_lock lock( g_DRM.m_QueuedFbIdsMutex ); ++ std::scoped_lock lock{ g_DRM.m_QueuedFbIdsMutex, g_DRM.m_mutVisibleFbIds }; + // Swap and clear from queue -> visible to avoid allocations. + g_DRM.m_VisibleFbIds.swap( g_DRM.m_QueuedFbIds ); + g_DRM.m_QueuedFbIds.clear(); + } + +- g_DRM.flip_lock.unlock(); ++ g_DRM.bPendingFlip = false; ++ g_DRM.bPendingFlip.notify_all(); + + mangoapp_output_update( vblanktime ); + +@@ -1399,7 +1405,7 @@ void finish_drm(struct drm_t *drm) + drm->m_QueuedFbIds.clear(); + } + { +- std::unique_lock lock( drm->flip_lock ); ++ std::unique_lock lock( drm->m_mutVisibleFbIds ); + drm->m_VisibleFbIds.clear(); + } + drm->sdr_static_metadata = nullptr; +@@ -3637,7 +3643,7 @@ namespace gamescope + + if ( isPageFlip ) + { +- drm->flip_lock.lock(); ++ drm->bPendingFlip = true; + + // Do it before the commit, as otherwise the pageflip handler could + // potentially beat us to the refcount checks. +@@ -3665,7 +3671,7 @@ namespace gamescope + { + drm_log.errorf( "fatal flip error, aborting" ); + if ( isPageFlip ) +- drm->flip_lock.unlock(); ++ drm->bPendingFlip = false; + abort(); + } + +@@ -3683,7 +3689,7 @@ namespace gamescope + m_PresentFeedback.m_uQueuedPresents--; + + if ( isPageFlip ) +- drm->flip_lock.unlock(); ++ drm->bPendingFlip = false; + + return ret; + } else { +@@ -3731,9 +3737,8 @@ namespace gamescope + + if ( isPageFlip ) + { +- // Wait for flip handler to unlock +- drm->flip_lock.lock(); +- drm->flip_lock.unlock(); ++ // Wait for bPendingFlip to change from true -> false. ++ drm->bPendingFlip.wait( true ); + } + + return ret; +-- +2.45.2 + + +From f1963e968ef1224fe7dc326f6af95811f99b01f7 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 05:16:00 +0100 +Subject: [PATCH 7/8] DRMBackend: Track pending flip count robustly + +Check we aren't mucking up here. +--- + src/Backends/DRMBackend.cpp | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index c9e2400..2712994 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -482,7 +482,7 @@ struct drm_t { + std::mutex m_mutVisibleFbIds; + std::vector> m_VisibleFbIds; + +- std::atomic < bool > bPendingFlip = { false }; ++ std::atomic < uint32_t > uPendingFlipCount = { 0 }; + + std::atomic < bool > paused = { false }; + std::atomic < int > out_of_date = { false }; +@@ -714,8 +714,8 @@ static void page_flip_handler(int fd, unsigned int frame, unsigned int sec, unsi + g_DRM.m_QueuedFbIds.clear(); + } + +- g_DRM.bPendingFlip = false; +- g_DRM.bPendingFlip.notify_all(); ++ g_DRM.uPendingFlipCount--; ++ g_DRM.uPendingFlipCount.notify_all(); + + mangoapp_output_update( vblanktime ); + +@@ -3640,10 +3640,11 @@ namespace gamescope + defer( if ( drm->req != nullptr ) { drmModeAtomicFree( drm->req ); drm->req = nullptr; } ); + + bool isPageFlip = drm->flags & DRM_MODE_PAGE_FLIP_EVENT; ++ uint32_t uNewPendingFlipCount = 0; + + if ( isPageFlip ) + { +- drm->bPendingFlip = true; ++ uNewPendingFlipCount = ++drm->uPendingFlipCount; + + // Do it before the commit, as otherwise the pageflip handler could + // potentially beat us to the refcount checks. +@@ -3671,7 +3672,7 @@ namespace gamescope + { + drm_log.errorf( "fatal flip error, aborting" ); + if ( isPageFlip ) +- drm->bPendingFlip = false; ++ drm->uPendingFlipCount--; + abort(); + } + +@@ -3689,7 +3690,7 @@ namespace gamescope + m_PresentFeedback.m_uQueuedPresents--; + + if ( isPageFlip ) +- drm->bPendingFlip = false; ++ drm->uPendingFlipCount--; + + return ret; + } else { +@@ -3738,7 +3739,8 @@ namespace gamescope + if ( isPageFlip ) + { + // Wait for bPendingFlip to change from true -> false. +- drm->bPendingFlip.wait( true ); ++ drm->uPendingFlipCount.wait( uNewPendingFlipCount ); ++ assert( drm->uPendingFlipCount == 0 ); + } + + return ret; +-- +2.45.2 + + +From e31b8dea137d2cedd4cf71fede560feb2ad3ffc5 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Fri, 2 Aug 2024 21:11:11 +0100 +Subject: [PATCH 8/8] DRMBackend: Fix mode fallback on connector changes + +--- + src/Backends/DRMBackend.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index 2712994..ee2cbd3 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -1040,6 +1040,9 @@ static bool setup_best_connector(struct drm_t *drm, bool force, bool initial) + return false; + } + ++ // Don't allow rollback of mode_id after connector change ++ drm->current.mode_id = drm->pending.mode_id; ++ + const struct wlserver_output_info wlserver_output_info = { + .description = description, + .phys_width = (int) best->GetModeConnector()->mmWidth, +@@ -2876,6 +2879,11 @@ bool drm_set_connector( struct drm_t *drm, gamescope::CDRMConnector *conn ) + return false; + } + ++ // If we are changing connector, zero out the current and pending mode IDs. ++ // So we don't try to use one mode from the old connector on the new one if we roll back. ++ drm->pending.mode_id = nullptr; ++ drm->current.mode_id = nullptr; ++ + drm->pConnector = conn; + drm->needs_modeset = true; + +-- +2.45.2 + From 0c020f018b0f97530f0bd18cf45c5416109e034f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:25:32 -0700 Subject: [PATCH 41/58] chore: Increase gamescope release version --- spec_files/gamescope/gamescope.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index d2c69a5703..9f94bb78a9 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -6,7 +6,7 @@ Name: gamescope Version: 100.%{gamescope_tag} -Release: 20.bazzite +Release: 21.bazzite Summary: Micro-compositor for video games on Wayland License: BSD From adb6bdfd23b528cf0df4e3e1305a9987bf9c8797 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:31:50 -0700 Subject: [PATCH 42/58] chore: Reorder patch to run upstream first --- spec_files/gamescope/gamescope.spec | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 9f94bb78a9..7e3ef8b092 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -15,19 +15,20 @@ URL: https://github.com/ValveSoftware/gamescope # Create stb.pc to satisfy dependency('stb') Source0: stb.pc -Patch0: 0001-cstdint.patch +# https://github.com/ValveSoftware/gamescope +Patch0: upstream.patch + +Patch1: 0001-cstdint.patch # https://github.com/ChimeraOS/gamescope -Patch1: chimeraos.patch +Patch2: chimeraos.patch # https://hhd.dev/ -Patch2: disable-steam-touch-click-atom.patch -Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch +Patch3: disable-steam-touch-click-atom.patch +Patch4: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 -Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch +Patch5: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch # https://github.com/ValveSoftware/gamescope/pull/1444 -Patch5: 1444.patch -# https://github.com/ValveSoftware/gamescope -Patch6: upstream.patch +Patch6: 1444.patch BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build From 8eabe5bb0fa3da05ba11a8f47a3b2302ad6bd6ea Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:31:50 -0700 Subject: [PATCH 43/58] chore: Reorder patch to run upstream first --- spec_files/gamescope/gamescope.spec | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 9f94bb78a9..7e3ef8b092 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -15,19 +15,20 @@ URL: https://github.com/ValveSoftware/gamescope # Create stb.pc to satisfy dependency('stb') Source0: stb.pc -Patch0: 0001-cstdint.patch +# https://github.com/ValveSoftware/gamescope +Patch0: upstream.patch + +Patch1: 0001-cstdint.patch # https://github.com/ChimeraOS/gamescope -Patch1: chimeraos.patch +Patch2: chimeraos.patch # https://hhd.dev/ -Patch2: disable-steam-touch-click-atom.patch -Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch +Patch3: disable-steam-touch-click-atom.patch +Patch4: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 -Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch +Patch5: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch # https://github.com/ValveSoftware/gamescope/pull/1444 -Patch5: 1444.patch -# https://github.com/ValveSoftware/gamescope -Patch6: upstream.patch +Patch6: 1444.patch BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build From 74ba6b046737f3f829fcaae9b49174252bf249eb Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 3 Aug 2024 22:46:35 -0700 Subject: [PATCH 44/58] chore: Update ChimeraOS patch set --- spec_files/gamescope/chimeraos.patch | 305 +++++++++++++-------------- 1 file changed, 152 insertions(+), 153 deletions(-) diff --git a/spec_files/gamescope/chimeraos.patch b/spec_files/gamescope/chimeraos.patch index 9a6b2ecdd5..5d7611d429 100644 --- a/spec_files/gamescope/chimeraos.patch +++ b/spec_files/gamescope/chimeraos.patch @@ -1,7 +1,7 @@ -From c06cdd847679c930ee6197514970bc21f523e853 Mon Sep 17 00:00:00 2001 +From e7a17c36620343d3bd21eba9c571f2551b8b69c0 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 19:43:49 -0500 -Subject: [PATCH 01/22] Add touch-gestures to open up Steam menus +Subject: [PATCH 01/21] Add touch-gestures to open up Steam menus --- src/main.cpp | 5 +++++ @@ -10,7 +10,7 @@ Subject: [PATCH 01/22] Add touch-gestures to open up Steam menus 3 files changed, 34 insertions(+) diff --git a/src/main.cpp b/src/main.cpp -index cd4aeca..4b91c97 100644 +index 96484dc..2b5e9b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -108,6 +108,8 @@ const struct option *gamescope_options = (struct option[]){ @@ -40,18 +40,18 @@ index cd4aeca..4b91c97 100644 g_nXWaylandCount = atoi( optarg ); } else if (strcmp(opt_name, "composite-debug") == 0) { diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index ee6891d..62da656 100644 +index a2e1985..43b9023 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -73,6 +73,7 @@ - static LogScope wl_log("wlserver"); +@@ -77,6 +77,7 @@ using namespace std::literals; + extern gamescope::ConVar cv_drm_debug_disable_explicit_sync; //#define GAMESCOPE_SWAPCHAIN_DEBUG +gamescope::ConVar cv_touch_gestures( "enable_touch_gestures", false, "Enable/Disable the usage of touch gestures" ); struct wlserver_t wlserver = { .touch_down_ids = {} -@@ -2568,6 +2569,33 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool +@@ -2598,6 +2599,33 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool if ( bAlwaysWarpCursor ) wlserver_mousewarp( tx, ty, time, false ); @@ -86,10 +86,10 @@ index ee6891d..62da656 100644 else if ( eMode == gamescope::TouchClickModes::Disabled ) { diff --git a/src/wlserver.hpp b/src/wlserver.hpp -index db7d491..da67bf7 100644 +index 7a8c155..0859a21 100644 --- a/src/wlserver.hpp +++ b/src/wlserver.hpp -@@ -291,6 +291,7 @@ void wlserver_x11_surface_info_finish( struct wlserver_x11_surface_info *surf ); +@@ -306,6 +306,7 @@ void wlserver_x11_surface_info_finish( struct wlserver_x11_surface_info *surf ); void wlserver_set_xwayland_server_mode( size_t idx, int w, int h, int refresh ); extern std::atomic g_bPendingTouchMovement; @@ -101,10 +101,10 @@ index db7d491..da67bf7 100644 2.45.2 -From 34f22c6a52dbed8662132e4bdfd8a29dd1b7825c Mon Sep 17 00:00:00 2001 +From c781f3bea1940f76f28f4714ee4d10b9024909cd Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 20:16:20 -0500 -Subject: [PATCH 02/22] Add bypass_steam_resolution to workaround the 720p/800p +Subject: [PATCH 02/21] Add bypass_steam_resolution to workaround the 720p/800p restrictions Steam has for games --- @@ -113,7 +113,7 @@ Subject: [PATCH 02/22] Add bypass_steam_resolution to workaround the 720p/800p 2 files changed, 14 insertions(+) diff --git a/src/main.cpp b/src/main.cpp -index 4b91c97..3d1057a 100644 +index 2b5e9b3..4e63245 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -129,6 +129,8 @@ const struct option *gamescope_options = (struct option[]){ @@ -134,10 +134,10 @@ index 4b91c97..3d1057a 100644 " --xwayland-count create N xwayland servers\n" " --prefer-vk-device prefer Vulkan device for compositing (ex: 1002:7300)\n" diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 9ee265d..bec4268 100644 +index e4738f9..8fe13fd 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp -@@ -349,6 +349,8 @@ bool g_bForceHDR10OutputDebug = false; +@@ -354,6 +354,8 @@ bool g_bForceHDR10OutputDebug = false; gamescope::ConVar cv_hdr_enabled{ "hdr_enabled", false, "Whether or not HDR is enabled if it is available." }; bool g_bHDRItmEnable = false; int g_nCurrentRefreshRate_CachedValue = 0; @@ -146,7 +146,7 @@ index 9ee265d..bec4268 100644 static void update_color_mgmt() -@@ -5320,6 +5322,13 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) +@@ -5364,6 +5366,13 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) size_t server_idx = size_t{ xwayland_mode_ctl[ 0 ] }; int width = xwayland_mode_ctl[ 1 ]; int height = xwayland_mode_ctl[ 2 ]; @@ -160,7 +160,7 @@ index 9ee265d..bec4268 100644 bool allowSuperRes = !!xwayland_mode_ctl[ 3 ]; if ( !allowSuperRes ) -@@ -7166,6 +7175,8 @@ steamcompmgr_main(int argc, char **argv) +@@ -7210,6 +7219,8 @@ steamcompmgr_main(int argc, char **argv) bForceWindowsFullscreen = true; } else if (strcmp(opt_name, "hdr-enabled") == 0) { cv_hdr_enabled = true; @@ -173,10 +173,10 @@ index 9ee265d..bec4268 100644 2.45.2 -From 4c5657cca9a37fee0eee1d86ef3c2a6e5acef09c Mon Sep 17 00:00:00 2001 +From 06ea33eeac6023ac32a4e89cfb6a704e4fd28e9b Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Wed, 26 Jul 2023 20:46:29 -0500 -Subject: [PATCH 03/22] Add force external orientation. +Subject: [PATCH 03/21] Add force external orientation. Co-authored-by: Bouke Sybren Haarsma --- @@ -187,10 +187,10 @@ Co-authored-by: Bouke Sybren Haarsma 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 92f01ca..4c72dc1 100644 +index ee2cbd3..f2a832d 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -536,6 +536,7 @@ bool g_bSupportsSyncObjs = false; +@@ -537,6 +537,7 @@ bool g_bSupportsSyncObjs = false; extern gamescope::GamescopeModeGeneration g_eGamescopeModeGeneration; extern GamescopePanelOrientation g_DesiredInternalOrientation; @@ -198,7 +198,7 @@ index 92f01ca..4c72dc1 100644 extern bool g_bForceDisableColorMgmt; -@@ -2023,6 +2024,10 @@ namespace gamescope +@@ -2031,6 +2032,10 @@ namespace gamescope { m_ChosenOrientation = g_DesiredInternalOrientation; } @@ -210,7 +210,7 @@ index 92f01ca..4c72dc1 100644 { if ( this->GetProperties().panel_orientation ) diff --git a/src/main.cpp b/src/main.cpp -index 3d1057a..fac3df2 100644 +index 4e63245..5e39e03 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,6 +128,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -286,10 +286,10 @@ index 8cfe629..5492cae 100644 enum class GamescopeUpscaleFilter : uint32_t { diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 62da656..2998aed 100644 +index 43b9023..f554554 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -2530,6 +2530,29 @@ static void apply_touchscreen_orientation(double *x, double *y ) +@@ -2560,6 +2560,29 @@ static void apply_touchscreen_orientation(double *x, double *y ) break; } @@ -323,10 +323,10 @@ index 62da656..2998aed 100644 2.45.2 -From 897032bb4b8d8d5c11d67f9844a09a604b2c4333 Mon Sep 17 00:00:00 2001 +From 9e0fe1c9b9f82e63fb0255b32c1aefe3048c78e7 Mon Sep 17 00:00:00 2001 From: Bouke Sybren Haarsma Date: Tue, 12 Mar 2024 00:07:57 +0100 -Subject: [PATCH 04/22] implement force-panel-type +Subject: [PATCH 04/21] implement force-panel-type --- src/backend.h | 3 +++ @@ -335,7 +335,7 @@ Subject: [PATCH 04/22] implement force-panel-type 3 files changed, 20 insertions(+) diff --git a/src/backend.h b/src/backend.h -index 9c2db15..046eb10 100644 +index 6c86349..920c92f 100644 --- a/src/backend.h +++ b/src/backend.h @@ -17,6 +17,7 @@ struct wlr_buffer; @@ -346,7 +346,7 @@ index 9c2db15..046eb10 100644 namespace gamescope { -@@ -213,6 +214,8 @@ namespace gamescope +@@ -218,6 +219,8 @@ namespace gamescope // Dumb helper we should remove to support multi display someday. gamescope::GamescopeScreenType GetScreenType() { @@ -356,10 +356,10 @@ index 9c2db15..046eb10 100644 return GetCurrentConnector()->GetScreenType(); diff --git a/src/gamescope_shared.h b/src/gamescope_shared.h -index f34174e..ed30d8c 100644 +index 863b03f..a11f598 100644 --- a/src/gamescope_shared.h +++ b/src/gamescope_shared.h -@@ -22,6 +22,7 @@ namespace gamescope +@@ -25,6 +25,7 @@ namespace gamescope { GAMESCOPE_SCREEN_TYPE_INTERNAL, GAMESCOPE_SCREEN_TYPE_EXTERNAL, @@ -368,7 +368,7 @@ index f34174e..ed30d8c 100644 GAMESCOPE_SCREEN_TYPE_COUNT }; diff --git a/src/main.cpp b/src/main.cpp -index fac3df2..8bea38c 100644 +index 5e39e03..2ac48ca 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -129,6 +129,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -419,10 +419,10 @@ index fac3df2..8bea38c 100644 2.45.2 -From 2178f85676ba25434e8c39adc3848e3f7355acec Mon Sep 17 00:00:00 2001 +From c3da8fe380e2f7c8c7152032d496d89eebd57ff6 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 21:11:34 -0500 -Subject: [PATCH 05/22] wlserver: Fix an issue that would cause gamescope to +Subject: [PATCH 05/21] wlserver: Fix an issue that would cause gamescope to crash when the touchscreen was used --- @@ -430,10 +430,10 @@ Subject: [PATCH 05/22] wlserver: Fix an issue that would cause gamescope to 1 file changed, 23 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 2998aed..62da656 100644 +index f554554..43b9023 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -2530,29 +2530,6 @@ static void apply_touchscreen_orientation(double *x, double *y ) +@@ -2560,29 +2560,6 @@ static void apply_touchscreen_orientation(double *x, double *y ) break; } @@ -467,10 +467,10 @@ index 2998aed..62da656 100644 2.45.2 -From 261124a5a85ad80b0d7b15926f230bacbca21b22 Mon Sep 17 00:00:00 2001 +From 7db5dc7e8ed1f1bfdae777c4c7f30928f3d96461 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 21:56:55 -0500 -Subject: [PATCH 06/22] Add --custom-refresh-rates +Subject: [PATCH 06/21] Add --custom-refresh-rates --- src/Backends/DRMBackend.cpp | 4 ++++ @@ -479,10 +479,10 @@ Subject: [PATCH 06/22] Add --custom-refresh-rates 3 files changed, 36 insertions(+) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 4c72dc1..e4caebb 100644 +index f2a832d..32e8a78 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2125,6 +2125,10 @@ namespace gamescope +@@ -2135,6 +2135,10 @@ namespace gamescope ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Jupiter"sv ) || ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Galileo"sv ); @@ -494,7 +494,7 @@ index 4c72dc1..e4caebb 100644 { static constexpr uint32_t kPIDGalileoSDC = 0x3003; diff --git a/src/main.cpp b/src/main.cpp -index 8bea38c..a9e1969 100644 +index 2ac48ca..28bcc6f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -132,6 +132,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -579,10 +579,10 @@ index 5492cae..0207a51 100644 2.45.2 -From db4804880ea0fdf810979aea3153e2f45dc97bfe Mon Sep 17 00:00:00 2001 +From 01eff9f4c19dbaa336faf4faf504b5bd9fde8d1c Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sat, 18 May 2024 08:44:38 -0500 -Subject: [PATCH 07/22] Add rotation gamescope_control command +Subject: [PATCH 07/21] Add rotation gamescope_control command --- protocol/gamescope-control.xml | 18 ++++++++++++ @@ -621,10 +621,10 @@ index 012c48c..eab8a84 100644 diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index e4caebb..70d5cdf 100644 +index 32e8a78..f952b65 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2020,7 +2020,9 @@ namespace gamescope +@@ -2028,7 +2028,9 @@ namespace gamescope void CDRMConnector::UpdateEffectiveOrientation( const drmModeModeInfo *pMode ) { @@ -635,7 +635,7 @@ index e4caebb..70d5cdf 100644 { m_ChosenOrientation = g_DesiredInternalOrientation; } -@@ -2935,6 +2937,25 @@ bool drm_update_color_mgmt(struct drm_t *drm) +@@ -2961,6 +2963,25 @@ bool drm_update_color_mgmt(struct drm_t *drm) return true; } @@ -662,10 +662,10 @@ index e4caebb..70d5cdf 100644 { drm->pending.mode_id = 0; diff --git a/src/gamescope_shared.h b/src/gamescope_shared.h -index ed30d8c..d04a907 100644 +index a11f598..c1f8c79 100644 --- a/src/gamescope_shared.h +++ b/src/gamescope_shared.h -@@ -62,6 +62,16 @@ enum GamescopePanelOrientation +@@ -65,6 +65,16 @@ enum GamescopePanelOrientation GAMESCOPE_PANEL_ORIENTATION_AUTO, }; @@ -679,11 +679,11 @@ index ed30d8c..d04a907 100644 + GAMESCOPE_PANEL_EXTERNAL_ORIENTATION_AUTO, +}; + - // Disable partial composition for now until we get - // composite priorities working in libliftoff + also - // use the proper libliftoff composite plane system. + struct GamescopeTimelinePoint + { + struct wlr_drm_syncobj_timeline *pTimeline = nullptr; diff --git a/src/main.cpp b/src/main.cpp -index a9e1969..4469ac1 100644 +index 28bcc6f..ab16459 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -397,6 +397,7 @@ static gamescope::GamescopeScreenType force_panel_type(const char *str) @@ -695,10 +695,10 @@ index a9e1969..4469ac1 100644 } else { fprintf( stderr, "gamescope: invalid value for --force-panel-type\n" ); diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 62da656..96bb7fc 100644 +index 43b9023..e6d6a20 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -1101,6 +1101,55 @@ static void gamescope_control_take_screenshot( struct wl_client *client, struct +@@ -1119,6 +1119,55 @@ static void gamescope_control_take_screenshot( struct wl_client *client, struct } ); } @@ -754,7 +754,7 @@ index 62da656..96bb7fc 100644 static void gamescope_control_handle_destroy( struct wl_client *client, struct wl_resource *resource ) { wl_resource_destroy( resource ); -@@ -1110,6 +1159,7 @@ static const struct gamescope_control_interface gamescope_control_impl = { +@@ -1128,6 +1177,7 @@ static const struct gamescope_control_interface gamescope_control_impl = { .destroy = gamescope_control_handle_destroy, .set_app_target_refresh_cycle = gamescope_control_set_app_target_refresh_cycle, .take_screenshot = gamescope_control_take_screenshot, @@ -766,10 +766,10 @@ index 62da656..96bb7fc 100644 2.45.2 -From ef9f07b932c8be1d391b9688b1b31edbb73e86ce Mon Sep 17 00:00:00 2001 +From 69dcb30139aae557093515722ddc5d47960a9c06 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sat, 18 May 2024 11:54:50 -0500 -Subject: [PATCH 08/22] Fix an issue that caused force-panel to not work +Subject: [PATCH 08/21] Fix an issue that caused force-panel to not work --- protocol/gamescope-control.xml | 1 - @@ -791,7 +791,7 @@ index eab8a84..7f5578b 100644 diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 70d5cdf..7af994e 100644 +index f952b65..d2e1e98 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp @@ -318,6 +318,9 @@ namespace gamescope @@ -805,10 +805,10 @@ index 70d5cdf..7af994e 100644 m_pConnector->connector_type == DRM_MODE_CONNECTOR_LVDS || m_pConnector->connector_type == DRM_MODE_CONNECTOR_DSI ) diff --git a/src/gamescope_shared.h b/src/gamescope_shared.h -index d04a907..ed30d8c 100644 +index c1f8c79..a11f598 100644 --- a/src/gamescope_shared.h +++ b/src/gamescope_shared.h -@@ -62,16 +62,6 @@ enum GamescopePanelOrientation +@@ -65,16 +65,6 @@ enum GamescopePanelOrientation GAMESCOPE_PANEL_ORIENTATION_AUTO, }; @@ -822,14 +822,14 @@ index d04a907..ed30d8c 100644 - GAMESCOPE_PANEL_EXTERNAL_ORIENTATION_AUTO, -}; - - // Disable partial composition for now until we get - // composite priorities working in libliftoff + also - // use the proper libliftoff composite plane system. + struct GamescopeTimelinePoint + { + struct wlr_drm_syncobj_timeline *pTimeline = nullptr; diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 96bb7fc..959f63b 100644 +index e6d6a20..666498e 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -74,6 +74,8 @@ static LogScope wl_log("wlserver"); +@@ -78,6 +78,8 @@ extern gamescope::ConVar cv_drm_debug_disable_explicit_sync; //#define GAMESCOPE_SWAPCHAIN_DEBUG gamescope::ConVar cv_touch_gestures( "enable_touch_gestures", false, "Enable/Disable the usage of touch gestures" ); @@ -838,7 +838,7 @@ index 96bb7fc..959f63b 100644 struct wlserver_t wlserver = { .touch_down_ids = {} -@@ -1107,43 +1109,43 @@ static void gamescope_control_rotate_display( struct wl_client *client, struct w +@@ -1125,43 +1127,43 @@ static void gamescope_control_rotate_display( struct wl_client *client, struct w if (target_type == GAMESCOPE_CONTROL_DISPLAY_TARGET_TYPE_INTERNAL ) { switch (orientation) { @@ -914,7 +914,7 @@ index 96bb7fc..959f63b 100644 } } //drm_set_orientation(&g_DRM, isRotated); -@@ -2554,34 +2556,61 @@ const std::shared_ptr& wlserver_surface_swapchai +@@ -2584,34 +2586,61 @@ const std::shared_ptr& wlserver_surface_swapchai /* Handle the orientation of the touch inputs */ static void apply_touchscreen_orientation(double *x, double *y ) { @@ -1006,20 +1006,20 @@ index 96bb7fc..959f63b 100644 2.45.2 -From 8950969d8c62982f03bf8452a503276960f2fa33 Mon Sep 17 00:00:00 2001 +From 7cd3173fc56f3f3e6bcc3af121fc7eb2a7f65d26 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sat, 18 May 2024 13:50:57 -0500 -Subject: [PATCH 09/22] Fix an arithmetic error +Subject: [PATCH 09/21] Fix an arithmetic error --- src/Backends/DRMBackend.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 7af994e..30150fb 100644 +index d2e1e98..8a739ff 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2023,9 +2023,9 @@ namespace gamescope +@@ -2031,9 +2031,9 @@ namespace gamescope void CDRMConnector::UpdateEffectiveOrientation( const drmModeModeInfo *pMode ) { @@ -1036,30 +1036,29 @@ index 7af994e..30150fb 100644 2.45.2 -From 3e51d6f0ae7603e322024783143329dc46835901 Mon Sep 17 00:00:00 2001 +From 5652820c268a3632653034ef5b6d6a820b07aad4 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sat, 18 May 2024 19:04:48 -0500 -Subject: [PATCH 10/22] Rework the touch gestures to be more smooth +Subject: [PATCH 10/21] Rework the touch gestures to be more smooth --- - src/wlserver.cpp | 90 +++++++++++++++++++++++++++++++++++++----------- - 1 file changed, 69 insertions(+), 21 deletions(-) + src/wlserver.cpp | 89 +++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 69 insertions(+), 20 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 959f63b..131cd72 100644 +index 666498e..236f8d7 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -71,7 +71,8 @@ +@@ -71,6 +71,8 @@ #include static LogScope wl_log("wlserver"); -- +bool pending_gesture = false; +bool pending_osk = false; - //#define GAMESCOPE_SWAPCHAIN_DEBUG - gamescope::ConVar cv_touch_gestures( "enable_touch_gestures", false, "Enable/Disable the usage of touch gestures" ); - extern GamescopePanelOrientation g_DesiredInternalOrientation; -@@ -421,6 +422,39 @@ void wlserver_open_steam_menu( bool qam ) + + using namespace std::literals; + +@@ -439,6 +441,39 @@ void wlserver_open_steam_menu( bool qam ) XTestFakeKeyEvent(server->get_xdisplay(), XKeysymToKeycode( server->get_xdisplay(), XK_Control_L ), False, CurrentTime); } @@ -1099,7 +1098,7 @@ index 959f63b..131cd72 100644 static void wlserver_handle_pointer_button(struct wl_listener *listener, void *data) { struct wlserver_pointer *pointer = wl_container_of( listener, pointer, button ); -@@ -2649,32 +2683,46 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool +@@ -2679,32 +2714,46 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool if ( bAlwaysWarpCursor ) wlserver_mousewarp( tx, ty, time, false ); @@ -1170,20 +1169,20 @@ index 959f63b..131cd72 100644 2.45.2 -From d25a36dabc8e1d8144413980d915d0e71d313434 Mon Sep 17 00:00:00 2001 +From 0897536808301c73f0c694cc21e923c569e828a7 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sun, 19 May 2024 08:55:28 -0500 -Subject: [PATCH 11/22] Fix a typo for --bypass-steam-resolution +Subject: [PATCH 11/21] Fix a typo for --bypass-steam-resolution --- src/steamcompmgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index bec4268..10c0a75 100644 +index 8fe13fd..c29403d 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp -@@ -7175,7 +7175,7 @@ steamcompmgr_main(int argc, char **argv) +@@ -7219,7 +7219,7 @@ steamcompmgr_main(int argc, char **argv) bForceWindowsFullscreen = true; } else if (strcmp(opt_name, "hdr-enabled") == 0) { cv_hdr_enabled = true; @@ -1196,10 +1195,10 @@ index bec4268..10c0a75 100644 2.45.2 -From 6d6afedd56a3f7b578cac1af7eaf93af931e0500 Mon Sep 17 00:00:00 2001 +From 044e5d20ddac5b8144e1937a2e0411189090e82a Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sun, 19 May 2024 11:48:52 -0500 -Subject: [PATCH 12/22] Handle gesture cases better to prevent unexpected +Subject: [PATCH 12/21] Handle gesture cases better to prevent unexpected behavior --- @@ -1207,7 +1206,7 @@ Subject: [PATCH 12/22] Handle gesture cases better to prevent unexpected 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 131cd72..9afe488 100644 +index 236f8d7..a900857 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -71,7 +71,8 @@ @@ -1218,9 +1217,9 @@ index 131cd72..9afe488 100644 +bool pending_gesture_x = false; +bool pending_gesture_y = false; bool pending_osk = false; - //#define GAMESCOPE_SWAPCHAIN_DEBUG - gamescope::ConVar cv_touch_gestures( "enable_touch_gestures", false, "Enable/Disable the usage of touch gestures" ); -@@ -2647,6 +2648,16 @@ static void apply_touchscreen_orientation(double *x, double *y ) + + using namespace std::literals; +@@ -2678,6 +2679,16 @@ static void apply_touchscreen_orientation(double *x, double *y ) *y = ty; } @@ -1237,7 +1236,7 @@ index 131cd72..9afe488 100644 void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool bAlwaysWarpCursor ) { assert( wlserver_is_lock_held() ); -@@ -2685,43 +2696,55 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool +@@ -2716,43 +2727,55 @@ void wlserver_touchmotion( double x, double y, int touch_id, uint32_t time, bool if ( cv_touch_gestures ) { @@ -1316,10 +1315,10 @@ index 131cd72..9afe488 100644 2.45.2 -From 58e24b2f2ac33eb2388ef734835c6b02e437e563 Mon Sep 17 00:00:00 2001 +From 9eae1549e5a539dd2612ab5ca9581ce59e8b1f42 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Sun, 19 May 2024 18:14:23 -0500 -Subject: [PATCH 13/22] Add references to drm_set_orientation() and g_drm in +Subject: [PATCH 13/21] Add references to drm_set_orientation() and g_drm in wlserver for rotation gamescope-control --- @@ -1328,10 +1327,10 @@ Subject: [PATCH 13/22] Add references to drm_set_orientation() and g_drm in 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 9afe488..e963bea 100644 +index a900857..ee9f9d0 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -1183,8 +1183,9 @@ static void gamescope_control_rotate_display( struct wl_client *client, struct w +@@ -1202,8 +1202,9 @@ static void gamescope_control_rotate_display( struct wl_client *client, struct w wl_log.errorf("Invalid target orientation selected"); } } @@ -1344,10 +1343,10 @@ index 9afe488..e963bea 100644 static void gamescope_control_handle_destroy( struct wl_client *client, struct wl_resource *resource ) diff --git a/src/wlserver.hpp b/src/wlserver.hpp -index da67bf7..688d05c 100644 +index 0859a21..31fca64 100644 --- a/src/wlserver.hpp +++ b/src/wlserver.hpp -@@ -294,7 +294,8 @@ extern std::atomic g_bPendingTouchMovement; +@@ -309,7 +309,8 @@ extern std::atomic g_bPendingTouchMovement; extern gamescope::ConVar cv_touch_gestures; void wlserver_open_steam_menu( bool qam ); @@ -1361,10 +1360,10 @@ index da67bf7..688d05c 100644 2.45.2 -From 768e5689e12c2f57766d27d72b4fad03d54fc01c Mon Sep 17 00:00:00 2001 +From 027b3a3b5940a8294c383c65e112247e63f2bcd8 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Mon, 20 May 2024 07:02:52 -0500 -Subject: [PATCH 14/22] Fix an issue where forced panel type orientations +Subject: [PATCH 14/21] Fix an issue where forced panel type orientations weren't being applied --- @@ -1372,10 +1371,10 @@ Subject: [PATCH 14/22] Fix an issue where forced panel type orientations 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 30150fb..1a2668f 100644 +index 8a739ff..0866bb1 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2023,20 +2023,19 @@ namespace gamescope +@@ -2031,20 +2031,19 @@ namespace gamescope void CDRMConnector::UpdateEffectiveOrientation( const drmModeModeInfo *pMode ) { @@ -1402,7 +1401,7 @@ index 30150fb..1a2668f 100644 switch ( this->GetProperties().panel_orientation->GetCurrentValue() ) { case DRM_MODE_PANEL_ORIENTATION_NORMAL: -@@ -2058,6 +2057,7 @@ namespace gamescope +@@ -2066,6 +2065,7 @@ namespace gamescope if ( this->GetScreenType() == gamescope::GAMESCOPE_SCREEN_TYPE_INTERNAL && pMode ) { @@ -1410,7 +1409,7 @@ index 30150fb..1a2668f 100644 // Auto-detect portait mode for internal displays m_ChosenOrientation = pMode->hdisplay < pMode->vdisplay ? GAMESCOPE_PANEL_ORIENTATION_270 -@@ -2065,6 +2065,7 @@ namespace gamescope +@@ -2073,6 +2073,7 @@ namespace gamescope } else { @@ -1422,20 +1421,20 @@ index 30150fb..1a2668f 100644 2.45.2 -From d6e4cf239f0f2113d1f3071a8d4766a810497617 Mon Sep 17 00:00:00 2001 +From beab0c8c80c3700d73cddd6806f15893969f0b40 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Mon, 20 May 2024 07:25:29 -0500 -Subject: [PATCH 15/22] add missing curly bracket... +Subject: [PATCH 15/21] add missing curly bracket... --- src/Backends/DRMBackend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 1a2668f..825812e 100644 +index 0866bb1..cdd600f 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2025,7 +2025,7 @@ namespace gamescope +@@ -2033,7 +2033,7 @@ namespace gamescope { if ((this->GetScreenType() == GAMESCOPE_SCREEN_TYPE_INTERNAL && g_DesiredInternalOrientation != GAMESCOPE_PANEL_ORIENTATION_AUTO) || (this->GetScreenType() == GAMESCOPE_SCREEN_TYPE_EXTERNAL && g_DesiredInternalOrientation != GAMESCOPE_PANEL_ORIENTATION_AUTO && g_bExternalForced)) { @@ -1448,10 +1447,10 @@ index 1a2668f..825812e 100644 2.45.2 -From 8983b3621dd81d4633a50a798b7794c6ae9d693b Mon Sep 17 00:00:00 2001 +From dd024170f46671f390091c9b4833d5563dd16251 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Mon, 20 May 2024 10:17:55 -0500 -Subject: [PATCH 16/22] Fix case where real externals were rotated with faked +Subject: [PATCH 16/21] Fix case where real externals were rotated with faked external panels --- @@ -1460,7 +1459,7 @@ Subject: [PATCH 16/22] Fix case where real externals were rotated with faked 2 files changed, 64 insertions(+), 29 deletions(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 825812e..2668ad7 100644 +index cdd600f..bc4746b 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp @@ -318,13 +318,20 @@ namespace gamescope @@ -1488,7 +1487,7 @@ index 825812e..2668ad7 100644 return GAMESCOPE_SCREEN_TYPE_EXTERNAL; } -@@ -2023,11 +2030,11 @@ namespace gamescope +@@ -2031,11 +2038,11 @@ namespace gamescope void CDRMConnector::UpdateEffectiveOrientation( const drmModeModeInfo *pMode ) { @@ -1504,10 +1503,10 @@ index 825812e..2668ad7 100644 m_ChosenOrientation = g_DesiredExternalOrientation; } diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index e963bea..74d8209 100644 +index ee9f9d0..146088a 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -2596,29 +2596,57 @@ static void apply_touchscreen_orientation(double *x, double *y ) +@@ -2627,29 +2627,57 @@ static void apply_touchscreen_orientation(double *x, double *y ) double ty = 0; // Use internal screen always for orientation purposes. @@ -1591,10 +1590,10 @@ index e963bea..74d8209 100644 2.45.2 -From 57057c9e5dc4ac026259726145d5b6e480368699 Mon Sep 17 00:00:00 2001 +From b77e5214db01ab13c0a01df5a11c2631ff8a1154 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Mon, 20 May 2024 16:30:47 -0500 -Subject: [PATCH 17/22] Add verbose panel logs and attempt to address all +Subject: [PATCH 17/21] Add verbose panel logs and attempt to address all orientation issues --- @@ -1604,7 +1603,7 @@ Subject: [PATCH 17/22] Add verbose panel logs and attempt to address all 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 2668ad7..9df20ae 100644 +index bc4746b..19819d4 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp @@ -56,6 +56,7 @@ static constexpr bool k_bUseCursorPlane = false; @@ -1632,7 +1631,7 @@ index 2668ad7..9df20ae 100644 return GAMESCOPE_SCREEN_TYPE_EXTERNAL; } -@@ -2030,7 +2032,19 @@ namespace gamescope +@@ -2038,7 +2040,19 @@ namespace gamescope void CDRMConnector::UpdateEffectiveOrientation( const drmModeModeInfo *pMode ) { @@ -1654,10 +1653,10 @@ index 2668ad7..9df20ae 100644 m_ChosenOrientation = g_DesiredInternalOrientation; } diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 74d8209..3d4b239 100644 +index 146088a..cbaf89a 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp -@@ -2600,26 +2600,29 @@ static void apply_touchscreen_orientation(double *x, double *y ) +@@ -2631,26 +2631,29 @@ static void apply_touchscreen_orientation(double *x, double *y ) { if ( g_ForcedScreenType == gamescope::GAMESCOPE_SCREEN_TYPE_EXTERNAL ) { @@ -1707,10 +1706,10 @@ index 74d8209..3d4b239 100644 } else diff --git a/src/wlserver.hpp b/src/wlserver.hpp -index 688d05c..ae55963 100644 +index 31fca64..82eb0e5 100644 --- a/src/wlserver.hpp +++ b/src/wlserver.hpp -@@ -296,6 +296,7 @@ extern gamescope::ConVar cv_touch_gestures; +@@ -311,6 +311,7 @@ extern gamescope::ConVar cv_touch_gestures; void wlserver_open_steam_menu( bool qam ); extern void drm_set_orientation( struct drm_t *drm, bool isRotated); extern drm_t g_DRM; @@ -1722,17 +1721,17 @@ index 688d05c..ae55963 100644 2.45.2 -From 41242b5ee7fa33cae22f30f5bcf5e27169bd8145 Mon Sep 17 00:00:00 2001 +From 7508322c78f06e1fe67ccfeb0abb733f4661126b Mon Sep 17 00:00:00 2001 From: Bouke Sybren Haarsma Date: Tue, 28 May 2024 21:56:47 +0200 -Subject: [PATCH 18/22] add closing bracket +Subject: [PATCH 18/21] add closing bracket --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp -index 4469ac1..e455225 100644 +index ab16459..58c77e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -465,6 +465,7 @@ static enum gamescope::GamescopeBackend parse_backend_name(const char *str) @@ -1747,10 +1746,10 @@ index 4469ac1..e455225 100644 2.45.2 -From e528844eb590f8183fdfffaf9a7af39f33dc2213 Mon Sep 17 00:00:00 2001 +From d8b9484c8468f4a31556af8903f03cc428982eef Mon Sep 17 00:00:00 2001 From: Bouke Sybren Haarsma Date: Wed, 3 Jan 2024 17:03:04 +0100 -Subject: [PATCH 19/22] remove hacky texture +Subject: [PATCH 19/21] remove hacky texture This will use more hardware planes, causing some devices to composite yeilding lower framerates --- @@ -1758,10 +1757,10 @@ This will use more hardware planes, causing some devices to composite yeilding l 1 file changed, 17 insertions(+), 45 deletions(-) diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 10c0a75..1bc9008 100644 +index c29403d..cd6e690 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp -@@ -1579,7 +1579,7 @@ bool MouseCursor::getTexture() +@@ -1610,7 +1610,7 @@ bool MouseCursor::getTexture() { pixels[i * image->width + j] = image->pixels[i * image->width + j]; } @@ -1770,7 +1769,7 @@ index 10c0a75..1bc9008 100644 std::vector resizeBuffer( nDesiredWidth * nDesiredHeight ); stbir_resize_uint8_srgb( (unsigned char *)pixels.data(), image->width, image->height, 0, (unsigned char *)resizeBuffer.data(), nDesiredWidth, nDesiredHeight, 0, -@@ -2257,7 +2257,7 @@ paint_all(bool async) +@@ -2290,7 +2290,7 @@ paint_all(bool async) } } } @@ -1779,7 +1778,7 @@ index 10c0a75..1bc9008 100644 int nOldLayerCount = frameInfo.layerCount; uint32_t flags = 0; -@@ -2265,7 +2265,7 @@ paint_all(bool async) +@@ -2298,7 +2298,7 @@ paint_all(bool async) flags |= PaintWindowFlag::BasePlane; paint_window(w, w, &frameInfo, global_focus.cursor, flags); update_touch_scaling( &frameInfo ); @@ -1788,7 +1787,7 @@ index 10c0a75..1bc9008 100644 // paint UI unless it's fully hidden, which it communicates to us through opacity=0 // we paint it to extract scaling coefficients above, then remove the layer if one was added if ( w->opacity == TRANSLUCENT && bHasVideoUnderlay && nOldLayerCount < frameInfo.layerCount ) -@@ -2278,7 +2278,7 @@ paint_all(bool async) +@@ -2311,7 +2311,7 @@ paint_all(bool async) float opacityScale = g_bPendingFade ? 0.0f : ((currentTime - fadeOutStartTime) / (float)g_FadeOutDuration); @@ -1797,7 +1796,7 @@ index 10c0a75..1bc9008 100644 paint_cached_base_layer(g_HeldCommits[HELD_COMMIT_FADE], g_CachedPlanes[HELD_COMMIT_FADE], &frameInfo, 1.0f - opacityScale, false); paint_window(w, w, &frameInfo, global_focus.cursor, PaintWindowFlag::BasePlane | PaintWindowFlag::FadeTarget | PaintWindowFlag::DrawBorders, opacityScale, override); } -@@ -2352,34 +2352,6 @@ paint_all(bool async) +@@ -2385,34 +2385,6 @@ paint_all(bool async) if ( overlay == global_focus.inputFocusWindow ) update_touch_scaling( &frameInfo ); } @@ -1832,7 +1831,7 @@ index 10c0a75..1bc9008 100644 if (notification) { -@@ -2957,7 +2929,7 @@ win_maybe_a_dropdown( steamcompmgr_win_t *w ) +@@ -2994,7 +2966,7 @@ win_maybe_a_dropdown( steamcompmgr_win_t *w ) // // TODO: Come back to me for original Age of Empires HD launcher. // Does that use it? It wants blending! @@ -1841,7 +1840,7 @@ index 10c0a75..1bc9008 100644 // Only do this if we have CONTROLPARENT right now. Some other apps, such as the // Street Fighter V (310950) Splash Screen also use LAYERED and TOOLWINDOW, and we don't // want that to be overlayed. -@@ -2972,12 +2944,12 @@ win_maybe_a_dropdown( steamcompmgr_win_t *w ) +@@ -3009,12 +2981,12 @@ win_maybe_a_dropdown( steamcompmgr_win_t *w ) // Josh: // The logic here is as follows. The window will be treated as a dropdown if: @@ -1856,7 +1855,7 @@ index 10c0a75..1bc9008 100644 // - If the window has transient for, disregard it, as it is trying to redirecting us elsewhere // ie. a settings menu dialog popup or something. // - If the window has both skip taskbar and pager, treat it as a dialog. -@@ -3069,7 +3041,7 @@ static bool is_good_override_candidate( steamcompmgr_win_t *override, steamcompm +@@ -3106,7 +3078,7 @@ static bool is_good_override_candidate( steamcompmgr_win_t *override, steamcompm return false; return override != focus && override->GetGeometry().nX >= 0 && override->GetGeometry().nY >= 0; @@ -1865,7 +1864,7 @@ index 10c0a75..1bc9008 100644 static bool pick_primary_focus_and_override(focus_t *out, Window focusControlWindow, const std::vector& vecPossibleFocusWindows, bool globalFocus, const std::vector& ctxFocusControlAppIDs) -@@ -3210,7 +3182,7 @@ found:; +@@ -3247,7 +3219,7 @@ found:; if ( focus ) { @@ -1874,7 +1873,7 @@ index 10c0a75..1bc9008 100644 out->focusWindow = focus; else focus->outdatedInteractiveFocus = true; -@@ -3253,9 +3225,9 @@ found:; +@@ -3290,9 +3262,9 @@ found:; override_focus = fake_override; goto found2; } @@ -1886,7 +1885,7 @@ index 10c0a75..1bc9008 100644 found2:; resolveTransientOverrides( true ); } -@@ -4514,7 +4486,7 @@ finish_destroy_win(xwayland_ctx_t *ctx, Window id, bool gone) +@@ -4554,7 +4526,7 @@ finish_destroy_win(xwayland_ctx_t *ctx, Window id, bool gone) { if (gone) finish_unmap_win (ctx, w); @@ -1895,7 +1894,7 @@ index 10c0a75..1bc9008 100644 { std::unique_lock lock( ctx->list_mutex ); *prev = w->xwayland().next; -@@ -4571,7 +4543,7 @@ destroy_win(xwayland_ctx_t *ctx, Window id, bool gone, bool fade) +@@ -4611,7 +4583,7 @@ destroy_win(xwayland_ctx_t *ctx, Window id, bool gone, bool fade) global_focus.overrideWindow = nullptr; if (x11_win(global_focus.fadeWindow) == id && gone) global_focus.fadeWindow = nullptr; @@ -1904,7 +1903,7 @@ index 10c0a75..1bc9008 100644 MakeFocusDirty(); finish_destroy_win(ctx, id, gone); -@@ -5176,7 +5148,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) +@@ -5220,7 +5192,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) { get_win_type(ctx, w); MakeFocusDirty(); @@ -1913,7 +1912,7 @@ index 10c0a75..1bc9008 100644 } if (ev->atom == ctx->atoms.sizeHintsAtom) { -@@ -6084,7 +6056,7 @@ void handle_done_commits_xdg( bool vblank, uint64_t vblank_idx ) +@@ -6130,7 +6102,7 @@ void handle_done_commits_xdg( bool vblank, uint64_t vblank_idx ) commits_before_their_time.push_back( entry ); continue; } @@ -1922,7 +1921,7 @@ index 10c0a75..1bc9008 100644 if (!entry.earliestPresentTime) { entry.earliestPresentTime = next_refresh_time; -@@ -6938,7 +6910,7 @@ void update_mode_atoms(xwayland_ctx_t *root_ctx, bool* needs_flush = nullptr) +@@ -6983,7 +6955,7 @@ void update_mode_atoms(xwayland_ctx_t *root_ctx, bool* needs_flush = nullptr) } XChangeProperty(root_ctx->dpy, root_ctx->root, root_ctx->atoms.gamescopeDisplayModeListExternal, XA_STRING, 8, PropModeReplace, (unsigned char *)modes, strlen(modes) + 1 ); @@ -1931,7 +1930,7 @@ index 10c0a75..1bc9008 100644 uint32_t one = 1; XChangeProperty(root_ctx->dpy, root_ctx->root, root_ctx->atoms.gamescopeDisplayIsExternal, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&one, 1 ); -@@ -7696,7 +7668,7 @@ void steamcompmgr_send_frame_done_to_focus_window() +@@ -7748,7 +7720,7 @@ void steamcompmgr_send_frame_done_to_focus_window() { wlserver_lock(); wlserver_send_frame_done( global_focus.focusWindow->xwayland().surface.main_surface , &now ); @@ -1944,20 +1943,20 @@ index 10c0a75..1bc9008 100644 2.45.2 -From 1dbcfed76f4b80d8a9f6570819b5af7917c786fc Mon Sep 17 00:00:00 2001 +From 7eac5235caa7cb6664f637017879af95cde34ad7 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Tue, 2 Jul 2024 14:12:47 -0700 -Subject: [PATCH 21/22] Only change refresh rates on internal displays +Subject: [PATCH 20/21] Only change refresh rates on internal displays --- src/Backends/DRMBackend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index ff1858b..f5a452e 100644 +index 19819d4..476efef 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2152,7 +2152,7 @@ namespace gamescope +@@ -2162,7 +2162,7 @@ namespace gamescope ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Jupiter"sv ) || ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Galileo"sv ); @@ -1970,20 +1969,20 @@ index ff1858b..f5a452e 100644 2.45.2 -From 3b0408f6ec7307e7a38f2c795b932d0dc05f2d72 Mon Sep 17 00:00:00 2001 +From 6db019cb96bde2d961d0408170817354915a51f5 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Tue, 2 Jul 2024 15:14:23 -0700 -Subject: [PATCH 22/22] Also check g_bExternalForced +Subject: [PATCH 21/21] Also check g_bExternalForced --- src/Backends/DRMBackend.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index f5a452e..d7f935d 100644 +index 476efef..cf2a613 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2152,9 +2152,9 @@ namespace gamescope +@@ -2162,9 +2162,9 @@ namespace gamescope ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Jupiter"sv ) || ( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Galileo"sv ); From bdc8d0f6ba73baf64db12b26ea594bac25d8a89b Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 4 Aug 2024 09:04:34 -0700 Subject: [PATCH 45/58] chore: Update mesa to 24.1.5 --- spec_files/mesa/mesa.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/mesa/mesa.spec b/spec_files/mesa/mesa.spec index f293ec7430..78e460947d 100644 --- a/spec_files/mesa/mesa.spec +++ b/spec_files/mesa/mesa.spec @@ -66,7 +66,7 @@ Name: mesa Summary: Mesa graphics libraries -%global ver 24.1.4 +%global ver 24.1.5 Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)} Release: 100.bazzite.{{{ git_dir_version }}} License: MIT AND BSD-3-Clause AND SGI-B-2.0 From 68406eefa7e437652fbb16e726ab557e7325612a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 4 Aug 2024 08:40:25 -0700 Subject: [PATCH 46/58] chore: Add bazzite repo to ISO Build step --- .github/workflows/build_iso.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index 63890aa79a..2ec0443f63 100644 --- a/.github/workflows/build_iso.yml +++ b/.github/workflows/build_iso.yml @@ -100,8 +100,14 @@ jobs: ${image} /temp_flatpak_install_dir/script.sh docker rmi ${image} + - name: Setup Bazzite Repo + id: setup-bazzite-repo + shell: bash + run: | + curl -Lo ${{ github.workspace }}/bazzite.repo https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-${{ matrix.major_version }}/kylegospo-bazzite-fedora-${{ matrix.major_version }}.repo + - name: Build ISOs - uses: jasonn3/build-container-installer@v1.2.1 + uses: jasonn3/build-container-installer@main id: build with: arch: x86_64 @@ -119,6 +125,7 @@ jobs: enable_flatpak_dependencies: "false" extra_boot_params: ${{ steps.generate-extra-params.outputs.extra-boot-params }} additional_templates: '/github/workspace/installer/lorax_templates/remove_root_password_prompt.tmpl' + repos: '/github/workspace/bazzite.repo /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora-updates.repo' - name: Move ISOs to Upload Directory id: upload-directory From be666eca2c42acb9760c24b7abc6ad3a17efa1b0 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 4 Aug 2024 15:31:55 -0700 Subject: [PATCH 47/58] chore: Switch to older anaconda --- ...-call-bootupctl-with-update-firmware.patch | 31 ++++ spec_files/anaconda/anaconda.spec | 148 +++--------------- 2 files changed, 54 insertions(+), 125 deletions(-) create mode 100644 spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch diff --git a/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch b/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch new file mode 100644 index 0000000000..d88b34fc79 --- /dev/null +++ b/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch @@ -0,0 +1,31 @@ +From d1424ea9ffa5d51d1cfa004b0861e345c4300902 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Wed, 6 Mar 2024 17:26:45 -0800 +Subject: [PATCH] bootupd: call bootupctl with --update-firmware + +This is required to write an entry to the EFI boot manager, +which we ought to do (anaconda does it when installing the +bootloader itself). Without this, boot of the installed system +will only work if it's configured to try and boot from the +hard disk using the fallback path. + +Signed-off-by: Adam Williamson +--- + .../modules/payloads/payload/rpm_ostree/installation.py | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py b/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py +index 0ac8583b78..f5ea666cf2 100644 +--- a/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py ++++ b/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py +@@ -520,6 +520,7 @@ class ConfigureBootloader(Task): + "install", + "--auto", + "--write-uuid", ++ "--update-firmware", + "--device", + dev_data.path, + "/", +-- +2.44.0 + diff --git a/spec_files/anaconda/anaconda.spec b/spec_files/anaconda/anaconda.spec index e9df247511..9821ee5cc5 100644 --- a/spec_files/anaconda/anaconda.spec +++ b/spec_files/anaconda/anaconda.spec @@ -1,6 +1,6 @@ Summary: Graphical system installer Name: anaconda -Version: 41.27 +Version: 40.22.3 Release: 100.bazzite License: GPL-2.0-or-later URL: http://fedoraproject.org/wiki/Anaconda @@ -10,9 +10,13 @@ URL: http://fedoraproject.org/wiki/Anaconda # git checkout -b archive-branch anaconda-%%{version}-%%{release} # ./autogen.sh # make dist -Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}/%{name}-%{version}.tar.bz2 +Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}-1/%{name}-%{version}.tar.bz2 +# https://github.com/rhinstaller/anaconda/pull/5508 +# https://bugzilla.redhat.com/show_bug.cgi?id=2268505 +# Fix bootupd UEFI path to create an EFI boot manager entry +Patch0: 0001-bootupd-call-bootupctl-with-update-firmware.patch -Patch0: bazzite.patch +Patch1: bazzite.patch # Versions of required components (done so we make sure the buildrequires # match the requires versions of things). @@ -86,16 +90,11 @@ Summary: Core of the Anaconda installer # core/signal.py is under MIT License: GPL-2.0-or-later AND MIT Requires: python3-libs -%if 0%{?rhel} > 10 || 0%{?fedora} > 40 -Requires: python3-crypt-r -%endif Requires: python3-dnf >= %{dnfver} Requires: python3-blivet >= %{pythonblivetver} Requires: python3-blockdev >= %{libblockdevver} Requires: python3-meh >= %{mehver} -%if 0%{?rhel} < 10 || 0%{?fedora} Requires: libreport-anaconda >= %{libreportanacondaver} -%endif Requires: libselinux-python3 Requires: python3-rpm >= %{rpmver} Requires: python3-pyparted >= %{pypartedver} @@ -119,19 +118,17 @@ Requires: subscription-manager >= %{subscriptionmanagerver} # which is apparently great for containers but unhelpful for the rest of us Requires: cracklib-dicts -%if 0%{?rhel} < 10 || 0%{?fedora} Requires: teamd -Requires: NetworkManager-team -%endif %ifarch s390 s390x Requires: openssh %endif Requires: NetworkManager >= %{nmver} Requires: NetworkManager-libnm >= %{nmver} +Requires: NetworkManager-team Requires: kbd Requires: chrony Requires: systemd -%if 0%{?rhel} > 10 || 0%{?fedora} +%if ! 0%{?rhel} Requires: systemd-resolved %endif Requires: python3-pid @@ -176,6 +173,7 @@ BuildArchitectures: noarch BuildRequires: desktop-file-utils # live installation currently implies a graphical installation Requires: anaconda-gui = %{version}-%{release} +Requires: usermode Requires: zenity Requires: xisxwayland Recommends: xhost @@ -227,8 +225,6 @@ Requires: f2fs-tools Requires: xfsprogs Requires: dosfstools Requires: e2fsprogs -# External tooling for managing NVMe-FC devices in the installation environment -Recommends: nvme-cli %description install-env-deps The anaconda-install-env-deps metapackage lists all installation environment @@ -272,10 +268,6 @@ Requires: rpm-ostree >= %{rpmostreever} Requires: ostree # used by ostree command for native containers Requires: skopeo -# External tooling for managing NVMe-FC devices in the installation environment -Requires: nvme-cli -# Needed for bootc -Requires: podman %description install-img-deps The anaconda-install-img-deps metapackage lists all boot.iso installation @@ -343,7 +335,6 @@ Requires: dracut-network Requires: dracut-live Requires: xz Requires: python3-kickstart -Requires: iputils %description dracut The 'anaconda' dracut module handles installer-specific boot tasks and @@ -352,6 +343,7 @@ runtime on NFS/HTTP/FTP servers or local disks. %prep %autosetup -p 1 +rm pyanaconda/threading.py %build # use actual build-time release number, not tarball creation time release number @@ -482,119 +474,25 @@ rm -rf \ %{_prefix}/libexec/anaconda/dd_* %changelog -* Tue Jul 30 2024 Packit - 41.27-1 -- Remove threading compatibility layer (kkoukiou) - -* Tue Jul 23 2024 Packit - 41.26-1 -- Don't use tmpfs in build if not enough RAM (lifto) -- Document RHEL 10 specifics for container shell (mkolman) -- storage: add EFI partition in the windows OS devices if it's detected - (kkoukiou) -- storage: add windows system to GetExistingSystems (kkoukiou) -- storage: store the partition type name in device attrs for partitions - (kkoukiou) -- Clean up the code by removing the utils directory (rolivier) - -* Wed Jul 17 2024 Fedora Release Engineering - 41.25-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Tue Jul 16 2024 Packit - 41.25-1 -- makeupdates: Bump Python version in site packages path to 3.13 (vtrefny) -- Apply suggestions from Rodolfo (martin.kolman) -- Scripts for local boot.iso updates workflow (mkolman) -- Fix unit_tests/pyanaconda_tests/core/test_threads.py:140:20: E721 (kkoukiou) -- Fix pyanaconda/modules/network/nm_client.py:576:21: PLR1704 (kkoukiou) -- Fix pyanaconda/core/users.py:408:21: PLR1704 (kkoukiou) - -* Tue Jul 09 2024 Packit - 41.24-1 -- Update translations from Weblate for master (github-actions) -- tests: storage: conditionally run btrfs tests if command is not removed - (kkoukiou) -- tests: allow the module specification to contain removed commands (kkoukiou) - -* Tue Jul 02 2024 Packit - 41.23-1 -- Update translations from Weblate for master (github-actions) -- chore: remove unused atk in BaseWindow.c (freya) -- Replace deprecated methods to avoid warnings (rolivier) -- Do not mark ancestors of device with source or stage2 as protected (rvykydal) - -* Tue Jun 25 2024 Packit - 41.22-1 -- Update translations from Weblate for master (github-actions) - -* Tue Jun 11 2024 Python Maint - 41.20-2 -- Rebuilt for Python 3.13 - -* Tue Jun 11 2024 Packit - 41.20-1 -- Update translations from Weblate for master (github-actions) -- Fix issues for new pylint check (jkonecny) -- Use InconsistentParentSectorSize instead of InconsistentPVSectorSize - (vtrefny) -- Do not require libreport on RHEL 10 (mkolman) -- Update translations from Weblate for master (github-actions) -- Get kickstart data via DBus (akankovs) -- Adding a implementation for runtime and ui commands (akankovs) -- Update tests for kickstart commands (akankovs) -- Migration of the remaining kickstart commands to the Runtime module - (akankovs) - -* Fri Jun 07 2024 Python Maint - 41.19-2 -- Rebuilt for Python 3.13 - -* Tue Jun 04 2024 Packit - 41.19-1 -- dracut: Remove 'linear' from modules to load (vtrefny) -- Remove 'linear' from list of expected MD RAID levels (vtrefny) - -* Tue May 28 2024 Packit - 41.18-1 -- Do not imply that Fedora ELN has an EULA (sgallagh) -- Update translations from Weblate for master (github-actions) -- Deprecate kickstart modularity module (marusak.matej) -- Remove Javascript leftovers from Makefile (jkonecny) -- Revert "Ignore npm packages files for translation" (jkonecny) -- Update translations from Weblate for master (github-actions) -- docs: Add guide how to debug/develop GH workflows (jkonecny) - -* Tue May 21 2024 Packit - 41.17-1 -- RHEL moved from Bugzilla to Jira (jstodola) -- Update translations from Weblate for master (github-actions) -- docs: Fix link on ci-status page (jkonecny) -- docs: Fix link on ci status for container updates (jkonecny) -- gui: Fix displaying of the device label (yueyuankun) -- Stop pretending liveinst+vnc is supported (#678354) (kkoukiou) -- Use the standalone crypt_r package on Fedora 41+ (miro) -- Write a warning rescue selinux (akankovs) - Resolves: RHEL-14005 - -* Tue Apr 30 2024 Katerina Koukiou - 41.15-1 -- Update to upstream release 41.15 - -* Tue Apr 23 2024 Packit - 41.14-1 -- Revert "infra: Packit fix empty jobs field" (kkoukiou) - -* Thu Apr 18 2024 Packit - 41.13-1 -- Fix signature of the method passed to DNF (jkonecny) -- Do not include teamd on RHEL (rvykydal) -- network: guard team devices configuration in kickstart by capabilities - (rvykydal) - -* Tue Apr 09 2024 Packit - 41.9-1 -- Update translations from Weblate for master (github-actions) - -* Tue Mar 26 2024 Packit - 41.7-1 -- Update translations from Weblate for master (github-actions) +* Mon Mar 25 2024 Packit - 40.22.3-1 - Disable preexec for vtActivate() (mkolman) +- Lower permissions for kickstart logs in /tmp (jkonecny) +- Copy /etc/resolv.conf to system only if there is no systemd-resolved + (rvykydal) +- Revert "Do not copy /etc/resolv.conf to chroot before installation" + (rvykydal) +- Do not use systemd-resolved in installer environment on RHEL (rvykydal) +- Do not write LVM devices file during image installation (vtrefny) -* Tue Mar 19 2024 Packit - 41.6-1 -- install-img-deps: Require podman (walters) - -* Wed Mar 06 2024 Adam Williamson - 41.2-2 +* Wed Mar 06 2024 Adam Williamson - 40.22.2-2 - Backport PR #5508 to make bootupd create EFI boot manager entries (#2268505) -* Tue Feb 20 2024 Packit - 41.2-1 +* Tue Feb 20 2024 Packit - 40.22.2-1 - Test for task category and category API (akankovs) - Creating categories dbus API for installation phases (akankovs) -* Fri Feb 16 2024 Packit - 41.1-1 -- bump major version number for Rawhide after F40 branching (mkolman) +* Thu Feb 15 2024 Packit - 40.22.1-1 +- Set up the fedora-40 branch (mkolman) * Tue Feb 06 2024 Adam Williamson - 40.21-2 - Backport PR #5460 to fix ostree btrfs installs with new util-linux (#2262892) From 4a3fb3b101cc82371a9c42333aae838091c89d45 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 4 Aug 2024 18:35:42 -0700 Subject: [PATCH 48/58] chore: Add patched fedora-logos package --- spec_files/fedora-logos/fedora-logos.spec | 1247 +++++++++++++++++++++ spec_files/fedora-logos/sidebar-bg.png | Bin 0 -> 160758 bytes spec_files/fedora-logos/sidebar-logo.png | Bin 0 -> 11171 bytes 3 files changed, 1247 insertions(+) create mode 100644 spec_files/fedora-logos/fedora-logos.spec create mode 100644 spec_files/fedora-logos/sidebar-bg.png create mode 100644 spec_files/fedora-logos/sidebar-logo.png diff --git a/spec_files/fedora-logos/fedora-logos.spec b/spec_files/fedora-logos/fedora-logos.spec new file mode 100644 index 0000000000..ffc6a1368c --- /dev/null +++ b/spec_files/fedora-logos/fedora-logos.spec @@ -0,0 +1,1247 @@ +Name: fedora-logos +Summary: Fedora-related icons and pictures +Version: 38.1.0 +Release: 100%{?dist}.bazzite +URL: https://pagure.io/fedora-logos +Source0: https://pagure.io/fedora-logos/archive/%{version}/fedora-logos-%{version}.tar.gz +Source1: sidebar-bg.png +Source2: sidebar-logo.png +License: LicenseRef-Fedora-Logos +Provides: redhat-logos = %{version}-%{release} +Provides: gnome-logos = %{version}-%{release} +Provides: system-logos = %{version}-%{release} +BuildArch: noarch +BuildRequires: hardlink + +%if ! 0%{?eln} +# For _kde4_* macros: +BuildRequires: kde4-macros(api) +%endif + +%description +The fedora-logos package contains image files which incorporate the +Fedora trademarks (the "Marks"). The Marks are trademarks or registered +trademarks of Red Hat, Inc. in the United States and other countries and +are used by permission. + +This package and its content may not be distributed with anything but +unmodified packages from Fedora Project. It can be used in a Fedora Spin, +but not in a Fedora Remix. If necessary, this package can be replaced by +the more liberally licensed generic-logos package. + +See the included COPYING file for full information on copying and +redistribution of this package and its contents. + +%package httpd +Summary: Fedora-related icons and pictures used by httpd +Provides: system-logos-httpd = %{version}-%{release} +BuildArch: noarch +Recommends: julietaula-montserrat-fonts +Provides: system-logos(httpd-logo-ng) + +%description httpd +The fedora-logos-httpd package contains image files which incorporate the +Fedora trademarks (the "Marks"). The Marks are trademarks or registered +trademarks of Red Hat, Inc. in the United States and other countries and +are used by permission. + +This package and its content may not be distributed with anything but +unmodified packages from Fedora Project. It can be used in a Fedora Spin, +but not in a Fedora Remix. If necessary, this package can be replaced by +the more liberally licensed generic-logos package. + +See the included COPYING file for full information on copying and +redistribution of this package and its contents. + +%package classic +Summary: Classic versions of the Fedora icons and pictures +BuildArch: noarch + +%description classic +The fedora-logos-classic package contains image files which incorporate the +classic Fedora trademarks (the "Marks"). The Marks are trademarks or +registered trademarks of Red Hat, Inc. in the United States and other +countries and are used by permission. + +This package and its content may not be distributed with anything but +unmodified packages from Fedora Project. + +See the included COPYING file for full information on copying and +redistribution of this package and its contents. + +PLEASE NOTE: This package does not provide system-logos and cannot be +used as a drop-in replacement for fedora-logos. + +%prep +%autosetup -p1 +cp -f %{SOURCE1} sidebar-bg.png +cp -f %{SOURCE2} sidebar-logo.png + +%build + +%install +# Bootloader related files +mkdir -p $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader +# To regenerate this file, see the bootloader/fedora.icns entry in the Makefile +install -p -m 644 bootloader/fedora.icns $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader + +# Classic variant +install -p -m 644 bootloader/fedora_classic.icns $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader + +# To regenerate these files, run: +# pngtopnm foo.png | ppmtoapplevol > foo.vol +install -p -m 644 bootloader/fedora.vol bootloader/fedora-media.vol $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader + +# m1n1 logos, see Makefile for how to regenerate +install -p -m 644 bootloader/bootlogo_128.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader/bootlogo_128.png +install -p -m 644 bootloader/bootlogo_256.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/bootloader/bootlogo_256.png + +# General purpose Fedora logos +for i in pixmaps/* ; do + install -p -m 644 $i $RPM_BUILD_ROOT%{_datadir}/pixmaps +done + +# Anaconda release notes (that contain Fedora logos) +# Pretty sure these are legacy/unused now (2021). +for i in rnotes/* ; do + mkdir -p $RPM_BUILD_ROOT%{_datadir}/anaconda/pixmaps/$i + install -p -m 644 $i/* $RPM_BUILD_ROOT%{_datadir}/anaconda/pixmaps/$i +done + +# The Plymouth charge theme (uses the Fedora logo) +mkdir -p $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge +for i in plymouth/charge/* ; do + install -p -m 644 $i $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge +done + +# The Plymoth spinner theme Fedora logo bits +mkdir -p $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/spinner +install -p -m 644 pixmaps/fedora-gdm-logo.png $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/spinner/watermark.png + +# Fedora logo icons +for size in 16x16 22x22 24x24 32x32 36x36 48x48 96x96 256x256 ; do + mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/$size/apps + mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/Bluecurve/$size/apps + pushd $RPM_BUILD_ROOT%{_datadir}/icons/Bluecurve/$size/apps + ln -s ../../../hicolor/$size/apps/fedora-logo-icon.png icon-panel-menu.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon_classic.png icon-panel-menu_classic.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon.png gnome-main-menu.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon_classic.png gnome-main-menu_classic.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon.png kmenu.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon_classic.png kmenu_classic.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon.png start-here.png + ln -s ../../../hicolor/$size/apps/fedora-logo-icon_classic.png start-here_classic.png + popd + for i in icons/hicolor/$size/apps/* ; do + install -p -m 644 $i $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/$size/apps + done +done + +for i in 16 22 24 32 36 48 96 256 ; do + mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/places + install -p -m 644 -D $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/apps/fedora-logo-icon.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/places/start-here.png + install -p -m 644 -D $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/apps/fedora-logo-icon_classic.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/places/start-here_classic.png +%if ! 0%{?eln} + install -p -m 644 -D $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/apps/fedora-logo-icon.png $RPM_BUILD_ROOT%{_kde4_iconsdir}/oxygen/${i}x${i}/places/start-here-kde-fedora.png + install -p -m 644 -D $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${i}x${i}/apps/fedora-logo-icon_classic.png $RPM_BUILD_ROOT%{_kde4_iconsdir}/oxygen/${i}x${i}/places/start-here-kde-fedora_classic.png +%endif +done + +%if ! 0%{?eln} +mkdir -p $RPM_BUILD_ROOT%{_kde4_iconsdir}/oxygen/scalable/apps/ +install -p -m 644 icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller.svg $RPM_BUILD_ROOT%{_kde4_iconsdir}/oxygen/scalable/apps/ +install -p -m 644 icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller_classic.svg $RPM_BUILD_ROOT%{_kde4_iconsdir}/oxygen/scalable/apps/ +%endif + +# Fedora favicon +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir} +pushd $RPM_BUILD_ROOT%{_sysconfdir} + ln -s %{_datadir}/icons/hicolor/16x16/apps/fedora-logo-icon.png favicon.png + ln -s %{_datadir}/icons/hicolor/16x16/apps/fedora-logo-icon_classic.png favicon_classic.png +popd + +# Fedora hicolor icons +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps +install -p -m 644 icons/hicolor/scalable/apps/xfce4_xicon1.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps +install -p -m 644 icons/hicolor/scalable/apps/xfce4_xicon1_classic.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps +install -p -m 644 icons/hicolor/scalable/apps/fedora-logo-icon.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps/start-here.svg +install -p -m 644 icons/hicolor/scalable/apps/fedora-logo-icon_classic.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps/start-here_classic.svg +install -p -m 644 icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller.svg +install -p -m 644 icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller_classic.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps/org.fedoraproject.AnacondaInstaller_classic.svg +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/places/ +pushd $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/places/ + ln -s ../apps/start-here.svg . + ln -s ../apps/start-here_classic.svg . +popd +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/symbolic/apps +install -p -m 644 icons/hicolor/symbolic/apps/org.fedoraproject.AnacondaInstaller-symbolic.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/symbolic/apps/ +install -p -m 644 icons/hicolor/symbolic/apps/org.fedoraproject.AnacondaInstaller-symbolic_classic.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/symbolic/apps/ + +# Fedora logos for the clearlooks theme (icewm) +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/icewm_taskbar_logos_fedora.tar.gz $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_logo.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/icewm_taskbar_logos_fedora_classic.tar.gz $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_logo_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks/taskbar/ +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/icewm_taskbar_logos_fedora.tar.gz $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_logo.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/icewm_taskbar_logos_fedora_classic.tar.gz $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ +install -p -m 644 icons/clearlooks/taskbar/linux_fedora_logo_classic.xpm $RPM_BUILD_ROOT%{_datadir}/icewm/themes/clearlooks-2px/taskbar/ + +# Fedora art in anaconda +# To regenerate the lss file, see anaconda/Makefile +mkdir -p %{buildroot}%{_datadir}/anaconda/boot +install -p -m 644 anaconda/splash.lss %{buildroot}%{_datadir}/anaconda/boot/ +install -p -m 644 anaconda/syslinux-splash.png %{buildroot}%{_datadir}/anaconda/boot/ +# note the filename change +install -p -m 644 anaconda/syslinux-vesa-splash.png %{buildroot}%{_datadir}/anaconda/boot/splash.png +mkdir -p %{buildroot}%{_datadir}/anaconda/pixmaps +install -p -m 644 anaconda/anaconda_header.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/anaconda_header_classic.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +# This had not been regenerated since Fedora 17. Clearly not used anymore. +# install -p -m 644 anaconda/progress_first.png %%{buildroot}%%{_datadir}/anaconda/pixmaps/ +# install -p -m 644 anaconda/splash.png %%{buildroot}%%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/sidebar-logo.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/sidebar-logo_classic.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/sidebar-bg.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/topbar-bg.png %{buildroot}%{_datadir}/anaconda/pixmaps/ +install -p -m 644 anaconda/fedora.css %{buildroot}%{_datadir}/anaconda/pixmaps/ + +# Variant Anaconda art +pushd anaconda +for i in atomic cloud server silverblue workstation ; do + cp -a $i $RPM_BUILD_ROOT%{_datadir}/anaconda/pixmaps/ +done +popd + +%if ! 0%{?eln} +# KDE Theme logos +# DO NOT REMOVE THIS ICON!!! We still support the Leonidas and Solar themes! +mkdir -p $RPM_BUILD_ROOT%{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536/ +install -p -m 644 kde-splash/Leonidas-fedora.png $RPM_BUILD_ROOT%{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536/logo.png +install -p -m 644 kde-splash/Leonidas-fedora_classic.png $RPM_BUILD_ROOT%{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536/logo_classic.png +%endif + +# SVG Fedora logos +mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name} +cp -a fedora/*.svg $RPM_BUILD_ROOT%{_datadir}/%{name} + +# HTTP files +cp -a css3 $RPM_BUILD_ROOT%{_datadir}/%{name}/ +mkdir -p $RPM_BUILD_ROOT%{_datadir}/fedora-testpage/ +cp -a testpage/index.html $RPM_BUILD_ROOT%{_datadir}/fedora-testpage/ + +# The proper path should be unbranded, but because of history it's easier for +# this package to symlink the old path to the proper one. This avoids having +# to perform scriptlet trickery to handle upgrades from the directory to a +# symlink. +ln -s fedora-testpage $RPM_BUILD_ROOT%{_datadir}/testpage + +# save some dup'd icons +# Except in /boot. Because some people think it is fun to use VFAT for /boot. +# hardlink is /usr/sbin/hardlink on Fedora <= 30 and /usr/bin/hardlink on F31+ +hardlink -vv %{buildroot}/usr + +%files +%license COPYING +%config(noreplace) %{_sysconfdir}/favicon.png +%{_datadir}/plymouth/themes/spinner/ +%if ! 0%{?eln} +# No one else before us owns this, so we shall. +%dir %{_kde4_sharedir}/kde4/ +%exclude %{_kde4_iconsdir}/oxygen/*/places/start-here-kde-fedora_classic.png +%exclude %{_kde4_iconsdir}/oxygen/scalable/apps/org.fedoraproject.AnacondaInstaller_classic.svg +%{_kde4_iconsdir}/oxygen/ +# DO NOT REMOVE THIS ICON!!! We still support the Leonidas and Solar themes! +%{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536/logo.png +%endif +# in -classic +%exclude %{_datadir}/pixmaps/bootloader/fedora_classic.icns +%exclude %{_datadir}/pixmaps/fedora-gdm-logo_classic.png +%exclude %{_datadir}/pixmaps/fedora-logo_classic.png +%exclude %{_datadir}/pixmaps/fedora-logo-small_classic.png +%exclude %{_datadir}/pixmaps/fedora-logo-sprite_classic.png +%exclude %{_datadir}/pixmaps/fedora-logo-sprite_classic.svg +%exclude %{_datadir}/pixmaps/fedora_whitelogo_classic.svg +%exclude %{_datadir}/pixmaps/poweredby_classic.png +%exclude %{_datadir}/pixmaps/system-logo-white_classic.png +%{_datadir}/pixmaps/* +# This lives in the http subpackage +%exclude %{_datadir}/pixmaps/poweredby.png +%exclude %{_datadir}/anaconda/pixmaps/*_classic* +%exclude %{_datadir}/anaconda/pixmaps/*/*_classic* +%{_datadir}/anaconda/pixmaps/* +%{_datadir}/anaconda/boot/splash.lss +%{_datadir}/anaconda/boot/syslinux-splash.png +%{_datadir}/anaconda/boot/splash.png +%exclude %{_datadir}/icewm/themes/clearlooks/taskbar/*_classic* +%exclude %{_datadir}/icewm/themes/clearlooks-2px/taskbar/*_classic* +%{_datadir}/icewm/themes/clearlooks/taskbar/* +%{_datadir}/icewm/themes/clearlooks-2px/taskbar/* +%exclude %{_datadir}/icons/hicolor/*/apps/*_classic* +%exclude %{_datadir}/icons/hicolor/*/places/*_classic* +%exclude %{_datadir}/icons/Bluecurve/*/apps/*_classic* +%{_datadir}/icons/hicolor/*/apps/* +%{_datadir}/icons/hicolor/*/places/* +%{_datadir}/icons/Bluecurve/*/apps/* +%exclude %{_datadir}/%{name}/*_classic* +# old logo +%exclude %{_datadir}/%{name}/css3 +%{_datadir}/%{name}/ +%{_datadir}/plymouth/themes/charge/ +%exclude %{_datadir}/plymouth/themes/charge/*_classic* +# we multi-own these directories, so as not to require the packages that +# provide them, thereby dragging in excess dependencies. +%dir %{_datadir}/icons/Bluecurve/ +%dir %{_datadir}/icons/Bluecurve/16x16/ +%dir %{_datadir}/icons/Bluecurve/16x16/apps/ +%dir %{_datadir}/icons/Bluecurve/22x22/ +%dir %{_datadir}/icons/Bluecurve/22x22/apps/ +%dir %{_datadir}/icons/Bluecurve/24x24/ +%dir %{_datadir}/icons/Bluecurve/24x24/apps/ +%dir %{_datadir}/icons/Bluecurve/32x32/ +%dir %{_datadir}/icons/Bluecurve/32x32/apps/ +%dir %{_datadir}/icons/Bluecurve/36x36/ +%dir %{_datadir}/icons/Bluecurve/36x36/apps/ +%dir %{_datadir}/icons/Bluecurve/48x48/ +%dir %{_datadir}/icons/Bluecurve/48x48/apps/ +%dir %{_datadir}/icons/Bluecurve/96x96/ +%dir %{_datadir}/icons/Bluecurve/96x96/apps/ +%dir %{_datadir}/icons/Bluecurve/256x256/ +%dir %{_datadir}/icons/Bluecurve/256x256/apps/ +%dir %{_datadir}/icons/hicolor/ +%dir %{_datadir}/icons/hicolor/16x16/ +%dir %{_datadir}/icons/hicolor/16x16/apps/ +%dir %{_datadir}/icons/hicolor/16x16/places/ +%dir %{_datadir}/icons/hicolor/22x22/ +%dir %{_datadir}/icons/hicolor/22x22/apps/ +%dir %{_datadir}/icons/hicolor/22x22/places/ +%dir %{_datadir}/icons/hicolor/24x24/ +%dir %{_datadir}/icons/hicolor/24x24/apps/ +%dir %{_datadir}/icons/hicolor/24x24/places/ +%dir %{_datadir}/icons/hicolor/32x32/ +%dir %{_datadir}/icons/hicolor/32x32/apps/ +%dir %{_datadir}/icons/hicolor/32x32/places/ +%dir %{_datadir}/icons/hicolor/36x36/ +%dir %{_datadir}/icons/hicolor/36x36/apps/ +%dir %{_datadir}/icons/hicolor/36x36/places/ +%dir %{_datadir}/icons/hicolor/48x48/ +%dir %{_datadir}/icons/hicolor/48x48/apps/ +%dir %{_datadir}/icons/hicolor/48x48/places/ +%dir %{_datadir}/icons/hicolor/96x96/ +%dir %{_datadir}/icons/hicolor/96x96/apps/ +%dir %{_datadir}/icons/hicolor/96x96/places/ +%dir %{_datadir}/icons/hicolor/256x256/ +%dir %{_datadir}/icons/hicolor/256x256/apps/ +%dir %{_datadir}/icons/hicolor/256x256/places/ +%dir %{_datadir}/icons/hicolor/scalable/ +%dir %{_datadir}/icons/hicolor/scalable/apps/ +%dir %{_datadir}/icons/hicolor/scalable/places/ +%dir %{_datadir}/anaconda +%dir %{_datadir}/anaconda/boot/ +%dir %{_datadir}/anaconda/pixmaps/ +%dir %{_datadir}/plymouth/ +%if ! 0%{?eln} +# DO NOT REMOVE THESE DIRS!!! We still support the Leonidas and Solar themes! +%dir %{_kde4_appsdir} +%dir %{_kde4_appsdir}/ksplash +%dir %{_kde4_appsdir}/ksplash/Themes/ +%dir %{_kde4_appsdir}/ksplash/Themes/Leonidas/ +%dir %{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536 +%endif + +%files httpd +%license COPYING +%dir %{_datadir}/fedora-testpage +%{_datadir}/testpage +%{_datadir}/fedora-testpage/index.html +%{_datadir}/pixmaps/poweredby.png + +# EVERYTHING IN CLASSIC USES OLD LOGO +%files classic +%license COPYING +%if ! 0%{?eln} +%{_kde4_iconsdir}/oxygen/*/places/start-here-kde-fedora_classic.png +%{_kde4_iconsdir}/oxygen/scalable/apps/org.fedoraproject.AnacondaInstaller_classic.svg +%{_kde4_appsdir}/ksplash/Themes/Leonidas/2048x1536/logo_classic.png +%endif +%{_sysconfdir}/favicon_classic.png +%{_datadir}/anaconda/pixmaps/*_classic* +%{_datadir}/anaconda/pixmaps/*/*_classic* +%{_datadir}/icewm/themes/clearlooks/taskbar/*_classic* +%{_datadir}/icewm/themes/clearlooks-2px/taskbar/*_classic* +%{_datadir}/icons/hicolor/*/apps/*_classic* +%{_datadir}/icons/hicolor/*/places/*_classic* +%{_datadir}/icons/Bluecurve/*/apps/*_classic* +%{_datadir}/%{name}/*_classic* +%{_datadir}/%{name}/css3/ +%{_datadir}/pixmaps/bootloader/fedora_classic.icns +%{_datadir}/pixmaps/fedora-gdm-logo_classic.png +%{_datadir}/pixmaps/fedora-logo_classic.png +%{_datadir}/pixmaps/fedora-logo-small_classic.png +%{_datadir}/pixmaps/fedora-logo-sprite_classic.png +%{_datadir}/pixmaps/fedora-logo-sprite_classic.svg +%{_datadir}/pixmaps/fedora_whitelogo_classic.svg +%{_datadir}/pixmaps/poweredby_classic.png +%{_datadir}/pixmaps/system-logo-white_classic.png +%{_datadir}/plymouth/themes/charge/*_classic* + + + +%changelog +* Mon Jan 29 2024 Tom Callaway - 38.1.0-5 +- fix BR to reflect new macro provides for kde4 macros + +* Wed Jan 24 2024 Fedora Release Engineering - 38.1.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 38.1.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 38.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Feb 20 2023 Neal Gompa - 38.1.0-1 +- Update to 38.1.0 + +* Thu Jan 19 2023 Fedora Release Engineering - 38.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Oct 27 2022 Davide Cavalca - 38.0.0-2 +- Install bootloader logos for m1n1 + +* Wed Sep 21 2022 Tom Callaway - 38.0.0-1 +- update to 38.0.0, contains darkbackground image properly in tarball +- source tarball comes from properly git tagged release + +* Thu Jul 21 2022 Fedora Release Engineering - 36.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Apr 04 2022 Nils Philippsen - 36.0.0-2 +- Add logo for dark backgrounds + +* Mon Mar 28 2022 Kevin Fenzi - 36.0.0-1 +- Add bootloader logos for m1n1 + +* Thu Jan 20 2022 Fedora Release Engineering - 35.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Oct 26 2021 Parag Nemade - 35.0.0-2 +- Change Recommends: from julietaula-montserrat-base-web-fonts to julietaula-montserrat-fonts + +* Fri Oct 8 2021 Tom Callaway - 35.0.0-1 +- add silverblue files + +* Wed Jul 21 2021 Fedora Release Engineering - 34.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jul 14 2021 Tom Callaway - 34.0.4-1 +- update to fix anaconda/pixmaps/topbar-bg.png (bz1959160) + +* Thu Apr 29 2021 Tom Callaway - 34.0.3-1 +- add logo file that breeze-icon-theme needs + +* Mon Apr 12 2021 Lubos Uhliarik - 34.0.2-3 +- Provide: system-logos(httpd-logo-ng) for httpd subpackage + +* Mon Apr 12 2021 Tom Callaway - 34.0.2-2 +- install anaconda/fedora.css + +* Wed Mar 31 2021 Tom Callaway - 34.0.2-1 +- fix logo without "f" cutout + +* Fri Mar 26 2021 Tom Callaway - 34.0.1-1 +- pull latest changes for new logo + +* Tue Mar 23 2021 Tom Callaway - 34.0.0-1 +- update to new logo +- make -classic subpackage + +* Tue Feb 09 2021 Jan Grulich - 33.0.0-3 +- Do not require kde-filesystem on ELN + +* Tue Jan 26 2021 Fedora Release Engineering - 33.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Oct 27 2020 Tom Callaway - 33.0.0-1 +- drop fedora 17 conditionals (lol) +- get rid of firstboot themed files (it went away after Fedora 18) +- use pre-generated files +- clean up spec file +- make it noarch again + +* Mon Jul 27 2020 Fedora Release Engineering - 30.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jan 28 2020 Fedora Release Engineering - 30.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 30.0.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue May 14 2019 Stephen Gallagher - 30.0.2-2 +- Make the httpd testpage path non-branded. +- Clean up the display of the "powered by" icons in the httpd testpage + +* Mon Apr 15 2019 Tom Callaway - 30.0.2-1 +- update to 30.0.2 (update anaconda icons) + +* Mon Mar 18 2019 Tom Callaway - 30.0.1-1 +- update to 30.0.1 (fixes rnotes not rendering text) + +* Thu Mar 7 2019 Tim Landscheidt - 30.0.0-5 +- Remove obsolete requirements for post scriptlet + +* Wed Feb 13 2019 Hans de Goede - 30.0.0-4 +- Add plymouth spinner theme watermark to brand the new plymouth theme for: + https://fedoraproject.org/wiki/Changes/FlickerFreeBoot + +* Thu Jan 31 2019 Fedora Release Engineering - 30.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Nov 9 2018 Tom Callaway - 30.0.0-2 +- removed all scriptlets (they were not really useful) + +* Thu Oct 4 2018 Tom Callaway - 30.0.0-1 +- update to 30.0.0 +- httpd subpackage now has a "test page" index.html + +* Fri Jul 13 2018 Fedora Release Engineering - 28.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Apr 12 2018 Tom Callaway - 28.0.3-1 +- update to 28.0.3 to fix server image + +* Fri Feb 09 2018 Igor Gnatenko - 28.0.2-3 +- Escape macros in %%changelog + +* Wed Feb 07 2018 Fedora Release Engineering - 28.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Jan 04 2018 Tom Callaway - 28.0.2-1 +- create atomic files for anaconda to use + +* Mon Dec 04 2017 Stephen Gallagher - 28.0.1-1 +- Move CSS for logos in the graphical installer into fedora-logos + +* Wed Aug 02 2017 Fedora Release Engineering - 26.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 26.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue May 23 2017 Tom Callaway - 26.0.1-1 +- update to 26.0.1, add fedora/fedora_lightbackground.svg + +* Wed Feb 8 2017 Tom Callaway - 26.0.0-2 +- mark license files correctly + +* Tue Jan 03 2017 Tom Callaway - 26.0.0-1 +- move icewm fedora logos into this package + +* Wed Feb 03 2016 Fedora Release Engineering - 22.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 22.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri May 1 2015 Tom Callaway - 22.0.0-1 +- fix "join us" rnote to have new url (thanks to Zamir SUN) + +* Wed Nov 19 2014 Tom Callaway - 21.0.5-1 +- add fedora logo for background overlay +- move anaconda logo files into hicolor (drop old "Fedora" dir) +- add anaconda theme art for "no product", workstation, server, cloud + +* Tue Sep 23 2014 Tom Callaway - 21.0.4-1 +- update rnotes images to include de translations (thanks Roman Spirgi and Dominique) + +* Sat Aug 16 2014 Fedora Release Engineering - 21.0.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 21.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Feb 4 2014 Tom Callaway - 21.0.3-1 +- optimize pngs +- own /usr/share/kde4/ +- update rnote svg to include bulgarian and croatian + +* Mon Dec 30 2013 Tom Callaway - 21.0.2-1 +- move to svg versions of rnotes (RIP HAL-9000 rnote) + +* Thu Dec 12 2013 Tom Callaway - 21.0.1-2 +- do not make useless debuginfo package (bz 1035928) + +* Tue Nov 19 2013 Tom Callaway - 21.0.1-1 +- make arch specific package so that it always builds +- add lang specific rnotes + +* Wed Oct 9 2013 Tom Callaway - 21.0.0-1 +- update to 21.0.0 +- arch conditionalize the lss magic, cannot use ifarch because it checks + _target_cpu, not _arch, and _target_cpu evals to "noarch" here + +* Wed Oct 9 2013 Tom Callaway - 19.0.4-4 +- subpackage poweredby.png to minimize httpd footprint + +* Sat Aug 03 2013 Fedora Release Engineering - 19.0.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Wed Jun 19 2013 Tom Callaway - 19.0.4-2 +- drop the hal9000 release note, with great sadness + +* Fri May 24 2013 Tom Callaway - 19.0.4-1 +- bring back the grub2 background/fireworks files + +* Fri May 17 2013 Tom Callaway - 19.0.3-1 +- drop unused files to trim down this package size a bit + +* Tue May 7 2013 Tom Callaway - 19.0.2-1 +- add fedora-gdm-logo.png for login screen + +* Thu Apr 4 2013 Tom Callaway - 19.0.1-1 +- add tm mark to SVG +- removed the gradient version of the SVG from fedora-logo-sprite.svg + +* Thu Feb 14 2013 Tom Callaway - 19.0.0-1 +- add rnotes +- do not hardlink anything in /boot + +* Sun Feb 03 2013 Kevin Kofler - 17.0.3-3 +- drop unused directory ownership I accidentally reenabled in -2 + +* Sun Feb 03 2013 Kevin Kofler - 17.0.3-2 +- restore Leonidas KSplash icon, fixes Leonidas and Solar KSplash themes + +* Fri Sep 21 2012 Tom Callaway - 17.0.3-1 +- update to 17.0.3 (adds css3 bits) +- make fireworks.png an actual file instead of a symlink (bz853494) +- conditionalize grub1 art so it is packaged for f17 and older + +* Tue Sep 4 2012 Tom Callaway - 17.0.2-6 +- drop grub1 art (nothing uses it anymore) + +* Tue Aug 21 2012 Tom Callaway - 17.0.2-5 +- add fireworks.png symlink + +* Thu Aug 2 2012 Tom Callaway - 17.0.2-4 +- codename update for f18 +- drop unused kde dir ownerships + +* Thu Jul 19 2012 Fedora Release Engineering - 17.0.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jun 12 2012 Rex Dieter 17.0.2-2 +- drop reference to (old/f11) Leonidas ksplash theme + +* Wed May 9 2012 Tom Callaway - 17.0.2-1 +- add grub2 background.png + +* Tue May 1 2012 Tom Callaway - 17.0.1-1 +- add apple efi label images +- fix copyright date on splash (bz815012) + +* Tue Feb 14 2012 Tom Callaway - 17.0.0-1 +- anaconda splash art specifying a version updated to 17 + +* Fri Jan 13 2012 Fedora Release Engineering - 16.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Sep 13 2011 Tom Callaway - 16.0.2-1 +- 16.0.2 +- moved syslinux-vesa-splash.jpg to boot/splash.png + +* Wed Sep 7 2011 Tom Callaway - 16.0.1-1 +- 16.0.1 +- updated beta art and codename + +* Fri Aug 5 2011 Tom Callaway - 16.0.0-1 +- 16.0.0 +- updated progress_first.png +- added script and svg to generate new progress_first.png + +* Wed Jun 15 2011 Tom Callaway - 15.0.1-1 +- 15.0.1 +- add svg logos +- get the last few unowned directories + +* Thu Jun 02 2011 Tom Callaway - 15.0.0-4 +- fix unowned directories (bz 709510) + +* Sat May 07 2011 Christopher Aillon - 15.0.0-3 +- Update icon cache scriptlet + +* Wed Mar 30 2011 Tom Callaway +- Provides/Obsoletes gnome-logos (bz 692231) + +* Mon Mar 21 2011 Tom Callaway +- update with F-15 beta images, codename + +* Tue Feb 08 2011 Fedora Release Engineering - 14.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jan 05 2011 Matthew Garrett - 14.0.2-1 +- Add logo for EFI Macs + +* Fri Oct 15 2010 Tom "spot" Callaway - 14.0.1-500 +- convert missing Requires to BuildRequires +- no longer package splashtolss.sh +- package splash.lss +- update to 14.0.1-500, so we are equal to (or greater than) generic-logos. + Hey notting, stop bumping past me in version, its not a race! ;) + +* Wed Oct 13 2010 Tom "spot" Callaway - 14.0.0-3 +- add missing Requires for splashtolss.sh (bz 635289) + +* Tue Sep 28 2010 Rex Dieter - 14.0.0-2 +- s/Fedora-KDE/oxygen/ icons (#615621) +- use hardlink to save a little space + +* Mon Sep 13 2010 Tom "spot" Callaway - 14.0.0-1 +- update to 14.0.0 + +* Sun Jul 18 2010 Mamoru Tasaka - 13.0.3-3 +- And fix another %%postun scriptlet error + +* Sat Jul 17 2010 Rex Dieter - 13.0.3-2 +- fix %%postun scriptlet error + +* Fri Jul 16 2010 Tom "spot" Callaway 13.0.3-1 +- Anaconda changed where it puts and looks for items, so we need to place + our files in the correct spot. + +* Fri Jun 25 2010 Rex Dieter - 13.0.2-2 +- Fedora-KDE icons are now fedora-kde-icons-theme, not kde-settings +- simplify Fedora-KDE multidir ownership +- optimize icon scriplets +- drop ancient Conflicts: kdebase ... + +* Wed May 5 2010 Tom "spot" Callaway - 13.0.2-1 +- add scalable start-here svg + +* Mon May 3 2010 Tom "spot" Callaway - 13.0.1-1 +- fix makefile to not overwrite progress_first.png + +* Mon May 3 2010 Tom "spot" Callaway - 13.0.0-1 +- f13 art, improved fedora icon + +* Wed Nov 4 2009 Tom "spot" Callaway - 12.0.3-2 +- kde icon installation + +* Thu Oct 29 2009 Tom "spot" Callaway - 12.0.3-1 +- Update to 12.0.3, yet another name for system-software-install icons + +* Wed Oct 28 2009 Tom "spot" Callaway - 12.0.2-2 +- Fixed 12.0.2 source, package up scalable svg source for system-software-install icon + +* Wed Oct 28 2009 Tom "spot" Callaway - 12.0.2-1 +- Update to 12.0.2, has improved system-software-install icon + +* Wed Oct 21 2009 Tom "spot" Callaway - 12.0.1-1 +- Update to 12.0.1, switch to generic version of firstboot-left.png + +* Thu Oct 1 2009 Tom "spot" Callaway - 12.0.0-1 +- Update to 12.0.0, F12 art (except KDE) + +* Fri Sep 4 2009 Tom "spot" Callaway - 11.0.7-1 +- Update to 11.0.7, fix license tag, description + +* Fri Jul 24 2009 Fedora Release Engineering - 11.0.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon May 18 2009 Tom "spot" Callaway 11.0.6-1 +- drop "lowres" image, saves a small amount of diskspace + +* Wed May 06 2009 Ray Strode 11.0.5-1 +- Add plymouth "Charge" theme artwork + +* Wed Apr 22 2009 Tom "spot" Callaway 11.0.4-1 +- update to 11.0.4, fix art to actually be in leonidas theme + +* Wed Apr 22 2009 Tom "spot" Callaway 11.0.3-1 +- update to 11.0.3, adds KDE splash + +* Mon Apr 20 2009 Tom "spot" Callaway 11.0.2-1 +- fix missing progress files + +* Sun Apr 19 2009 Lubomir Rintel - 11.0.1-2 +- fix bootsplash to be a bit more psychadelic + +* Fri Apr 17 2009 Tom "spot" Callaway - 11.0.1-1 +- fix bootsplash to be less psychadelic + +* Wed Apr 15 2009 Tom "spot" Callaway - 11.0.0-1 +- Update to 11.0.0 art (except for KDE splash) + +* Tue Feb 24 2009 Fedora Release Engineering - 10.0.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Jan 14 2009 Tom "spot" Callaway 10.0.1-4 +- actually, no. I won't make a grub subpackage. No real benefit aside from saving 1MB on disk. + +* Wed Jan 14 2009 Tom "spot" Callaway 10.0.1-3 +- make grub subpackage (bz 479949) + +* Thu Nov 6 2008 Tom "spot" Callaway 10.0.1-2 +- pull .git files out of source tarball to keep SRPM size down + +* Thu Nov 6 2008 Tom "spot" Callaway 10.0.1-1 +- fix broken xfce4 icon (bz 470353) +- own directories for clean removal (bz 169282) + +* Sun Oct 26 2008 Kevin Kofler 10.0.0-2 +- Add (current version of) Fedora logo for SolarComet KSplash theme + +* Fri Oct 24 2008 Tom "spot" Callaway 10.0.0-1 +- New solar art + +* Thu Oct 23 2008 Colin Walters - 0.99.4-3 +- Install logo as /etc/favicon.png (http://cgwalters.livejournal.com/19030.html) + +* Thu Oct 2 2008 Matthias Clasen - 9.99.4-2 +- Don't ship the screensaver desktop file thats in fedora-screensaver-theme + +* Tue Sep 23 2008 Tom "spot" Callaway - 9.99.4-1 +- update to 9.99.4 +- replace firstboot workstation logo with something modern for F10 + +* Wed Sep 10 2008 Tom "spot" Callaway - 9.99.3-1 +- move to its new home +- package up xfce4_xicon1.svg (bz 445986) + +* Mon Aug 25 2008 Ray Strode - 9.99.2-1 +- Move kde background upstream + +* Mon Aug 25 2008 Ray Strode - 9.99.1-1 +- add a logo for xfce (bug 445986) + +* Wed Jul 9 2008 Matthias Clasen - 9.99.0-1 +- rhgb is no more + +* Thu May 29 2008 Ray Strode - 9.0.1-1 +- Add logo with white type face + +* Mon Apr 28 2008 Matthias Clasen - 9.0.0-3 +- Remove a broken symlink (#444298) + +* Mon Apr 28 2008 Kevin Kofler - 9.0.0-2 +- use bg image without rounded corners for kde-splash (Pavel Shevchuk, #443308) + +* Fri Apr 11 2008 Ray Strode - 9.0.0-1 +- update grub splash screen to not have sulfur and look better + on EFI systems + +* Thu Apr 10 2008 Rex Dieter - 8.99.2-2 +- kde-splash: rename to FedoraWaves, fixup animation +- include start-here icons for Fedora-KDE icon theme + +* Wed Apr 2 2008 Ray Strode - 8.99.2-1 +- firstboot changed artwork locations + +* Tue Apr 1 2008 Ray Strode - 8.99.1-1 +- Add grub, firstboot and anaconda artwork +- merge kde artwork from downstream +- drop unused images + +* Tue Apr 1 2008 Ray Strode - 8.99.0-1 +- Add F-9 rhgb artwork + +* Thu Mar 27 2008 Kevin Kofler - 8.0.3-4 +- Include Waves KSplash theme for KDE 4 + +* Thu Mar 27 2008 Kevin Kofler - 8.0.3-3 +- Don't ship KDE 3 KSplash and KDM themes (which don't work in KDE 4) + +* Fri Mar 21 2008 Matthias Clasen - 8.0.3-2 +- Don't ship parts of gdm themes that gdm doesn't use anymore + +* Wed Nov 14 2007 Ray Strode - 8.0.3-1 +- Install Fedora Flying High GDM logo (woops, bug 382281) + +* Mon Oct 29 2007 Matthias Clasen - 8.0.2-2 +- Fix a typo in the description (Stepan Kasal) + +* Mon Oct 29 2007 Matthias Clasen - 8.0.2-1 +- Add Infinity splash screens for KDE and Gnome + +* Fri Oct 19 2007 Matthias Clasen - 8.0.0-2 +- Silence %%post (#340551) + +* Wed Oct 17 2007 Ray Strode - 8.0.0-1 +- Drop Fedora Infinity gdm theme + +* Tue Oct 16 2007 Ray Strode - 7.96.0-1 +- Fix up some %%install goo +- drop bluecurve kdm fedora logo images too + +* Tue Oct 16 2007 Ray Strode - 7.95.0-1 +- actually drop bluecurve gdm fedora logo images that aren't trademarked + +* Wed Oct 10 2007 Ray Strode - 7.94.0-1 +- drop bluecurve gdm fedora logo images that aren't trademarked + +* Wed Oct 10 2007 Ray Strode - 7.93.0-1 +- Install fedora 7 logo in the right place + +* Wed Sep 19 2007 Matthias Clasen - 7.92.4-1 +- Acutally install the gdm theme + +* Wed Sep 19 2007 Matthias Clasen - 7.92.3-1 +- Add infinity gdm theme + +* Wed Sep 19 2007 Matthias Clasen - 7.92.2-1 +- Add infinity lock dialog + +* Thu Sep 13 2007 Bill Nottingham - 7.92.1-1 +- add the powered-by logo (#250676) + +* Wed Sep 5 2007 Jeremy Katz - 7.92.0-4 +- merge back changes that got lost + +* Fri Aug 31 2007 Jeremy Katz - 7.92.0-3 +- fix grub splash image to be an actual image + +* Tue Aug 28 2007 Máirín Duffy - 7.92.0-1 +- update the anaconda artwork +- changed default backgrounds + +* Mon Aug 27 2007 Ray Strode - 7.90.2-1 +- update the firstboot artwork +- update the grub artwork + +* Mon Aug 27 2007 Ray Strode - 7.90.1-1 +- update the rhgb artwork + +* Fri Aug 24 2007 Ray Strode - 7.90.0-1 +- add a 150px variant of the fedora logo + (requested by Paul Frields) +- update license field to be more clear + +* Wed Jul 04 2007 Florian La Roche 6.0.98-5 +- require coreutils for the %%post script + +* Fri Jun 15 2007 Adam Jackson 6.0.98-4 +- Remove the Requires on redhat-artwork and fedora-icon-theme, and just + multi-own the directories. Fixes some hilarious dependency chains. + +* Mon Apr 23 2007 Matthias Clasen - 6.0.98-3 +- Clean up %%post scriptlet (#237428) + +* Fri Apr 20 2007 Matthias Clasen - 6.0.98-2 +- Add a Fedora icon theme + +* Thu Apr 05 2007 Than Ngo - 6.0.98-1 +- fix ksplash BlueCurve theme + +* Wed Mar 28 2007 Matthias Clasen 6.0.97-2 +- Save some space by linking backgrounds + +* Thu Mar 22 2007 Than Ngo 6.0.97-1 +- Add new Ksplash theme for Fedora 7 + +* Tue Mar 20 2007 Matthias Clasen - 6.0.96-1 +- Add dual screen backgrounds + +* Thu Mar 15 2007 Ray Strode - 6.0.95-1 +- Drop weird gnome-logo-icon-transparent.png symlink that + makes fedora show up where gnome logo is supposed to + +* Thu Mar 15 2007 Matthias Clasen - 6.0.94-1 +- Retouch parts of the rhgb image to align it + better with the login screen + +* Fri Feb 23 2007 Matthias Clasen - 6.0.93-1 +- New backgrounds (dual versions still missing) + +* Fri Feb 23 2007 Matthias Clasen - 6.0.92-5 +- Directory ownership fixes + +* Thu Feb 22 2007 Jeremy Katz - 6.0.92-4 +- resave the syslinux splash so that it works (lalalala....) + +* Thu Feb 22 2007 Matthias Clasen - 6.0.92-3 +- Improve the branded lock dialog + +* Wed Feb 21 2007 Matthias Clasen - 6.0.92-2 +- Some more new images + +* Wed Feb 21 2007 Matthias Clasen - 6.0.92-1 +- New lock dialog + +* Tue Feb 20 2007 Matthias Clasen - 6.0.91-3 +- Some more new anaconda images +- Slight update to one rhgb image + +* Sun Feb 18 2007 Matthias Clasen - 6.0.91-2 +- Add new gnome splash +- New firstboot images +- Add some new anaconda images +- Add new grub image + +* Sun Feb 18 2007 Matthias Clasen - 6.0.91-1 +- Add new RHGB images + +* Thu Jan 18 2007 Jeremy Katz - 6.0.90-1 +- add syslinux splash for use with graphical menu + +* Fri Sep 22 2006 Than Ngo - 6.0.6-1 +- add FedoraDNA theme for KDM + +* Fri Sep 22 2006 Matthias Clasen - 6.0.5-1 +- Add a description for the default backgrounds + +* Fri Sep 22 2006 Ray Strode - 6.0.2-1 +- update screenshot in FedoraDNA theme + +* Fri Sep 22 2006 Than Ngo - 6.0.1-1 +- update kde ksplash + +* Fri Sep 22 2006 Ray Strode - 6.0.0-1 +- drop unused n-small image in FedoraDNA gdm theme +- rename fedora.png to logo.png in FedoraDNA gdm theme +- crop fedora.png to not have uneven padding in FedoraDNA + gdm theme + +* Fri Sep 22 2006 Bill Nottingham +- update grub splash (#207637) + +* Thu Sep 21 2006 Matthias Clasen - 1.1.55-1 +- Final update for FC6 graphics + +* Wed Sep 20 2006 Matthias Clasen - 1.1.54-1 +- Update to themed lock dialog + +* Thu Sep 7 2006 Matthias Clasen - 1.1.53-1 +- Update the syslinux splash + +* Thu Sep 7 2006 Matthias Clasen - 1.1.52-1 +- Fix the colors in the grub splash + +* Thu Sep 7 2006 Matthias Clasen - 1.1.51-1 +- Add new gdm theme + +* Wed Sep 06 2006 John (J5) Palmieri - 1.1.50-1 +- cvs add the new backgrounds this time + +* Tue Sep 05 2006 John (J5) Palmieri - 1.1.49-1 +- New graphics for fc6 +- Remove the 4:3 background and add 5:4 ratio background + +* Sun Aug 20 2006 Matthias Clasen - 1.1.48-1.fc6 +- Update lock dialog to work with current gnome-screensaver + +* Sun Aug 13 2006 Matthias Clasen - 1.1.47-2.fc6 +- Add links for new icon name used in the gnome-panel menubar + +* Fri Jul 28 2006 John (J5) Palmieri - 1.1.47-1 +- Add a 4:3 aspect ratio background +- Fix extention to be .jpg on backgrounds + +* Thu Jul 27 2006 John (J5) Palmieri - 1.1.46-1 +- Add new default backgrounds + +* Wed Jul 26 2006 Alexander Larsson - 1.1.45-1 +- Add wide version of default desktop background + +* Tue Jul 25 2006 Florian La Roche +- add version/release to the Provides: in the specfile + +* Tue Jul 11 2006 Matthias Clasen 1.1.44-1 +- Move the complete lock dialog theme here + +* Mon Jun 5 2006 Matthias Clasen 1.1.43-1 +- Add branded desktop background and move the lock dialog + background to the right directory + +* Tue Feb 28 2006 Matthias Clasen 1.1.42-1 +- New artwork for gdm, kdm Bluecurve from Diana Fong + +* Wed Jan 25 2006 Chris Lumens 1.1.41-1 +- New artwork for firstboot from dfong (#178106). + +* Fri Jan 20 2006 Ray Strode - 1.1.40-1 +- update the logo in the corner + +* Thu Jan 19 2006 Ray Strode - 1.1.39-1 +- give rhgb a new look from Diana Fong + +* Tue Jan 17 2006 Ray Strode - 1.1.38-1 +- add logo bits of new gdm theme + +* Tue Dec 20 2005 Ray Strode - 1.1.37-1 +- another new image from dfong (splash screen) +- move screensaver lock dialog background here + +* Tue Dec 20 2005 Ray Strode - 1.1.36-1 +- another new image from dfong (screensaver sprite) + +* Mon Dec 19 2005 Jeremy Katz - 1.1.35-1 +- new images from dfong + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Nov 10 2005 John (J5) Palmieri - 1.1.34-1 +- Symlink fedora-logo-icon into Bluecurve instead of hicolor + to avoid conflicts with other packages + +* Thu Nov 10 2005 John (J5) Palmieri - 1.1.33-1 +- Add symlinks for the panel icons to be the fedora logos + +* Thu Nov 10 2005 John (J5) Palmieri - 1.1.32-1 +- Add new fedora logos to pixmap and icons/hicolor + +* Mon May 23 2005 Jeremy Katz - 1.1.31-1 +- copyright date on anaconda splash (#153964) + +* Mon Apr 18 2005 Than Ngo 1.1.30-1 +- add missing fedora logos for kdmtheme + +* Tue Oct 26 2004 Jeremy Katz - 1.1.29-1 +- non-test anaconda splash + +* Tue Oct 26 2004 Jeremy Katz - 1.1.28-1 +- generic Fedora Core graphics for !test release + +* Thu Sep 30 2004 Than Ngo 1.1.27-1 +- fix kde splash + +* Sat Jun 5 2004 Jeremy Katz - 1.1.26-1 +- provide: system-logos + +* Thu Jun 3 2004 Jeremy Katz - 1.1.25-1 +- add anaconda bits with fedora logos + +* Wed May 5 2004 Jeremy Katz - 1.1.24-1 +- newer grub image for fc2 + +* Tue Mar 23 2004 Alexander Larsson 1.1.23-1 +- Use correct gdm logo + +* Tue Mar 23 2004 Alexander Larsson 1.1.22-1 +- fix up gdm logo and add screenshot + +* Tue Feb 3 2004 Jonathan Blandford 1.1.21-1 +- add rhgb logo + +* Tue Nov 11 2003 Than Ngo 1.1.20.2-1 +- added Preview for ksplash + +* Mon Nov 10 2003 Than Ngo 1.1.20.1-1 +- added new BlueCurve Ksplash Theme for KDE 3.2 + +* Thu Oct 30 2003 Havoc Pennington 1.1.20-1 +- build new stuff from garrett + +* Thu Oct 9 2003 Bill Nottingham 1.1.19-1 +- add a symlink for up2date + +* Tue Oct 7 2003 Bill Nottingham 1.1.18-1 +- rename package + +* Wed Sep 24 2003 Bill Nottingham 1.1.17-1 +- new license + +* Tue Sep 23 2003 Michael Fulbright 1.1.16-1 +- added Fedora graphics + +* Fri Jul 18 2003 Havoc Pennington 1.1.15-1 +- build new stuff from garrett + +* Wed Feb 26 2003 Havoc Pennington 1.1.14-1 +- build new stuff in cvs + +* Mon Feb 24 2003 Jeremy Katz 1.1.12-1 +- updated again +- actually update the grub splash + +* Fri Feb 21 2003 Jeremy Katz 1.1.11-1 +- updated splash screens from Garrett + +* Tue Feb 18 2003 Havoc Pennington 1.1.10-1 +- move in a logo from gdm theme #84543 + +* Mon Feb 3 2003 Havoc Pennington 1.1.9-1 +- rebuild + +* Wed Jan 15 2003 Brent Fox 1.1.8-1 +- rebuild for completeness + +* Mon Dec 16 2002 Havoc Pennington +- rebuild + +* Thu Sep 5 2002 Havoc Pennington +- add firstboot images to makefile/specfile +- add /usr/share/pixmaps stuff +- add splash screen images +- add COPYING + +* Thu Sep 5 2002 Jeremy Katz +- add boot loader images + +* Thu Sep 5 2002 Havoc Pennington +- move package to CVS + +* Tue Jun 25 2002 Owen Taylor +- Add a shadowman-only derived from redhat-transparent.png + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Thu May 31 2001 Owen Taylor +- Fix alpha channel in redhat-transparent.png + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Mon Jun 19 2000 Owen Taylor +- Add %%defattr + +* Mon Jun 19 2000 Owen Taylor +- Add version of logo for embossing on the desktop + +* Tue May 16 2000 Preston Brown +- add black and white version of our logo (for screensaver). + +* Mon Feb 07 2000 Preston Brown +- rebuild for new description. + +* Sat Sep 25 1999 Bill Nottingham +- different. + +* Mon Sep 13 1999 Preston Brown +- added transparent mini and 32x32 round icons + +* Sat Apr 10 1999 Michael Fulbright +- added rhad logos + +* Thu Apr 08 1999 Bill Nottingham +- added smaller redhat logo for use on web page + +* Wed Apr 07 1999 Preston Brown +- added transparent large redhat logo + +* Tue Apr 06 1999 Bill Nottingham +- added mini-* links to make AnotherLevel happy + +* Mon Apr 05 1999 Preston Brown +- added copyright + +* Tue Mar 30 1999 Michael Fulbright +- added 48 pixel rounded logo image for gmc use + +* Mon Mar 29 1999 Preston Brown +- package created diff --git a/spec_files/fedora-logos/sidebar-bg.png b/spec_files/fedora-logos/sidebar-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d304c802ca8c17a81bcbd81d7bed964d7e1d49c6 GIT binary patch literal 160758 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 z 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

)^uqwOrL&6abRecz=L~ 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�zE9F8HdS=#;jYrF1xA$ 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 b47>h6@wVdTsFwv200000NkvXXu0mjf^n?-F literal 0 HcmV?d00001 diff --git a/spec_files/fedora-logos/sidebar-logo.png b/spec_files/fedora-logos/sidebar-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..71c8b7e791ce8e5920c7c35bfc75eec906cdd5c6 GIT binary patch literal 11171 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

?-zjP`Rgp3(_`p*4h?e>R14(n%Zl;VJ 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 literal 0 HcmV?d00001 From fd1fa1ddfdee04e3ee249595f991a661596ce508 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 4 Aug 2024 23:34:21 -0700 Subject: [PATCH 49/58] chore: Add css file to fedora-logos package --- spec_files/fedora-logos/anaconda_header.png | Bin 0 -> 8253 bytes spec_files/fedora-logos/fedora-logos.spec | 20 +++++++---- spec_files/fedora-logos/fedora.css | 37 ++++++++++++++++++++ spec_files/fedora-logos/topbar-bg.png | Bin 0 -> 58070 bytes 4 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 spec_files/fedora-logos/anaconda_header.png create mode 100644 spec_files/fedora-logos/fedora.css create mode 100644 spec_files/fedora-logos/topbar-bg.png diff --git a/spec_files/fedora-logos/anaconda_header.png b/spec_files/fedora-logos/anaconda_header.png new file mode 100644 index 0000000000000000000000000000000000000000..1e872c9b3b3e77c4466e5db015e5a2616b5a826c GIT binary patch literal 8253 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%0AL`+fCzj97b@G(O(F7& zQ`F9i>xszw8+h-Bqr$^1g(SikN21~#n;^0DgS`LxMnPDy)HkR;+5AhrzBw%z@~SsF z0tOyw*`ut3M*s+J5M%(brBG$tlF!d0A|X4db$W&+QJCCr9Bp-dY|Pzvr0F% zQW(^91@Fl@hZB*S(x8d^SuBMK#wrOQ+$Z9ASa$&t9T62wg`|}SG2KDh(nN%;JS!dq z4m6v=7ELQZm-0gSzHSMVy| z9@qdII!*KP$sKn@KNxRl=`#3@GT>vCOS6nst8`pXH=#4w+&3(U-@Co)5zP65&C-^m zhPj*Yp%MD^jnsR>!Mod+AP`CKROv*ag9l*ar;lm4Zo;-u&j8>lBj{=Q?Jpjj3)LAu z5-=#QFSCHi&HHm?&T5XPCr6fu?n!B)5g2QEaU@b1@X<~iKwx29K4TQ-Y|kZ_X$}3S}(~g@LL%B z=z}K62%0s|ZyN(KTaH~1IB3z#i#HK?TEWMWaet!nr00fy+ZvqG`4IrfuOp-l71XBbN91*nu z1dWkkfe2?c74F$zjpRr0z(dJkkd+`vfC|}HKu#A5AVe2T754v#UdWj~(*xT^*nf5k zLjy$6jHwZ^Mb1KyWgj_sFu{0kP){(ihjunaHWGLc?NG$noGka58xzt{|ZA8-KRsFQM(eSl5}JT;AulyYS0dOR8|(AF<62!4%`?n`bzqycxgS7PaR2-9Vc z7If|rb^vts8OKxxZRC4sJo@b~1oKmyRxihOuGGD}AZ*uRpunX4Mu3JAXn-!{S08w; zqxIo!M+36}Rx95bdw}jx*aSp294?AM3zJX-O|qB)s?JDWtbHL4?M20T`(bQS*clkfKmA`5Qz4 z0i)EH0wN%Qb4cE2;DFxAT6#q40>JT#3p#LsrUTTgwjiI?<{XmWs7hHF01`%p6U%mt z4@q61#yu{y0KgVcOj-gQC`jva8UousdB5u-uwy3VGewU?8Aja!LcC9((fk>@Ph+G4K%`=!lLMGI|tDM@bMGiEkW1V7;oCVx^ z={`*mp{aqu(;Cu?feK_eDI{_?_(@u29|6iL4x~>2I5H@=2D(-m6M?=V`i&fhl93~n z4?@?^d1_=xhy=%AarAf3w*cF!TBdST}v`px

tZ(J&<(cUycp4d1 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 z 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 Date: Mon, 5 Aug 2024 08:36:06 -0700 Subject: [PATCH 50/58] chore: Switch to build-container-installer v1.2.2 --- .github/workflows/build_iso.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index 2ec0443f63..c8813acb17 100644 --- a/.github/workflows/build_iso.yml +++ b/.github/workflows/build_iso.yml @@ -107,7 +107,7 @@ jobs: curl -Lo ${{ github.workspace }}/bazzite.repo https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-${{ matrix.major_version }}/kylegospo-bazzite-fedora-${{ matrix.major_version }}.repo - name: Build ISOs - uses: jasonn3/build-container-installer@main + uses: jasonn3/build-container-installer@v1.2.2 id: build with: arch: x86_64 From 4775d33401e5497854cf0ad685355b50888bdada Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 5 Aug 2024 08:37:11 -0700 Subject: [PATCH 51/58] chore: Add nobara to ID_LIKE --- .../desktop/shared/usr/libexec/containerbuild/image-info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system_files/desktop/shared/usr/libexec/containerbuild/image-info b/system_files/desktop/shared/usr/libexec/containerbuild/image-info index 81bbeb5de3..bc314dfee1 100755 --- a/system_files/desktop/shared/usr/libexec/containerbuild/image-info +++ b/system_files/desktop/shared/usr/libexec/containerbuild/image-info @@ -52,7 +52,7 @@ sed -i "s|^SUPPORT_URL=.*|SUPPORT_URL=\"$SUPPORT_URL\"|" /usr/lib/os-release sed -i "s|^BUG_REPORT_URL=.*|BUG_REPORT_URL=\"$BUG_SUPPORT_URL\"|" /usr/lib/os-release sed -i "s|^CPE_NAME=\"cpe:/o:fedoraproject:fedora|CPE_NAME=\"cpe:/o:universal-blue:${IMAGE_PRETTY_NAME,}|" /usr/lib/os-release sed -i "s/^DEFAULT_HOSTNAME=.*/DEFAULT_HOSTNAME=\"${IMAGE_PRETTY_NAME,}\"/" /usr/lib/os-release -sed -i "s/^ID=fedora/ID=${IMAGE_PRETTY_NAME,}\nID_LIKE=\"rhel centos fedora\"/" /usr/lib/os-release +sed -i "s/^ID=fedora/ID=${IMAGE_PRETTY_NAME,}\nID_LIKE=\"rhel centos fedora nobara\"/" /usr/lib/os-release sed -i "s/^LOGO=.*/LOGO=$LOGO_ICON/" /usr/lib/os-release sed -i "s/^ANSI_COLOR=.*/ANSI_COLOR=\"$LOGO_COLOR\"/" /usr/lib/os-release sed -i "/^REDHAT_BUGZILLA_PRODUCT=/d; /^REDHAT_BUGZILLA_PRODUCT_VERSION=/d; /^REDHAT_SUPPORT_PRODUCT=/d; /^REDHAT_SUPPORT_PRODUCT_VERSION=/d" /usr/lib/os-release From 1161cbb12b06cda05c90898e9f27748e1288f3be Mon Sep 17 00:00:00 2001 From: "Jorge O. Castro" Date: Mon, 5 Aug 2024 13:36:45 -0400 Subject: [PATCH 52/58] feat(bazzite-cli): add tealdeer as tldr (#1460) Example based manpage companion: `tldr rpm-ostree` or `tldr git`, etc. This is to match bluefin and it'll be useful to new users. --- .../overrides/usr/share/ublue-os/homebrew/bazzite-cli.Brewfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system_files/overrides/usr/share/ublue-os/homebrew/bazzite-cli.Brewfile b/system_files/overrides/usr/share/ublue-os/homebrew/bazzite-cli.Brewfile index 056f5c1cf3..8cad6f00c9 100644 --- a/system_files/overrides/usr/share/ublue-os/homebrew/bazzite-cli.Brewfile +++ b/system_files/overrides/usr/share/ublue-os/homebrew/bazzite-cli.Brewfile @@ -6,6 +6,7 @@ brew "fd" brew "gh" brew "glab" brew "rg" +brew "tealdeer" brew "ugrep" brew "yq" -brew "zoxide" \ No newline at end of file +brew "zoxide" From 6628c3dd4c571e12e7915017ae491e2a69a38043 Mon Sep 17 00:00:00 2001 From: Noel Miller Date: Mon, 5 Aug 2024 13:50:54 -0500 Subject: [PATCH 53/58] feat (ISO): add default bazzite user to ISOs --- .github/workflows/build_iso.yml | 2 +- installer/lorax_templates/set_default_user.tmpl | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 installer/lorax_templates/set_default_user.tmpl diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index c8813acb17..cd9f2fd2a2 100644 --- a/.github/workflows/build_iso.yml +++ b/.github/workflows/build_iso.yml @@ -124,7 +124,7 @@ jobs: flatpak_remote_refs_dir: ${{ steps.generate-flatpak-dir-shortname.outputs.flatpak-dir-shortname }} enable_flatpak_dependencies: "false" extra_boot_params: ${{ steps.generate-extra-params.outputs.extra-boot-params }} - additional_templates: '/github/workspace/installer/lorax_templates/remove_root_password_prompt.tmpl' + additional_templates: '/github/workspace/installer/lorax_templates/remove_root_password_prompt.tmpl /github/workspace/installer/lorax_templates/set_default_user.tmpl' repos: '/github/workspace/bazzite.repo /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora-updates.repo' - name: Move ISOs to Upload Directory diff --git a/installer/lorax_templates/set_default_user.tmpl b/installer/lorax_templates/set_default_user.tmpl new file mode 100644 index 0000000000..01e8aa5a48 --- /dev/null +++ b/installer/lorax_templates/set_default_user.tmpl @@ -0,0 +1 @@ +append usr/share/anaconda/interactive-defaults.ks "\\nuser --name=bazzite --password=bazzite --plaintext --groups=wheel" From 683121869e2edde020c28dcb8e7b6d6cd4d0055d Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 5 Aug 2024 13:00:23 -0700 Subject: [PATCH 54/58] chore: Further expand ID_LIKE --- .../desktop/shared/usr/libexec/containerbuild/image-info | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system_files/desktop/shared/usr/libexec/containerbuild/image-info b/system_files/desktop/shared/usr/libexec/containerbuild/image-info index bc314dfee1..88aa2e0581 100755 --- a/system_files/desktop/shared/usr/libexec/containerbuild/image-info +++ b/system_files/desktop/shared/usr/libexec/containerbuild/image-info @@ -3,6 +3,7 @@ set -oue pipefail IMAGE_PRETTY_NAME="Bazzite" +IMAGE_LIKE="rhel centos fedora bluefin aurora nobara" HOME_URL="https://bazzite.gg" DOCUMENTATION_URL="https://docs.bazzite.gg" SUPPORT_URL="https://discord.bazzite.gg" @@ -52,7 +53,7 @@ sed -i "s|^SUPPORT_URL=.*|SUPPORT_URL=\"$SUPPORT_URL\"|" /usr/lib/os-release sed -i "s|^BUG_REPORT_URL=.*|BUG_REPORT_URL=\"$BUG_SUPPORT_URL\"|" /usr/lib/os-release sed -i "s|^CPE_NAME=\"cpe:/o:fedoraproject:fedora|CPE_NAME=\"cpe:/o:universal-blue:${IMAGE_PRETTY_NAME,}|" /usr/lib/os-release sed -i "s/^DEFAULT_HOSTNAME=.*/DEFAULT_HOSTNAME=\"${IMAGE_PRETTY_NAME,}\"/" /usr/lib/os-release -sed -i "s/^ID=fedora/ID=${IMAGE_PRETTY_NAME,}\nID_LIKE=\"rhel centos fedora nobara\"/" /usr/lib/os-release +sed -i "s/^ID=fedora/ID=${IMAGE_PRETTY_NAME,}\nID_LIKE=\"${IMAGE_LIKE}\"/" /usr/lib/os-release sed -i "s/^LOGO=.*/LOGO=$LOGO_ICON/" /usr/lib/os-release sed -i "s/^ANSI_COLOR=.*/ANSI_COLOR=\"$LOGO_COLOR\"/" /usr/lib/os-release sed -i "/^REDHAT_BUGZILLA_PRODUCT=/d; /^REDHAT_BUGZILLA_PRODUCT_VERSION=/d; /^REDHAT_SUPPORT_PRODUCT=/d; /^REDHAT_SUPPORT_PRODUCT_VERSION=/d" /usr/lib/os-release From e5feab396008b467d60d0161f823a4dbb2247cd5 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 22 Jun 2024 12:40:49 -0700 Subject: [PATCH 55/58] feat(kde): Add krdp --- Containerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 7f72bb5d7c..2d605b7155 100644 --- a/Containerfile +++ b/Containerfile @@ -496,7 +496,8 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ if grep -q "kinoite" <<< "${BASE_IMAGE_NAME}"; then \ rpm-ostree install \ - qt && \ + qt \ + krdp && \ rpm-ostree override remove \ plasma-welcome && \ rpm-ostree override replace \ From 290f04b9832d201fed0dd8cc92ad5b83f8cb0a07 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 5 Aug 2024 13:36:48 -0700 Subject: [PATCH 56/58] chore: Add ultramarine to ID_LIKE --- .../desktop/shared/usr/libexec/containerbuild/image-info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system_files/desktop/shared/usr/libexec/containerbuild/image-info b/system_files/desktop/shared/usr/libexec/containerbuild/image-info index 88aa2e0581..a5fb1894a0 100755 --- a/system_files/desktop/shared/usr/libexec/containerbuild/image-info +++ b/system_files/desktop/shared/usr/libexec/containerbuild/image-info @@ -3,7 +3,7 @@ set -oue pipefail IMAGE_PRETTY_NAME="Bazzite" -IMAGE_LIKE="rhel centos fedora bluefin aurora nobara" +IMAGE_LIKE="rhel centos fedora bluefin aurora nobara ultramarine" HOME_URL="https://bazzite.gg" DOCUMENTATION_URL="https://docs.bazzite.gg" SUPPORT_URL="https://discord.bazzite.gg" From e16eeddd186afe6d7fe670f309eb3b878036b0d9 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 5 Aug 2024 15:27:16 -0700 Subject: [PATCH 57/58] chore: Always update libgcc --- Containerfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Containerfile b/Containerfile index 2d605b7155..ab605c1575 100644 --- a/Containerfile +++ b/Containerfile @@ -145,6 +145,11 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ || true && \ rpm-ostree override replace \ --experimental \ + --from repo=updates \ + libgcc \ + || true && \ + rpm-ostree override replace \ + --experimental \ --from repo=updates \ libX11 \ libX11-common \ From bb248d646a18b7d066302eab21943b1750cc2abc Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 5 Aug 2024 16:28:00 -0700 Subject: [PATCH 58/58] Revert "chore: Always update libgcc" This reverts commit e16eeddd186afe6d7fe670f309eb3b878036b0d9. --- Containerfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Containerfile b/Containerfile index ab605c1575..2d605b7155 100644 --- a/Containerfile +++ b/Containerfile @@ -145,11 +145,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ || true && \ rpm-ostree override replace \ --experimental \ - --from repo=updates \ - libgcc \ - || true && \ - rpm-ostree override replace \ - --experimental \ --from repo=updates \ libX11 \ libX11-common \