360 Commits

Author SHA1 Message Date
Vaxry
e689220b17
xtra-dispatchers: chase hyprland 2025-10-28 12:15:10 +00:00
Vaxry
81f6d14265
all: chase hyprland 2025-10-23 20:54:45 +01:00
Vaxry
f1b4524442
hyprpm: add 0.51 pins 2025-10-23 20:51:58 +01:00
Vaxry
a5a6f93d72
scrolling: implement swapWindow
fixes #511
2025-10-17 00:56:45 +01:00
João P. Santos
bff3b23ad1
hyprexpo: correct workspace wrap logic in center picker for named workspaces (#509)
Ensure the center workspace picker correctly wraps and displays contiguous workspaces when using named or negative workspace IDs. The previous condition if (i > 0 && currentID <= firstID) prevented wrapping, so when the selected workspace was at the high end users saw empty slots after the center instead of the next active workspaces. Replace the condition with if (i > 0 && currentID == firstID) so the picker continues filling the visible slots with the next available workspaces and preserves screen real estate.

Behavioral notes
- Named workspaces that use negative IDs (for example -1337 and below) no longer break the picker layout.
- The picker now shows as many contiguous active workspaces as possible around the selected workspace instead of leaving trailing empty cards.
- The change is local to the center picker loop logic and preserves existing ordering and selection rules.
2025-10-15 14:43:01 +02:00
Zach DeCook
25a5d1327e
hyprbars: fix touch handling (#505) 2025-10-13 12:44:31 +01:00
Liam Hanrahan
f6dd103dfb
scrolling: Remove redundant workspace check (#506) 2025-10-11 02:39:56 +02:00
Ralph Zhou
5cf12b0fa1
Hyprscrolling: Fix colresize breaking the centered position (#502) 2025-10-07 23:00:02 +02:00
Ralph Zhou
7be897d6ae
Hyprscrolling: (feat) Add togglefit command (#498)
* Hyprscrolling: (feat) Add `togglefit` command

* fix multi-workspaces bugs and focus change bug.

* fix center to fitcol bug

* remove "fullyvisible" logic to simplify the logic
2025-10-06 12:00:49 +01:00
Ralph Zhou
4d940a10af
Hyprscrolling: fix window size disturbance on focus change (#492) 2025-09-26 15:58:09 +02:00
Sunong2008
1a4a2dce90
hyprscrolling: add config example in README (#491) 2025-09-26 09:16:25 +03:00
VuaTech
d0d8e8dd5b
all: fix build with clang (#489)
Fixes #279
2025-09-25 17:17:00 +02:00
Ralph Zhou
6913b8d506
Hyprscrolling: feat: improve focus stability with last-focused memory (#484)
* Hyprscrolling: feat: improve focus stability

* style and functions choose change

1. replace `std::find` and `std::min_element` with `ranges`
2. replace `push_back` with `emplace_back`
3. add `{}` for nested `if`

* flake.lock: Update

* chore: chase nixpkgs

---------

Co-authored-by: Amadej Kastelic <amadejkastelic7@gmail.com>
2025-09-25 15:31:05 +02:00
Ralph Zhou
1e3fa62428
Hyprscrolling: fix layoutmsg fit visible incorrectly include window at the border (#487) 2025-09-23 20:00:29 +02:00
Amadej Kastelic
1cfcc6fe6a chore: chase nixpkgs 2025-09-22 12:18:57 +03:00
Amadej Kastelic
4717ecd3c4 flake.lock: Update 2025-09-22 12:18:57 +03:00
Ralph Zhou
c8b2be3502
Hyprscrolling: feat: Add column movement commands (swapcol, movecoltoworkspace) (#481)
* hyprscrolling: feat(layout) Add `swapcol` command for cyclic column swapping

This commit introduces a new layout message, `swapcol`, to allow users
to efficiently reorder entire columns within the scrolling layout like
niri.

The `swapcol` command accepts two arguments:
- `l`: Swaps the current column with the one to its left.
- `r`: Swaps the current column with the one to its right.

A key feature of this implementation is its cyclic (wrap-around)
behavior. When the leftmost column is swapped left, it moves to the end
of the list. Similarly, swapping the rightmost column right moves it to
the beginning. This provides a fluid and powerful way to rearrange the
workspace without getting stuck at the edges.

The README has also been updated to document this new functionality.

Example usage in `hyprland.conf`:
# Swap current column with the one to the left
bind = $mainMod, H, layoutmsg, swapcol l
# Swap current column with the one to the right
bind = $mainMod, L, layoutmsg, swapcol r

* Hyprscrolling: feat(layout) feat(layout): Add `movecoltoworkspace` command

This commit introduces the `movecoltoworkspace` layout message, enabling
users to move an entire column of windows to another workspace with a
single command.

This feature preserves the internal layout, window arrangement, and
relative sizes within the column upon moving. It robustly handles moving
to any workspace, including empty ones, by ensuring the target workspace
is set to the 'scrolling' layout before the move.

This addresses a key aspect of the feature request in issue #431,
specifically the need for commands to move columns between workspaces.

The README has been updated to document this new command.

Example usage:
# Move current column to workspace 2
bind = $mainMod, SHIFT, 2, layoutmsg, movecoltoworkspace 2
# Move current column to the next workspace
bind = $mainMod, SHIFT, L, layoutmsg, movecoltoworkspace +1

* Hyprscrolling: fix: remove `{}` from short `if, for`s

* Hyprscrolling: style: remove `{}` for short `if`. Add it back from `for`.

* Hyprscrolling: clang-format
2025-09-20 17:33:04 +02:00
Ralph Zhou
ebb4040cac
Hyprscrolling: focus left/right moves to the best vertical neighbour (#482)
* Hyprscrolling: feat: focus left/right moves to the best vertical neighbour (closes #473)

When moving focus horizontally between columns we now pick the window
whose vertical span overlaps the current window the most.
If no overlap exists we fall back to the top-most window of the target
column.
This makes `layoutmsg focus l/r` behave intuitively in multi-column
setups: from the bottom-left terminal you land on the bottom-left
terminal of the neighbouring column instead of always jumping to the
top.

* Hyprscrolling: fix: remove `{}` from short ifs in `findBestNeighbor()`

* Hyprscrolling: fix: Simplify nested ifs
2025-09-19 00:04:18 +02:00
Ralph Zhou
5ff379f4e5
hyprscrolling: Ensure maximized state is restored from full-screen (#479)
When a window is in full-screen mode (mode 2), dispatching `fullscreen
1` (maximized mode) fails to resize the window correctly, leaving it at
full-screen dimensions.

This occurs because the `applyNodeDataToWindow` function contains an
early `return` when it detects the window is in a fullscreen state. This
check does not account for the `ignoreFullscreenChecks` flag, which is
specifically set in `fullscreenRequestForWindow` to handle this exact
transition.

The condition is updated to `if (PWINDOW->isFullscreen() &&
!data->ignoreFullscreenChecks)`, allowing the function to proceed and
apply the correct maximized geometry when toggling from a full-screen
state.
v0.51.0
2025-09-13 16:37:08 +02:00
vaxerski
27e1ad9042 expo: improve closing gesture 2025-09-13 00:59:41 +01:00
Vaxry
c1d5db968c
expo: skip first update for smoother gesture 2025-09-13 00:35:11 +01:00
Vaxry
8ba54e332c
expo: fix crash in dispatcher
fixes #475
2025-09-13 00:34:02 +01:00
Vaxry
51b8f80183
expo: fix gesture crash 2025-09-11 21:27:43 +01:00
Vaxry
44343bf690
expo: unload gesture on exit 2025-09-11 21:17:56 +01:00
Vaxry
5086bd28f4
expo: add new gesture 2025-09-11 21:13:16 +01:00
James Satterfield
b8d6d36961
hyprscrolling: respect focus_fit_method when moving windows and fix left column centering (#460)
* scrolling: add SWorkspaceData::centerOrFitCol and use it in CScrollingLayout::moveWindowTo. Remove clamp on leftOffset in SWorkspateData::recalculate to fix left column centering.

* Omit this-> for member functions

* rerun checks
2025-09-02 11:47:59 +02:00
Stephen Haberman
2ced5d8ea7
README: Explain hyprpm version pinning (#468)
Clarify installation instructions for hyprland-plugins.
2025-09-01 21:52:15 +02:00
skrmc
376d08bbbd
all: chase hyprland (#462)
* hyprexpo: update workspace animation calls

* fix: update include path of animation manager
2025-08-29 11:58:09 +02:00
James Satterfield
bf843fc6ad
scrolling: Add warpCursorTo for all layout move/focus operations (#461) 2025-08-27 22:05:58 +02:00
James Satterfield
ee66b49fda
scrolling: SCollumnData::up/down Break out of the loop after the first swap (#457) 2025-08-27 18:25:38 +02:00
vaxerski
c1ddebb423 scrolling: add note about layout 2025-08-14 16:58:41 +02:00
James Satterfield
984669ebb5
scrolling: centerOrFit with 'focus' when first or last column already focused. (#447) 2025-08-11 19:04:40 +01:00
willoh
833af8e8c6
hyprbars: remove init notification (#446) 2025-08-09 20:05:09 +01:00
James Satterfield
c8dc6f3d54
Hyprscrolling: Respect general:no_focus_fallback config when using layoutmsg focus (#443)
* Respect general:no_focus_fallback config when using layoutmsg focus

* Remove braces from short ifs
2025-08-06 23:58:46 +02:00
James Satterfield
bdd56d2c56
Hyprscrolling: Make resizeactive keyboard binds work for vertical window resizing (#442)
* Get resizeactive keyboard binds working. Set corner based on window having previous or next neighbors in the column. Negate delta.y when not the top window.

* Rename mod_delta modDelta. Remove braces on short ifs.
2025-08-06 23:58:40 +02:00
Vaxry
ba1823c787
hyprpm: add pins for 0.50.x
fixes #439
2025-08-01 19:16:34 +02:00
Fridella
827a1815b8
all: chase hyprland opengl render fn changes (#437) 2025-08-01 13:53:41 +02:00
Vaxry
bf310cda4a
csgo-vk-fix: allow more configs 2025-07-30 18:51:27 +02:00
Malix
14f9a44479 enhance: official plugins links 2025-07-20 19:17:44 +03:00
Primvin
d4bf99e722
hyprwinwrap: add position and coordinates options (#427) 2025-07-18 23:47:19 +02:00
Vaxry
d723e5b153
scrolling: make movewindowto l promote on the left edge
fixes #421
v0.50.0
2025-07-11 19:24:48 +02:00
Vaxry
7c4fe5ed42
scrolling: guess window's stack position on movement
ref #421
2025-07-11 19:22:28 +02:00
Vaxry
033fc54c3c
scrolling: keep inner gap if there are windows to the side
ref #421
2025-07-11 19:06:23 +02:00
Vaxry
2c93c08880
scrolling: pad first invisible window by 1px to avoid ffm grabbing it 2025-07-11 19:00:15 +02:00
Vaxry
0748c1e296
scrolling: add follow_focus
fixes #401
2025-07-11 19:00:15 +02:00
matt1432
3eaa665afe fix(all): chase hyprland renderer changes 2025-07-10 20:18:38 +03:00
matt1432
87cbd36457 chore: update flake.lock 2025-07-10 20:18:38 +03:00
Chase Meadors
34f94ab738
expo: Implement skip_empty (#413)
With this option, empty workspaces are skipped in the grid display. Selecting a blank workspace results in switching to the next empty workspace.
2025-07-07 16:17:53 +02:00
Marlon Ugocioni Marcello
109c734f47
hyprwinwrap: add an option to select window by title (#409)
* feature(hyprwinwrap): adds option to select window by title

* chore(hyprwinwrap): removes unnecessary comments

* chore(hyprwinwrap): updates readme with title option
2025-07-02 16:56:48 +02:00
Tom Englund
9ec8d2d073
hyprbars: use the setcap to cache glenable/disable (#410)
use the compositor cache setcap function to make the gl state mismatch
with our cpu cached values.
2025-07-01 11:30:45 +02:00