') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); fix(x11/layer-shell-qt): fix right click crash on wayland by lfdevs · Pull Request #18 · lfdevs/termux-packages · GitHub
Skip to content

fix(x11/layer-shell-qt): fix right click crash on wayland - #18

Draft
lfdevs wants to merge 1 commit into
masterfrom
dev/layer-shell-qt/fix-right-click-crash
Draft

fix(x11/layer-shell-qt): fix right click crash on wayland#18
lfdevs wants to merge 1 commit into
masterfrom
dev/layer-shell-qt/fix-right-click-crash

Conversation

@lfdevs

@lfdevslfdevs commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Fix popup attachment with libc++

Avoid using std::any_cast to retrieve the xdg_popup role, as libc++
RTTI comparison can fail across shared modules loaded with RTLD_LOCAL.

Retrieve the popup through Qt's platform native interface instead,
preventing Plasma context menus from causing a Wayland protocol error.

Fix:

Related URLs:

@lfdevs
lfdevsforce-pushed the dev/layer-shell-qt/fix-right-click-crash branch from 1bec845 to fd696e9CompareJuly 23, 2026 05:54
@lfdevs

Copy link
Copy Markdown
OwnerAuthor

@SolDev69@FarLightZ Hi, could you try installing the patched layer-shell-qt on Termux native? I am trying to fix the issue where right-clicking causes a crash on the KDE Plasma Wayland desktop. I have tested it on my device, and the issue has been resolved on my device.

You can find the build artifacts here: https://github.com/lfdevs/termux-packages/actions/runs/29983436264?pr=18#artifacts
Specifically, look for files in the Artifacts section that start with debs, such as debs-aarch64-fd696e968cebc1969a7de9d8392648a8d6d91fb9. After downloading and extracting it, you’ll obtain layer-shell-qt_6.7.3-1_aarch64.deb.

@FarLightZ

Copy link
Copy Markdown

@SolDev69@FarLightZ Hi, could you try installing the patched layer-shell-qt on Termux native? I am trying to fix the issue where right-clicking causes a crash on the KDE Plasma Wayland desktop. I have tested it on my device, and the issue has been resolved on my device.

You can find the build artifacts here: https://github.com/lfdevs/termux-packages/actions/runs/29983436264?pr=18#artifacts Specifically, look for files in the Artifacts section that start with debs, such as debs-aarch64-fd696e968cebc1969a7de9d8392648a8d6d91fb9. After downloading and extracting it, you’ll obtain layer-shell-qt_6.7.3-1_aarch64.deb.

WORKING BROTHA!!! IT'S WORKING YOU HACKERMAN!! I'LL GIVE U A HANDSHAKE ONCE WE'VE MET!!!!!
Screenshot_2026-07-23-20-34-13-734_com anland termux

@FarLightZ

Copy link
Copy Markdown

UPD: Fullscreen also breaks the app somehow, anywhere, youtube, settings applications etc.

YOU FIXED THE BUG WHEN EVERYTHING DIES WHEN YOU SEND AND APP-SHORTCUT TO A DESKTOP, NICEEEEEE

@FarLightZ

Copy link
Copy Markdown

UPD: I don't know if it's related to the fullscreen bug but when I open and close an aplicatiob (one cycle of opening and closing is enough) a bit later KWin crashes, it's like 10-15 seconds and bam blinking giant mouse, tested with firefox and Calligra document suite.

Fix popup attachment with libc++
Avoid using std::any_cast to retrieve the xdg_popup role, as libc++
RTTI comparison can fail across shared modules loaded with RTLD_LOCAL.
Retrieve the popup through Qt's platform native interface instead,
preventing Plasma context menus from causing a Wayland protocol error.
Related URLs:
* https://bugs.kde.org/show_bug.cgi?id=479679
* llvm/llvm-project#36746
* freebsd/freebsd-ports#431
@lfdevs
lfdevsforce-pushed the dev/layer-shell-qt/fix-right-click-crash branch from fd696e9 to 48e1c3fCompareAugust 18, 2026 15:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lfdevs@FarLightZ