desktop: restore invisible floating window alpha/opacity when focused over fullscreen (#12994)
This commit is contained in:
parent
6c3ebed76e
commit
e7985ca4c4
5 changed files with 51 additions and 0 deletions
|
|
@ -296,6 +296,24 @@ static SDispatchResult checkRule(std::string in) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SDispatchResult floatingFocusOnFullscreen(std::string in) {
|
||||||
|
const auto PLASTWINDOW = Desktop::focusState()->window();
|
||||||
|
|
||||||
|
if (!PLASTWINDOW)
|
||||||
|
return {.success = false, .error = "No window"};
|
||||||
|
|
||||||
|
if (!PLASTWINDOW->m_isFloating)
|
||||||
|
return {.success = false, .error = "Window must be floating"};
|
||||||
|
|
||||||
|
if (PLASTWINDOW->m_alpha != 1.f)
|
||||||
|
return {.success = false, .error = "floating window doesnt restore it opacity when focused on fullscreen workspace"};
|
||||||
|
|
||||||
|
if (!PLASTWINDOW->m_createdOverFullscreen)
|
||||||
|
return {.success = false, .error = "floating window doesnt get flagged as createdOverFullscreen"};
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
PHANDLE = handle;
|
PHANDLE = handle;
|
||||||
|
|
||||||
|
|
@ -309,6 +327,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:keybind", ::keybind);
|
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:keybind", ::keybind);
|
||||||
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:add_rule", ::addRule);
|
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:add_rule", ::addRule);
|
||||||
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:check_rule", ::checkRule);
|
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:check_rule", ::checkRule);
|
||||||
|
HyprlandAPI::addDispatcherV2(PHANDLE, "plugin:test:floating_focus_on_fullscreen", ::floatingFocusOnFullscreen);
|
||||||
|
|
||||||
// init mouse
|
// init mouse
|
||||||
g_mouse = CTestMouse::create(false);
|
g_mouse = CTestMouse::create(false);
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,26 @@ static void testMaximizeSize() {
|
||||||
EXPECT(Tests::windowCount(), 0);
|
EXPECT(Tests::windowCount(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void testFloatingFocusOnFullscreen() {
|
||||||
|
NLog::log("{}Testing floating focus on fullscreen", Colors::GREEN);
|
||||||
|
|
||||||
|
EXPECT(spawnKitty("kitty_A"), true);
|
||||||
|
OK(getFromSocket("/dispatch togglefloating"));
|
||||||
|
|
||||||
|
EXPECT(spawnKitty("kitty_B"), true);
|
||||||
|
OK(getFromSocket("/dispatch fullscreen 1"));
|
||||||
|
|
||||||
|
OK(getFromSocket("/dispatch cyclenext"));
|
||||||
|
|
||||||
|
OK(getFromSocket("/dispatch plugin:test:floating_focus_on_fullscreen"));
|
||||||
|
|
||||||
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
||||||
|
Tests::killAllWindows();
|
||||||
|
|
||||||
|
NLog::log("{}Expecting 0 windows", Colors::YELLOW);
|
||||||
|
EXPECT(Tests::windowCount(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void testGroupFallbackFocus() {
|
static void testGroupFallbackFocus() {
|
||||||
NLog::log("{}Testing group fallback focus", Colors::GREEN);
|
NLog::log("{}Testing group fallback focus", Colors::GREEN);
|
||||||
|
|
||||||
|
|
@ -994,6 +1014,7 @@ static bool test() {
|
||||||
|
|
||||||
testGroupRules();
|
testGroupRules();
|
||||||
testMaximizeSize();
|
testMaximizeSize();
|
||||||
|
testFloatingFocusOnFullscreen();
|
||||||
testBringActiveToTopMouseMovement();
|
testBringActiveToTopMouseMovement();
|
||||||
testGroupFallbackFocus();
|
testGroupFallbackFocus();
|
||||||
testInitialFloatSize();
|
testInitialFloatSize();
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#include "../../managers/HookSystemManager.hpp"
|
#include "../../managers/HookSystemManager.hpp"
|
||||||
#include "../../xwayland/XSurface.hpp"
|
#include "../../xwayland/XSurface.hpp"
|
||||||
#include "../../protocols/PointerConstraints.hpp"
|
#include "../../protocols/PointerConstraints.hpp"
|
||||||
|
#include "managers/animation/DesktopAnimationManager.hpp"
|
||||||
|
|
||||||
using namespace Desktop;
|
using namespace Desktop;
|
||||||
|
|
||||||
|
|
@ -32,6 +33,7 @@ static SFullscreenWorkspaceFocusResult onFullscreenWorkspaceFocusWindow(PHLWINDO
|
||||||
if (pWindow->m_isFloating) {
|
if (pWindow->m_isFloating) {
|
||||||
// if the window is floating, just bring it to the top
|
// if the window is floating, just bring it to the top
|
||||||
pWindow->m_createdOverFullscreen = true;
|
pWindow->m_createdOverFullscreen = true;
|
||||||
|
g_pDesktopAnimationManager->setFullscreenFloatingFade(pWindow, 1.f);
|
||||||
g_pHyprRenderer->damageWindow(pWindow);
|
g_pHyprRenderer->damageWindow(pWindow);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "../../config/ConfigManager.hpp"
|
#include "../../config/ConfigManager.hpp"
|
||||||
#include "../../Compositor.hpp"
|
#include "../../Compositor.hpp"
|
||||||
|
#include "desktop/DesktopTypes.hpp"
|
||||||
#include "wlr-layer-shell-unstable-v1.hpp"
|
#include "wlr-layer-shell-unstable-v1.hpp"
|
||||||
|
|
||||||
void CDesktopAnimationManager::startAnimation(PHLWINDOW pWindow, eAnimationType type, bool force) {
|
void CDesktopAnimationManager::startAnimation(PHLWINDOW pWindow, eAnimationType type, bool force) {
|
||||||
|
|
@ -484,6 +485,13 @@ void CDesktopAnimationManager::setFullscreenFadeAnimation(PHLWORKSPACE ws, eAnim
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDesktopAnimationManager::setFullscreenFloatingFade(PHLWINDOW pWindow, float fade) {
|
||||||
|
if (pWindow->m_fadingOut || !pWindow->m_isFloating)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*pWindow->m_alpha = fade;
|
||||||
|
}
|
||||||
|
|
||||||
void CDesktopAnimationManager::overrideFullscreenFadeAmount(PHLWORKSPACE ws, float fade, PHLWINDOW exclude) {
|
void CDesktopAnimationManager::overrideFullscreenFadeAmount(PHLWORKSPACE ws, float fade, PHLWINDOW exclude) {
|
||||||
for (auto const& w : g_pCompositor->m_windows) {
|
for (auto const& w : g_pCompositor->m_windows) {
|
||||||
if (w == exclude)
|
if (w == exclude)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ class CDesktopAnimationManager {
|
||||||
void startAnimation(PHLWORKSPACE ws, eAnimationType type, bool left = true, bool instant = false);
|
void startAnimation(PHLWORKSPACE ws, eAnimationType type, bool left = true, bool instant = false);
|
||||||
|
|
||||||
void setFullscreenFadeAnimation(PHLWORKSPACE ws, eAnimationType type);
|
void setFullscreenFadeAnimation(PHLWORKSPACE ws, eAnimationType type);
|
||||||
|
void setFullscreenFloatingFade(PHLWINDOW pWindow, float fade);
|
||||||
void overrideFullscreenFadeAmount(PHLWORKSPACE ws, float fade, PHLWINDOW exclude = nullptr);
|
void overrideFullscreenFadeAmount(PHLWORKSPACE ws, float fade, PHLWINDOW exclude = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue