hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
19.51k stars 818 forks source link

Pinned window cannot be made fullscreen without unpinning first #1147

Open mcginty opened 1 year ago

mcginty commented 1 year ago

This is at least true with mpv: if I'm playing a video that I've made floating, I can fullscreen. However, if I then pin it and try to fullscreen it won't work until I unpin it first.

It seems like it should be possible to fullscreen while pinned.

Thanks for making Hyprland!

vaxerski commented 1 year ago

intentional design.

Fullscreening a pinned window would have to remove its pinned status. More intuitive to leave as is.

maximbaz commented 1 year ago

Hi @vaxerski, there are a couple downsides with leaving it as it is that I wanted to share with you:

For the latter, instead of pin dispatcher which currently toggles pinned status, we'd have to do something like:

bind SUPER, f, pin, disable (not toggle, always disable)
bind SUPER, f, fullscreen
bind SUPER, f, pin, enable

And use this binding (also for non-floating windows, which feels a bit weird, but I wouldn't want to have two separate shortcuts to toggle fullscreen). This idea also assumes, that I want all floating windows to be pinned, which might not be the case (I could personally live with it).

Maybe Hyprland could do this logic internally on fullscreen dispatcher? But to make it proper, it'd have to keep a state of whether the app was pinned, before it enters fullscreen, and restore that status upon exit?

Coming from sway, I want also to share how sway does this: it simply doesn't remove the pinned state from the fullscreen window! In other words, if you are on a workspace 1, you fullscreen a pinned window, press binding to go to workspace 2, you still see the fullscreen video, but when you unfullscreen it, you'll see that you are in fact on workspace 2 now.

vaxerski commented 1 year ago

Coming from sway, I want also to share how sway does this: it simply doesn't remove the pinned state from the fullscreen window! In other words, if you are on a workspace 1, you fullscreen a pinned window, press binding to go to workspace 2, you still see the fullscreen video, but when you unfullscreen it, you'll see that you are in fact on workspace 2 now.

nope it's definitely not gonna work like that.

I can make it remove the pin status, but definitely not this.

Pinning a fullscreen window is not allowed.

maximbaz commented 1 year ago

Personally I agree 😁 sway's method has weird consequences, such as keyboard focus can get stolen after moving to another workspace, and the fullscreen window becoming unfocused. I like your idea a lot better, it's both intuitive and still usable with one shortcut (Hyprland's or mpv's) - press f on a floating pinned mpv, and it gets unpinned and fullscreen, press f again and it's back floating and pinned as it was before 👍

ymnejmi commented 11 months ago

nope it's definitely not gonna work like that.

is there a specific reason for this like maybe security, could it not even be togglable or something?

Im mainly on a laptop so the closest I could get to a multi monitor setup is having a pinned floater (usually media like a pip or mpv) which I would occasionally fullscreen/maximize. The wm is perfect for me and implementing it in my environment was pretty smooth, except for small issues, most of which were fixed, but this seems like its never going to be implemented by design. Is there perhaps a good workaround or maybe plans of 'unpin to fullscreen'? unfloating already unpins by default so it would be good to have for consistency. its also weird that tiled pinning is not possible.

ivanbalashov239 commented 5 months ago

i was thinking that this problem can be easily fixed the same way hyprland does different opacity levels for fullscreen and non fullscreen state, but it is actually separate opacity values and special logic for it codelink

    static auto PINACTIVEALPHA          = CConfigValue<Hyprlang::FLOAT>("decoration:inactive_opacity");
    static auto PACTIVEALPHA            = CConfigValue<Hyprlang::FLOAT>("decoration:active_opacity");
    static auto PFULLSCREENALPHA        = CConfigValue<Hyprlang::FLOAT>("decoration:fullscreen_opacity");

@vaxerski if we make a more generalized solution, with configurable set of properties that are separate for fullscreen/active/inactive it would be a solution for this issue, what do you think?

vaxerski commented 5 months ago

I dont understand

ivanbalashov239 commented 5 months ago

Never mind, i read the code a bit more, and see that there are lots of special ifs and etc for logic of pinning and other window properties, that this kind of configurability might over complicate things.

what i meant, is, right now there are configuration vars for opacity level, separate for active/inactive/fullscreen. and i thought to suggest, that that logic could be generalazied for all window properties.

vaxerski commented 5 months ago

could be

Root-Core commented 4 months ago

I agree that restoring the pinned state would be nice. Maybe restoring the status after unfloating and refloating would also be nice.