Git Product home page Git Product logo

fancywm's Introduction

FancyWM

Gitter

FancyWM is a dynamic tiling window manager for Windows 10/11

☑ Create dynamic tiling layouts with mouse or keyboard
☑ Move window focus with keyboard ([⇧ Shift] + [⊞ Win], then [→])
☑ Swap windows with keyboard ([⇧ Shift] + [⊞ Win], then [⇧ Shift] + [→])
☑ Swap windows with mouse (hold [⇧ Shift] while dragging)
☑ Horizontal panels ([⇧ Shift] + [⊞ Win], then [H])
☑ Vertical panels ([⇧ Shift] + [⊞ Win], then [V])
☑ Stack panels (tabbed layouts) ([⇧ Shift] + [⊞ Win], then [S])
☑ Panel embedding
☑ Jump to virtual desktop ([⇧ Shift] + [⊞ Win], then [2])
☑ Move focused window to virtual desktop ([⇧ Shift] + [⊞ Win], then [⇧ Shift] + [2])
☑ Floating window mode ([⇧ Shift] + [⊞ Win], then [F] or rule-based)
☑ Auto-float windows which cannot fit
☑ Customizable keybindings
☑ Support for multiple monitors
☑ Support for virtual desktops
☑ Allows window maximization
☑ Toggle tiling on/off ([⇧ Shift] + [⊞ Win], then [F11])
☑ Low CPU usage (<1%)
☑ Disable animations for longer battery life
☑ Windows open in focused panel
☑ Remap activation hotkey to [⇧ Shift] + [⊞ Win], [Ctrl] + [⊞ Win] or [Alt] + [⊞ Win]

FancyWM uses [⇧ Shift] + [⊞ Win] as the start of a command sequence (Activation hotkey). To start a command sequence, press and release these keys simultaneously, then follow up by pressing one of the keybindings you have configured in the settings.

FancyWM only manages restored (not minimized, not maximized) top-level application windows, so it doesn't interfere with popups, and still allows you to use all of your available display area for when you need to focus on a window

Pre-built binaries can be downloaded from Releases.

These are built by an automated GitHub Action and you can see all of the build steps and previous runs.

Install via winget

winget install fancywm

Install from the Microsoft Store

English badge

Install .msixbundle (not recommended)

You can test the Microsoft Store packages by installing them using PowerShell.

PowerShell (as Administrator)

certutil.exe -addstore TrustedPeople .\FancyWM.Package_1.0.0.0.x64.cer
Add-AppxPackage -Path .\FancyWM.Package_1.0.0.0.x64.msixbundle

Head over to the Wiki.

Please, take the time to report any problems you experience by:

Building from source

Clone this repo, including submodules.

git clone --recursive https://github.com/FancyWM/fancywm.git

Open the .sln file with Visual Studio 2022 and build the FancyWM project.

WinMan & WinMan.Windows

FancyWM is based on WinMan and WinMan.Windows.

Screenshots

Light theme, Vertical panel on the left

Dark theme, Vertical panel on the left, Stack panel with 3 VS Code windows on the right

Vertical panel on the left, Edge in the middle, Vertical panel on the right

fancywm's People

Contributors

veselink1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

fancywm's Issues

Feature: Enable/Disable FancyWM on given screens

Thanks for the app just bought it!

Is your feature request related to a problem? Please describe.

I am using this with a big external screen and it works great. But when I have to take a meeting I always disconnect and use the laptop screen. FancyWM still takes over the small screen.

Describe the solution you'd like

image
I would like to get a list of screens on this screen. And be able to choose which ones I want FancyWM to use.
It would also be great to be able to choose different combinations
example:

inbuilt-screen: disabled wm
external screen: enabled wm
inbuilt-screen + external: enabled wm

Describe alternatives you've considered

Additional context

Floating windows not being saved

Describe the bug
I set some windows to always appear as floating and it seems to get wiped out not long after applying those changes.

To Reproduce
Steps to reproduce the behaviour:

  1. Open Settings
  2. Navigate to "Rules"
  3. Type in some windows to float
  4. Click "Apply Changes"

Expected behaviour
Should save my preferences

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows 11
  • Version: 21H2

Save Window Management State and Loads it at Startup

Is your feature request related to a problem? Please describe.
Current implementations is temporarily set.

