Skip to content

Commit 094622d

Browse files
committed
feat: electron window event passing apis
1 parent 680ea69 commit 094622d

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

src-electron/main-window-ipc.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,29 @@ function registerWindowIpcHandlers() {
192192
}
193193
});
194194

195+
// Inter-window event system (mirrors Tauri's event system)
196+
// Send event to a specific window by label
197+
ipcMain.handle('emit-to-window', (event, targetLabel, eventName, payload) => {
198+
assertTrusted(event);
199+
const targetWin = windowRegistry.get(targetLabel);
200+
if (targetWin && !targetWin.isDestroyed()) {
201+
targetWin.webContents.send('window-event', { eventName, payload });
202+
return true;
203+
}
204+
return false;
205+
});
206+
207+
// Broadcast event to all windows
208+
ipcMain.handle('emit-to-all-windows', (event, eventName, payload) => {
209+
assertTrusted(event);
210+
const senderLabel = webContentsToLabel.get(event.sender.id);
211+
for (const [label, win] of windowRegistry) {
212+
if (!win.isDestroyed() && label !== senderLabel) {
213+
win.webContents.send('window-event', { eventName, payload });
214+
}
215+
}
216+
});
217+
195218
// Get process ID
196219
ipcMain.handle('get-process-id', (event) => {
197220
assertTrusted(event);

src-electron/preload.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,20 @@ contextBridge.exposeInMainWorld('electronAPI', {
109109
quitApp: (exitCode) => ipcRenderer.invoke('quit-app', exitCode),
110110
focusWindow: () => ipcRenderer.invoke('focus-window'),
111111

112+
// Inter-window event system (mirrors Tauri's event system)
113+
emitToWindow: (targetLabel, eventName, payload) => ipcRenderer.invoke('emit-to-window', targetLabel, eventName, payload),
114+
emitToAllWindows: (eventName, payload) => ipcRenderer.invoke('emit-to-all-windows', eventName, payload),
115+
onWindowEvent: (eventName, callback) => {
116+
const handler = (event, data) => {
117+
if (data.eventName === eventName) {
118+
callback(data.payload);
119+
}
120+
};
121+
ipcRenderer.on('window-event', handler);
122+
// Return unlisten function (like Tauri)
123+
return () => ipcRenderer.removeListener('window-event', handler);
124+
},
125+
112126
// Process and platform info
113127
getProcessId: () => ipcRenderer.invoke('get-process-id'),
114128
getPlatformArch: () => ipcRenderer.invoke('get-platform-arch'),

0 commit comments

Comments
 (0)