feat: enhance window focus handling and notification system

This commit is contained in:
2026-02-27 22:45:15 +11:00
parent a2e71269e1
commit 90ee0aff90
3 changed files with 29 additions and 7 deletions

2
cinny

Submodule cinny updated: f8af51b75c...b400c4d6c3

View File

@@ -608,6 +608,14 @@ ipcMain.handle('window:close', () => {
if (mainWindow) mainWindow.close(); if (mainWindow) mainWindow.close();
}); });
ipcMain.handle('window:focus', () => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.show();
mainWindow.focus();
}
});
ipcMain.handle('window:is-maximized', () => { ipcMain.handle('window:is-maximized', () => {
return mainWindow ? mainWindow.isMaximized() : false; return mainWindow ? mainWindow.isMaximized() : false;
}); });
@@ -766,9 +774,8 @@ ipcMain.handle('get-desktop-sources', async (event, opts) => {
}); });
// Desktop notification handler // Desktop notification handler
ipcMain.handle('show-notification', async (event, { title, body, icon }) => { ipcMain.handle('show-notification', async (event, { title, body, icon, roomId, eventId }) => {
try { try {
console.log('Electron notification handler called:', { title, body });
const { Notification } = require('electron'); const { Notification } = require('electron');
if (!Notification.isSupported()) { if (!Notification.isSupported()) {
@@ -784,15 +791,24 @@ ipcMain.handle('show-notification', async (event, { title, body, icon }) => {
}); });
notification.on('click', () => { notification.on('click', () => {
console.log('Notification clicked'); console.log('Paarrot: Notification clicked, roomId:', roomId);
if (mainWindow) { if (mainWindow) {
console.log('Paarrot: Sending navigation to renderer');
mainWindow.show(); mainWindow.show();
mainWindow.focus(); mainWindow.focus();
if (roomId) {
mainWindow.webContents.send('notification:navigate', { roomId, eventId });
console.log('Paarrot: Navigation event sent');
}
} else {
console.log('Paarrot: No mainWindow available');
} }
}); });
notification.on('show', () => console.log('Paarrot: Notification shown'));
notification.on('failed', (e, err) => console.error('Paarrot: Notification failed:', err));
notification.show(); notification.show();
console.log('Notification shown successfully');
return { success: true }; return { success: true };
} catch (error) { } catch (error) {

View File

@@ -93,7 +93,8 @@ contextBridge.exposeInMainWorld('electron', {
unmaximize: () => ipcRenderer.invoke('window:unmaximize'), unmaximize: () => ipcRenderer.invoke('window:unmaximize'),
close: () => ipcRenderer.invoke('window:close'), close: () => ipcRenderer.invoke('window:close'),
isMaximized: () => ipcRenderer.invoke('window:is-maximized'), isMaximized: () => ipcRenderer.invoke('window:is-maximized'),
startDrag: () => ipcRenderer.invoke('window:start-drag') startDrag: () => ipcRenderer.invoke('window:start-drag'),
focus: () => ipcRenderer.invoke('window:focus')
}, },
// Clipboard // Clipboard
@@ -154,7 +155,12 @@ contextBridge.exposeInMainWorld('electron', {
// Desktop notifications // Desktop notifications
notification: { notification: {
show: (options) => ipcRenderer.invoke('show-notification', options) show: (options) => ipcRenderer.invoke('show-notification', options),
onNavigate: (callback) => {
const handler = (_, data) => callback(data);
ipcRenderer.on('notification:navigate', handler);
return () => ipcRenderer.removeListener('notification:navigate', handler);
}
} }
}); });