Giter VIP home page Giter VIP logo

frigotab's People

Contributors

frigocoder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

frigotab's Issues

Background image is messed up on Windows 10

Something about GetWindowRect and DPI awareness causes the background image to give wrong dimensions. As a result the background image, sometimes along with icons, are stretched horizonally and pixelated.

Get rid of ApplicationWindow forms

We can unify overlay drawing to one big ass Bitmap. This removes the need for ApplicationWindow classes to extend (Frigo)Form. We only need one or two forms, depending on whether we can capture mouse inputs on a Layered form.

DWM Thumbnail overhaul

Maintain thumbnails for the entire window tree of an application, rather than only one representative window. Currently we only show the last active window, whereas the default Alt-Tab only shows the ancestor window.

Related to #21 WindowFinder overhaul.

Mouse lag at session start

Low level mouse hook results in a stop in mouse event processing for other purposes. Replace it with normal mouse events.

Toolbars with transparency and blur

Tool windows that use blur effects are displayed without the blur. We would need direct display of said toolbars rather than relying on the DWM thumbnail API to display them. This would need a major overhaul.

WindowFinder overhaul

FrigoTab at the moment enumerates applications with EnumWindows, based on WindowExStyles.AppWindow, ToolWindow, and other flags.

Unfortunately this is inappropriate, the standard Alt-Tab and Win-Tab implementation behaves very differently. Raymond Chen wrote a blog entry about it: https://blogs.msdn.microsoft.com/oldnewthing/20071008-00/?p=24863

Several side effects arise as a result:

  • #19 IBM Notes breaks down to dozens of windows
  • #17 Visual Studio leaves a border in the background
  • #15 EnumWindows does not list Metro apps in Windows 10
  • #14 Non-application windows appear on Windows 10
  • #9 Start menu appears as tool window
  • #5 Toolbars with transparency and blur
  • #2 GIMP toolbars

Find out how do Alt-Tab and Win-Tab exactly work, and change my implementation to conform to them.

Eclipse windows on multiple displays

If Eclipse has multiple windows open on multiple displays, then FrigoTab only shows the thumbnail of one window on one display. This makes it impossible to switch between windows if they are on different displays.

Mind you however that Windows Alt-Tab and Win-Tab behaves in similar manner, and also that in-application window switching should not be the responsibility of a task switcher, so this might not be a full-fledged bug.

Can not switch from command prompt

Steps to reproduce:

  • Run cmd.exe from Total Commander or even the Run dialog
  • Alt-tab out of it
  • Try to switch to any of the other applications
  • Task switch fails
  • Application icons start blinking and then remain highlighted

Prevent resolution change on alt-tab

Windows automatically changes resolution when we switch to the alt-tab application from a fullscreen game. This is unnecessary, we could draw thumbnails without changing resolution.

We could avoid activating SessionForm to prevent the screen change, however this might mess with controls.

Fullscreen games (are said to) have complete control over the video card, as far as I know there is no easy and reliable way to draw overlays on them. Only doing some heavy hacks like injecting DLLs would work.

Terminated applications

Terminated applications are still visible in the session as empty thumbnails. Create a callback that removes them.

Start menu appears as tool window

If the start menu is open when alt-tabbing, there are two tool windows that appear in the background. One is titled "Start menu", the other has the same title as the name of the logged in user.

DWM composition is sometimes disabled on Windows 7

Windows 7 can disable DWM composition to maintain compatibility with certain applications. Unfortunately it does not enable it when the application is minimized, and as a result our alt-tab form contains empty thumbnails.

I tried re-enabling composition at WM_DwmCompositionChanged and at the start of BeginSession, but Windows 7 won't budge.

Thankfully it is not a problem for Windows 8 and newer since composition is always enabled.

Still, it would be nice to find a solution that forces Windows 7 to keep composition enabled.

Prevent double draw when alt-tabbing TO fullscreen applications

We switch to fullscreen applications before we end our session. This causes a resolution change, and subsequent double draw of our form. Find a way to circumvent this.

Responsible code in SessionForm:

    _applications.Selected.Application.SetForeground();
    EndSession();

Note however that you can not EndSession before SetForeground, because then the previous application gets focus for a moment.

We should either use Z ordering tricks, or preferably, introduce another state apart from _active=true or false, so DisplayChange ignores this state. Alternatively, set _active=false temporarily while running SetForeground.

GIMP toolbars

GIMP toolbars are registered as WS_EX_TOOLWINDOW and as such they are shown as background. Find a way to reliably tell apart AppWindows and ToolWindows.

Media Player Classic stays on top

Media Player Classic stays on top and in focus if "Always On Top" is on. This is especially bad if it is fullscreen. We have to find a way to override this behavior so FrigoTab is on top and in focus.

High resolution DWM thumbnails are empty

Fullscreen games are displayed in thumbnails, except if their resolution is equal or larger than the desktop resolution. This is a fault of the DWM thumbnail implementation, I have no idea how to fix it.

Capturing DirectX and OpenGL applications via other methods are difficult as well.

Application hangs can confuse FrigoTab

FrigoTab forces resolution change by SendMessage WM_ActivateApp to the foreground application.

Unfortunately this waits for the target application, so if it hangs, it can delay execution of FrigoTab.

Try to change it to PostMessage or callback or timeout.

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.