Improve monitor reconnect/disconnect logic. (#974)
* WIP: Improve monitor reconnect logic * Organize revealer into a controller and clean up bindings of destroyed bars. * Improve monitor disconnect/reconnect logic. * Add JSDoc
This commit is contained in:
75
app.ts
75
app.ts
@@ -1,81 +1,12 @@
|
||||
import './src/lib/session';
|
||||
import './src/style';
|
||||
import 'src/core/behaviors/bar';
|
||||
import AstalHyprland from 'gi://AstalHyprland?version=0.1';
|
||||
import { Bar } from './src/components/bar';
|
||||
import Notifications from './src/components/notifications';
|
||||
import SettingsDialog from './src/components/settings/index';
|
||||
import OSD from 'src/components/osd/index';
|
||||
import { App } from 'astal/gtk3';
|
||||
import { execAsync } from 'astal';
|
||||
import { handleRealization } from 'src/components/menus/shared/dropdown/helpers/helpers';
|
||||
import { isDropdownMenu } from 'src/components/settings/constants.js';
|
||||
import { initializeSystemBehaviors } from 'src/core/behaviors';
|
||||
import { runCLI } from 'src/services/cli/commander';
|
||||
import { DropdownMenus, StandardWindows } from 'src/components/menus';
|
||||
import { forMonitors } from 'src/components/bar/utils/monitors';
|
||||
import options from 'src/configuration';
|
||||
import { SystemUtilities } from 'src/core/system/SystemUtilities';
|
||||
|
||||
const hyprland = AstalHyprland.get_default();
|
||||
const initializeStartupScripts = (): void => {
|
||||
execAsync(`python3 ${SRC_DIR}/scripts/bluetooth.py`).catch((err) =>
|
||||
console.error('Failed to initialize bluetooth script:', err),
|
||||
);
|
||||
};
|
||||
|
||||
const initializeMenus = (): void => {
|
||||
StandardWindows.forEach((window) => {
|
||||
return window();
|
||||
});
|
||||
|
||||
DropdownMenus.forEach((window) => {
|
||||
return window();
|
||||
});
|
||||
|
||||
DropdownMenus.forEach((window) => {
|
||||
const windowName = window.name
|
||||
.replace(/_default.*/, '')
|
||||
.concat('menu')
|
||||
.toLowerCase();
|
||||
|
||||
if (!isDropdownMenu(windowName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleRealization(windowName);
|
||||
});
|
||||
};
|
||||
import { InitializationService } from 'src/core/initialization';
|
||||
|
||||
App.start({
|
||||
instanceName: 'hyprpanel',
|
||||
requestHandler(request: string, res: (response: unknown) => void) {
|
||||
runCLI(request, res);
|
||||
},
|
||||
async main() {
|
||||
try {
|
||||
initializeStartupScripts();
|
||||
|
||||
Notifications();
|
||||
OSD();
|
||||
|
||||
const barsForMonitors = await forMonitors(Bar);
|
||||
barsForMonitors.forEach((bar: JSX.Element) => bar);
|
||||
|
||||
SettingsDialog();
|
||||
initializeMenus();
|
||||
|
||||
initializeSystemBehaviors();
|
||||
} catch (error) {
|
||||
console.error('Error during application initialization:', error);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
hyprland.connect('monitor-added', () => {
|
||||
const { restartCommand } = options.hyprpanel;
|
||||
|
||||
if (options.hyprpanel.restartAgs.get()) {
|
||||
SystemUtilities.bash(restartCommand.get());
|
||||
}
|
||||
requestHandler: (request: string, res: (response: unknown) => void) => runCLI(request, res),
|
||||
main: () => InitializationService.initialize(),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user