Compare commits

...

5 commits

Author SHA1 Message Date
967c3c7404
version: bump to 0.52.1 2025-11-09 23:31:36 +00:00
eb53dae2a5
CI/release: populate git info (#12247) 2025-11-09 23:31:24 +00:00
Aurelle
b45f304c15
protocols/layershell: do not raise protocol error if layer surface is not anchored (#12241) 2025-11-09 23:31:24 +00:00
nikromen
a85c1f16bf
protocols/outputMgmt: fix wlr-randr by defering success event until monitor reloads (#12236)
wlr-randr disconnects immediately after receiving success event, but
before applying the monitor configuration. This causes the state to be
lost when performMonitorReload() is called.

By postponing the success event until the call of the hook
monitorLayoutChanged we ensure the configuration to remain valid during
the reload process.
2025-11-09 23:31:24 +00:00
282f423397
meson: fix version.h install location 2025-11-09 23:31:24 +00:00
6 changed files with 60 additions and 15 deletions

View file

@ -8,20 +8,37 @@ on:
jobs:
source-tarball:
runs-on: ubuntu-latest
container:
image: archlinux
steps:
- name: Checkout repository actions
uses: actions/checkout@v4
- name: Checkout repository
uses: actions/checkout@v5
with:
sparse-checkout: .github/actions
fetch-depth: 0
submodules: recursive
- name: Setup base
uses: ./.github/actions/setup_base
- name: Generate version
- name: Populate git info in version.h.in
run: |
cmake -S . -B /tmp/build
git fetch --tags --unshallow || true
COMMIT_HASH=$(git rev-parse HEAD)
BRANCH="${GITHUB_REF_NAME:-$(git rev-parse --abbrev-ref HEAD)}"
COMMIT_MSG=$(git show -s --format=%s | sed 's/[&/]/\\&/g')
COMMIT_DATE=$(git show -s --format=%cd --date=local)
GIT_DIRTY=$(git diff-index --quiet HEAD -- && echo "clean" || echo "dirty")
GIT_TAG=$(git describe --tags --always || echo "unknown")
GIT_COMMITS=$(git rev-list --count HEAD)
echo "Branch: $BRANCH"
echo "Tag: $GIT_TAG"
sed -i \
-e "s|@GIT_COMMIT_HASH@|$COMMIT_HASH|" \
-e "s|@GIT_BRANCH@|$BRANCH|" \
-e "s|@GIT_COMMIT_MESSAGE@|$COMMIT_MSG|" \
-e "s|@GIT_COMMIT_DATE@|$COMMIT_DATE|" \
-e "s|@GIT_DIRTY@|$GIT_DIRTY|" \
-e "s|@GIT_TAG@|$GIT_TAG|" \
-e "s|@GIT_COMMITS@|$GIT_COMMITS|" \
src/version.h.in
- name: Create tarball with submodules
id: tar

View file

@ -1 +1 @@
0.52.0
0.52.1

View file

@ -84,7 +84,7 @@ version_h = configure_file(
configuration: cfg
)
install_headers(version_h, subdir: 'src')
install_headers(version_h, subdir: 'hyprland/src')
xcb_dep = dependency('xcb', required: get_option('xwayland'))
xcb_composite_dep = dependency('xcb-composite', required: get_option('xwayland'))

View file

@ -159,7 +159,7 @@ CLayerShellResource::CLayerShellResource(SP<CZwlrLayerSurfaceV1> resource_, SP<C
return;
}
if (!m_pending.anchor || !(m_pending.anchor & anchor)) {
if (anchor && (!m_pending.anchor || !(m_pending.anchor & anchor))) {
r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE, "Exclusive edge doesn't align with anchor");
return;
}

View file

@ -28,6 +28,8 @@ COutputManager::COutputManager(SP<CZwlrOutputManagerV1> resource_) : m_resource(
PROTO::outputManagement->m_configurations.pop_back();
return;
}
RESOURCE->m_self = RESOURCE;
});
// send all heads at start
@ -335,7 +337,7 @@ COutputConfiguration::COutputConfiguration(SP<CZwlrOutputConfigurationV1> resour
const auto SUCCESS = applyTestConfiguration(false);
if (SUCCESS)
m_resource->sendSucceeded();
PROTO::outputManagement->m_pendingConfigurationSuccessEvents.emplace_back(m_self);
else
m_resource->sendFailed();
@ -576,7 +578,10 @@ bool COutputConfigurationHead::good() {
}
COutputManagementProtocol::COutputManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {
static auto P = g_pHookSystem->hookDynamic("monitorLayoutChanged", [this](void* self, SCallbackInfo& info, std::any param) { this->updateAllOutputs(); });
static auto P = g_pHookSystem->hookDynamic("monitorLayoutChanged", [this](void* self, SCallbackInfo& info, std::any param) {
updateAllOutputs();
sendPendingSuccessEvents();
});
}
void COutputManagementProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) {
@ -647,3 +652,19 @@ SP<SWlrManagerSavedOutputState> COutputManagementProtocol::getOutputStateFor(PHL
return nullptr;
}
void COutputManagementProtocol::sendPendingSuccessEvents() {
if (m_pendingConfigurationSuccessEvents.empty())
return;
LOGM(LOG, "Sending {} pending configuration success events", m_pendingConfigurationSuccessEvents.size());
for (auto const& config : m_pendingConfigurationSuccessEvents) {
if (!config)
continue;
config->m_resource->sendSucceeded();
}
m_pendingConfigurationSuccessEvents.clear();
}

View file

@ -141,8 +141,12 @@ class COutputConfiguration {
SP<CZwlrOutputConfigurationV1> m_resource;
std::vector<WP<COutputConfigurationHead>> m_heads;
WP<COutputManager> m_owner;
WP<COutputConfiguration> m_self;
bool applyTestConfiguration(bool test);
friend class COutputManagementProtocol;
friend class COutputManager;
};
class COutputManagementProtocol : public IWaylandProtocol {
@ -154,6 +158,8 @@ class COutputManagementProtocol : public IWaylandProtocol {
// doesn't have to return one
SP<SWlrManagerSavedOutputState> getOutputStateFor(PHLMONITOR pMonitor);
void sendPendingSuccessEvents();
private:
void destroyResource(COutputManager* resource);
void destroyResource(COutputHead* resource);
@ -169,6 +175,7 @@ class COutputManagementProtocol : public IWaylandProtocol {
std::vector<SP<COutputMode>> m_modes;
std::vector<SP<COutputConfiguration>> m_configurations;
std::vector<SP<COutputConfigurationHead>> m_configurationHeads;
std::vector<WP<COutputConfiguration>> m_pendingConfigurationSuccessEvents;
SP<COutputHead> headFromResource(wl_resource* r);
SP<COutputMode> modeFromResource(wl_resource* r);