Esempio n. 1
0
        public static void Main(string[] args)
        {
            Logging.Configure();

            Log.Information("Windows Terminal Quake started");

            _trayIcon = new TrayIcon((s, a) => Close());

            try
            {
                TerminalProcess.OnExit(() => Close());

                _toggler = new Toggler(args);

                // Transparency
                QSettings.Get(s => TerminalProcess.Get(args).SetTransparency(s.Opacity));

                var hotkeys = string.Join(" or ", QSettings.Instance.Hotkeys.Select(hk => $"{hk.Modifiers}+{hk.Key}"));

                _trayIcon.Notify(ToolTipIcon.Info, $"Windows Terminal Quake is running, press {hotkeys} to toggle.");
            }
            catch (Exception ex)
            {
                Log.Logger.Warning(ex, $"Error: {ex.Message}");

                MessageBox.Show($"Error starting Windows Terminal Quake: {ex.Message}", "Ah nej :(");

                Close();
            }
        }
Esempio n. 2
0
        public Toggler(string[] args)
        {
            _args = args ?? Array.Empty <string>();

            // Always on top
            if (QSettings.Instance.AlwaysOnTop)
            {
                Process.SetAlwaysOnTop();
            }

            // Taskbar icon visibility
            QSettings.Get(s =>
            {
                Process.ToggleTaskbarIconVisibility(s.TaskbarIconVisibility != TaskBarIconVisibility.AlwaysHidden);
            });

            // Used to keep track of the current toggle state.
            // The terminal is always assumed to be open on app start.
            var isOpen = true;

            // Register hotkeys
            QSettings.Get(s =>
            {
                if (s.Hotkeys == null)
                {
                    return;                                    // Hotkeys not loaded yet
                }
                _registeredHotKeys.ForEach(hk => HotKeyManager.UnregisterHotKey(hk));
                _registeredHotKeys.Clear();

                s.Hotkeys.ForEach(hk =>
                {
                    Log.Information($"Registering hot key {hk.Modifiers} + {hk.Key}");
                    var reg = HotKeyManager.RegisterHotKey(hk.Key, hk.Modifiers);
                    _registeredHotKeys.Add(reg);
                });
            });

            QSettings.Get(s =>
            {
                _termBoundsProvider = s.ToggleMode switch
                {
                    ToggleMode.Move => new MovingTerminalBoundsProvider(),
                    _ => new ResizingTerminalBoundsProvider()
                };
            });

            // Hide on focus lost
            FocusTracker.OnFocusLost += (s, a) =>
            {
                if (QSettings.Instance.HideOnFocusLost && isOpen)
                {
                    isOpen = false;
                    Toggle(false, 0);
                }
            };

            // Toggle on hotkey(s)
            HotKeyManager.HotKeyPressed += (s, a) =>
            {
                if (FocusTracker.HotKeySuppressedForCurrentFocusedProcess())
                {
                    return;
                }

                if (QSettings.Instance.DisableWhenActiveAppIsInFullscreen && ActiveWindowIsInFullscreen())
                {
                    return;
                }

                isOpen = !isOpen;

                Toggle(isOpen, QSettings.Instance.ToggleDurationMs);
            };

            // Start hidden?
            if (QSettings.Instance.StartHidden)
            {
                Toggle(isOpen = false, 0);
            }
            // Otherwise, call toggle once to setup the correct size and position
            else
            {
                Toggle(isOpen = true, 0);
            }
        }