mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-14 19:45:45 -07:00
Compare commits
42 Commits
v0.15.2bet
...
v0.16.0bet
Author | SHA1 | Date | |
---|---|---|---|
|
ecf0cdaba4 | ||
|
286cb90c48 | ||
|
3f77cde50e | ||
|
1145654987 | ||
|
da4cfb9c32 | ||
|
58375bc87a | ||
|
83d99ce5bd | ||
|
dca30815b0 | ||
|
edeb759bb1 | ||
|
610d4d9473 | ||
|
f30e572e00 | ||
|
34cd8b125a | ||
|
b0544dbfff | ||
|
a7bdfc06ca | ||
|
7e7cb40909 | ||
|
724fa4a7d4 | ||
|
cee0645fd1 | ||
|
df9409b8a2 | ||
|
f274a70edf | ||
|
ef24a27ade | ||
|
670d6ce8f4 | ||
|
f3917f2122 | ||
|
5d6e56b67c | ||
|
624303bfb9 | ||
|
eb3c132fc5 | ||
|
170def35d7 | ||
|
2ee9fb0675 | ||
|
1396d2a39b | ||
|
7ecc41db9c | ||
|
7ffe4eda12 | ||
|
25756afad5 | ||
|
8880298f50 | ||
|
d89355f0a6 | ||
|
ae91f6610f | ||
|
6e7143e0f5 | ||
|
f55f56f260 | ||
|
6287f2b71b | ||
|
7e781f24c5 | ||
|
3bf7c5aea1 | ||
|
092dbda88a | ||
|
406b2fe6dc | ||
|
32ae0c51f0 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -25,3 +25,5 @@ hyprctl/hyprctl
|
|||||||
gmon.out
|
gmon.out
|
||||||
*.out
|
*.out
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
|
|
||||||
|
PKGBUILD
|
||||||
|
10
Makefile
10
Makefile
@@ -93,19 +93,19 @@ wlr-output-power-management-unstable-v1-protocol.o: wlr-output-power-management-
|
|||||||
|
|
||||||
legacyrenderer:
|
legacyrenderer:
|
||||||
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DLEGACY_RENDERER:STRING=true -H./ -B./build -G Ninja
|
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DLEGACY_RENDERER:STRING=true -H./ -B./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j $(nproc)
|
cmake --build ./build --config Release --target all -j$(shell nproc)
|
||||||
|
|
||||||
legacyrendererdebug:
|
legacyrendererdebug:
|
||||||
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DLEGACY_RENDERER:STRING=true -H./ -B./build -G Ninja
|
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DLEGACY_RENDERER:STRING=true -H./ -B./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j $(nproc)
|
cmake --build ./build --config Release --target all -j$(shell nproc)
|
||||||
|
|
||||||
release:
|
release:
|
||||||
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -H./ -B./build -G Ninja
|
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -H./ -B./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j $(nproc)
|
cmake --build ./build --config Release --target all -j$(shell nproc)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -H./ -B./build -G Ninja
|
mkdir -p build && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -H./ -B./build -G Ninja
|
||||||
cmake --build ./build --config Debug --target all -j $(nproc)
|
cmake --build ./build --config Debug --target all -j$(shell nproc)
|
||||||
|
|
||||||
clear:
|
clear:
|
||||||
rm -rf build
|
rm -rf build
|
||||||
@@ -137,7 +137,7 @@ install:
|
|||||||
cp ./assets/wall_8K.png ${PREFIX}/share/hyprland
|
cp ./assets/wall_8K.png ${PREFIX}/share/hyprland
|
||||||
|
|
||||||
install -Dm644 -t ${PREFIX}/share/man/man1 ./docs/*.1
|
install -Dm644 -t ${PREFIX}/share/man/man1 ./docs/*.1
|
||||||
|
|
||||||
cleaninstall:
|
cleaninstall:
|
||||||
make clear
|
make clear
|
||||||
make fixwlr
|
make fixwlr
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" Automatically generated by Pandoc 2.5
|
.\" Automatically generated by Pandoc 2.5
|
||||||
.\"
|
.\"
|
||||||
.TH "Hyprland" "1" "24 Aug 2022" "" "Hyprland User Manual"
|
.TH "Hyprland" "1" "11 Oct 2022" "" "Hyprland User Manual"
|
||||||
.hy
|
.hy
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.PP
|
.PP
|
||||||
|
@@ -57,3 +57,15 @@ coredumpctl info [PID]
|
|||||||
```
|
```
|
||||||
where `[PID]` is the PID you remembered.
|
where `[PID]` is the PID you remembered.
|
||||||
|
|
||||||
|
## Obtaining the debug Hyprland coredump
|
||||||
|
In very rare cases, the normal coredump would not be enough.
|
||||||
|
If that's the case, you could try obtaining the debug coredump.
|
||||||
|
1. [Compile Hyprland with debug mode](http://wiki.hyprland.org/Contributing-and-Debugging/#build-in-debug-mode)
|
||||||
|
> Note: The config file used will be `hyprlandd.conf` instead of `hyprland.conf`
|
||||||
|
|
||||||
|
2. Reproduce the crash in debug mode.
|
||||||
|
3. `env DEBUGINFOD_URLS="https://debuginfod.archlinux.org/" coredumpctl debug [PID]`(see section above)
|
||||||
|
4. Wait until the `(gdb)` appears
|
||||||
|
5. If gdb asks you `press y to continue without paging?` Type `y`
|
||||||
|
6. `bt -full`
|
||||||
|
7. copy the output of the command and provide that.
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" Automatically generated by Pandoc 2.5
|
.\" Automatically generated by Pandoc 2.5
|
||||||
.\"
|
.\"
|
||||||
.TH "hyprctl" "1" "24 Aug 2022" "" "hyprctl User Manual"
|
.TH "hyprctl" "1" "11 Oct 2022" "" "hyprctl User Manual"
|
||||||
.hy
|
.hy
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.PP
|
.PP
|
||||||
|
@@ -1,117 +1,158 @@
|
|||||||
# This is an example Hyprland config file.
|
# This is an example Hyprland config file.
|
||||||
# Syntax is the same as in Hypr, but settings might differ.
|
|
||||||
#
|
#
|
||||||
# Refer to the wiki for more information.
|
# Refer to the wiki for more information.
|
||||||
|
|
||||||
#
|
#
|
||||||
# Please note not all available settings / options are set here.
|
# Please note not all available settings / options are set here.
|
||||||
# For a full list, see the wiki (basic and advanced configuring)
|
# For a full list, see the wiki
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
monitor=,preferred,auto,1
|
monitor=,preferred,auto,1
|
||||||
workspace=DP-1,1
|
|
||||||
|
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
|
|
||||||
|
# Execute your favorite apps at launch
|
||||||
|
# exec-once = waybar & hyprpaper & firefox
|
||||||
|
|
||||||
|
# Source a file (multi-file configs)
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||||
input {
|
input {
|
||||||
kb_file=
|
kb_layout = us
|
||||||
kb_layout=
|
kb_variant =
|
||||||
kb_variant=
|
kb_model =
|
||||||
kb_model=
|
kb_options =
|
||||||
kb_options=
|
kb_rules =
|
||||||
kb_rules=
|
|
||||||
|
|
||||||
follow_mouse=1
|
follow_mouse = 1
|
||||||
|
|
||||||
touchpad {
|
touchpad {
|
||||||
natural_scroll=no
|
natural_scroll = no
|
||||||
}
|
}
|
||||||
|
|
||||||
sensitivity=0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
}
|
}
|
||||||
|
|
||||||
general {
|
general {
|
||||||
gaps_in=5
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
gaps_out=20
|
|
||||||
border_size=2
|
|
||||||
col.active_border=0x66ee1111
|
|
||||||
col.inactive_border=0x66333333
|
|
||||||
|
|
||||||
apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse)
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
border_size = 2
|
||||||
|
col.active_border = rgba(1affffee)
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer
|
layout = dwindle
|
||||||
}
|
}
|
||||||
|
|
||||||
decoration {
|
decoration {
|
||||||
rounding=10
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
blur=1
|
|
||||||
blur_size=3 # minimum 1
|
rounding = 10
|
||||||
blur_passes=1 # minimum 1
|
blur = yes
|
||||||
blur_new_optimizations=1
|
blur_size = 3
|
||||||
|
blur_passes = 1
|
||||||
|
blur_new_optimizations = on
|
||||||
|
|
||||||
|
drop_shadow = yes
|
||||||
|
shadow_range = 4
|
||||||
|
shadow_render_power = 3
|
||||||
|
col.shadow = rgba(1a1a1aee)
|
||||||
}
|
}
|
||||||
|
|
||||||
animations {
|
animations {
|
||||||
enabled=1
|
enabled = yes
|
||||||
animation=windows,1,7,default
|
|
||||||
animation=border,1,10,default
|
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
animation=fade,1,10,default
|
|
||||||
animation=workspaces,1,6,default
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, default, popin 80%
|
||||||
|
animation = border, 1, 10, default
|
||||||
|
animation = fade, 1, 7, default
|
||||||
|
animation = workspaces, 1, 6, default
|
||||||
}
|
}
|
||||||
|
|
||||||
dwindle {
|
dwindle {
|
||||||
pseudotile=0 # enable pseudotiling on dwindle
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = yes # you probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
new_is_master = true
|
||||||
}
|
}
|
||||||
|
|
||||||
gestures {
|
gestures {
|
||||||
workspace_swipe=no
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
workspace_swipe = off
|
||||||
}
|
}
|
||||||
|
|
||||||
# example window rules
|
# Example per-device config
|
||||||
# for windows named/classed as abc and xyz
|
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
|
||||||
#windowrule=move 69 420,abc
|
device:epic mouse V1 {
|
||||||
#windowrule=size 420 69,abc
|
sensitivity = -0.5
|
||||||
#windowrule=tile,xyz
|
}
|
||||||
#windowrule=float,abc
|
|
||||||
#windowrule=pseudo,abc
|
|
||||||
#windowrule=monitor 0,xyz
|
|
||||||
|
|
||||||
# some nice mouse binds
|
# Example windowrule v1
|
||||||
bindm=SUPER,mouse:272,movewindow
|
# windowrule = float, ^(kitty)$
|
||||||
bindm=SUPER,mouse:273,resizewindow
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
|
||||||
# example binds
|
|
||||||
bind=SUPER,Q,exec,kitty
|
|
||||||
bind=SUPER,C,killactive,
|
|
||||||
bind=SUPER,M,exit,
|
|
||||||
bind=SUPER,E,exec,dolphin
|
|
||||||
bind=SUPER,V,togglefloating,
|
|
||||||
bind=SUPER,R,exec,wofi --show drun -o DP-3
|
|
||||||
bind=SUPER,P,pseudo,
|
|
||||||
|
|
||||||
bind=SUPER,left,movefocus,l
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
bind=SUPER,right,movefocus,r
|
$mainMod = SUPER
|
||||||
bind=SUPER,up,movefocus,u
|
|
||||||
bind=SUPER,down,movefocus,d
|
|
||||||
|
|
||||||
bind=SUPER,1,workspace,1
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
bind=SUPER,2,workspace,2
|
bind = $mainMod, Q, exec, kitty
|
||||||
bind=SUPER,3,workspace,3
|
bind = $mainMod, C, killactive,
|
||||||
bind=SUPER,4,workspace,4
|
bind = $mainMod, M, exit,
|
||||||
bind=SUPER,5,workspace,5
|
bind = $mainMod, E, exec, dolphin
|
||||||
bind=SUPER,6,workspace,6
|
bind = $mainMod, V, togglefloating,
|
||||||
bind=SUPER,7,workspace,7
|
bind = $mainMod, R, exec, wofi --show drun
|
||||||
bind=SUPER,8,workspace,8
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
bind=SUPER,9,workspace,9
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
bind=SUPER,0,workspace,10
|
|
||||||
|
|
||||||
bind=ALT,1,movetoworkspace,1
|
# Move focus with mainMod + arrow keys
|
||||||
bind=ALT,2,movetoworkspace,2
|
bind = $mainMod, left, movefocus, l
|
||||||
bind=ALT,3,movetoworkspace,3
|
bind = $mainMod, right, movefocus, r
|
||||||
bind=ALT,4,movetoworkspace,4
|
bind = $mainMod, up, movefocus, u
|
||||||
bind=ALT,5,movetoworkspace,5
|
bind = $mainMod, down, movefocus, d
|
||||||
bind=ALT,6,movetoworkspace,6
|
|
||||||
bind=ALT,7,movetoworkspace,7
|
|
||||||
bind=ALT,8,movetoworkspace,8
|
|
||||||
bind=ALT,9,movetoworkspace,9
|
|
||||||
bind=ALT,0,movetoworkspace,10
|
|
||||||
|
|
||||||
bind=SUPER,mouse_down,workspace,e+1
|
# Switch workspaces with mainMod + [0-9]
|
||||||
bind=SUPER,mouse_up,workspace,e-1
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
bind = $mainMod, 3, workspace, 3
|
||||||
|
bind = $mainMod, 4, workspace, 4
|
||||||
|
bind = $mainMod, 5, workspace, 5
|
||||||
|
bind = $mainMod, 6, workspace, 6
|
||||||
|
bind = $mainMod, 7, workspace, 7
|
||||||
|
bind = $mainMod, 8, workspace, 8
|
||||||
|
bind = $mainMod, 9, workspace, 9
|
||||||
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
12
flake.lock
generated
12
flake.lock
generated
@@ -2,11 +2,11 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1665259268,
|
"lastModified": 1665643254,
|
||||||
"narHash": "sha256-ONFhHBLv5nZKhwV/F2GOH16197PbvpyWhoO0AOyktkU=",
|
"narHash": "sha256-IBVWNJxGCsshwh62eRfR6+ry3bSXmulB3VQRzLQo3hk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "c5924154f000e6306030300592f4282949b2db6c",
|
"rev": "ba187fbdc5e35322c7dff556ef2c47bddfd6e8d7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -26,11 +26,11 @@
|
|||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"host": "gitlab.freedesktop.org",
|
"host": "gitlab.freedesktop.org",
|
||||||
"lastModified": 1665331677,
|
"lastModified": 1665405587,
|
||||||
"narHash": "sha256-3Dh1i11mHK80jx5figC1oh1V0rCjieh0Mj+MajXdbPw=",
|
"narHash": "sha256-lVL48azhjGA/oEIcUSZQNwomNs0EzPxCcjgzyDST0PM=",
|
||||||
"owner": "wlroots",
|
"owner": "wlroots",
|
||||||
"repo": "wlroots",
|
"repo": "wlroots",
|
||||||
"rev": "ab8341975e62b1f668d8c9779ec8e72d04718a99",
|
"rev": "221ee83d440fb7dcbfd141ef3a459a5a973331b6",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
34
flake.nix
34
flake.nix
@@ -20,35 +20,11 @@
|
|||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
];
|
];
|
||||||
pkgsFor = genSystems (system:
|
pkgsFor = nixpkgs.legacyPackages;
|
||||||
import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
overlays = [
|
|
||||||
(_: prev: {
|
|
||||||
libdrm = prev.libdrm.overrideAttrs (old: rec {
|
|
||||||
version = "2.4.113";
|
|
||||||
src = prev.fetchurl {
|
|
||||||
url = "https://dri.freedesktop.org/${old.pname}/${old.pname}-${version}.tar.xz";
|
|
||||||
sha256 = "sha256-f9frKWf2O+tGBvItUOJ32ZNIDQXvdd2Iqb2OZ3Mj5eE=";
|
|
||||||
};
|
|
||||||
mesonFlags =
|
|
||||||
[
|
|
||||||
"-Dinstall-test-programs=true"
|
|
||||||
"-Domap=enabled"
|
|
||||||
"-Dcairo-tests=disabled"
|
|
||||||
]
|
|
||||||
++ lib.optionals prev.stdenv.hostPlatform.isAarch [
|
|
||||||
"-Dtegra=enabled"
|
|
||||||
"-Detnaviv=enabled"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
})
|
|
||||||
];
|
|
||||||
});
|
|
||||||
mkDate = longDate: (lib.concatStringsSep "-" [
|
mkDate = longDate: (lib.concatStringsSep "-" [
|
||||||
(__substring 0 4 longDate)
|
(builtins.substring 0 4 longDate)
|
||||||
(__substring 4 2 longDate)
|
(builtins.substring 4 2 longDate)
|
||||||
(__substring 6 2 longDate)
|
(builtins.substring 6 2 longDate)
|
||||||
]);
|
]);
|
||||||
in {
|
in {
|
||||||
overlays.default = _: prev: rec {
|
overlays.default = _: prev: rec {
|
||||||
@@ -58,7 +34,7 @@
|
|||||||
};
|
};
|
||||||
hyprland = prev.callPackage ./nix/default.nix {
|
hyprland = prev.callPackage ./nix/default.nix {
|
||||||
stdenv = prev.gcc12Stdenv;
|
stdenv = prev.gcc12Stdenv;
|
||||||
version = "0.15.0beta" + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty");
|
version = "0.15.3beta" + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty");
|
||||||
wlroots = wlroots-hyprland;
|
wlroots = wlroots-hyprland;
|
||||||
};
|
};
|
||||||
hyprland-debug = hyprland.override {debug = true;};
|
hyprland-debug = hyprland.override {debug = true;};
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
project('Hyprland', 'cpp', 'c',
|
project('Hyprland', 'cpp', 'c',
|
||||||
version : '0.15.0beta',
|
version : '0.15.3beta',
|
||||||
default_options : [
|
default_options : [
|
||||||
'warning_level=2',
|
'warning_level=2',
|
||||||
'default_library=static',
|
'default_library=static',
|
||||||
|
@@ -92,7 +92,7 @@ in {
|
|||||||
++ lib.optional cfg.xwayland.enable pkgs.xwayland;
|
++ lib.optional cfg.xwayland.enable pkgs.xwayland;
|
||||||
|
|
||||||
home.sessionVariables = lib.mkIf cfg.recommendedEnvironment {
|
home.sessionVariables = lib.mkIf cfg.recommendedEnvironment {
|
||||||
GDK_BACKEND = "wayland";
|
GDK_BACKEND = "wayland,x11";
|
||||||
_JAVA_AWT_WM_NONREPARENTING = "1";
|
_JAVA_AWT_WM_NONREPARENTING = "1";
|
||||||
NIXOS_OZONE_WL = "1";
|
NIXOS_OZONE_WL = "1";
|
||||||
XCURSOR_SIZE = toString config.home.pointerCursor.size or "24";
|
XCURSOR_SIZE = toString config.home.pointerCursor.size or "24";
|
||||||
|
@@ -47,7 +47,7 @@ in {
|
|||||||
systemPackages = lib.optional (cfg.package != null) cfg.package;
|
systemPackages = lib.optional (cfg.package != null) cfg.package;
|
||||||
|
|
||||||
sessionVariables = mkIf cfg.recommendedEnvironment {
|
sessionVariables = mkIf cfg.recommendedEnvironment {
|
||||||
GDK_BACKEND = "wayland";
|
GDK_BACKEND = "wayland,x11";
|
||||||
_JAVA_AWT_WM_NONREPARENTING = "1";
|
_JAVA_AWT_WM_NONREPARENTING = "1";
|
||||||
NIXOS_OZONE_WL = "1";
|
NIXOS_OZONE_WL = "1";
|
||||||
XCURSOR_SIZE = "24";
|
XCURSOR_SIZE = "24";
|
||||||
|
@@ -115,6 +115,9 @@ CCompositor::CCompositor() {
|
|||||||
m_sWLRXCursorMgr = wlr_xcursor_manager_create(nullptr, 24);
|
m_sWLRXCursorMgr = wlr_xcursor_manager_create(nullptr, 24);
|
||||||
wlr_xcursor_manager_load(m_sWLRXCursorMgr, 1);
|
wlr_xcursor_manager_load(m_sWLRXCursorMgr, 1);
|
||||||
|
|
||||||
|
if (const auto XCURSORENV = getenv("XCURSOR_SIZE"); !XCURSORENV || std::string(XCURSORENV).empty())
|
||||||
|
setenv("XCURSOR_SIZE", "24", true);
|
||||||
|
|
||||||
m_sSeat.seat = wlr_seat_create(m_sWLDisplay, "seat0");
|
m_sSeat.seat = wlr_seat_create(m_sWLDisplay, "seat0");
|
||||||
|
|
||||||
m_sWLRPresentation = wlr_presentation_create(m_sWLDisplay, m_sWLRBackend);
|
m_sWLRPresentation = wlr_presentation_create(m_sWLDisplay, m_sWLRBackend);
|
||||||
@@ -240,7 +243,7 @@ void CCompositor::cleanup() {
|
|||||||
|
|
||||||
// accumulate all PIDs for killing, also request closing.
|
// accumulate all PIDs for killing, also request closing.
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w->m_bIsMapped && !w->m_bHidden)
|
if (w->m_bIsMapped && !w->isHidden())
|
||||||
m_dProcessPIDsOnShutdown.push_back(w->getPID());
|
m_dProcessPIDsOnShutdown.push_back(w->getPID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,13 +448,13 @@ CWindow* CCompositor::vectorToWindow(const Vector2D& pos) {
|
|||||||
if (PMONITOR->specialWorkspaceOpen) {
|
if (PMONITOR->specialWorkspaceOpen) {
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !(*w)->m_bHidden)
|
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !(*w)->isHidden())
|
||||||
return (*w).get();
|
return (*w).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vRealPosition.vec().x, w->m_vRealPosition.vec().y, w->m_vRealSize.vec().x, w->m_vRealSize.vec().y};
|
wlr_box box = {w->m_vRealPosition.vec().x, w->m_vRealPosition.vec().y, w->m_vRealSize.vec().x, w->m_vRealSize.vec().y};
|
||||||
if (w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_bIsMapped && !w->m_bIsFloating && !w->m_bHidden)
|
if (w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_bIsMapped && !w->m_bIsFloating && !w->isHidden())
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -459,20 +462,20 @@ CWindow* CCompositor::vectorToWindow(const Vector2D& pos) {
|
|||||||
// pinned
|
// pinned
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if (wlr_box_contains_point(&box, pos.x, pos.y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && !(*w)->m_bHidden && (*w)->m_bPinned)
|
if (wlr_box_contains_point(&box, pos.x, pos.y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && !(*w)->isHidden() && (*w)->m_bPinned)
|
||||||
return w->get();
|
return w->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// first loop over floating cuz they're above, m_vWindows should be sorted bottom->top, for tiled it doesn't matter.
|
// first loop over floating cuz they're above, m_vWindows should be sorted bottom->top, for tiled it doesn't matter.
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if (wlr_box_contains_point(&box, pos.x, pos.y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->m_bHidden && !(*w)->m_bPinned)
|
if (wlr_box_contains_point(&box, pos.x, pos.y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->isHidden() && !(*w)->m_bPinned)
|
||||||
return w->get();
|
return w->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vRealPosition.vec().x, w->m_vRealPosition.vec().y, w->m_vRealSize.vec().x, w->m_vRealSize.vec().y};
|
wlr_box box = {w->m_vRealPosition.vec().x, w->m_vRealPosition.vec().y, w->m_vRealSize.vec().x, w->m_vRealSize.vec().y};
|
||||||
if (wlr_box_contains_point(&box, pos.x, pos.y) && w->m_bIsMapped && !w->m_bIsFloating && PMONITOR->activeWorkspace == w->m_iWorkspaceID && !w->m_bHidden)
|
if (wlr_box_contains_point(&box, pos.x, pos.y) && w->m_bIsMapped && !w->m_bIsFloating && PMONITOR->activeWorkspace == w->m_iWorkspaceID && !w->isHidden())
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,14 +488,14 @@ CWindow* CCompositor::vectorToWindowTiled(const Vector2D& pos) {
|
|||||||
if (PMONITOR->specialWorkspaceOpen) {
|
if (PMONITOR->specialWorkspaceOpen) {
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
||||||
if (w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && wlr_box_contains_point(&box, pos.x, pos.y) && !w->m_bIsFloating && !w->m_bHidden)
|
if (w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && wlr_box_contains_point(&box, pos.x, pos.y) && !w->m_bIsFloating && !w->isHidden())
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
||||||
if (w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->m_bIsFloating && !w->m_bHidden)
|
if (w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->m_bIsFloating && !w->isHidden())
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,13 +518,13 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
|
|||||||
if (PMONITOR->specialWorkspaceOpen) {
|
if (PMONITOR->specialWorkspaceOpen) {
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !(*w)->m_bHidden && !(*w)->m_bX11ShouldntFocus)
|
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !(*w)->isHidden() && !(*w)->m_bX11ShouldntFocus)
|
||||||
return (*w).get();
|
return (*w).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
||||||
if (!w->m_bIsFloating && w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !w->m_bHidden && !w->m_bX11ShouldntFocus)
|
if (!w->m_bIsFloating && w->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && !w->isHidden() && !w->m_bX11ShouldntFocus)
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -529,7 +532,7 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
|
|||||||
// pinned windows on top of floating regardless
|
// pinned windows on top of floating regardless
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((*w)->m_bIsFloating && (*w)->m_bIsMapped && !(*w)->m_bHidden && !(*w)->m_bX11ShouldntFocus && (*w)->m_bPinned) {
|
if ((*w)->m_bIsFloating && (*w)->m_bIsMapped && !(*w)->isHidden() && !(*w)->m_bX11ShouldntFocus && (*w)->m_bPinned) {
|
||||||
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y))
|
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y))
|
||||||
return w->get();
|
return w->get();
|
||||||
|
|
||||||
@@ -548,7 +551,7 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
|
|||||||
// first loop over floating cuz they're above, m_lWindows should be sorted bottom->top, for tiled it doesn't matter.
|
// first loop over floating cuz they're above, m_lWindows should be sorted bottom->top, for tiled it doesn't matter.
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((*w)->m_bIsFloating && (*w)->m_bIsMapped && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->m_bHidden && !(*w)->m_bPinned) {
|
if ((*w)->m_bIsFloating && (*w)->m_bIsMapped && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->isHidden() && !(*w)->m_bPinned) {
|
||||||
// OR windows should add focus to parent
|
// OR windows should add focus to parent
|
||||||
if ((*w)->m_bX11ShouldntFocus && (*w)->m_iX11Type != 2)
|
if ((*w)->m_bX11ShouldntFocus && (*w)->m_iX11Type != 2)
|
||||||
continue;
|
continue;
|
||||||
@@ -578,7 +581,7 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
|
|||||||
|
|
||||||
// for windows, we need to check their extensions too, first.
|
// for windows, we need to check their extensions too, first.
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (!w->m_bIsX11 && !w->m_bIsFloating && w->m_bIsMapped && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->m_bHidden && !w->m_bX11ShouldntFocus) {
|
if (!w->m_bIsX11 && !w->m_bIsFloating && w->m_bIsMapped && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->isHidden() && !w->m_bX11ShouldntFocus) {
|
||||||
wlr_surface* resultSurf = nullptr;
|
wlr_surface* resultSurf = nullptr;
|
||||||
Vector2D origin = w->m_vRealPosition.vec();
|
Vector2D origin = w->m_vRealPosition.vec();
|
||||||
SExtensionFindingData data = {origin, pos, &resultSurf};
|
SExtensionFindingData data = {origin, pos, &resultSurf};
|
||||||
@@ -590,7 +593,7 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
|
|||||||
}
|
}
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
wlr_box box = {w->m_vPosition.x, w->m_vPosition.y, w->m_vSize.x, w->m_vSize.y};
|
||||||
if (!w->m_bIsFloating && w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->m_bHidden && !w->m_bX11ShouldntFocus)
|
if (!w->m_bIsFloating && w->m_bIsMapped && wlr_box_contains_point(&box, pos.x, pos.y) && w->m_iWorkspaceID == PMONITOR->activeWorkspace && !w->isHidden() && !w->m_bX11ShouldntFocus)
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -603,7 +606,7 @@ CWindow* CCompositor::windowFromCursor() {
|
|||||||
if (PMONITOR->specialWorkspaceOpen) {
|
if (PMONITOR->specialWorkspaceOpen) {
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && !(*w)->m_bHidden)
|
if ((*w)->m_bIsFloating && (*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && (*w)->m_bIsMapped && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && !(*w)->isHidden())
|
||||||
return (*w).get();
|
return (*w).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,13 +643,13 @@ CWindow* CCompositor::windowFromCursor() {
|
|||||||
CWindow* CCompositor::windowFloatingFromCursor() {
|
CWindow* CCompositor::windowFloatingFromCursor() {
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && !(*w)->m_bHidden && (*w)->m_bPinned)
|
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && !(*w)->isHidden() && (*w)->m_bPinned)
|
||||||
return w->get();
|
return w->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
for (auto w = m_vWindows.rbegin(); w != m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->m_bHidden && !(*w)->m_bPinned)
|
if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && (*w)->m_bIsMapped && (*w)->m_bIsFloating && isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->isHidden() && !(*w)->m_bPinned)
|
||||||
return w->get();
|
return w->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -815,6 +818,9 @@ void CCompositor::focusSurface(wlr_surface* pSurface, CWindow* pWindowOwner) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
||||||
|
if (!pWindow)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!windowExists(pWindow))
|
if (!windowExists(pWindow))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -824,7 +830,7 @@ bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
|||||||
if (!pWindow->m_bIsMapped)
|
if (!pWindow->m_bIsMapped)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (pWindow->m_bHidden)
|
if (pWindow->isHidden())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -934,7 +940,7 @@ int CCompositor::getWindowsOnWorkspace(const int& id) {
|
|||||||
|
|
||||||
CWindow* CCompositor::getFirstWindowOnWorkspace(const int& id) {
|
CWindow* CCompositor::getFirstWindowOnWorkspace(const int& id) {
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w->m_iWorkspaceID == id && w->m_bIsMapped && !w->m_bHidden)
|
if (w->m_iWorkspaceID == id && w->m_bIsMapped && !w->isHidden())
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -980,7 +986,7 @@ void CCompositor::moveWindowToTop(CWindow* pWindow) {
|
|||||||
std::deque<CWindow*> toMove;
|
std::deque<CWindow*> toMove;
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w->m_bIsMapped && w->m_bMappedX11 && !w->m_bHidden && w->m_bIsX11 && w->X11TransientFor() == pWindow) {
|
if (w->m_bIsMapped && w->m_bMappedX11 && !w->isHidden() && w->m_bIsX11 && w->X11TransientFor() == pWindow) {
|
||||||
toMove.emplace_back(w.get());
|
toMove.emplace_back(w.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1103,7 +1109,7 @@ CWindow* CCompositor::getWindowInDirection(CWindow* pWindow, char dir) {
|
|||||||
CWindow* longestIntersectWindow = nullptr;
|
CWindow* longestIntersectWindow = nullptr;
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w.get() == pWindow || !w->m_bIsMapped || w->m_bHidden || w->m_bIsFloating || !isWorkspaceVisible(w->m_iWorkspaceID))
|
if (w.get() == pWindow || !w->m_bIsMapped || w->isHidden() || w->m_bIsFloating || !isWorkspaceVisible(w->m_iWorkspaceID))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const auto BWINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved();
|
const auto BWINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved();
|
||||||
@@ -1177,12 +1183,12 @@ CWindow* CCompositor::getNextWindowOnWorkspace(CWindow* pWindow, bool focusableO
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden && (!focusableOnly || !w->m_bNoFocus))
|
if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->isHidden() && (!focusableOnly || !w->m_bNoFocus))
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w.get() != pWindow && w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden && (!focusableOnly || !w->m_bNoFocus))
|
if (w.get() != pWindow && w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->isHidden() && (!focusableOnly || !w->m_bNoFocus))
|
||||||
return w.get();
|
return w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1200,12 +1206,12 @@ CWindow* CCompositor::getPrevWindowOnWorkspace(CWindow* pWindow, bool focusableO
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden && (!focusableOnly || !(*it)->m_bNoFocus))
|
if ((*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->isHidden() && (!focusableOnly || !(*it)->m_bNoFocus))
|
||||||
return it->get();
|
return it->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto it = m_vWindows.rbegin(); it != m_vWindows.rend(); it++) {
|
for (auto it = m_vWindows.rbegin(); it != m_vWindows.rend(); it++) {
|
||||||
if (it->get() != pWindow && (*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden && (!focusableOnly || !(*it)->m_bNoFocus))
|
if (it->get() != pWindow && (*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->isHidden() && (!focusableOnly || !(*it)->m_bNoFocus))
|
||||||
return it->get();
|
return it->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1263,7 +1269,7 @@ CWindow* CCompositor::getConstraintWindow(SMouse* pMouse) {
|
|||||||
|
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (PSURFACE == g_pXWaylandManager->getWindowSurface(w.get())) {
|
if (PSURFACE == g_pXWaylandManager->getWindowSurface(w.get())) {
|
||||||
if (!w->m_bIsX11 && w->m_bIsMapped && !w->m_bHidden)
|
if (!w->m_bIsX11 && w->m_bIsMapped && !w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return w.get();
|
return w.get();
|
||||||
@@ -1564,7 +1570,7 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
|
|||||||
w->m_iMonitorID = pMonitor->ID;
|
w->m_iMonitorID = pMonitor->ID;
|
||||||
|
|
||||||
// additionally, move floating and fs windows manually
|
// additionally, move floating and fs windows manually
|
||||||
if (w->m_bIsMapped && !w->m_bHidden) {
|
if (w->m_bIsMapped && !w->isHidden()) {
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
w->m_vRealPosition = w->m_vRealPosition.vec() - POLDMON->vecPosition + pMonitor->vecPosition;
|
w->m_vRealPosition = w->m_vRealPosition.vec() - POLDMON->vecPosition + pMonitor->vecPosition;
|
||||||
|
|
||||||
@@ -1718,7 +1724,7 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (!w->m_bIsMapped || w->m_bHidden)
|
if (!w->m_bIsMapped || w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
@@ -1846,7 +1852,7 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con
|
|||||||
|
|
||||||
void CCompositor::forceReportSizesToWindowsOnWorkspace(const int& wid) {
|
void CCompositor::forceReportSizesToWindowsOnWorkspace(const int& wid) {
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w->m_iWorkspaceID == wid && w->m_bIsMapped && !w->m_bHidden) {
|
if (w->m_iWorkspaceID == wid && w->m_bIsMapped && !w->isHidden()) {
|
||||||
g_pXWaylandManager->setWindowSize(w.get(), w->m_vRealSize.vec(), true);
|
g_pXWaylandManager->setWindowSize(w.get(), w->m_vRealSize.vec(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -244,3 +244,20 @@ void CWindow::removeDecorationByType(eDecorationType type) {
|
|||||||
|
|
||||||
updateWindowDecos();
|
updateWindowDecos();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CWindow::onUnmap() {
|
||||||
|
if (g_pCompositor->m_pLastWindow == this)
|
||||||
|
g_pCompositor->m_pLastWindow = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWindow::setHidden(bool hidden) {
|
||||||
|
m_bHidden = hidden;
|
||||||
|
|
||||||
|
if (hidden) {
|
||||||
|
onUnmap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CWindow::isHidden() {
|
||||||
|
return m_bHidden;
|
||||||
|
}
|
@@ -118,9 +118,6 @@ public:
|
|||||||
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
||||||
Vector2D m_vOriginalClosedSize; // drawing the closing animations
|
Vector2D m_vOriginalClosedSize; // drawing the closing animations
|
||||||
|
|
||||||
// For hidden windows and stuff
|
|
||||||
bool m_bHidden = false;
|
|
||||||
|
|
||||||
// For pinned (sticky) windows
|
// For pinned (sticky) windows
|
||||||
bool m_bPinned = false;
|
bool m_bPinned = false;
|
||||||
|
|
||||||
@@ -172,4 +169,12 @@ public:
|
|||||||
void updateSurfaceOutputs();
|
void updateSurfaceOutputs();
|
||||||
void moveToWorkspace(int);
|
void moveToWorkspace(int);
|
||||||
CWindow* X11TransientFor();
|
CWindow* X11TransientFor();
|
||||||
|
void onUnmap();
|
||||||
|
void setHidden(bool hidden);
|
||||||
|
bool isHidden();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// For hidden windows and stuff
|
||||||
|
bool m_bHidden = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@@ -147,6 +147,8 @@ void CConfigManager::setDefaultVars() {
|
|||||||
configValues["input:touchpad:tap-to-click"].intValue = 1;
|
configValues["input:touchpad:tap-to-click"].intValue = 1;
|
||||||
configValues["input:touchpad:drag_lock"].intValue = 0;
|
configValues["input:touchpad:drag_lock"].intValue = 0;
|
||||||
configValues["input:touchpad:scroll_factor"].floatValue = 1.f;
|
configValues["input:touchpad:scroll_factor"].floatValue = 1.f;
|
||||||
|
configValues["input:touchdevice:transform"].intValue = 0;
|
||||||
|
configValues["input:touchdevice:output"].strValue = STRVAL_EMPTY;
|
||||||
|
|
||||||
configValues["binds:pass_mouse_when_bound"].intValue = 0;
|
configValues["binds:pass_mouse_when_bound"].intValue = 0;
|
||||||
configValues["binds:scroll_event_delay"].intValue = 300;
|
configValues["binds:scroll_event_delay"].intValue = 300;
|
||||||
@@ -187,6 +189,8 @@ void CConfigManager::setDeviceDefaultVars(const std::string& dev) {
|
|||||||
cfgValues["drag_lock"].intValue = 0;
|
cfgValues["drag_lock"].intValue = 0;
|
||||||
cfgValues["left_handed"].intValue = 0;
|
cfgValues["left_handed"].intValue = 0;
|
||||||
cfgValues["scroll_method"].strValue = STRVAL_EMPTY;
|
cfgValues["scroll_method"].strValue = STRVAL_EMPTY;
|
||||||
|
cfgValues["touch_transform"].intValue = 0;
|
||||||
|
cfgValues["touch_output"].strValue = STRVAL_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigManager::setDefaultAnimationVars() {
|
void CConfigManager::setDefaultAnimationVars() {
|
||||||
@@ -307,6 +311,31 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s
|
|||||||
// Values with 0x are hex
|
// Values with 0x are hex
|
||||||
const auto VALUEWITHOUTHEX = VALUE.substr(2);
|
const auto VALUEWITHOUTHEX = VALUE.substr(2);
|
||||||
CONFIGENTRY->intValue = stol(VALUEWITHOUTHEX, nullptr, 16);
|
CONFIGENTRY->intValue = stol(VALUEWITHOUTHEX, nullptr, 16);
|
||||||
|
} else if (VALUE.find("rgba(") == 0 && VALUE.find(")") == VALUE.length() - 1) {
|
||||||
|
const auto VALUEWITHOUTFUNC = VALUE.substr(5, VALUE.length() - 6);
|
||||||
|
|
||||||
|
if (removeBeginEndSpacesTabs(VALUEWITHOUTFUNC).length() != 8) {
|
||||||
|
Debug::log(WARN, "invalid length %i for rgba", VALUEWITHOUTFUNC.length());
|
||||||
|
parseError = "rgba() expects length of 8 characters (4 bytes)";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto RGBA = std::stol(VALUEWITHOUTFUNC, nullptr, 16);
|
||||||
|
|
||||||
|
// now we need to RGBA -> ARGB. The config holds ARGB only.
|
||||||
|
CONFIGENTRY->intValue = (RGBA >> 8) + 0x1000000 * (RGBA & 0xFF);
|
||||||
|
} else if (VALUE.find("rgb(") == 0 && VALUE.find(")") == VALUE.length() - 1) {
|
||||||
|
const auto VALUEWITHOUTFUNC = VALUE.substr(4, VALUE.length() - 5);
|
||||||
|
|
||||||
|
if (removeBeginEndSpacesTabs(VALUEWITHOUTFUNC).length() != 6) {
|
||||||
|
Debug::log(WARN, "invalid length %i for rgb", VALUEWITHOUTFUNC.length());
|
||||||
|
parseError = "rgb() expects length of 6 characters (3 bytes)";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto RGB = std::stol(VALUEWITHOUTFUNC, nullptr, 16);
|
||||||
|
|
||||||
|
CONFIGENTRY->intValue = RGB + 0xFF000000; // 0xFF for opaque
|
||||||
} else if (VALUE.find("true") == 0 || VALUE.find("on") == 0 || VALUE.find("yes") == 0) {
|
} else if (VALUE.find("true") == 0 || VALUE.find("on") == 0 || VALUE.find("yes") == 0) {
|
||||||
CONFIGENTRY->intValue = 1;
|
CONFIGENTRY->intValue = 1;
|
||||||
} else if (VALUE.find("false") == 0 || VALUE.find("off") == 0 || VALUE.find("no") == 0) {
|
} else if (VALUE.find("false") == 0 || VALUE.find("off") == 0 || VALUE.find("no") == 0) {
|
||||||
@@ -718,6 +747,7 @@ bool windowRuleValid(const std::string& RULE) {
|
|||||||
&& RULE.find("move") != 0
|
&& RULE.find("move") != 0
|
||||||
&& RULE.find("size") != 0
|
&& RULE.find("size") != 0
|
||||||
&& RULE.find("minsize") != 0
|
&& RULE.find("minsize") != 0
|
||||||
|
&& RULE.find("maxsize") != 0
|
||||||
&& RULE.find("pseudo") != 0
|
&& RULE.find("pseudo") != 0
|
||||||
&& RULE.find("monitor") != 0
|
&& RULE.find("monitor") != 0
|
||||||
&& RULE != "nofocus"
|
&& RULE != "nofocus"
|
||||||
@@ -1139,6 +1169,7 @@ void CConfigManager::loadConfigLoadVars() {
|
|||||||
if (!isFirstLaunch) {
|
if (!isFirstLaunch) {
|
||||||
g_pInputManager->setKeyboardLayout();
|
g_pInputManager->setKeyboardLayout();
|
||||||
g_pInputManager->setPointerConfigs();
|
g_pInputManager->setPointerConfigs();
|
||||||
|
g_pInputManager->setTouchDeviceConfigs();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the internal vars
|
// Calculate the internal vars
|
||||||
@@ -1424,6 +1455,7 @@ void CConfigManager::dispatchExecOnce() {
|
|||||||
// set input, fixes some certain issues
|
// set input, fixes some certain issues
|
||||||
g_pInputManager->setKeyboardLayout();
|
g_pInputManager->setKeyboardLayout();
|
||||||
g_pInputManager->setPointerConfigs();
|
g_pInputManager->setPointerConfigs();
|
||||||
|
g_pInputManager->setTouchDeviceConfigs();
|
||||||
|
|
||||||
// set ws names again
|
// set ws names again
|
||||||
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
||||||
|
@@ -9,121 +9,160 @@ PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
|
|||||||
OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
|
OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||||
########################################################################################
|
########################################################################################
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Please note not all available settings / options are set here.
|
# Please note not all available settings / options are set here.
|
||||||
# For a full list, see the wiki (basic and advanced configuring)
|
# For a full list, see the wiki
|
||||||
#
|
#
|
||||||
|
|
||||||
autogenerated=1 # remove this line to get rid of the warning on top.
|
autogenerated = 1 # remove this line to remove the warning
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
monitor=,preferred,auto,1
|
monitor=,preferred,auto,1
|
||||||
|
|
||||||
input {
|
|
||||||
kb_file=
|
|
||||||
kb_layout=
|
|
||||||
kb_variant=
|
|
||||||
kb_model=
|
|
||||||
kb_options=
|
|
||||||
kb_rules=
|
|
||||||
|
|
||||||
follow_mouse=1
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
|
|
||||||
|
# Execute your favorite apps at launch
|
||||||
|
# exec-once = waybar & hyprpaper & firefox
|
||||||
|
|
||||||
|
# Source a file (multi-file configs)
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
touchpad {
|
touchpad {
|
||||||
natural_scroll=no
|
natural_scroll = no
|
||||||
}
|
}
|
||||||
|
|
||||||
sensitivity=0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
}
|
}
|
||||||
|
|
||||||
general {
|
general {
|
||||||
main_mod=SUPER
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
|
||||||
gaps_in=5
|
gaps_in = 5
|
||||||
gaps_out=20
|
gaps_out = 20
|
||||||
border_size=2
|
border_size = 2
|
||||||
col.active_border=0x66ee1111
|
col.active_border = rgba(1affffee)
|
||||||
col.inactive_border=0x66333333
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse)
|
layout = dwindle
|
||||||
|
|
||||||
damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
decoration {
|
decoration {
|
||||||
rounding=10
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
blur=1
|
|
||||||
blur_size=3 # minimum 1
|
rounding = 10
|
||||||
blur_passes=1 # minimum 1
|
blur = yes
|
||||||
blur_new_optimizations=1
|
blur_size = 3
|
||||||
|
blur_passes = 1
|
||||||
|
blur_new_optimizations = on
|
||||||
|
|
||||||
|
drop_shadow = yes
|
||||||
|
shadow_range = 4
|
||||||
|
shadow_render_power = 3
|
||||||
|
col.shadow = rgba(1a1a1aee)
|
||||||
}
|
}
|
||||||
|
|
||||||
animations {
|
animations {
|
||||||
enabled=1
|
enabled = yes
|
||||||
animation=windows,1,7,default
|
|
||||||
animation=border,1,10,default
|
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
animation=fade,1,10,default
|
|
||||||
animation=workspaces,1,6,default
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, default, popin 80%
|
||||||
|
animation = border, 1, 10, default
|
||||||
|
animation = fade, 1, 7, default
|
||||||
|
animation = workspaces, 1, 6, default
|
||||||
}
|
}
|
||||||
|
|
||||||
dwindle {
|
dwindle {
|
||||||
pseudotile=0 # enable pseudotiling on dwindle
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = yes # you probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
new_is_master = true
|
||||||
}
|
}
|
||||||
|
|
||||||
gestures {
|
gestures {
|
||||||
workspace_swipe=no
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
workspace_swipe = off
|
||||||
}
|
}
|
||||||
|
|
||||||
# example window rules
|
# Example per-device config
|
||||||
# for windows named/classed as abc and xyz
|
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
|
||||||
#windowrule=move 69 420,abc
|
device:epic mouse V1 {
|
||||||
#windowrule=size 420 69,abc
|
sensitivity = -0.5
|
||||||
#windowrule=tile,xyz
|
}
|
||||||
#windowrule=float,abc
|
|
||||||
#windowrule=pseudo,abc
|
|
||||||
#windowrule=monitor 0,xyz
|
|
||||||
|
|
||||||
# some nice mouse binds
|
# Example windowrule v1
|
||||||
bindm=SUPER,mouse:272,movewindow
|
# windowrule = float, ^(kitty)$
|
||||||
bindm=SUPER,mouse:273,resizewindow
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
|
||||||
# example binds
|
|
||||||
bind=SUPER,Q,exec,kitty
|
|
||||||
bind=SUPER,RETURN,exec,alacritty
|
|
||||||
bind=SUPER,C,killactive,
|
|
||||||
bind=SUPER,M,exit,
|
|
||||||
bind=SUPER,E,exec,dolphin
|
|
||||||
bind=SUPER,V,togglefloating,
|
|
||||||
bind=SUPER,R,exec,wofi --show drun -o DP-3
|
|
||||||
bind=SUPER,P,pseudo,
|
|
||||||
|
|
||||||
bind=SUPER,left,movefocus,l
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
bind=SUPER,right,movefocus,r
|
$mainMod = SUPER
|
||||||
bind=SUPER,up,movefocus,u
|
|
||||||
bind=SUPER,down,movefocus,d
|
|
||||||
|
|
||||||
bind=SUPER,1,workspace,1
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
bind=SUPER,2,workspace,2
|
bind = $mainMod, Q, exec, kitty
|
||||||
bind=SUPER,3,workspace,3
|
bind = $mainMod, C, killactive,
|
||||||
bind=SUPER,4,workspace,4
|
bind = $mainMod, M, exit,
|
||||||
bind=SUPER,5,workspace,5
|
bind = $mainMod, E, exec, dolphin
|
||||||
bind=SUPER,6,workspace,6
|
bind = $mainMod, V, togglefloating,
|
||||||
bind=SUPER,7,workspace,7
|
bind = $mainMod, R, exec, wofi --show drun
|
||||||
bind=SUPER,8,workspace,8
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
bind=SUPER,9,workspace,9
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
bind=SUPER,0,workspace,10
|
|
||||||
|
|
||||||
bind=ALT,1,movetoworkspace,1
|
# Move focus with mainMod + arrow keys
|
||||||
bind=ALT,2,movetoworkspace,2
|
bind = $mainMod, left, movefocus, l
|
||||||
bind=ALT,3,movetoworkspace,3
|
bind = $mainMod, right, movefocus, r
|
||||||
bind=ALT,4,movetoworkspace,4
|
bind = $mainMod, up, movefocus, u
|
||||||
bind=ALT,5,movetoworkspace,5
|
bind = $mainMod, down, movefocus, d
|
||||||
bind=ALT,6,movetoworkspace,6
|
|
||||||
bind=ALT,7,movetoworkspace,7
|
|
||||||
bind=ALT,8,movetoworkspace,8
|
|
||||||
bind=ALT,9,movetoworkspace,9
|
|
||||||
bind=ALT,0,movetoworkspace,10
|
|
||||||
|
|
||||||
bind=SUPER,mouse_down,workspace,e+1
|
# Switch workspaces with mainMod + [0-9]
|
||||||
bind=SUPER,mouse_up,workspace,e-1
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
bind = $mainMod, 3, workspace, 3
|
||||||
|
bind = $mainMod, 4, workspace, 4
|
||||||
|
bind = $mainMod, 5, workspace, 5
|
||||||
|
bind = $mainMod, 6, workspace, 6
|
||||||
|
bind = $mainMod, 7, workspace, 7
|
||||||
|
bind = $mainMod, 8, workspace, 8
|
||||||
|
bind = $mainMod, 9, workspace, 9
|
||||||
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
)#";
|
)#";
|
||||||
|
@@ -499,7 +499,7 @@ std::string versionRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
|||||||
R"#({
|
R"#({
|
||||||
"branch": "%s",
|
"branch": "%s",
|
||||||
"commit": "%s",
|
"commit": "%s",
|
||||||
"dirty": %s
|
"dirty": %s,
|
||||||
"commit_message": "%s",
|
"commit_message": "%s",
|
||||||
"flags": [)#", GIT_BRANCH, GIT_COMMIT_HASH, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), removeBeginEndSpacesTabs(GIT_COMMIT_MESSAGE).c_str());
|
"flags": [)#", GIT_BRANCH, GIT_COMMIT_HASH, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), removeBeginEndSpacesTabs(GIT_COMMIT_MESSAGE).c_str());
|
||||||
|
|
||||||
@@ -562,6 +562,7 @@ std::string dispatchKeyword(std::string in) {
|
|||||||
if (COMMAND.contains("input") || COMMAND.contains("device:")) {
|
if (COMMAND.contains("input") || COMMAND.contains("device:")) {
|
||||||
g_pInputManager->setKeyboardLayout(); // update kb layout
|
g_pInputManager->setKeyboardLayout(); // update kb layout
|
||||||
g_pInputManager->setPointerConfigs(); // update mouse cfgs
|
g_pInputManager->setPointerConfigs(); // update mouse cfgs
|
||||||
|
g_pInputManager->setTouchDeviceConfigs(); // update touch device cfgs
|
||||||
}
|
}
|
||||||
|
|
||||||
if (COMMAND.contains("general:layout"))
|
if (COMMAND.contains("general:layout"))
|
||||||
|
@@ -227,8 +227,6 @@ void Events::listener_monitorFrame(void* owner, void* data) {
|
|||||||
|
|
||||||
if (PMONITOR->isMirror()) {
|
if (PMONITOR->isMirror()) {
|
||||||
g_pHyprOpenGL->renderMirrored();
|
g_pHyprOpenGL->renderMirrored();
|
||||||
|
|
||||||
Debug::log(LOG, "Mirror frame");
|
|
||||||
} else {
|
} else {
|
||||||
g_pHyprOpenGL->clear(CColor(17, 17, 17, 255));
|
g_pHyprOpenGL->clear(CColor(17, 17, 17, 255));
|
||||||
g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper"
|
g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper"
|
||||||
|
@@ -147,6 +147,9 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
requestedWorkspace = WORKSPACERQ;
|
requestedWorkspace = WORKSPACERQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (requestedWorkspace == PWORKSPACE->m_szName || requestedWorkspace == "name:" + PWORKSPACE->m_szName)
|
||||||
|
requestedWorkspace = "";
|
||||||
|
|
||||||
Debug::log(LOG, "Rule workspace matched by window %x, %s applied.", PWINDOW, r.szValue.c_str());
|
Debug::log(LOG, "Rule workspace matched by window %x, %s applied.", PWINDOW, r.szValue.c_str());
|
||||||
} else if (r.szRule.find("float") == 0) {
|
} else if (r.szRule.find("float") == 0) {
|
||||||
PWINDOW->m_bIsFloating = true;
|
PWINDOW->m_bIsFloating = true;
|
||||||
@@ -247,7 +250,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
PWINDOW->m_vRealSize = Vector2D(SIZEX, SIZEY);
|
PWINDOW->m_vRealSize = Vector2D(SIZEX, SIZEY);
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
||||||
|
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
Debug::log(LOG, "Rule size failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
Debug::log(LOG, "Rule size failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
||||||
}
|
}
|
||||||
@@ -262,10 +265,25 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
PWINDOW->m_vRealSize = SIZE;
|
PWINDOW->m_vRealSize = SIZE;
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
||||||
|
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
Debug::log(LOG, "Rule minsize failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
Debug::log(LOG, "Rule minsize failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
||||||
}
|
}
|
||||||
|
} else if (r.szRule.find("maxsize") == 0) {
|
||||||
|
try {
|
||||||
|
const auto VALUE = r.szRule.substr(r.szRule.find(" ") + 1);
|
||||||
|
const auto SIZEXSTR = VALUE.substr(0, VALUE.find(" "));
|
||||||
|
const auto SIZEYSTR = VALUE.substr(VALUE.find(" ") + 1);
|
||||||
|
|
||||||
|
const auto SIZE = Vector2D(std::min((double)std::stoll(SIZEXSTR), PWINDOW->m_vRealSize.goalv().x), std::min((double)std::stoll(SIZEYSTR), PWINDOW->m_vRealSize.goalv().y));
|
||||||
|
|
||||||
|
PWINDOW->m_vRealSize = SIZE;
|
||||||
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
||||||
|
|
||||||
|
PWINDOW->setHidden(false);
|
||||||
|
} catch (...) {
|
||||||
|
Debug::log(LOG, "Rule maxsize failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
||||||
|
}
|
||||||
} else if (r.szRule.find("move") == 0) {
|
} else if (r.szRule.find("move") == 0) {
|
||||||
try {
|
try {
|
||||||
const auto VALUE = r.szRule.substr(r.szRule.find(" ") + 1);
|
const auto VALUE = r.szRule.substr(r.szRule.find(" ") + 1);
|
||||||
@@ -279,7 +297,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
|
|
||||||
PWINDOW->m_vRealPosition = Vector2D(POSX, POSY) + PMONITOR->vecPosition;
|
PWINDOW->m_vRealPosition = Vector2D(POSX, POSY) + PMONITOR->vecPosition;
|
||||||
|
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
Debug::log(LOG, "Rule move failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
Debug::log(LOG, "Rule move failed, rule: %s -> %s", r.szRule.c_str(), r.szValue.c_str());
|
||||||
}
|
}
|
||||||
@@ -420,7 +438,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
std::vector<CWindow*> found;
|
std::vector<CWindow*> found;
|
||||||
CWindow* finalFound = nullptr;
|
CWindow* finalFound = nullptr;
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (!w->m_bIsMapped || w->m_bHidden)
|
if (!w->m_bIsMapped || w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->getPID() == ppid) {
|
if (w->getPID() == ppid) {
|
||||||
@@ -448,7 +466,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
|||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(finalFound);
|
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(finalFound);
|
||||||
|
|
||||||
finalFound->m_bHidden = true;
|
finalFound->setHidden(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -496,7 +514,7 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
|||||||
|
|
||||||
// swallowing
|
// swallowing
|
||||||
if (PWINDOW->m_pSwallowed && g_pCompositor->windowExists(PWINDOW->m_pSwallowed)) {
|
if (PWINDOW->m_pSwallowed && g_pCompositor->windowExists(PWINDOW->m_pSwallowed)) {
|
||||||
PWINDOW->m_pSwallowed->m_bHidden = false;
|
PWINDOW->m_pSwallowed->setHidden(false);
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW->m_pSwallowed);
|
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW->m_pSwallowed);
|
||||||
PWINDOW->m_pSwallowed = nullptr;
|
PWINDOW->m_pSwallowed = nullptr;
|
||||||
}
|
}
|
||||||
@@ -529,7 +547,7 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
|||||||
if (PWORKSPACE->m_bHasFullscreenWindow && ((!PWINDOWCANDIDATE || !PWINDOWCANDIDATE->m_bCreatedOverFullscreen) || !PWINDOW->m_bIsFloating))
|
if (PWORKSPACE->m_bHasFullscreenWindow && ((!PWINDOWCANDIDATE || !PWINDOWCANDIDATE->m_bCreatedOverFullscreen) || !PWINDOW->m_bIsFloating))
|
||||||
PWINDOWCANDIDATE = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
PWINDOWCANDIDATE = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
||||||
|
|
||||||
if (!PWINDOWCANDIDATE || PWINDOW == PWINDOWCANDIDATE || !PWINDOWCANDIDATE->m_bIsMapped || PWINDOWCANDIDATE->m_bHidden || PWINDOWCANDIDATE->m_bX11ShouldntFocus || PWINDOWCANDIDATE->m_iX11Type == 2 || PWINDOWCANDIDATE->m_iMonitorID != g_pCompositor->m_pLastMonitor->ID)
|
if (!PWINDOWCANDIDATE || PWINDOW == PWINDOWCANDIDATE || !PWINDOWCANDIDATE->m_bIsMapped || PWINDOWCANDIDATE->isHidden() || PWINDOWCANDIDATE->m_bX11ShouldntFocus || PWINDOWCANDIDATE->m_iX11Type == 2 || PWINDOWCANDIDATE->m_iMonitorID != g_pCompositor->m_pLastMonitor->ID)
|
||||||
PWINDOWCANDIDATE = nullptr;
|
PWINDOWCANDIDATE = nullptr;
|
||||||
|
|
||||||
Debug::log(LOG, "On closed window, new focused candidate is %x", PWINDOWCANDIDATE);
|
Debug::log(LOG, "On closed window, new focused candidate is %x", PWINDOWCANDIDATE);
|
||||||
@@ -544,6 +562,9 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
|||||||
Debug::log(LOG, "Unmapped was not focused, ignoring a refocus.");
|
Debug::log(LOG, "Unmapped was not focused, ignoring a refocus.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update lastwindow after focus
|
||||||
|
PWINDOW->onUnmap();
|
||||||
|
|
||||||
Debug::log(LOG, "Destroying the SubSurface tree of unmapped window %x", PWINDOW);
|
Debug::log(LOG, "Destroying the SubSurface tree of unmapped window %x", PWINDOW);
|
||||||
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);
|
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);
|
||||||
|
|
||||||
@@ -578,7 +599,7 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
|||||||
void Events::listener_commitWindow(void* owner, void* data) {
|
void Events::listener_commitWindow(void* owner, void* data) {
|
||||||
CWindow* PWINDOW = (CWindow*)owner;
|
CWindow* PWINDOW = (CWindow*)owner;
|
||||||
|
|
||||||
if (!PWINDOW->m_bMappedX11 || PWINDOW->m_bHidden || (PWINDOW->m_bIsX11 && !PWINDOW->m_bMappedX11))
|
if (!PWINDOW->m_bMappedX11 || PWINDOW->isHidden() || (PWINDOW->m_bIsX11 && !PWINDOW->m_bMappedX11))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pHyprRenderer->damageSurface(g_pXWaylandManager->getWindowSurface(PWINDOW), PWINDOW->m_vRealPosition.goalv().x, PWINDOW->m_vRealPosition.goalv().y);
|
g_pHyprRenderer->damageSurface(g_pXWaylandManager->getWindowSurface(PWINDOW), PWINDOW->m_vRealPosition.goalv().x, PWINDOW->m_vRealPosition.goalv().y);
|
||||||
@@ -638,7 +659,7 @@ void Events::listener_fullscreenWindow(void* owner, void* data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PWINDOW->m_bHidden)
|
if (PWINDOW->isHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!PWINDOW->m_bIsX11) {
|
if (!PWINDOW->m_bIsX11) {
|
||||||
@@ -693,9 +714,9 @@ void Events::listener_configureX11(void* owner, void* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (E->width > 1 && E->height > 1)
|
if (E->width > 1 && E->height > 1)
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
else
|
else
|
||||||
PWINDOW->m_bHidden = true;
|
PWINDOW->setHidden(true);
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition.setValueAndWarp(Vector2D(E->x, E->y));
|
PWINDOW->m_vRealPosition.setValueAndWarp(Vector2D(E->x, E->y));
|
||||||
PWINDOW->m_vRealSize.setValueAndWarp(Vector2D(E->width, E->height));
|
PWINDOW->m_vRealSize.setValueAndWarp(Vector2D(E->width, E->height));
|
||||||
@@ -720,16 +741,16 @@ void Events::listener_configureX11(void* owner, void* data) {
|
|||||||
void Events::listener_unmanagedSetGeometry(void* owner, void* data) {
|
void Events::listener_unmanagedSetGeometry(void* owner, void* data) {
|
||||||
CWindow* PWINDOW = (CWindow*)owner;
|
CWindow* PWINDOW = (CWindow*)owner;
|
||||||
|
|
||||||
if (!PWINDOW->m_bMappedX11 || PWINDOW->m_bHidden)
|
if (!PWINDOW->m_bMappedX11)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto POS = PWINDOW->m_vRealPosition.goalv();
|
const auto POS = PWINDOW->m_vRealPosition.goalv();
|
||||||
const auto SIZ = PWINDOW->m_vRealSize.goalv();
|
const auto SIZ = PWINDOW->m_vRealSize.goalv();
|
||||||
|
|
||||||
if (PWINDOW->m_uSurface.xwayland->width > 1 && PWINDOW->m_uSurface.xwayland->height > 1)
|
if (PWINDOW->m_uSurface.xwayland->width > 1 && PWINDOW->m_uSurface.xwayland->height > 1)
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
else
|
else
|
||||||
PWINDOW->m_bHidden = true;
|
PWINDOW->setHidden(true);
|
||||||
|
|
||||||
if (abs(std::floor(POS.x) - PWINDOW->m_uSurface.xwayland->x) > 2 || abs(std::floor(POS.y) - PWINDOW->m_uSurface.xwayland->y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_uSurface.xwayland->width) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_uSurface.xwayland->height) > 2) {
|
if (abs(std::floor(POS.x) - PWINDOW->m_uSurface.xwayland->x) > 2 || abs(std::floor(POS.y) - PWINDOW->m_uSurface.xwayland->y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_uSurface.xwayland->width) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_uSurface.xwayland->height) > 2) {
|
||||||
Debug::log(LOG, "Unmanaged window %x requests geometry update to %i %i %i %i", PWINDOW, (int)PWINDOW->m_uSurface.xwayland->x, (int)PWINDOW->m_uSurface.xwayland->y, (int)PWINDOW->m_uSurface.xwayland->width, (int)PWINDOW->m_uSurface.xwayland->height);
|
Debug::log(LOG, "Unmanaged window %x requests geometry update to %i %i %i %i", PWINDOW, (int)PWINDOW->m_uSurface.xwayland->x, (int)PWINDOW->m_uSurface.xwayland->y, (int)PWINDOW->m_uSurface.xwayland->width, (int)PWINDOW->m_uSurface.xwayland->height);
|
||||||
|
@@ -178,7 +178,7 @@ bool isNumber(const std::string& str, bool allowfloat) {
|
|||||||
std::string copy = str;
|
std::string copy = str;
|
||||||
if (*copy.begin() == '-')
|
if (*copy.begin() == '-')
|
||||||
copy = copy.substr(1);
|
copy = copy.substr(1);
|
||||||
|
|
||||||
if (copy.empty())
|
if (copy.empty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ void logSystemInfo() {
|
|||||||
Debug::log(LOG, "Node name: %s", unameInfo.nodename);
|
Debug::log(LOG, "Node name: %s", unameInfo.nodename);
|
||||||
Debug::log(LOG, "Release: %s", unameInfo.release);
|
Debug::log(LOG, "Release: %s", unameInfo.release);
|
||||||
Debug::log(LOG, "Version: %s", unameInfo.version);
|
Debug::log(LOG, "Version: %s", unameInfo.version);
|
||||||
|
|
||||||
Debug::log(NONE, "\n");
|
Debug::log(NONE, "\n");
|
||||||
|
|
||||||
const std::string GPUINFO = execAndGet("lspci -vnn | grep VGA");
|
const std::string GPUINFO = execAndGet("lspci -vnn | grep VGA");
|
||||||
@@ -357,8 +357,8 @@ void matrixProjection(float mat[9], int w, int h, wl_output_transform tr) {
|
|||||||
// Rotation + reflection
|
// Rotation + reflection
|
||||||
mat[0] = x * t[0];
|
mat[0] = x * t[0];
|
||||||
mat[1] = x * t[1];
|
mat[1] = x * t[1];
|
||||||
mat[3] = y * -t[3];
|
mat[3] = y * t[3];
|
||||||
mat[4] = y * -t[4];
|
mat[4] = y * t[4];
|
||||||
|
|
||||||
// Translation
|
// Translation
|
||||||
mat[2] = -copysign(1.0f, mat[0] + mat[1]);
|
mat[2] = -copysign(1.0f, mat[0] + mat[1]);
|
||||||
@@ -401,4 +401,4 @@ int64_t getPPIDof(int64_t pid) {
|
|||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,7 @@ struct SMonitorRule;
|
|||||||
|
|
||||||
class CMonitor {
|
class CMonitor {
|
||||||
public:
|
public:
|
||||||
Vector2D vecPosition = Vector2D(0,0);
|
Vector2D vecPosition = Vector2D(-1,-1); // means unset
|
||||||
Vector2D vecSize = Vector2D(0,0);
|
Vector2D vecSize = Vector2D(0,0);
|
||||||
Vector2D vecPixelSize = Vector2D(0,0);
|
Vector2D vecPixelSize = Vector2D(0,0);
|
||||||
Vector2D vecTransformedSize = Vector2D(0,0);
|
Vector2D vecTransformedSize = Vector2D(0,0);
|
||||||
|
@@ -326,6 +326,10 @@ struct SIMEPopup {
|
|||||||
struct STouchDevice {
|
struct STouchDevice {
|
||||||
wlr_input_device* pWlrDevice = nullptr;
|
wlr_input_device* pWlrDevice = nullptr;
|
||||||
|
|
||||||
|
std::string name = "";
|
||||||
|
|
||||||
|
std::string boundOutput = "";
|
||||||
|
|
||||||
DYNLISTENER(destroy);
|
DYNLISTENER(destroy);
|
||||||
|
|
||||||
bool operator==(const STouchDevice& other) {
|
bool operator==(const STouchDevice& other) {
|
||||||
|
@@ -69,7 +69,7 @@ SDwindleNodeData* SDwindleNodeData::getGroupVisible() {
|
|||||||
SDwindleNodeData* current = this->pNextGroupMember;
|
SDwindleNodeData* current = this->pNextGroupMember;
|
||||||
|
|
||||||
while (current != this) {
|
while (current != this) {
|
||||||
if (!current->pWindow->m_bHidden) {
|
if (!current->pWindow->isHidden()) {
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,11 +83,11 @@ void SDwindleNodeData::setGroupFocusedNode(SDwindleNodeData* pMember) {
|
|||||||
SDwindleNodeData* current = this->pNextGroupMember;
|
SDwindleNodeData* current = this->pNextGroupMember;
|
||||||
|
|
||||||
while (current != this) {
|
while (current != this) {
|
||||||
current->pWindow->m_bHidden = current != pMember;
|
current->pWindow->setHidden(current != pMember);
|
||||||
current = current->pNextGroupMember;
|
current = current->pNextGroupMember;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->pWindow->m_bHidden = pMember != this;
|
this->pWindow->setHidden(pMember != this);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDwindleNodeData::getGroupMemberCount() {
|
int SDwindleNodeData::getGroupMemberCount() {
|
||||||
@@ -301,7 +301,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(CWindow* pWindow) {
|
|||||||
OPENINGON = getFirstNodeOnWorkspace(PMONITOR->activeWorkspace);
|
OPENINGON = getFirstNodeOnWorkspace(PMONITOR->activeWorkspace);
|
||||||
|
|
||||||
} else if (*PUSEACTIVE) {
|
} else if (*PUSEACTIVE) {
|
||||||
if (g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) && !g_pCompositor->m_pLastWindow->m_bIsFloating && g_pCompositor->m_pLastWindow != pWindow && g_pCompositor->m_pLastWindow->m_iWorkspaceID == pWindow->m_iWorkspaceID && g_pCompositor->m_pLastWindow->m_bIsMapped) {
|
if (g_pCompositor->m_pLastWindow && !g_pCompositor->m_pLastWindow->m_bIsFloating && g_pCompositor->m_pLastWindow != pWindow && g_pCompositor->m_pLastWindow->m_iWorkspaceID == pWindow->m_iWorkspaceID && g_pCompositor->m_pLastWindow->m_bIsMapped) {
|
||||||
OPENINGON = getNodeFromWindow(g_pCompositor->m_pLastWindow);
|
OPENINGON = getNodeFromWindow(g_pCompositor->m_pLastWindow);
|
||||||
} else {
|
} else {
|
||||||
OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()));
|
OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()));
|
||||||
@@ -491,7 +491,7 @@ void CHyprDwindleLayout::onWindowRemovedTiling(CWindow* pWindow) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PNEXT->setGroupFocusedNode(PNEXT);
|
PNEXT->setGroupFocusedNode(PNEXT);
|
||||||
PNEXT->pWindow->m_bHidden = false;
|
PNEXT->pWindow->setHidden(false);
|
||||||
|
|
||||||
m_lDwindleNodesData.remove(*PNODE);
|
m_lDwindleNodesData.remove(*PNODE);
|
||||||
|
|
||||||
@@ -829,7 +829,7 @@ void CHyprDwindleLayout::toggleWindowGroup(CWindow* pWindow) {
|
|||||||
|
|
||||||
toAddWindows.push_back(PWINDOW);
|
toAddWindows.push_back(PWINDOW);
|
||||||
|
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PHEAD->pPreviousGroupMember)
|
if (PHEAD->pPreviousGroupMember)
|
||||||
@@ -997,9 +997,9 @@ void CHyprDwindleLayout::switchGroupWindow(CWindow* pWindow, bool forward, CWind
|
|||||||
pNewNode->pWindow->m_bIsFloating = PNODE->pWindow->m_bIsFloating;
|
pNewNode->pWindow->m_bIsFloating = PNODE->pWindow->m_bIsFloating;
|
||||||
|
|
||||||
if (PNODE->pWindow->m_bIsFullscreen) {
|
if (PNODE->pWindow->m_bIsFullscreen) {
|
||||||
PNODE->pWindow->m_bHidden = false;
|
PNODE->pWindow->setHidden(false);
|
||||||
g_pCompositor->setWindowFullscreen(PNODE->pWindow, false, PWORKSPACE->m_efFullscreenMode);
|
g_pCompositor->setWindowFullscreen(PNODE->pWindow, false, PWORKSPACE->m_efFullscreenMode);
|
||||||
PNODE->pWindow->m_bHidden = true;
|
PNODE->pWindow->setHidden(true);
|
||||||
g_pCompositor->setWindowFullscreen(pNewNode->pWindow, true, PWORKSPACE->m_efFullscreenMode);
|
g_pCompositor->setWindowFullscreen(pNewNode->pWindow, true, PWORKSPACE->m_efFullscreenMode);
|
||||||
|
|
||||||
pNewNode->pWindow->m_vRealSize.warp();
|
pNewNode->pWindow->m_vRealSize.warp();
|
||||||
@@ -1181,7 +1181,7 @@ std::string CHyprDwindleLayout::getLayoutName() {
|
|||||||
|
|
||||||
void CHyprDwindleLayout::onEnable() {
|
void CHyprDwindleLayout::onEnable() {
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bIsFloating || !w->m_bMappedX11 || !w->m_bIsMapped || w->m_bHidden)
|
if (w->m_bIsFloating || !w->m_bMappedX11 || !w->m_bIsMapped || w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
onWindowCreatedTiling(w.get());
|
onWindowCreatedTiling(w.get());
|
||||||
|
@@ -47,7 +47,7 @@ void IHyprLayout::onWindowCreatedFloating(CWindow* pWindow) {
|
|||||||
pWindow->m_vRealSize = Vector2D(PWINDOWSURFACE->current.width, PWINDOWSURFACE->current.height);
|
pWindow->m_vRealSize = Vector2D(PWINDOWSURFACE->current.width, PWINDOWSURFACE->current.height);
|
||||||
|
|
||||||
if ((desiredGeometry.width <= 1 || desiredGeometry.height <= 1) && pWindow->m_bIsX11 && pWindow->m_iX11Type == 2) { // XDG windows should be fine. TODO: check for weird atoms?
|
if ((desiredGeometry.width <= 1 || desiredGeometry.height <= 1) && pWindow->m_bIsX11 && pWindow->m_iX11Type == 2) { // XDG windows should be fine. TODO: check for weird atoms?
|
||||||
pWindow->m_bHidden = true;
|
pWindow->setHidden(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -603,7 +603,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
|
|||||||
|
|
||||||
void CHyprMasterLayout::onEnable() {
|
void CHyprMasterLayout::onEnable() {
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bIsFloating || !w->m_bMappedX11 || !w->m_bIsMapped || w->m_bHidden)
|
if (w->m_bIsFloating || !w->m_bMappedX11 || !w->m_bIsMapped || w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
onWindowCreatedTiling(w.get());
|
onWindowCreatedTiling(w.get());
|
||||||
|
@@ -153,7 +153,7 @@ void CAnimationManager::tick() {
|
|||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
} else if (PWORKSPACE) {
|
} else if (PWORKSPACE) {
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (!w->m_bIsMapped || w->m_bHidden)
|
if (!w->m_bIsMapped || w->isHidden())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_iWorkspaceID != PWORKSPACE->m_iID)
|
if (w->m_iWorkspaceID != PWORKSPACE->m_iID)
|
||||||
@@ -361,6 +361,10 @@ void CAnimationManager::onWindowPostCreateClose(CWindow* pWindow, bool close) {
|
|||||||
if (!pWindow->m_vRealPosition.isBeingAnimated() && !pWindow->m_vRealSize.isBeingAnimated())
|
if (!pWindow->m_vRealPosition.isBeingAnimated() && !pWindow->m_vRealSize.isBeingAnimated())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// if the animation is disabled and we are leaving, ignore the anim to prevent the snapshot being fucked
|
||||||
|
if (!pWindow->m_vRealPosition.m_pConfig->pValues->internalEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
if (pWindow->m_sAdditionalConfigData.animationStyle != "") {
|
if (pWindow->m_sAdditionalConfigData.animationStyle != "") {
|
||||||
// the window has config'd special anim
|
// the window has config'd special anim
|
||||||
if (pWindow->m_sAdditionalConfigData.animationStyle.find("slide") == 0) {
|
if (pWindow->m_sAdditionalConfigData.animationStyle.find("slide") == 0) {
|
||||||
|
@@ -44,6 +44,7 @@ CKeybindManager::CKeybindManager() {
|
|||||||
m_mDispatchers["swapactiveworkspaces"] = swapActiveWorkspaces;
|
m_mDispatchers["swapactiveworkspaces"] = swapActiveWorkspaces;
|
||||||
m_mDispatchers["pin"] = pinActive;
|
m_mDispatchers["pin"] = pinActive;
|
||||||
m_mDispatchers["mouse"] = mouse;
|
m_mDispatchers["mouse"] = mouse;
|
||||||
|
m_mDispatchers["bringactivetotop"] = bringActiveToTop;
|
||||||
|
|
||||||
m_tScrollTimer.reset();
|
m_tScrollTimer.reset();
|
||||||
}
|
}
|
||||||
@@ -567,23 +568,21 @@ void CKeybindManager::toggleActiveFloating(std::string args) {
|
|||||||
if (!PWINDOW)
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (g_pCompositor->windowValidMapped(PWINDOW)) {
|
// remove drag status
|
||||||
// remove drag status
|
g_pInputManager->currentlyDraggedWindow = nullptr;
|
||||||
g_pInputManager->currentlyDraggedWindow = nullptr;
|
|
||||||
|
|
||||||
if (PWINDOW->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
if (PWINDOW->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PWINDOW->m_bIsFloating = !PWINDOW->m_bIsFloating;
|
PWINDOW->m_bIsFloating = !PWINDOW->m_bIsFloating;
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::toggleActivePseudo(std::string args) {
|
void CKeybindManager::toggleActivePseudo(std::string args) {
|
||||||
const auto ACTIVEWINDOW = g_pCompositor->m_pLastWindow;
|
const auto ACTIVEWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(ACTIVEWINDOW))
|
if (!ACTIVEWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ACTIVEWINDOW->m_bIsPseudotiled = !ACTIVEWINDOW->m_bIsPseudotiled;
|
ACTIVEWINDOW->m_bIsPseudotiled = !ACTIVEWINDOW->m_bIsPseudotiled;
|
||||||
@@ -610,16 +609,20 @@ void CKeybindManager::changeworkspace(std::string args) {
|
|||||||
|
|
||||||
internal = true;
|
internal = true;
|
||||||
} else if (args.find("previous") == 0) {
|
} else if (args.find("previous") == 0) {
|
||||||
const auto PCURRENTWORKSPACE = g_pCompositor->getWorkspaceByID(
|
const auto PCURRENTWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace);
|
||||||
g_pCompositor->m_pLastMonitor->activeWorkspace);
|
|
||||||
|
|
||||||
// Do nothing if there's no previous workspace, otherwise switch to it.
|
// Do nothing if there's no previous workspace, otherwise switch to it.
|
||||||
if (PCURRENTWORKSPACE->m_iPrevWorkspaceID == -1) {
|
if (PCURRENTWORKSPACE->m_iPrevWorkspaceID == -1) {
|
||||||
Debug::log(LOG, "No previous workspace to change to");
|
Debug::log(LOG, "No previous workspace to change to");
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
workspaceToChangeTo = PCURRENTWORKSPACE->m_iPrevWorkspaceID;
|
workspaceToChangeTo = PCURRENTWORKSPACE->m_iPrevWorkspaceID;
|
||||||
|
|
||||||
|
if (const auto PWORKSPACETOCHANGETO = g_pCompositor->getWorkspaceByID(workspaceToChangeTo); PWORKSPACETOCHANGETO)
|
||||||
|
workspaceName = PWORKSPACETOCHANGETO->m_szName;
|
||||||
|
else
|
||||||
|
workspaceName = std::to_string(workspaceToChangeTo);
|
||||||
|
|
||||||
isSwitchingToPrevious = true;
|
isSwitchingToPrevious = true;
|
||||||
|
|
||||||
// If the previous workspace ID isn't reset, cycles can form when continually going
|
// If the previous workspace ID isn't reset, cycles can form when continually going
|
||||||
@@ -821,7 +824,7 @@ void CKeybindManager::changeworkspace(std::string args) {
|
|||||||
void CKeybindManager::fullscreenActive(std::string args) {
|
void CKeybindManager::fullscreenActive(std::string args) {
|
||||||
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (PWINDOW->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
if (PWINDOW->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
||||||
@@ -841,7 +844,7 @@ void CKeybindManager::moveActiveToWorkspace(std::string args) {
|
|||||||
PWINDOW = g_pCompositor->m_pLastWindow;
|
PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto OLDWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
|
const auto OLDWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
|
||||||
@@ -929,7 +932,7 @@ void CKeybindManager::moveActiveToWorkspaceSilent(std::string args) {
|
|||||||
PWINDOW = g_pCompositor->m_pLastWindow;
|
PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int workspaceToMoveTo = 0;
|
int workspaceToMoveTo = 0;
|
||||||
@@ -1035,16 +1038,6 @@ void CKeybindManager::moveFocusTo(std::string args) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PLASTWINDOW)) {
|
|
||||||
const auto PWINDOWTOCHANGETO = g_pCompositor->getFirstWindowOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace);
|
|
||||||
if (!PWINDOWTOCHANGETO)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switchToWindow(PWINDOWTOCHANGETO);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto PWINDOWTOCHANGETO = g_pCompositor->getWindowInDirection(PLASTWINDOW, arg);
|
const auto PWINDOWTOCHANGETO = g_pCompositor->getWindowInDirection(PLASTWINDOW, arg);
|
||||||
|
|
||||||
if (PWINDOWTOCHANGETO) {
|
if (PWINDOWTOCHANGETO) {
|
||||||
@@ -1089,12 +1082,12 @@ void CKeybindManager::moveActiveTo(std::string args) {
|
|||||||
|
|
||||||
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PLASTWINDOW) || PLASTWINDOW->m_bIsFullscreen)
|
if (!PLASTWINDOW || PLASTWINDOW->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto PWINDOWTOCHANGETO = g_pCompositor->getWindowInDirection(PLASTWINDOW, arg);
|
const auto PWINDOWTOCHANGETO = g_pCompositor->getWindowInDirection(PLASTWINDOW, arg);
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOWTOCHANGETO))
|
if (!PWINDOWTOCHANGETO)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->switchWindows(PLASTWINDOW, PWINDOWTOCHANGETO);
|
g_pLayoutManager->getCurrentLayout()->switchWindows(PLASTWINDOW, PWINDOWTOCHANGETO);
|
||||||
@@ -1140,7 +1133,7 @@ void CKeybindManager::alterSplitRatio(std::string args) {
|
|||||||
|
|
||||||
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PLASTWINDOW))
|
if (!PLASTWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->alterSplitRatioBy(PLASTWINDOW, splitratio);
|
g_pLayoutManager->getCurrentLayout()->alterSplitRatioBy(PLASTWINDOW, splitratio);
|
||||||
@@ -1170,7 +1163,7 @@ void CKeybindManager::moveCursorToCorner(std::string arg) {
|
|||||||
|
|
||||||
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (CORNER) {
|
switch (CORNER) {
|
||||||
@@ -1372,7 +1365,7 @@ void CKeybindManager::forceRendererReload(std::string args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::resizeActive(std::string args) {
|
void CKeybindManager::resizeActive(std::string args) {
|
||||||
if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
||||||
@@ -1380,11 +1373,11 @@ void CKeybindManager::resizeActive(std::string args) {
|
|||||||
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
||||||
|
|
||||||
if (g_pCompositor->m_pLastWindow->m_vRealSize.goalv().x > 1 && g_pCompositor->m_pLastWindow->m_vRealSize.goalv().y > 1)
|
if (g_pCompositor->m_pLastWindow->m_vRealSize.goalv().x > 1 && g_pCompositor->m_pLastWindow->m_vRealSize.goalv().y > 1)
|
||||||
g_pCompositor->m_pLastWindow->m_bHidden = false;
|
g_pCompositor->m_pLastWindow->setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::moveActive(std::string args) {
|
void CKeybindManager::moveActive(std::string args) {
|
||||||
if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealPosition.goalv());
|
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealPosition.goalv());
|
||||||
@@ -1432,11 +1425,11 @@ void CKeybindManager::resizeWindow(std::string args) {
|
|||||||
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize.goalv(), PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize.goalv(), PWINDOW);
|
||||||
|
|
||||||
if (PWINDOW->m_vRealSize.goalv().x > 1 && PWINDOW->m_vRealSize.goalv().y > 1)
|
if (PWINDOW->m_vRealSize.goalv().x > 1 && PWINDOW->m_vRealSize.goalv().y > 1)
|
||||||
PWINDOW->m_bHidden = false;
|
PWINDOW->setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::circleNext(std::string arg) {
|
void CKeybindManager::circleNext(std::string arg) {
|
||||||
if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow))
|
if (!g_pCompositor->m_pLastWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto switchToWindow = [&](CWindow* PWINDOWTOCHANGETO) {
|
auto switchToWindow = [&](CWindow* PWINDOWTOCHANGETO) {
|
||||||
@@ -1587,7 +1580,7 @@ void CKeybindManager::layoutmsg(std::string msg) {
|
|||||||
void CKeybindManager::toggleOpaque(std::string unused) {
|
void CKeybindManager::toggleOpaque(std::string unused) {
|
||||||
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PWINDOW->m_sAdditionalConfigData.forceOpaque = !PWINDOW->m_sAdditionalConfigData.forceOpaque;
|
PWINDOW->m_sAdditionalConfigData.forceOpaque = !PWINDOW->m_sAdditionalConfigData.forceOpaque;
|
||||||
@@ -1627,7 +1620,7 @@ void CKeybindManager::swapnext(std::string arg) {
|
|||||||
|
|
||||||
CWindow* toSwap = nullptr;
|
CWindow* toSwap = nullptr;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow))
|
if (!g_pCompositor->m_pLastWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
@@ -1668,7 +1661,7 @@ void CKeybindManager::swapActiveWorkspaces(std::string args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::pinActive(std::string args) {
|
void CKeybindManager::pinActive(std::string args) {
|
||||||
if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) || !g_pCompositor->m_pLastWindow->m_bIsFloating || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
if (!g_pCompositor->m_pLastWindow || !g_pCompositor->m_pLastWindow->m_bIsFloating || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pCompositor->m_pLastWindow->m_bPinned = !g_pCompositor->m_pLastWindow->m_bPinned;
|
g_pCompositor->m_pLastWindow->m_bPinned = !g_pCompositor->m_pLastWindow->m_bPinned;
|
||||||
@@ -1719,3 +1712,8 @@ void CKeybindManager::mouse(std::string args) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CKeybindManager::bringActiveToTop(std::string args) {
|
||||||
|
if (g_pCompositor->m_pLastWindow && g_pCompositor->m_pLastWindow->m_bIsFloating)
|
||||||
|
g_pCompositor->moveWindowToTop(g_pCompositor->m_pLastWindow);
|
||||||
|
}
|
||||||
|
@@ -120,6 +120,7 @@ private:
|
|||||||
static void swapActiveWorkspaces(std::string);
|
static void swapActiveWorkspaces(std::string);
|
||||||
static void pinActive(std::string);
|
static void pinActive(std::string);
|
||||||
static void mouse(std::string);
|
static void mouse(std::string);
|
||||||
|
static void bringActiveToTop(std::string);
|
||||||
|
|
||||||
friend class CCompositor;
|
friend class CCompositor;
|
||||||
friend class CInputManager;
|
friend class CInputManager;
|
||||||
|
@@ -17,6 +17,8 @@ CHyprXWaylandManager::CHyprXWaylandManager() {
|
|||||||
setenv("DISPLAY", m_sWLRXWayland->display_name, 1);
|
setenv("DISPLAY", m_sWLRXWayland->display_name, 1);
|
||||||
|
|
||||||
Debug::log(LOG, "CHyprXWaylandManager started on display %s", m_sWLRXWayland->display_name);
|
Debug::log(LOG, "CHyprXWaylandManager started on display %s", m_sWLRXWayland->display_name);
|
||||||
|
} else {
|
||||||
|
unsetenv("DISPLAY"); // unset DISPLAY so that X11 apps do not try to start on a different/invalid DISPLAY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,10 +71,19 @@ void CHyprXWaylandManager::activateWindow(CWindow* pWindow, bool activate) {
|
|||||||
|
|
||||||
void CHyprXWaylandManager::getGeometryForWindow(CWindow* pWindow, wlr_box* pbox) {
|
void CHyprXWaylandManager::getGeometryForWindow(CWindow* pWindow, wlr_box* pbox) {
|
||||||
if (pWindow->m_bIsX11) {
|
if (pWindow->m_bIsX11) {
|
||||||
pbox->x = pWindow->m_uSurface.xwayland->x;
|
const auto SIZEHINTS = pWindow->m_uSurface.xwayland->size_hints;
|
||||||
pbox->y = pWindow->m_uSurface.xwayland->y;
|
|
||||||
pbox->width = pWindow->m_uSurface.xwayland->width;
|
if (SIZEHINTS && pWindow->m_iX11Type != 2) {
|
||||||
pbox->height = pWindow->m_uSurface.xwayland->height;
|
pbox->x = SIZEHINTS->x;
|
||||||
|
pbox->y = SIZEHINTS->y;
|
||||||
|
pbox->width = SIZEHINTS->width;
|
||||||
|
pbox->height = SIZEHINTS->height;
|
||||||
|
} else {
|
||||||
|
pbox->x = pWindow->m_uSurface.xwayland->x;
|
||||||
|
pbox->y = pWindow->m_uSurface.xwayland->y;
|
||||||
|
pbox->width = pWindow->m_uSurface.xwayland->width;
|
||||||
|
pbox->height = pWindow->m_uSurface.xwayland->height;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, pbox);
|
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, pbox);
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,10 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
|||||||
static auto *const PHOGFOCUS = &g_pConfigManager->getConfigValuePtr("misc:layers_hog_keyboard_focus")->intValue;
|
static auto *const PHOGFOCUS = &g_pConfigManager->getConfigValuePtr("misc:layers_hog_keyboard_focus")->intValue;
|
||||||
static auto *const PFLOATBEHAVIOR = &g_pConfigManager->getConfigValuePtr("input:float_switch_override_focus")->intValue;
|
static auto *const PFLOATBEHAVIOR = &g_pConfigManager->getConfigValuePtr("input:float_switch_override_focus")->intValue;
|
||||||
|
|
||||||
|
m_pFoundSurfaceToFocus = nullptr;
|
||||||
|
m_pFoundLSToFocus = nullptr;
|
||||||
|
m_pFoundWindowToFocus = nullptr;
|
||||||
|
|
||||||
if (!g_pCompositor->m_bReadyToProcess)
|
if (!g_pCompositor->m_bReadyToProcess)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -159,7 +163,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
|||||||
// only check floating because tiled cant be over fullscreen
|
// only check floating because tiled cant be over fullscreen
|
||||||
for (auto w = g_pCompositor->m_vWindows.rbegin(); w != g_pCompositor->m_vWindows.rend(); w++) {
|
for (auto w = g_pCompositor->m_vWindows.rbegin(); w != g_pCompositor->m_vWindows.rend(); w++) {
|
||||||
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
wlr_box box = {(*w)->m_vRealPosition.vec().x, (*w)->m_vRealPosition.vec().y, (*w)->m_vRealSize.vec().x, (*w)->m_vRealSize.vec().y};
|
||||||
if ((((*w)->m_bIsFloating && (*w)->m_bIsMapped && ((*w)->m_bCreatedOverFullscreen || (*w)->m_bPinned)) || ((*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && PMONITOR->specialWorkspaceOpen)) && wlr_box_contains_point(&box, mouseCoords.x, mouseCoords.y) && g_pCompositor->isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->m_bHidden) {
|
if ((((*w)->m_bIsFloating && (*w)->m_bIsMapped && ((*w)->m_bCreatedOverFullscreen || (*w)->m_bPinned)) || ((*w)->m_iWorkspaceID == SPECIAL_WORKSPACE_ID && PMONITOR->specialWorkspaceOpen)) && wlr_box_contains_point(&box, mouseCoords.x, mouseCoords.y) && g_pCompositor->isWorkspaceVisible((*w)->m_iWorkspaceID) && !(*w)->isHidden()) {
|
||||||
pFoundWindow = (*w).get();
|
pFoundWindow = (*w).get();
|
||||||
|
|
||||||
if (!pFoundWindow->m_bIsX11) {
|
if (!pFoundWindow->m_bIsX11) {
|
||||||
@@ -264,9 +268,16 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set the values for use
|
||||||
|
if (refocus) {
|
||||||
|
m_pFoundLSToFocus = pFoundLayerSurface;
|
||||||
|
m_pFoundWindowToFocus = pFoundWindow;
|
||||||
|
m_pFoundSurfaceToFocus = foundSurface;
|
||||||
|
}
|
||||||
|
|
||||||
if (pFoundWindow) {
|
if (pFoundWindow) {
|
||||||
if (*PFOLLOWMOUSE != 1 && !refocus) {
|
if (*PFOLLOWMOUSE != 1 && !refocus) {
|
||||||
if (pFoundWindow != g_pCompositor->m_pLastWindow && g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) && g_pCompositor->m_pLastWindow->m_bIsFloating != pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR) {
|
if (pFoundWindow != g_pCompositor->m_pLastWindow && g_pCompositor->m_pLastWindow && ((pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR == 2) || (g_pCompositor->m_pLastWindow->m_bIsFloating != pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR != 0))) {
|
||||||
// enter if change floating style
|
// enter if change floating style
|
||||||
if (*PFOLLOWMOUSE != 3 && allowKeyboardRefocus)
|
if (*PFOLLOWMOUSE != 3 && allowKeyboardRefocus)
|
||||||
g_pCompositor->focusWindow(pFoundWindow, foundSurface);
|
g_pCompositor->focusWindow(pFoundWindow, foundSurface);
|
||||||
@@ -396,7 +407,7 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) {
|
|||||||
refocus();
|
refocus();
|
||||||
|
|
||||||
// if clicked on a floating window make it top
|
// if clicked on a floating window make it top
|
||||||
if (g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) && g_pCompositor->m_pLastWindow->m_bIsFloating)
|
if (g_pCompositor->m_pLastWindow && g_pCompositor->m_pLastWindow->m_bIsFloating)
|
||||||
g_pCompositor->moveWindowToTop(g_pCompositor->m_pLastWindow);
|
g_pCompositor->moveWindowToTop(g_pCompositor->m_pLastWindow);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -415,7 +426,7 @@ void CInputManager::processMouseDownKill(wlr_pointer_button_event* e) {
|
|||||||
case WLR_BUTTON_PRESSED: {
|
case WLR_BUTTON_PRESSED: {
|
||||||
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW)){
|
if (!PWINDOW) {
|
||||||
Debug::log(ERR, "Cannot kill invalid window!");
|
Debug::log(ERR, "Cannot kill invalid window!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1027,6 +1038,13 @@ void CInputManager::newTouchDevice(wlr_input_device* pDevice) {
|
|||||||
const auto PNEWDEV = &m_lTouchDevices.emplace_back();
|
const auto PNEWDEV = &m_lTouchDevices.emplace_back();
|
||||||
PNEWDEV->pWlrDevice = pDevice;
|
PNEWDEV->pWlrDevice = pDevice;
|
||||||
|
|
||||||
|
try {
|
||||||
|
PNEWDEV->name = std::string(pDevice->name);
|
||||||
|
} catch(std::exception& e) {
|
||||||
|
Debug::log(ERR, "Touch Device had no name???"); // logic error
|
||||||
|
}
|
||||||
|
|
||||||
|
setTouchDeviceConfigs();
|
||||||
wlr_cursor_attach_input_device(g_pCompositor->m_sWLRCursor, pDevice);
|
wlr_cursor_attach_input_device(g_pCompositor->m_sWLRCursor, pDevice);
|
||||||
|
|
||||||
Debug::log(LOG, "New touch device added at %x", PNEWDEV);
|
Debug::log(LOG, "New touch device added at %x", PNEWDEV);
|
||||||
@@ -1036,6 +1054,65 @@ void CInputManager::newTouchDevice(wlr_input_device* pDevice) {
|
|||||||
}, PNEWDEV, "TouchDevice");
|
}, PNEWDEV, "TouchDevice");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CInputManager::setTouchDeviceConfigs() {
|
||||||
|
// The third row is always 0 0 1 and is not expected by `libinput_device_config_calibration_set_matrix`
|
||||||
|
static const float MATRICES[8][6] = {
|
||||||
|
{ // normal
|
||||||
|
1, 0, 0,
|
||||||
|
0, 1, 0
|
||||||
|
},
|
||||||
|
{ // rotation 90°
|
||||||
|
0, -1, 1,
|
||||||
|
1, 0, 0
|
||||||
|
},
|
||||||
|
{ // rotation 180°
|
||||||
|
-1, 0, 1,
|
||||||
|
0, -1, 1
|
||||||
|
},
|
||||||
|
{ // rotation 270°
|
||||||
|
0, 1, 0,
|
||||||
|
-1, 0, 1
|
||||||
|
},
|
||||||
|
{ // flipped
|
||||||
|
-1, 0, 1,
|
||||||
|
0, 1, 0
|
||||||
|
},
|
||||||
|
{ // flipped + rotation 90°
|
||||||
|
0, 1, 0,
|
||||||
|
1, 0, 0
|
||||||
|
},
|
||||||
|
{ // flipped + rotation 180°
|
||||||
|
1, 0, 0,
|
||||||
|
0, -1, 1
|
||||||
|
},
|
||||||
|
{ // flipped + rotation 270°
|
||||||
|
0, -1, 1,
|
||||||
|
-1, 0, 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (auto& m : m_lTouchDevices) {
|
||||||
|
const auto PTOUCHDEV = &m;
|
||||||
|
|
||||||
|
auto devname = PTOUCHDEV->name;
|
||||||
|
transform(devname.begin(), devname.end(), devname.begin(), ::tolower);
|
||||||
|
|
||||||
|
const auto HASCONFIG = g_pConfigManager->deviceConfigExists(devname);
|
||||||
|
|
||||||
|
if (wlr_input_device_is_libinput(m.pWlrDevice)) {
|
||||||
|
const auto LIBINPUTDEV = (libinput_device*)wlr_libinput_get_device_handle(m.pWlrDevice);
|
||||||
|
|
||||||
|
const int ROTATION = std::clamp(HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "touch_transform") : g_pConfigManager->getInt("input:touchdevice:transform"), 0, 7);
|
||||||
|
libinput_device_config_calibration_set_matrix(LIBINPUTDEV, MATRICES[ROTATION]);
|
||||||
|
|
||||||
|
const auto OUTPUT = HASCONFIG ? g_pConfigManager->getDeviceString(devname, "touch_output") : g_pConfigManager->getString("input:touchdevice:output");
|
||||||
|
if (!OUTPUT.empty() && OUTPUT != STRVAL_EMPTY)
|
||||||
|
PTOUCHDEV->boundOutput = OUTPUT;
|
||||||
|
else
|
||||||
|
PTOUCHDEV->boundOutput = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CInputManager::destroyTouchDevice(STouchDevice* pDevice) {
|
void CInputManager::destroyTouchDevice(STouchDevice* pDevice) {
|
||||||
Debug::log(LOG, "Touch device at %x removed", pDevice);
|
Debug::log(LOG, "Touch device at %x removed", pDevice);
|
||||||
|
|
||||||
|
@@ -20,6 +20,8 @@ enum eMouseBindMode {
|
|||||||
|
|
||||||
struct STouchData {
|
struct STouchData {
|
||||||
CWindow* touchFocusWindow = nullptr;
|
CWindow* touchFocusWindow = nullptr;
|
||||||
|
SLayerSurface* touchFocusLS = nullptr;
|
||||||
|
wlr_surface* touchFocusSurface = nullptr;
|
||||||
Vector2D touchSurfaceOrigin;
|
Vector2D touchSurfaceOrigin;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -53,6 +55,7 @@ public:
|
|||||||
|
|
||||||
void setKeyboardLayout();
|
void setKeyboardLayout();
|
||||||
void setPointerConfigs();
|
void setPointerConfigs();
|
||||||
|
void setTouchDeviceConfigs();
|
||||||
|
|
||||||
void updateDragIcon();
|
void updateDragIcon();
|
||||||
void updateCapabilities(wlr_input_device*);
|
void updateCapabilities(wlr_input_device*);
|
||||||
@@ -139,6 +142,11 @@ private:
|
|||||||
STabletTool* ensureTabletToolPresent(wlr_tablet_tool*);
|
STabletTool* ensureTabletToolPresent(wlr_tablet_tool*);
|
||||||
|
|
||||||
void applyConfigToKeyboard(SKeyboard*);
|
void applyConfigToKeyboard(SKeyboard*);
|
||||||
|
|
||||||
|
// this will be set after a refocus()
|
||||||
|
wlr_surface* m_pFoundSurfaceToFocus = nullptr;
|
||||||
|
SLayerSurface* m_pFoundLSToFocus = nullptr;
|
||||||
|
CWindow* m_pFoundWindowToFocus = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CInputManager> g_pInputManager;
|
inline std::unique_ptr<CInputManager> g_pInputManager;
|
||||||
|
@@ -219,7 +219,7 @@ void CInputManager::newTabletPad(wlr_input_device* pDevice) {
|
|||||||
void CInputManager::focusTablet(STablet* pTab, wlr_tablet_tool* pTool, bool motion) {
|
void CInputManager::focusTablet(STablet* pTab, wlr_tablet_tool* pTool, bool motion) {
|
||||||
const auto PTOOL = g_pInputManager->ensureTabletToolPresent(pTool);
|
const auto PTOOL = g_pInputManager->ensureTabletToolPresent(pTool);
|
||||||
|
|
||||||
if (const auto PWINDOW = g_pCompositor->m_pLastWindow; g_pCompositor->windowValidMapped(PWINDOW)) {
|
if (const auto PWINDOW = g_pCompositor->m_pLastWindow; PWINDOW) {
|
||||||
const auto CURSORPOS = g_pInputManager->getMouseCoordsInternal();
|
const auto CURSORPOS = g_pInputManager->getMouseCoordsInternal();
|
||||||
|
|
||||||
const auto LOCAL = CURSORPOS - PWINDOW->m_vRealPosition.goalv();
|
const auto LOCAL = CURSORPOS - PWINDOW->m_vRealPosition.goalv();
|
||||||
|
@@ -3,44 +3,65 @@
|
|||||||
|
|
||||||
void CInputManager::onTouchDown(wlr_touch_down_event* e) {
|
void CInputManager::onTouchDown(wlr_touch_down_event* e) {
|
||||||
auto PMONITOR = g_pCompositor->getMonitorFromName(e->touch->output_name ? e->touch->output_name : "");
|
auto PMONITOR = g_pCompositor->getMonitorFromName(e->touch->output_name ? e->touch->output_name : "");
|
||||||
|
|
||||||
|
const auto PDEVIT = std::find_if(m_lTouchDevices.begin(), m_lTouchDevices.end(), [&](const STouchDevice& other) { return other.pWlrDevice == &e->touch->base; });
|
||||||
|
|
||||||
|
if (PDEVIT != m_lTouchDevices.end() && !PDEVIT->boundOutput.empty())
|
||||||
|
PMONITOR = g_pCompositor->getMonitorFromName(PDEVIT->boundOutput);
|
||||||
|
|
||||||
PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_pLastMonitor;
|
PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_pLastMonitor;
|
||||||
|
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PMONITOR->vecPosition.x + e->x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e->y * PMONITOR->vecSize.y);
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PMONITOR->vecPosition.x + e->x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e->y * PMONITOR->vecSize.y);
|
||||||
|
|
||||||
refocus();
|
refocus();
|
||||||
|
|
||||||
m_sTouchData.touchFocusWindow = nullptr;
|
m_sTouchData.touchFocusWindow = m_pFoundWindowToFocus;
|
||||||
|
m_sTouchData.touchFocusSurface = m_pFoundSurfaceToFocus;
|
||||||
|
m_sTouchData.touchFocusLS = m_pFoundLSToFocus;
|
||||||
|
|
||||||
if (g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow)) {
|
Vector2D local;
|
||||||
Vector2D local;
|
|
||||||
if (g_pCompositor->m_pLastWindow->m_bIsX11) {
|
if (m_sTouchData.touchFocusWindow) {
|
||||||
local = g_pInputManager->getMouseCoordsInternal() - g_pCompositor->m_pLastWindow->m_vRealPosition.goalv();
|
if (m_sTouchData.touchFocusWindow->m_bIsX11) {
|
||||||
|
local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_vRealPosition.goalv();
|
||||||
} else {
|
} else {
|
||||||
g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), g_pCompositor->m_pLastWindow, local);
|
g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_sTouchData.touchFocusWindow, local);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local;
|
m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local;
|
||||||
|
} else if (m_sTouchData.touchFocusLS) {
|
||||||
|
local = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_sTouchData.touchFocusLS->geometry.x, m_sTouchData.touchFocusLS->geometry.y) - g_pCompositor->m_pLastMonitor->vecPosition;
|
||||||
|
|
||||||
wlr_seat_touch_notify_down(g_pCompositor->m_sSeat.seat, g_pCompositor->m_pLastFocus, e->time_msec, e->touch_id, local.x, local.y);
|
m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local;
|
||||||
|
} else {
|
||||||
m_sTouchData.touchFocusWindow = g_pCompositor->m_pLastWindow;
|
return; // oops, nothing found.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wlr_seat_touch_notify_down(g_pCompositor->m_sSeat.seat, m_sTouchData.touchFocusSurface, e->time_msec, e->touch_id, local.x, local.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInputManager::onTouchUp(wlr_touch_up_event* e){
|
void CInputManager::onTouchUp(wlr_touch_up_event* e){
|
||||||
if (m_sTouchData.touchFocusWindow) {
|
if (m_sTouchData.touchFocusSurface) {
|
||||||
wlr_seat_touch_notify_up(g_pCompositor->m_sSeat.seat, e->time_msec, e->touch_id);
|
wlr_seat_touch_notify_up(g_pCompositor->m_sSeat.seat, e->time_msec, e->touch_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInputManager::onTouchMove(wlr_touch_motion_event* e){
|
void CInputManager::onTouchMove(wlr_touch_motion_event* e){
|
||||||
if (g_pCompositor->windowValidMapped(m_sTouchData.touchFocusWindow)) {
|
if (m_sTouchData.touchFocusWindow && g_pCompositor->windowValidMapped(m_sTouchData.touchFocusWindow)) {
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_sTouchData.touchFocusWindow->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_sTouchData.touchFocusWindow->m_iMonitorID);
|
||||||
|
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PMONITOR->vecPosition.x + e->x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e->y * PMONITOR->vecSize.y);
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PMONITOR->vecPosition.x + e->x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e->y * PMONITOR->vecSize.y);
|
||||||
|
|
||||||
const auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin;
|
const auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin;
|
||||||
|
|
||||||
|
wlr_seat_touch_notify_motion(g_pCompositor->m_sSeat.seat, e->time_msec, e->touch_id, local.x, local.y);
|
||||||
|
} else if (m_sTouchData.touchFocusLS) {
|
||||||
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_sTouchData.touchFocusLS->monitorID);
|
||||||
|
|
||||||
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PMONITOR->vecPosition.x + e->x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e->y * PMONITOR->vecSize.y);
|
||||||
|
|
||||||
|
const auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin;
|
||||||
|
|
||||||
wlr_seat_touch_notify_motion(g_pCompositor->m_sSeat.seat, e->time_msec, e->touch_id, local.x, local.y);
|
wlr_seat_touch_notify_motion(g_pCompositor->m_sSeat.seat, e->time_msec, e->touch_id, local.x, local.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -323,16 +323,13 @@ void CHyprOpenGLImpl::renderRectWithDamage(wlr_box* box, const CColor& col, pixm
|
|||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
||||||
wlr_matrix_multiply(glMatrix, matrixFlip180, glMatrix);
|
|
||||||
|
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
glUseProgram(m_RenderData.pCurrentMonData->m_shQUAD.program);
|
glUseProgram(m_RenderData.pCurrentMonData->m_shQUAD.program);
|
||||||
|
|
||||||
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shQUAD.proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shQUAD.proj, 1, GL_TRUE, glMatrix);
|
||||||
glUniform4f(m_RenderData.pCurrentMonData->m_shQUAD.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f);
|
glUniform4f(m_RenderData.pCurrentMonData->m_shQUAD.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f);
|
||||||
|
|
||||||
wlr_box transformedBox;
|
wlr_box transformedBox;
|
||||||
@@ -414,9 +411,6 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b
|
|||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
||||||
wlr_matrix_multiply(glMatrix, matrixFlip180, glMatrix);
|
|
||||||
|
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
|
||||||
|
|
||||||
CShader* shader = nullptr;
|
CShader* shader = nullptr;
|
||||||
|
|
||||||
@@ -444,7 +438,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b
|
|||||||
|
|
||||||
glUseProgram(shader->program);
|
glUseProgram(shader->program);
|
||||||
|
|
||||||
glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix);
|
||||||
glUniform1i(shader->tex, 0);
|
glUniform1i(shader->tex, 0);
|
||||||
glUniform1f(shader->alpha, alpha / 255.f);
|
glUniform1f(shader->alpha, alpha / 255.f);
|
||||||
glUniform1i(shader->discardOpaque, (int)discardOpaque);
|
glUniform1i(shader->discardOpaque, (int)discardOpaque);
|
||||||
@@ -534,8 +528,6 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, wlr_box* p
|
|||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
||||||
wlr_matrix_multiply(glMatrix, matrixFlip180, glMatrix);
|
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
|
||||||
|
|
||||||
// get the config settings
|
// get the config settings
|
||||||
static auto *const PBLURSIZE = &g_pConfigManager->getConfigValuePtr("decoration:blur_size")->intValue;
|
static auto *const PBLURSIZE = &g_pConfigManager->getConfigValuePtr("decoration:blur_size")->intValue;
|
||||||
@@ -570,7 +562,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, wlr_box* p
|
|||||||
glUseProgram(pShader->program);
|
glUseProgram(pShader->program);
|
||||||
|
|
||||||
// prep two shaders
|
// prep two shaders
|
||||||
glUniformMatrix3fv(pShader->proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(pShader->proj, 1, GL_TRUE, glMatrix);
|
||||||
glUniform1f(pShader->radius, *PBLURSIZE * (a / 255.f)); // this makes the blursize change with a
|
glUniform1f(pShader->radius, *PBLURSIZE * (a / 255.f)); // this makes the blursize change with a
|
||||||
if (pShader == &m_RenderData.pCurrentMonData->m_shBLUR1)
|
if (pShader == &m_RenderData.pCurrentMonData->m_shBLUR1)
|
||||||
glUniform2f(m_RenderData.pCurrentMonData->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y / 2.f));
|
glUniform2f(m_RenderData.pCurrentMonData->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y / 2.f));
|
||||||
@@ -650,7 +642,7 @@ void CHyprOpenGLImpl::preRender(CMonitor* pMonitor) {
|
|||||||
bool has = false;
|
bool has = false;
|
||||||
|
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_iWorkspaceID == pMonitor->activeWorkspace && w->m_bIsMapped && !w->m_bHidden && !w->m_bIsFloating) {
|
if (w->m_iWorkspaceID == pMonitor->activeWorkspace && w->m_bIsMapped && !w->isHidden() && !w->m_bIsFloating) {
|
||||||
has = true;
|
has = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -693,7 +685,7 @@ void CHyprOpenGLImpl::preWindowPass() {
|
|||||||
|
|
||||||
bool hasWindows = false;
|
bool hasWindows = false;
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_iWorkspaceID == m_RenderData.pMonitor->activeWorkspace && !w->m_bHidden && w->m_bIsMapped && !w->m_bIsFloating) {
|
if (w->m_iWorkspaceID == m_RenderData.pMonitor->activeWorkspace && !w->isHidden() && w->m_bIsMapped && !w->m_bIsFloating) {
|
||||||
hasWindows = true;
|
hasWindows = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -845,16 +837,13 @@ void CHyprOpenGLImpl::renderBorder(wlr_box* box, const CColor& col, int round) {
|
|||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
||||||
wlr_matrix_multiply(glMatrix, matrixFlip180, glMatrix);
|
|
||||||
|
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
glUseProgram(m_RenderData.pCurrentMonData->m_shBORDER1.program);
|
glUseProgram(m_RenderData.pCurrentMonData->m_shBORDER1.program);
|
||||||
|
|
||||||
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_TRUE, glMatrix);
|
||||||
glUniform4f(m_RenderData.pCurrentMonData->m_shBORDER1.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f);
|
glUniform4f(m_RenderData.pCurrentMonData->m_shBORDER1.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f);
|
||||||
|
|
||||||
const auto TOPLEFT = Vector2D(round, round);
|
const auto TOPLEFT = Vector2D(round, round);
|
||||||
@@ -1103,16 +1092,13 @@ void CHyprOpenGLImpl::renderRoundedShadow(wlr_box* box, int round, int range, fl
|
|||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
wlr_matrix_multiply(glMatrix, m_RenderData.projection, matrix);
|
||||||
wlr_matrix_multiply(glMatrix, matrixFlip180, glMatrix);
|
|
||||||
|
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
glUseProgram(m_RenderData.pCurrentMonData->m_shSHADOW.program);
|
glUseProgram(m_RenderData.pCurrentMonData->m_shSHADOW.program);
|
||||||
|
|
||||||
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shSHADOW.proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shSHADOW.proj, 1, GL_TRUE, glMatrix);
|
||||||
glUniform4f(m_RenderData.pCurrentMonData->m_shSHADOW.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f * a);
|
glUniform4f(m_RenderData.pCurrentMonData->m_shSHADOW.color, col.r / 255.f, col.g / 255.f, col.b / 255.f, col.a / 255.f * a);
|
||||||
|
|
||||||
const auto TOPLEFT = Vector2D(range + round, range + round);
|
const auto TOPLEFT = Vector2D(range + round, range + round);
|
||||||
|
@@ -12,11 +12,6 @@
|
|||||||
#include "Texture.hpp"
|
#include "Texture.hpp"
|
||||||
#include "Framebuffer.hpp"
|
#include "Framebuffer.hpp"
|
||||||
|
|
||||||
inline const float matrixFlip180[] = {
|
|
||||||
1.0f, 0.0f, 0.0f,
|
|
||||||
0.0f, -1.0f, 0.0f,
|
|
||||||
0.0f, 0.0f, 1.0f,
|
|
||||||
};
|
|
||||||
inline const float fullVerts[] = {
|
inline const float fullVerts[] = {
|
||||||
1, 0, // top right
|
1, 0, // top right
|
||||||
0, 0, // top left
|
0, 0, // top left
|
||||||
|
@@ -84,9 +84,7 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow, CMonitor* pMonitor) {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// if not, check if it maybe is active on a different monitor.
|
// if not, check if it maybe is active on a different monitor.
|
||||||
if (g_pCompositor->isWorkspaceVisible(pWindow->m_iWorkspaceID) ||
|
if (g_pCompositor->isWorkspaceVisible(pWindow->m_iWorkspaceID) && pWindow->m_bIsFloating /* tiled windows can't be multi-ws */)
|
||||||
(PWORKSPACE && PWORKSPACE->m_iMonitorID == pMonitor->ID && PWORKSPACE->m_bForceRendering) || // vvvv might be in animation progress vvvvv
|
|
||||||
(PWORKSPACE && PWORKSPACE->m_iMonitorID == pMonitor->ID && (PWORKSPACE->m_vRenderOffset.isBeingAnimated() || PWORKSPACE->m_fAlpha.isBeingAnimated())))
|
|
||||||
return !pWindow->m_bIsFullscreen; // Do not draw fullscreen windows on other monitors
|
return !pWindow->m_bIsFullscreen; // Do not draw fullscreen windows on other monitors
|
||||||
|
|
||||||
if (pMonitor->specialWorkspaceOpen && pWindow->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
if (pMonitor->specialWorkspaceOpen && pWindow->m_iWorkspaceID == SPECIAL_WORKSPACE_ID)
|
||||||
@@ -169,6 +167,12 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWor
|
|||||||
pWorkspaceWindow = w.get();
|
pWorkspaceWindow = w.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pWorkspaceWindow) {
|
||||||
|
// ?? happens sometimes...
|
||||||
|
pWorkspace->m_bHasFullscreenWindow = false;
|
||||||
|
return; // this will produce one blank frame. Oh well.
|
||||||
|
}
|
||||||
|
|
||||||
// then render windows over fullscreen.
|
// then render windows over fullscreen.
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_iWorkspaceID != pWorkspaceWindow->m_iWorkspaceID || (!w->m_bCreatedOverFullscreen && !w->m_bPinned) || !w->m_bIsMapped)
|
if (w->m_iWorkspaceID != pWorkspaceWindow->m_iWorkspaceID || (!w->m_bCreatedOverFullscreen && !w->m_bPinned) || !w->m_bIsMapped)
|
||||||
@@ -211,7 +215,7 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWor
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* time, bool decorate, eRenderPassMode mode) {
|
void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* time, bool decorate, eRenderPassMode mode) {
|
||||||
if (pWindow->m_bHidden)
|
if (pWindow->isHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (pWindow->m_bFadingOut) {
|
if (pWindow->m_bFadingOut) {
|
||||||
@@ -379,7 +383,7 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
|
|||||||
|
|
||||||
// Non-floating main
|
// Non-floating main
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bHidden && !w->m_bIsMapped && !w->m_bFadingOut)
|
if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
@@ -397,7 +401,7 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
|
|||||||
|
|
||||||
// Non-floating popup
|
// Non-floating popup
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bHidden && !w->m_bIsMapped && !w->m_bFadingOut)
|
if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
@@ -415,7 +419,7 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
|
|||||||
|
|
||||||
// floating on top
|
// floating on top
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bHidden && !w->m_bIsMapped && !w->m_bFadingOut)
|
if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!w->m_bIsFloating)
|
if (!w->m_bIsFloating)
|
||||||
@@ -433,7 +437,7 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
|
|||||||
|
|
||||||
// and then special
|
// and then special
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
if (w->m_bHidden && !w->m_bIsMapped && !w->m_bFadingOut)
|
if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_iWorkspaceID != SPECIAL_WORKSPACE_ID)
|
if (w->m_iWorkspaceID != SPECIAL_WORKSPACE_ID)
|
||||||
@@ -949,8 +953,6 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
|
|||||||
wlr_output_set_scale(pMonitor->output, pMonitorRule->scale);
|
wlr_output_set_scale(pMonitor->output, pMonitorRule->scale);
|
||||||
pMonitor->scale = pMonitorRule->scale;
|
pMonitor->scale = pMonitorRule->scale;
|
||||||
|
|
||||||
pMonitor->vecPosition = pMonitorRule->offset;
|
|
||||||
|
|
||||||
// loop over modes and choose an appropriate one.
|
// loop over modes and choose an appropriate one.
|
||||||
if (pMonitorRule->resolution != Vector2D() && pMonitorRule->resolution != Vector2D(-1,-1) && pMonitorRule->resolution != Vector2D(-1,-2)) {
|
if (pMonitorRule->resolution != Vector2D() && pMonitorRule->resolution != Vector2D(-1,-1) && pMonitorRule->resolution != Vector2D(-1,-2)) {
|
||||||
if (!wl_list_empty(&pMonitor->output->modes)) {
|
if (!wl_list_empty(&pMonitor->output->modes)) {
|
||||||
@@ -1169,7 +1171,7 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
|
|||||||
pMonitor->vecSize = (Vector2D(x, y) / pMonitor->scale).floor();
|
pMonitor->vecSize = (Vector2D(x, y) / pMonitor->scale).floor();
|
||||||
pMonitor->vecTransformedSize = Vector2D(x,y);
|
pMonitor->vecTransformedSize = Vector2D(x,y);
|
||||||
|
|
||||||
if (pMonitorRule->offset == Vector2D(-1, -1)) {
|
if (pMonitorRule->offset == Vector2D(-1, -1) && pMonitor->vecPosition == Vector2D(-1, -1)) {
|
||||||
// let's find manually a sensible position for it, to the right.
|
// let's find manually a sensible position for it, to the right.
|
||||||
Vector2D finalPos;
|
Vector2D finalPos;
|
||||||
|
|
||||||
@@ -1183,6 +1185,8 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
|
|||||||
}
|
}
|
||||||
|
|
||||||
pMonitor->vecPosition = finalPos;
|
pMonitor->vecPosition = finalPos;
|
||||||
|
} else if (pMonitorRule->offset != Vector2D(-1, -1)) {
|
||||||
|
pMonitor->vecPosition = pMonitorRule->offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pMonitor->isMirror())
|
if (!pMonitor->isMirror())
|
||||||
|
@@ -67,7 +67,7 @@ void CHyprGroupBarDecoration::draw(CMonitor* pMonitor, float a, const Vector2D&
|
|||||||
// get how many bars we will draw
|
// get how many bars we will draw
|
||||||
int barsToDraw = m_dwGroupMembers.size();
|
int barsToDraw = m_dwGroupMembers.size();
|
||||||
|
|
||||||
if (barsToDraw < 1 || m_pWindow->m_bHidden || !g_pCompositor->windowValidMapped(m_pWindow))
|
if (barsToDraw < 1 || m_pWindow->isHidden() || !g_pCompositor->windowValidMapped(m_pWindow))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_pWindow->m_sSpecialRenderData.decorate)
|
if (!m_pWindow->m_sSpecialRenderData.decorate)
|
||||||
|
Submodule subprojects/wlroots updated: ab8341975e...221ee83d44
Reference in New Issue
Block a user