public void TogglePinWindow() { try { if (IsPinnedApplication) { return; // don't pin a window of an already pinned app } if (!IsPinnedWindow) { VirtualDesktop.PinWindow(Handle); PinWatcher.WatchWindow(this); AppModel.PinnedWindows.Add(this); } else { VirtualDesktop.UnpinWindow(Handle); AppModel.PinnedWindows.Remove(this); } } catch (Exception ex) { Log.LogEvent("Window", $"Handle: {Handle}\nCaption: {GetWindowText()}", ex); } }
private void Startup(object app, EventArgs evt) { // avoid multiple startup Application.Idle -= Startup; // run pre-start checks if (!Utils.EnsureMinimumOSVersion() || !Utils.EnsureSingleInstance()) { Application.Exit(); return; } TrayIcon = new NotifyIcon() { Visible = true, Text = $"FreeVD {AppModel.Version}", ContextMenuStrip = new ContextMenuStrip() }; TrayIcon.ContextMenuStrip.Items.AddRange(new ToolStripItem[] { new ToolStripMenuItem("Switch Desktop"), new ToolStripMenuItem("All Windows Here", null, (obj, args) => VirtualDesktop.Current.GatherWindows()), new ToolStripSeparator(), new ToolStripMenuItem("Settings", null, (obj, args) => OpenSettings()), new ToolStripMenuItem("Exit", null, (obj, args) => Application.Exit()) }); SetIcon(VirtualDesktop.Current); // events TrayIcon.MouseDoubleClick += (obj, args) => { if (args.Button == MouseButtons.Left) { OpenSettings(); } }; TrayIcon.ContextMenuStrip.Opening += (obj, args) => ConfigureDesktopsMenu(); // keep icon in sync with desktop VirtualDesktop.CurrentChanged += (obj, args) => SetIcon(args.NewDesktop); // remove icon when exiting Application.ApplicationExit += (obj, args) => TrayIcon.Visible = false; // watch pinned apps/windows PinWatcher.Initialize(); // open settings if app was started again Utils.ListenForAppStarts(OpenSettings); }