Describe the solution you'd like
Saving the state, and load it after log out or add menus in system tray to set like in Pop!OS

Additional context
image

Adjust panel font and height independently

I find the default panel height a bit too small to my taste and also dislike the lack of spacing around the window titles a bit.
If I increase panel height, the font of the window titles also increase, which looks a bit akward and ugly.
I'd like to have the font size of the window titles the same as the widow titles of the windows themself. E.g. if you look at the screenshot, I'd like to have 'FancyWM Settings' in the panel tab equally sized as 'FancyWM Settings' in the window itself.

In the Settings>Interface section, add a slider control 'Panel font'. This way, I can set my panel height to 22 and the font for the window titles to e.g. 12. By doing this, the widow titles also won't look jammed in there because theu would have a bit of spacing around them.

An alternative solution would be to decouple the Panel Height setting from the font size and always use the font size the OS uses for it's window titles.

image

BTW, awesome project. Most software takes a week or so for me to decide wether I want to buy a license. FancyWM took less than 5 minutes 😁

Focused window reminder

Is your feature request related to a problem? Please describe.
It would be helpful to have some visual reminder about which window is focused.

Describe the solution you'd like
Highlight the focused window during activation mode.

Describe alternatives you've considered
Alternatively, a persistent coloured border around the focused window might also be helpful.

Additional context
This is a feature request from Reddit.

Layout presets

Is your feature request related to a problem? Please describe.
Manually have to resize layout

Describe the solution you'd like
Setup some layouts to be assigned to a monitor, as fancyzone, and able to be recalled by keybinds

Describe alternatives you've considered
None

Additional context
Been able to use the same layouts as fancyzone would be great, as fancyzone already has the ability to setup more than a layout for the same monitor and to recall them by keybind

Run FancyWM as Administrator at system startup

Is your feature request related to a problem? Please describe.
FancyWM cannot manage windows from privileged processes (Run as administrator) unless it is also run privileged. This can be done by right-clicking on FancyWM and selecting "Run as administrator". Unfortunately, there is currently no setting to enable this behavior at startup ("Run automatically at system start" in FancyWM Settings).

Describe the solution you'd like
FancyWM should provide an option to be run automatically at startup as administrator.

Describe alternatives you've considered
It is possible to set up a custom task in Task Scheduler that runs with administrator permissions manually, but this should ideally be implemented in FancyWM itself.

Additional context
See also: #9

Reduce Memory Usage

Describe the bug
200MB for managing window seems kinda big?

To Reproduce
Steps to reproduce the behavior:

  1. Run fancywm
  2. check memory usage

Expected behavior
less bloated memory usage (<100MB)
Screenshots
imageDesktop (please complete the following information):

  • OS: [e.g. Windows 11]
  • Version [e.g. 21H2 64-bit]

Documentation for settings.json

Describe the solution you'd like
Documentation for using the settings.json

Additional context
I would like to be able to sync my settings but I am not sure of the schema for the settings file.

Apps opened as administrator are not managed by FancyWM

Describe the bug
I've noticed that since I allowed for vscode "run this program as an administrator" (properties, compatability tab), FancyWM stopped managing it's windows. Shift+win is ignored, auto-tiling doesn't apply.

To Reproduce
Steps to reproduce the behavior:

  1. Allow "run this program as an administrator" for vscode
  2. Launch vscode

Expected behavior
FancyWM would manage windows regardless of privilege mode

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows 11 Pro
  • Version 21H2 22000.348

Fullscreen Application Pushed Back

Describe the bug
On focus change to a windowed application all other windowed applications are pulled to the foreground while full screen apps are pulled to the background while the full screen application is pushed to the background.

To Reproduce
Steps to reproduce the behavior:

  1. Open at least one windowed application on monitor 1 and 2.
  2. Ensure both applications are properly managed by FancyWM.
  3. Open full screen application on monitor 1.
  4. Click windowed application on monitor 2.
    The windowed application on monitor 1 will be pulled to the foreground, and the full screen application will be pushed back.

Expected behavior
Fullscreen application on monitor that isn't being interacted with should remain in foreground.

Desktop (please complete the following information):

  • OS: Windows 11
  • Version 21H2 64bit

Support Spamming Width and Height Increase/Decrease

