Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

showMessageBox icon in renderer process?

Election v8.0.0; macOS 10.14.5

Has anyone had success getting an icon to display with dialog.showMessageBox in the renderer process?

I'm able to get the icon to work from the main process but not from a renderer process. Same with Notifications – no icon but no errors. I can console.log the nativeImage so I know it is getting created but I'm still getting the default Electron icon.

I could probably do a workaround by messaging main, displaying the showMessageBox, sending back the result, etc. but that is more spaghetti code than I'd like.

 const iconPath = upath.toUnix(upath.join(__dirname, "assets", "icon.png"));
 //debuging:
 var fileExists = fs.existsSync(iconPath)
 console.log('fileExists', fileExists);

 const dialogIcon = nativeImage.createFromPath(iconPath);
 //debuging:
 console.log('dialogIcon', dialogIcon);

var options = {
    type: 'question',
    buttons: ['&Yes', '&No'],
    title: 'Delete Event',
    icon: dialogIcon,
    normalizeAccessKeys: true,
    message: 'Permanently delete event?'
};

const win = BrowserWindow.getFocusedWindow();
dialog.showMessageBox(win, options)
    .then((choice) => {
        if (choice.response === 0) {
            // do something
        }
    }).catch(err => {
        console.log('ERROR', err);
    });
like image 959
spring Avatar asked Nov 06 '22 10:11

spring


1 Answers

So in order to use a nativeImage with the dialog module in a render process, the nativeImage needs to be accessed through remote even though nativeImage is available to both main and render contexts:

const { ipcRenderer, remote } = require('electron');

Wrong:

const { ipcRenderer, remote, nativeImage } = require('electron');

Right:

const { BrowserWindow, dialog, nativeImage } = require('electron').remote;
like image 53
spring Avatar answered Nov 15 '22 12:11

spring