dail8859 / NotepadNext

A cross-platform, reimplementation of Notepad++
GNU General Public License v3.0
9.04k stars 550 forks source link

Opening a file when another instance is already is running sometimes fails #541

Open swiftgeek opened 5 months ago

swiftgeek commented 5 months ago

Opening a file when another instance is already is running sometimes fail, ending up with just raising a window and not actually opening the file (ie. MainWindow::bringWindowToForeground() runs in primary instance, but it's not followed by NotepadNextApplication::openFiles(const QStringList&) or anything else )

It might be my imagination, but the more tabs are open the higher the chances of it failing

NotepadNext 0.7 running on linux

New file opened using NotepadNext "/home/user/dir/foo bar.txt"

dail8859 commented 5 months ago

What version of Linux? Is the AppImage or Flatpack?

ErickWei commented 5 months ago

I have also encountered the same problem under MAC. When NN is already open and minimized, double-clicking another file will not wake up NN. The NN window needs to be restored manually, then the file will be imported by NN.

Kapture 2024-04-07 at 12.36.39.webm

swiftgeek commented 5 months ago

Archlinux, installed from AUR

@ErickWei that sounds like exact opposite to my problem

ErickWei commented 5 months ago

Ohh it could be another issue sorry

Archlinux, installed from AUR

@ErickWei that sounds like exact opposite to my problem

swiftgeek commented 5 months ago

Actually if I minimize like in @ErickWei test case it feels like it's failing a lot less

Normally I'm just switching virtual desktops on KDE

dail8859 commented 5 months ago

Archlinux, installed from AUR

I'm not sure who maintains that repository but I'm assuming this is a general Linux issue and not specifical to Archlinux+AUR.

I have also encountered the same problem under MAC.

There's a few different components to all this working. And it works different depending on OS.

The first part is just forcing the window to be maximized and forcing it to the front of everything else. Most operating systems deem this as being malicious and make it difficult to do this.

The MainWindow::bringWindowToForeground() method probably needs more specific implementations for Linux and Mac. I've had to implement one for Windows just because Qt doesn't provide a good cross-platform way to do it that I've found.

The other piece is sending the information of the file to open to the other instance. It relies on the 3rd party library to implement this and I know there were issues on Qt6.6+. Mac also works slightly differently when telling another instance to open a file. So I'm not completely sure why this would be failing.

I did just recently add some extra debugging info into the application to hopefully help troubleshoot but this will probably be difficult since it seems to be so OS specific.