Is your feature request related to a problem? Please describe.
The Current Method, is to press shift +win and (ex. increase width ( ' ] ' ) repeatedly

Describe the solution you'd like
Allow using shift + win as modifier and spamming ']' repeatedly

Sub-menu for "float window" button (always float)

Is your feature request related to a problem? Please describe.
Add a sub-menu to the "Float Window" button which can be accessed by right-clicking the button. Left clicking behaves as it does currently.

Describe the solution you'd like
When right-clicking the "Float Window" button, a menu is shown with the following options...

  • Float Window (Same as left click)
  • Always Float Window (updates the rules in settings with the current window)

Incorrect scaling when opening minimized application using multiple monitors

Describe the bug
When using 2 monitors (extended mode) with different scaling settings in Windows display settings, after opening a minimized application, it doesn't open up with correct scaling.

To Reproduce
Steps to reproduce the behavior:

  1. Setup 2 extended displays with different scaling settings, for example main display 100% scaling and second display 125% scaling. (In case it matters I used top-bottom layout, with main display on top).
  2. Open any application on the main display, for example "File Explorer".
  3. Minimize the application.
  4. Open the application again by clicking the icon in the taskbar.
  5. The application is not scaled correctly (window size), after refreshing the FancyWM layout / rescaling the window / moving the window, the window scaling is corrected.

Expected behavior
The application opens with a correct scaling.

Screenshots
Result:
Screenshot (5)
Expected:
Screenshot (6)

Desktop (please complete the following information):

  • OS: Windows 11 (Home Edition)
  • Version: 10.0.22000

Additional context
The word scaling probably causes confusion here so just to clarify; With the scaling of the application, I mean the window size (and only the window size). With the scaling of the display, I mean the "scale" settings in the Windows "Scale and Layout" settings under "Display".

Crashes 15 seconds after startup, seemingly unable to check license status

Describe the bug
FancyWM crashes roughly 15 seconds after it starts every time. Looking at the License Status page in Settings, it never gets beyond the Checking... status.

Additionally, this crash has only been recurring repeatedly starting today. Had previous occasional crashes but never regular. I've made no notable changes that I would suspect would have introduced this behaviour.

Throws: Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The data is invalid.

Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The data is invalid.
   at System.Security.Cryptography.ProtectedData.ProtectOrUnprotect(Byte[] inputData, Byte[] optionalEntropy, DataProtectionScope scope, Boolean protect)
   at System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope)
   at FancyWM.Analytics.LicenseManager.GetUtcTimeOfLastCheckAsync()
   at FancyWM.MainWindow.DoLicenseCheck()
   at FancyWM.MainWindow.OnLoaded(Object sender, RoutedEventArgs e)
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__127_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at FancyWM.Startup.Main(String[] args)

Desktop

  • OS: Windows 10
  • Version: 21H2

Panels not persistent

Describe the bug
Panels are destroyed on vdesktop switch.

To Reproduce
Steps to reproduce the behavior:

  1. Open chrome
  2. Create stack panel
  3. Swtich to another vdesktop
  4. Switch vdesktop back
  5. Panels are lost

Expected behavior
Panels are persistent upon vdesktop switch

Desktop (please complete the following information):
W11 21h2 22000.282

Move the focus to an adjacent window is limited to current monitor

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Currently

Describe the solution you'd like

On the focused window, at the edge of the monitor, change focus
to a window in monitor2 (if there is one), both horizontally and vertically.

Resizing shortcut

Is your feature request related to a problem? Please describe.
Currently resizing can be done only via mouse input.

Describe the solution you'd like
Size adjust mode can be nice, just like activation mode.
Resizing can be done via mod(ctrl/alt/win)+arrow or dev/user's choice if possible.

