private void Taskbar_Closing(object sender, System.ComponentModel.CancelEventArgs e) { IsClosing = true; if (Startup.IsShuttingDown && Screen.Primary) { // Manually call dispose on window close... (this.DataContext as WindowsTasks.WindowsTasksService).Dispose(); // dispose system tray if it's still running to prevent conflicts when doing AppBar stuff NotificationArea.Instance.Dispose(); if (AppBarHelper.appBars.Contains(this.handle)) { AppBarHelper.RegisterBar(this, Screen, this.ActualWidth * dpiScale, this.ActualHeight * dpiScale); } // show the windows taskbar again AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.OnTop); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_SHOWWINDOW); } else if (Startup.IsSettingScreens || Startup.IsShuttingDown) { if (AppBarHelper.appBars.Contains(this.handle)) { AppBarHelper.RegisterBar(this, Screen, this.ActualWidth, this.ActualHeight); } } else { IsClosing = false; e.Cancel = true; } }
private void Taskbar_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // Manually call dispose on window close... (TasksList.DataContext as WindowsTasks.WindowsTasksService).Dispose(); // show the windows taskbar again AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.OnTop); AppBarHelper.SetWinTaskbarPos(NativeMethods.SWP_SHOWWINDOW); }
protected override void customClosing() { if (Startup.IsShuttingDown && Screen.Primary) { // Manually call dispose on window close... WindowsTasks.WindowsTasksService.Instance.GroupedWindows.CollectionChanged -= GroupedWindows_Changed; WindowsTasks.WindowsTasksService.Instance.Dispose(); // show the windows taskbar again AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.OnTop); AppBarHelper.SetWinTaskbarVisibility((int)NativeMethods.SetWindowPosFlags.SWP_SHOWWINDOW); } else if (WindowManager.Instance.IsSettingDisplays || Startup.IsShuttingDown) { WindowsTasks.WindowsTasksService.Instance.GroupedWindows.CollectionChanged -= GroupedWindows_Changed; } }
private void Taskbar_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // Manually call dispose on window close... (TasksList.DataContext as WindowsTasks.WindowsTasksService).Dispose(); // dispose system tray if it's still running to prevent conflicts when doing AppBar stuff if (Startup.MenuBarWindow != null && Startup.MenuBarWindow.SysTray != null) { Startup.MenuBarWindow.SysTray.DestroySystemTray(); } if (AppBarHelper.appBars.Contains(this.handle)) { AppBarHelper.RegisterBar(this, this.ActualWidth, this.ActualHeight); } // show the windows taskbar again AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.OnTop); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_SHOWWINDOW); }
public static void Main(string[] args) { #region Args if (args.Length > 0 && args[0] == "/restart") { isRestart = true; } else { isRestart = false; } if (args.Length > 0 && args[0] == "/tour") { isTour = true; } else { isTour = false; } #endregion #region Single Instance Check bool ok; cairoMutex = new System.Threading.Mutex(true, "CairoShell", out ok); if (!ok && !isRestart) { // Another instance is already running. return; } else if (!ok && isRestart) { // this is a restart so let's wait for the old instance to end System.Threading.Thread.Sleep(2000); } #endregion #region some real shell code int hShellReadyEvent; if (Environment.OSVersion.Platform == PlatformID.Win32NT && Shell.IsWindows2kOrBetter) { hShellReadyEvent = NativeMethods.OpenEvent(NativeMethods.EVENT_MODIFY_STATE, true, @"Global\msgina: ShellReadyEvent"); } else { hShellReadyEvent = NativeMethods.OpenEvent(NativeMethods.EVENT_MODIFY_STATE, false, "msgina: ShellReadyEvent"); } if (hShellReadyEvent != 0) { NativeMethods.SetEvent(hShellReadyEvent); NativeMethods.CloseHandle(hShellReadyEvent); } #endregion // an attempt to relaunch explorer it the application gets closed. doesnt work if VS terminates execution // AppDomain.CurrentDomain.ProcessExit += (o, e) => Shutdown(); #region InitializationRoutines SetupLoggingSystem(); WriteApplicationDebugInfoToConsole(); SetupPluginSystem(); #endregion // check if we are the current user's shell // set here as well so that we don't behave differently once user changes setting IsCairoUserShell = Shell.IsCairoUserShell; // Before we do anything, check if settings need to be upgraded if (Settings.IsFirstRun == true) { Settings.Upgrade(); } if (Settings.EnableDesktop) { // hide the windows desktop Shell.ToggleDesktopIcons(false); } App app = new App(); app.InitializeComponent(); // Set custom theme if selected string theme = Settings.CairoTheme; if (theme != "Default") { if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + theme)) { app.Resources.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(System.Xml.XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + theme))); } } if (Settings.EnableTaskbar) { // hide Windows taskbar AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_HIDEWINDOW); } MenuBarWindow = new MenuBar(System.Windows.Forms.Screen.PrimaryScreen); app.MainWindow = MenuBarWindow; MenuBarWindow.Show(); MenuBarWindows.Add(MenuBarWindow); if (Settings.EnableDesktop) { DesktopWindow = new Desktop(); DesktopWindow.Show(); } if (Settings.EnableMenuBarShadow) { MenuBarShadowWindow = new MenuBarShadow(MenuBarWindow, System.Windows.Forms.Screen.PrimaryScreen); MenuBarShadowWindow.Show(); MenuBarShadowWindows.Add(MenuBarShadowWindow); } if (Settings.EnableTaskbar) { TaskbarWindow = new Taskbar(System.Windows.Forms.Screen.PrimaryScreen); TaskbarWindow.Show(); TaskbarWindows.Add(TaskbarWindow); } if (Settings.EnableMenuBarMultiMon || Settings.EnableTaskbarMultiMon) { ScreenSetup(true); } else if (IsCairoUserShell) // Set desktop work area for when Explorer isn't running { AppBarHelper.SetWorkArea(System.Windows.Forms.Screen.PrimaryScreen); } // initialize system tray if enabled if (Settings.EnableSysTray == true) { NotificationArea.Instance.Initialize(); } #if (ENABLEFIRSTRUN) FirstRun(); #endif // login items only necessary if Explorer didn't start them if (IsCairoUserShell && !isRestart) { RunStartupApps(); } app.Run(); }
public static void Main(string[] args) { #region Initialization Routines ProcessCommandLineArgs(args); SingleInstanceCheck(); SetShellReadyEvent(); SetupLoggingSystem(); WriteApplicationDebugInfoToConsole(); SetupPluginSystem(); #endregion // check if we are the current user's shell // set here as well so that we don't behave differently once user changes setting IsCairoUserShell = Shell.IsCairoUserShell; // Before we do anything, check if settings need to be upgraded if (Settings.IsFirstRun == true) { Settings.Upgrade(); } if (Settings.EnableDesktop) { // hide the windows desktop Shell.ToggleDesktopIcons(false); } App app = new App(); app.InitializeComponent(); // Set custom theme if selected string theme = Settings.CairoTheme; if (theme != "Default") { if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + theme)) { app.Resources.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(System.Xml.XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + theme))); } } if (Settings.EnableTaskbar) { // hide Windows taskbar AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_HIDEWINDOW); } MenuBarWindow = new MenuBar(System.Windows.Forms.Screen.PrimaryScreen); app.MainWindow = MenuBarWindow; MenuBarWindow.Show(); MenuBarWindows.Add(MenuBarWindow); if (Settings.EnableDesktop) { DesktopWindow = new Desktop(); DesktopWindow.Show(); } if (Settings.EnableMenuBarShadow) { MenuBarShadowWindow = new MenuBarShadow(MenuBarWindow, System.Windows.Forms.Screen.PrimaryScreen); MenuBarShadowWindow.Show(); MenuBarShadowWindows.Add(MenuBarShadowWindow); } if (Settings.EnableTaskbar) { TaskbarWindow = new Taskbar(System.Windows.Forms.Screen.PrimaryScreen); TaskbarWindow.Show(); TaskbarWindows.Add(TaskbarWindow); } if (Settings.EnableMenuBarMultiMon || Settings.EnableTaskbarMultiMon) { ScreenSetup(true); } else if (IsCairoUserShell) // Set desktop work area for when Explorer isn't running { AppBarHelper.SetWorkArea(System.Windows.Forms.Screen.PrimaryScreen); } // initialize system tray if enabled if (Settings.EnableSysTray == true) { NotificationArea.Instance.Initialize(); } #if (ENABLEFIRSTRUN) FirstRun(); #endif // login items only necessary if Explorer didn't start them if (IsCairoUserShell && !isRestart) { RunStartupApps(); } app.Run(); }
public static void Main(string[] args) { #region Initialization Routines ProcessCommandLineArgs(args); SingleInstanceCheck(); SetShellReadyEvent(); SetupSettings(); // run this before logging setup so that preferences are always used SetupLoggingSystem(); WriteApplicationDebugInfoToConsole(); SetSystemKeyboardShortcuts(); // Move to App??? app.SetupPluginSystem(); SetupPluginSystem(); // This will Load the Core Plugin and all other, will either reference it as a dependancy or dont need it to be started first #endregion // check if we are the current user's shell // set here as well so that we don't behave differently once user changes setting IsCairoUserShell = Shell.IsCairoUserShell; // Move to CairoDesktop.Plugins.CairoShellCoreServices.... Make this more robust, to account for system-shell or per-user-shell; if (Settings.EnableDesktop) // Future: This should be moved to whatever plugin is responsible for desktop stuff { // hide the windows desktop Shell.ToggleDesktopIcons(false); } App app = new App(); app.InitializeComponent(); // This sets up the Unhandled Exception stuff... // Themes are very UI centric. We should devise a way of having Plugins/Extensions contribute to this. string theme = Settings.CairoTheme; if (theme != "Default") { if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + theme)) { app.Resources.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(System.Xml.XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + theme))); } } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff if (Settings.EnableTaskbar) { AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_HIDEWINDOW); } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff MenuBarWindow = new MenuBar(System.Windows.Forms.Screen.PrimaryScreen); app.MainWindow = MenuBarWindow; MenuBarWindow.Show(); MenuBarWindows.Add(MenuBarWindow); // Future: This should be moved to whatever plugin is responsible for Desktop stuff if (Settings.EnableDesktop) { DesktopWindow = new Desktop(); DesktopWindow.Show(); } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff if (Settings.EnableMenuBarShadow) { MenuBarShadowWindow = new MenuBarShadow(MenuBarWindow, System.Windows.Forms.Screen.PrimaryScreen); MenuBarShadowWindow.Show(); MenuBarShadowWindows.Add(MenuBarShadowWindow); } // Future: This should be moved to whatever plugin is responsible for Taskbar stuff if (Settings.EnableTaskbar) { TaskbarWindow = new Taskbar(System.Windows.Forms.Screen.PrimaryScreen); TaskbarWindow.Show(); TaskbarWindows.Add(TaskbarWindow); } // Future: This should be moved to whatever plugin is responsible for Taskbar/MennuBart stuff if (Settings.EnableMenuBarMultiMon || Settings.EnableTaskbarMultiMon) { ScreenSetup(true); } else if (IsCairoUserShell) // Set desktop work area for when Explorer isn't running { AppBarHelper.SetWorkArea(System.Windows.Forms.Screen.PrimaryScreen); } // Future: This should be moved to whatever plugin is responsible for SystemTray stuff. Possibly Core with no UI, then have a plugin that gives the UI? if (Settings.EnableSysTray == true) { NotificationArea.Instance.Initialize(); } #if ENABLEFIRSTRUN FirstRun(); #endif // login items only necessary if Explorer didn't start them if (IsCairoUserShell && !isRestart) { RunStartupApps(); } app.Run(); }
public static void Main(string[] args) { #region Initialization Routines ProcessCommandLineArgs(args); if (!SingleInstanceCheck()) { return; } SetShellReadyEvent(); SetupSettings(); // run this before logging setup so that preferences are always used SetupLoggingSystem(); WriteApplicationDebugInfoToConsole(); SetSystemKeyboardShortcuts(); // Move to App??? app.SetupPluginSystem(); SetupPluginSystem(); // This will Load the Core Plugin and all other, will either reference it as a dependancy or dont need it to be started first #endregion // check if we are the current user's shell // set here as well so that we don't behave differently once user changes setting // First check if there is an existing Shell_TrayWnd. If so, then Explorer is actually running as shell so assume we are not. IntPtr taskbarHwnd = NativeMethods.FindWindow("Shell_TrayWnd", ""); IsCairoRunningAsShell = Shell.IsCairoConfiguredAsShell && taskbarHwnd == IntPtr.Zero; // Move to CairoDesktop.Plugins.CairoShellCoreServices.... Make this more robust, to account for system-shell or per-user-shell; if (Settings.Instance.EnableDesktop) // Future: This should be moved to whatever plugin is responsible for desktop stuff { // hide the windows desktop Shell.ToggleDesktopIcons(false); } App app = new App(); app.InitializeComponent(); // This sets up the Unhandled Exception stuff... // Themes are very UI centric. We should devise a way of having Plugins/Extensions contribute to this. string theme = Settings.Instance.CairoTheme; if (theme != "Default") { string themeFilePath = AppDomain.CurrentDomain.BaseDirectory + theme; if (System.IO.File.Exists(themeFilePath)) { ResourceDictionary newRes = new ResourceDictionary(); newRes.Source = new Uri(themeFilePath, UriKind.RelativeOrAbsolute); app.Resources.MergedDictionaries.Add(newRes); } } Settings.Instance.PropertyChanged += (s, e) => { if (e != null && !string.IsNullOrWhiteSpace(e.PropertyName) && e.PropertyName == "CairoTheme") { App.Current.Resources.MergedDictionaries.Clear(); ResourceDictionary cairoResource = new ResourceDictionary(); // Put our base theme back cairoResource.Source = new Uri("Cairo.xaml", UriKind.RelativeOrAbsolute); App.Current.Resources.MergedDictionaries.Add(cairoResource); string newTheme = Settings.Instance.CairoTheme; if (newTheme != "Default") { string newThemeFilePath = AppDomain.CurrentDomain.BaseDirectory + newTheme; if (System.IO.File.Exists(newThemeFilePath)) { ResourceDictionary newRes = new ResourceDictionary(); newRes.Source = new Uri(newThemeFilePath, UriKind.RelativeOrAbsolute); app.Resources.MergedDictionaries.Add(newRes); } } } }; // Future: This should be moved to whatever plugin is responsible for MenuBar stuff if (Settings.Instance.EnableTaskbar) { AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); AppBarHelper.SetWinTaskbarPos((int)NativeMethods.SetWindowPosFlags.SWP_HIDEWINDOW); } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff MenuBarWindow = new MenuBar(System.Windows.Forms.Screen.PrimaryScreen); app.MainWindow = MenuBarWindow; MenuBarWindow.Show(); MenuBarWindows.Add(MenuBarWindow); // Future: This should be moved to whatever plugin is responsible for Desktop stuff if (Settings.Instance.EnableDesktop) { DesktopWindow = new Desktop(); DesktopWindow.Show(); } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff if (Settings.Instance.EnableMenuBarShadow) { MenuBarShadowWindow = new MenuBarShadow(MenuBarWindow, System.Windows.Forms.Screen.PrimaryScreen); MenuBarShadowWindow.Show(); MenuBarShadowWindows.Add(MenuBarShadowWindow); } // Future: This should be moved to whatever plugin is responsible for Taskbar stuff if (Settings.Instance.EnableTaskbar) { TaskbarWindow = new Taskbar(System.Windows.Forms.Screen.PrimaryScreen); TaskbarWindow.Show(); TaskbarWindows.Add(TaskbarWindow); } // Future: This should be moved to whatever plugin is responsible for Taskbar/MennuBart stuff if (Settings.Instance.EnableMenuBarMultiMon || Settings.Instance.EnableTaskbarMultiMon) { ScreenSetup(true); } else if (IsCairoRunningAsShell) // Set desktop work area for when Explorer isn't running { AppBarHelper.SetWorkArea(System.Windows.Forms.Screen.PrimaryScreen); } // Future: This should be moved to whatever plugin is responsible for SystemTray stuff. Possibly Core with no UI, then have a plugin that gives the UI? // Don't allow showing both the Windows taskbar and the Cairo tray if (Settings.Instance.EnableSysTray == true && (Settings.Instance.EnableTaskbar == true || IsCairoRunningAsShell)) { NotificationArea.Instance.Initialize(); } #if ENABLEFIRSTRUN FirstRun(); #endif // login items only necessary if Explorer didn't start them if (IsCairoRunningAsShell && !isRestart) { RunStartupApps(); } app.Run(); }
public static void Main(string[] args) { if (args.Length > 0 && args[0] == "/restart") { isRestart = true; } else { isRestart = false; } #region Single Instance Check bool ok; cairoMutex = new System.Threading.Mutex(true, "CairoShell", out ok); if (!ok && !isRestart) { // Another instance is already running. return; } else if (!ok && isRestart) { // this is a restart so let's wait for the old instance to end System.Threading.Thread.Sleep(2000); } #endregion // Show a splash screen while WPF inits // not needed any more //SplashScreen splash = new SplashScreen("Resources/loadSplash.png"); //splash.Show(false, true); #region some real shell code int hShellReadyEvent; if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 5) { hShellReadyEvent = NativeMethods.OpenEvent(NativeMethods.EVENT_MODIFY_STATE, true, @"Global\msgina: ShellReadyEvent"); } else { hShellReadyEvent = NativeMethods.OpenEvent(NativeMethods.EVENT_MODIFY_STATE, false, "msgina: ShellReadyEvent"); } if (hShellReadyEvent != 0) { NativeMethods.SetEvent(hShellReadyEvent); NativeMethods.CloseHandle(hShellReadyEvent); } #endregion // check if we are the current user's shell object userShell = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon", false).GetValue("Shell"); procName = Process.GetCurrentProcess().ProcessName; if (userShell != null) { IsCairoUserShell = userShell.ToString().ToLower().Contains("cairodesktop"); } else { IsCairoUserShell = false; } // Before we do anything, check if settings need to be upgraded if (Settings.IsFirstRun == true) { Settings.Upgrade(); } if (Settings.EnableTaskbar) { // hide the windows taskbar according to user prefs switch (Settings.WindowsTaskbarMode) { case 0: AppBarHelper.SetWinTaskbarPos(NativeMethods.SWP_HIDEWINDOW); break; case 1: AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); break; case 2: break; default: break; } } if (Settings.EnableDesktop) { // hide the windows desktop Shell.ToggleDesktopIcons(false); } _parentWindow = new Window(); InitializeParentWindow(_parentWindow); _desktopWindow = new Window(); InitializeParentWindow(_desktopWindow); DeskParent = _desktopWindow; App app = new App(); app.InitializeComponent(); // Set custom theme if selected string theme = Settings.CairoTheme; if (theme != "Default") { if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + theme)) { app.Resources.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(System.Xml.XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + theme))); } } // Set desktop work area for when Explorer isn't running if (IsCairoUserShell) { AppBarHelper.SetWorkArea(); } MenuBarWindow = new MenuBar() { Owner = _parentWindow }; app.MainWindow = MenuBarWindow; MenuBarWindow.Show(); if (Settings.EnableDesktop) { DesktopWindow = new Desktop() { Owner = _desktopWindow }; DesktopWindow.Show(); } if (Settings.EnableMenuBarShadow) { MenuBarShadowWindow = new MenuBarShadow() { Owner = _desktopWindow }; MenuBarShadowWindow.Show(); } if (Settings.EnableTaskbar) { TaskbarWindow = new Taskbar() { Owner = _parentWindow }; TaskbarWindow.Show(); } #if (ENABLEFIRSTRUN) FirstRun(); #endif // Close the splash screen //splash.Close(new TimeSpan(0, 0, 0, 0, 800)); // login items only necessary if Explorer didn't start them if (IsCairoUserShell && !isRestart) { RunStartupApps(); } app.Run(); }
public static void Main(string[] args) { #region Initialization Routines ProcessCommandLineArgs(args); if (!SingleInstanceCheck()) { return; } SetShellReadyEvent(); SetupSettings(); // run this before logging setup so that preferences are always used // Initialize current shell information here, since it won't be accurate if we wait until after we create our own Shell_TrayWnd Shell.SetIsCairoRunningAsShell(); SetupLoggingSystem(); WriteApplicationDebugInfoToConsole(); SetSystemKeyboardShortcuts(); // Move to App??? app.SetupPluginSystem(); SetupPluginSystem(); // This will Load the Core Plugin and all other, will either reference it as a dependency or dont need it to be started first #endregion if (Settings.Instance.EnableDesktop && !GroupPolicyManager.Instance.NoDesktop) // Future: This should be moved to whatever plugin is responsible for desktop stuff { // hide the windows desktop Shell.ToggleDesktopIcons(false); } App app = new App(); app.InitializeComponent(); // This sets up the Unhandled Exception stuff... setTheme(app); // Future: This should be moved to whatever plugin is responsible for Taskbar stuff if (Settings.Instance.EnableTaskbar) { AppBarHelper.SetWinTaskbarState(AppBarHelper.WinTaskbarState.AutoHide); AppBarHelper.SetWinTaskbarVisibility((int)NativeMethods.SetWindowPosFlags.SWP_HIDEWINDOW); } // Future: This should be moved to whatever plugin is responsible for MenuBar stuff MenuBar initialMenuBar = new MenuBar(System.Windows.Forms.Screen.PrimaryScreen); app.MainWindow = initialMenuBar; WindowManager.Instance.MenuBarWindows.Add(initialMenuBar); initialMenuBar.Show(); // Future: This should be moved to whatever plugin is responsible for Desktop stuff if (Settings.Instance.EnableDesktop && !GroupPolicyManager.Instance.NoDesktop) { WindowManager.Instance.DesktopWindow = new Desktop(); WindowManager.Instance.DesktopWindow.Show(); } // Future: This should be moved to whatever plugin is responsible for Taskbar stuff if (Settings.Instance.EnableTaskbar) { Taskbar initialTaskbar = new Taskbar(System.Windows.Forms.Screen.PrimaryScreen); WindowManager.Instance.TaskbarWindows.Add(initialTaskbar); initialTaskbar.Show(); } // Open windows on secondary displays and set work area WindowManager.Instance.InitialSetup(); // Future: This should be moved to whatever plugin is responsible for SystemTray stuff. Possibly Core with no UI, then have a plugin that gives the UI? // Don't allow showing both the Windows taskbar and the Cairo tray if (Settings.Instance.EnableSysTray && (Settings.Instance.EnableTaskbar || Shell.IsCairoRunningAsShell)) { NotificationArea.Instance.Initialize(); } #if ENABLEFIRSTRUN FirstRun(); #endif #if !DEBUG // login items only necessary if Explorer didn't start them if (Shell.IsCairoRunningAsShell && !isRestart) { StartupRunner runner = new StartupRunner(); runner.Run(); } #endif app.Run(); }