Additional context
pop_shell handles window size adjust pretty nicely.(https://support.system76.com/articles/pop-keyboard-shortcuts/)

On hover, hidden Taskbar toggles up behind windows

To Reproduce
Steps to reproduce the behavior:

  1. Settings -> Personalization -> Taskbar -> Behaviors -> Tick
    Automatically hide the taskbar
  2. Hover the bottom of the screen to toggle up the Taskbar

Expected behavior
On hover, the taskbar should toggle up in front of the opened windows.

Screenshots
Screenshot_10

Desktop (please complete the following information):

  • OS: Windows 11
  • Build: 22000.469 (latest)

Run Automatically At Startup cannot be disabled.

Describe the bug
Run Automatically At Startup cannot be disabled.

To Reproduce
Steps to reproduce the behavior:

  1. Start FancyWM.
  2. Open Settings.
  3. Disable Run Automatically At Startup.
  4. Click Quit.
  5. Re-open application.
  6. Open Settings.
  7. Run Automatically At Startup is re-enabled.

Expected behavior
To be able to stop FancyWM from automatically starting up when disabling the setting.

Desktop (please complete the following information):

  • OS: Windows 11
  • Version 22000.469

Additional context
App version 2.4.1.0

Multiple display support

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Currently as far as I am aware the tiling only applies to one monitor. Which makes it feel like I am only utilizing half the space I could be (I can still use the other monitor but the tiling isn't there)

Describe the solution you'd like
A clear and concise description of what you want to happen.
It would be nice to have this supported on displays other than the primary/default. Along with key binds to move the windows/tiles across displays as they are configured in the windows display settings.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Configuring the layout of the displays in the settings of the application would also be more than sufficient.

Additional context
Add any other context or screenshots about the feature request here.
image
Example of the tiling being applied on the right main display but not on the left secondary display

Toggle Panel Layouts

Is your feature request related to a problem? Please describe.
Sort of - As a user, I want to be able to toggle a panel between horizontal and vertical mode on the fly.

This may be due to not already having preset layouts a la #4, but being able to quickly change whether the X or Y axis is given more room at-a-glance for any given set of windows in a panel could be very useful.

Describe the solution you'd like
Some sort of hotkey for switching the currently selected panel ( or more precisely, the panel in which the current active window resides ) to swap between horizontal and vertical modes. This, alongside an on-tile-bar-hover button.

This behavior is often present in bspwm-style TWMs.

I think 2 separate buttons ( or configurable somehow ) to allow to swap between stack and non-stack panel mode ( 2 way switch ) , and between all three panel modes ( 3 way switch ) might benefit others who switch between stack/non-stack a lot.

Describe alternatives you've considered
I think the main alternative would be preset layouts. It wouldn't remove the need for swapping panel orentiation directily, but would scratch some of itch for the for on-the-fly layout change. In fact, this feature could be seen itself as scratching a subset of the broader itch of on-the-fly hotkey layout switching ( eg, as is implemented by Amethyst on Mac, which got me hooked on TWMs on the first place and eventually led to me finding and purchasing FancyWM )

Additional context

Define defaults for specific programs

Is your feature request related to a problem? Please describe.
Programs and dialog do not remember their states

Describe the solution you'd like
I would like to be able to define programs which also will run in a specific way (stacked, floating...)

explorer.exe crashes cause FancyWM to crash

Describe the bug
Fancy crashes often with error "explorer.exe just crashed and this caused virtual desktops...". It always happens in win+tab mode, eg. when dragging app to another vir. desktop. Dragging chrome with 50 tabs is 100% crash. Seems like windows issue though, weird behaviour (like explorer.exe indeed does crash) happens even without Fancy running :/.

To Reproduce

  1. Chrome, ctrl+t 50 new tabs
  2. Win+tab, drag chrome to another vir. desktop
  3. Error

Desktop (please complete the following information):
Device name mataslib
Processor Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 2.21 GHz
Installed RAM 64,0 GB (63,7 GB usable)
System type 64-bit operating system, x64-based processor
Pen and touch Pen and touch support with 10 touch points

Edition Windows 11 Pro
Version 21H2
Installed on ‎09.‎11.‎2021
OS build 22000.469
Experience Windows Feature Experience Pack 1000.22000.469.0

OnlyOffice causes fancywm to error

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Open OnlyOffice
  2. Click any area in onlyoffice
  3. See error

image

Expected behavior
FancyWM does not get exception
Screenshots
image

If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows 11
  • Version: 22000.434

Additional context
Add any other context about the problem here.

System.ComponentModel.Win32Exception (22): {03541046: DocEditorsWindowClass} does not support WM_GETMINMAXINFO!: The device does not recognize the command.
   at WinMan.Windows.ExceptionExtensions.WithMessage(Win32Exception e, String message)
   at WinMan.Windows.Win32Window.GetMinMaxSize()
   at WinMan.Windows.Win32Window.<get_MinSize>b__65_0()
   at WinMan.Windows.Win32Window.UseDefaults[T](Func`1 func, T defaultValue)
   at WinMan.Windows.Win32Window.get_MinSize()
   at FancyWM.TilingWorkspace.CanFitLossy(PanelNode parent, IWindow window)
   at FancyWM.TilingWorkspace.RegisterWindow(IWindow window, PanelNode parent, WindowNode anchor)
   at FancyWM.TilingWorkspace.RegisterWindow(IWindow window)
   at FancyWM.TilingService.DetectChanges(IWindow window)
   at FancyWM.TilingService.OnWindowPositionChanged(Object sender, WindowPositionChangedEventArgs e)
   at WinMan.Windows.Win32Window.<>c__DisplayClass128_0.<UpdatePositionAndNotify>b__0()
   at WinMan.Windows.Win32Window.UpdateConfiguration()
   at WinMan.Windows.Win32Window.OnPositionChanged()
   at WinMan.Windows.Win32Workspace.<>c__DisplayClass74_0.<OnWinEvent>b__7()
   at WinMan.Windows.Utilities.EventLoop.Run()
--- End of stack trace from previous location ---
   at FancyWM.Utilities.Dispatchers.<>c__DisplayClass4_0.<RethrowOnDispatcher>b__0()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at FancyWM.Startup.Main(String[] args) 

Turning off FancyWm bugs focus display

Describe the bug
Turning off FancyWm bugs focus display

To Reproduce
Steps to reproduce the behavior:

  1. Open VScode
  2. Shift+win -> F11
  3. Focused window display doesn't dissappear, it's stucked

Expected behavior
Focus display is not visible

Screenshots
image

Desktop (please complete the following information):
Win11

Crash on Electron apps

FancyWM seems to crash for me when performing various actions on Electron based programs.

Examples:

  • Discord
  • Spotify

Reproduction

Unfloating Electron app window (100% reproducible)

  • Float window Shift+Super+F
  • Unfloat (restore) window Shift+Super+F (crashes)

Move Electron app window (crashes occasionally):

  • Merge window into avaiable split zone

Possibly more cases but I can't use the software long enough to find any others as it keeps crashing.

SysInfo

Windows 10 Enterprise x64 21H1 (build 19043.1466)

Stacktraces

System.ArgumentException: An item with the same key has already been added. Key: {000301C8: Chrome_WidgetWin_1}
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   at FancyWM.TilingService.<OnWindowStateChanged>g__UnregisterAndSaveLocation|107_0(<>c__DisplayClass107_0& )
   at FancyWM.TilingService.OnWindowStateChanged(Object sender, WindowStateChangedEventArgs e)
   at WinMan.Windows.Win32Window.<>c__DisplayClass129_0.<UpdateStateAndNotify>b__0()
   at WinMan.Windows.Win32Window.UpdateConfiguration()
   at WinMan.Windows.Win32Window.OnPositionChanged()
   at WinMan.Windows.Utilities.EventLoop.Run()
--- End of stack trace from previous location ---
   at FancyWM.Utilities.Dispatchers.<>c__DisplayClass4_0.<RethrowOnDispatcher>b__0()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at FancyWM.Startup.Main(String[] args)
System.ArgumentException: An item with the same key has already been added. Key: {0001078A: Chrome_WidgetWin_0}
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   at FancyWM.TilingService.<OnWindowStateChanged>g__UnregisterAndSaveLocation|107_0(<>c__DisplayClass107_0& )
   at FancyWM.TilingService.OnWindowStateChanged(Object sender, WindowStateChangedEventArgs e)
   at WinMan.Windows.Win32Window.<>c__DisplayClass129_0.<UpdateStateAndNotify>b__0()
   at WinMan.Windows.Win32Window.UpdateConfiguration()
   at WinMan.Windows.Win32Window.OnPositionChanged()
   at WinMan.Windows.Utilities.EventLoop.Run()
--- End of stack trace from previous location ---
   at FancyWM.Utilities.Dispatchers.<>c__DisplayClass4_0.<RethrowOnDispatcher>b__0()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at FancyWM.Startup.Main(String[] args)

Error in Direct Hotkeys

I got error when toggling activator hotkeys (shift + Win) when enabling some experimental hotkeys

image

executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.Run() at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at System.Windows.Application.Run() at FancyWM.Startup.Main(String[] args)

Windows moved between monitors via hotkeys not detected immediately

Describe the bug
FancyWM sometimes fails to update the window layout when windows are moved via the shift + win + left/right hotkey added in Windows 10.

To Reproduce
Steps to reproduce the behavior:

  1. Move a window several times between monitors using the shift + win + left/right hotkey.

Expected behavior
The window should be detected by FancyWM and resized/moved accordingly.

Screenshots
GIF by NylonDiamond

Desktop (please complete the following information):

  • OS: Windows 11

Additional context
This bug was first reported by @NylonDiamond in #21.

It would appear that EVENT_OBJECT_LOCATIONCHANGE is not emitted during these types of hotkey-generated moves. Hopefully, there is another Windows event that can be hooked into. Otherwise, a polling-based solution might be needed.

FancyWM crashes when choosing more options in helper menu.

Describe the bug
Click ellipses for more options in helper bar crashes FancyWM.

To Reproduce
Steps to reproduce the behavior:

  1. Open FancyWM.
    2.Mouse over a tiled application to reveal menu at top.
  2. Click '....'
  3. See error

Expected behavior
We should be able to get to more options, or not crash if it is incomplete.

Screenshots
image
image

Desktop (please complete the following information):

  • OS: Windows 11
  • Version 22000.469
    Additional context
    Version 2.5.0

Support Win Shift S Screenshot Window Capture

Is your feature request related to a problem? Please describe.
I can't capture screenshot per window basis as fancywm took all area to screenshot

Describe the solution you'd like
Abilty to use screenshot window capture

image

Window inner padding duplicate

Is your feature request related to a problem? Please describe.
Inner padding is duplicate as in doubled value compared to window outer padding.

Describe the solution you'd like
If adjacent window exists, one of neighbor window shouldn't have inner padding to the other window.

Additional context
image

Scripting / Extensibility

Is your feature request related to a problem? Please describe.
No direct problem per se. Just a thought.

Describe the solution you'd like
I've tried most (active, some inactive) Windows TWMs.

Some of them offer scripting in the original language of implementaton, to offer things like custom layouts with custom insertion logic or auto BSP support ( without having to embed an interpreter or create some kind of DSL ).

Others might publish streams or NamedPipes for other applications to subscribe to events from, allowing them to create responsive applications "on top of" them. Eg a custom status bar, etc.

Whether this would benefit a closed-source TWM like FnacyWM is unclear to me, as it depends on what you, the author, consider its success criteria and other long-term goals. I posit, that it adds extended surface area and thus responsibility for you to support, but may be a value-add, and expanded presence in the open source world, where FancyWM is currently somewhat present ( eg for shared community extensions / layout engines etc ).

Describe alternatives you've considered
Requesting you, the author, to implement features for me through this issue tracker.

Additional context

Rules not honored in settings.

Describe the bug
Floating Windows rules do not apply/work.

To Reproduce
Steps to reproduce the behavior:

  1. Open FancyWM settings.
  2. Go to Rules.
  3. Add application by name, excluding extension.
  4. Click Apply
  5. Open or re-open rule-related application.
  6. FancyWM will manage the application and tile it.
  7. Reboot.
  8. FancyWM will manage the application and tile it.

A second method:

  1. Open FancyWM settings.
  2. Go to Rules.
  3. Remove Taskmgr.
  4. Click Apply.
  5. Open/re-open Task Manager.
  6. Task Manager will still be a floating window.
  7. Reboot.
  8. FancyWM will not manage the application and tile it.

Expected behavior
To exclude specified applications from being tiled.

Desktop (please complete the following information):

  • OS: Windows 11
  • Version 22000.469

Additional context
App version 2.4.1.0

Ability to automatically launch program windows into floating mode

Is your feature request related to a problem? Please describe.
There are some programs that simply do not cooperate well with FancyWM. Enabling floating mode for them can get repetitive.

Describe the solution you'd like
Add an option to specify which programs' windows should start in floating mode by default. A list of program (process) names to apply this to should be enough.

Describe alternatives you've considered
This is a proposal for a per-program automatic floating mode mechanism. It might also be possible to implement this on a different basis (e.g. window class name, window title), but this is going to be associated with additional program complexity.

Additional context
This feature request was opened on behalf of a reviewer from the Microsoft Store.

Lag when drag fancywm settings

Describe the bug
A clear and concise description of what the bug is.

Fancywm settings lagging while being dragged
happened too with animation being disabled

To Reproduce
Steps to reproduce the behavior:

  1. Open FancyWM Settings
  2. Drag the settings
  3. The lag happens

Expected behavior
A clear and concise description of what you expected to happen.
smooth drag

Screenshots
terst0001-0781

Desktop (please complete the following information):

  • Windows 11 22000.384 x64

Focus assist get's enabled by itself if the automatic rule "When I'm using an app in fullscreen" is enabled

Describe the bug
While the automatic rule "When I'm using an app in fullscreen" is enabled (and FancyWM is running), focus assist gets enabled automatically in these circumstances:

  1. When there is at least one window open and you click anywhere in the task bar (only if one or more of them is being managed by FancyWM).
  2. While every window is minimized .

To Reproduce
Steps to reproduce the behavior:

  1. Enable the automatic rule "When I'm using an app in fullscreen" under Settings > System > Focus assist .
  2. Open at least one program that gets tiled by FancyWM.
  3. Click on an empty space in the taskbar. Focus assist is then enabled.
  4. Clicking back on a window disables focus assist.
    or:
  5. Enable the automatic rule "When I'm using an app in fullscreen" under Settings > System > Focus assist .
  6. Minimize every open window (either doing that manually or pressing Win + D works).
  7. Focus assist is then enabled, and can only be disabled either by doing it manually or opening a window.

Expected behavior
Focus assist should not get enabled by using FancyWM and having that rule enabled if no window is in fullscreen.

Desktop (please complete the following information):

  • OS: Windows 11 Pro
  • Version 21H2 64-bit

Additional context
The steps above work every time as described, but sometimes focus assist get's enabled while doing other things like opening and closing applications, and when that happens, clicking on opened windows does not disable focus assist. I haven't been able to reproduce that consistently though.

Low Priority: FancyWM settings responsivity / narrow-width text cutoff

Describe the bug

Apologies for assuming priority on your behalf, but didn't want to stress you out when you saw this in your inbox. Feel free to remove prefix in title.

The settings app, in particular the (Floating windows) Rules page, will cut off text content contained in the individual setting cards, if the window is set to certain (narrow) widths. Example screenshot attached.

To Reproduce
Steps to reproduce the behavior:

  1. Open FancyWM settings app.
  2. Navigate to Rules page
  3. Resize window to a width like in the screenshot
  4. See text cut off with no means by which to read the rest of the text.

Expected behavior

One or all of the following:

  1. Horizontal scroll bar either app/page level, or card-level
  2. Responsivity ( eg have the card increase in height in response to text overflow )
  3. Toggleable sidebar ( eg it collapses to a icon-only menu with tooltips, a hamburger menu button and/or a pin-collapse button )

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows 10
  • Version 19044.1415 64 bit

Configure focus display

Please describe.
I would like to configure focused window display.

Describe the solution you'd like
I would like to configure it so that FancyWM doesn't background color animate focused window. I would like to have ONLY border. I would like to have this border 24/7 visible, since Windows focused window is almost not detectable. (PopOs style). I would like to configure border color, optionally width.

Direct Hotkeys

Is your feature request related to a problem? Please describe.
Often frustrated when I must repeatedly repeat activation key for actions that are not either covered by their own hotkeys - it adds a frustrating cumulative delay. Primary example is when trying to traverse more than 2 windows/panels visually ( ie when I feel inclined to traverse windows via arrow keys vs alt-tabbing to a known window instead )

Describe the solution you'd like
I wish I could quickly just press < hotkey modifier > + LeftArrow 3 times, instead of < activation key >, wait slightly, LeftArrow 3 times.

This would entail, either per-action, custom "direct" hotkeys, for which an prior-pressed activation key is not required, or an entirely different opt-in hotkey model, that eschews the chorded activation approach altogether in lieu of traditional keyboard shortcuts. Another approach may be that certain actions, like window traversal ( actions involving direction keys for example ) support direct hotkeys whilst others do not, at your discretion.

Describe alternatives you've considered
Being more patient and less speed-oriented.

Reframing how I conceive of window traversal in my head to application/window-based instead of visually/spatially, thus reaching for alt-tab instead of fancywm arrow key shortcuts.

Additional context
Add any other context or screenshots about the feature request here.

Ordering of windows not persistent

Describe the bug
Ordering of windows changes on virtual dekstop switch (is not persistent)

To Reproduce
Steps to reproduce the behavior:

  1. Open chrome, open vscode
  2. Change order of windows
  3. Switch to another desktop
  4. Switch back
  5. Windows ordering is not preserved

Expected behavior
Order doesn't change with switching vdesktops

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):
W11 21h2 22000.282

Automatic Window Sizing Detection

Is your feature request related to a problem? Please describe.
Applications with minimum or maximum sizes are not detected natively and result in Z-Fighting occasionally. i.e. Steam has a minimum width bound that prevents the window from being too small. Additionally, if an application has minimum and maximum limits but is tiled, any tile padding is ignored.

Describe the solution you'd like
When an application is opened, it should be evaluated for minimum and maximum window widths, if the minimums conflict with existing tiled applications (overlap) the new application should be made floating as default. If the applications .exe is known the result can be cached and said cache entry can be invalidated when a change is detected to the exe file has been modified.

Describe alternatives you've considered
In the case of Steam I usually make the application full screen to avoid tiling with it entirely.

Additional context
Yellow Highlight: Application minimum bounds attempting to be exceeded resulting in tile padding omission.
Red Highlight: Application minimum bound attempting to be exceeded resulting in window tile overlaps.
image

Fullscreen resets resized width for window.

Describe the bug
When putting a video on full-screen, if the window was currently adjusted to a certain width, it will reset to half of the computer screen.

To Reproduce
Steps to reproduce the behavior:

  1. Open FancyWM and two windows of your choice.
  2. Resize first window to a larger/smaller width.
  3. Enable full screen for first window (double click window or watch video in fullscreen).
  4. See that the window resets to half of the width again.

Expected behavior
The windows layout should persist. Width should not be reset.

Desktop (please complete the following information):

  • OS: Windows 10
  • Version 10.0.19044 Build 19044

Set upper limit on number of managed windows

Is your feature request related to a problem? Please describe.
Feature request from a review:

Multi-tasking flow gets disturbed when trying to quickly check email/change song.

Describe the solution you'd like

There should be a setting to change the maximum number of application windows it auto arranges. After this maximum, the remaining can be pop-up windows. Otherwise, multi-tasking flow gets disturbed when trying to quickly check email/change song. (Yes, these apps can be added as exceptions, but a bit tedious. Not user friendly)

Describe alternatives you've considered

Yes, these apps can be added as exceptions, but a bit tedious. Not user friendly

Question: Where is the changelog / What's New?

Is your feature request related to a problem? Please describe.
I just wanna know what new things you've cooked up! I bookmark this repo and check occasionally because I'm passionate about this project even outside of my personal use as a customer, and so similarly I wanna know what you've been up to.

Describe the solution you'd like
Maybe it already exists and I'm stupid, but I've tried looking at your reddit, this repo and in-app, and don't see anything like a changelog. It could be anywhere, as long as it's linked to in-app!

Describe alternatives you've considered
Reading every single comment you leave in these issues to guess what went into a recent release lol.

Stack panel inside stack panel

Promising app, the closest one to i3 that I've seen for Windows. Hopefully you get to keep improving it!

Is your feature request related to a problem? Please describe.
No way to move a window to a "maximized upper level"

Describe the solution you'd like
I would like to create a top-level stack which would hold all windows I have promoted to "maximized", and then two nested stacks for windows that don't currently need the entire screen. This way you could "shift-win enter" on any window and send to the upper stack.

Describe alternatives you've considered
Traditional maximize removes the window from the layout and obscures GUI, requires Win combos or manually moving the window back into the original stack, and makes it harder to track what is maximized and what isn't.

Support for Windows 11's new virtual desktop manager

Is your feature request related to a problem? Please describe.
FancyWM is not able to interface with Windows 11's updated desktop manager. This means that upon switching to a virtual desktop, all windows are tiling layouts are destroyed, windows ordering is lost.

Describe the solution you'd like
FancyWM should support Windows 11 seamlessly. If possible, this should be implemented in the Windows backend of WinMan (https://github.com/veselink1/winman-windows).

Additional context

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.