]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Check if namejob is already being run before opening new createDirectory dialog
authorAkseli Lahtinen <akselmo@akselmo.dev>
Sat, 11 May 2024 15:59:03 +0000 (15:59 +0000)
committerFelix Ernst <felixernst@kde.org>
Sat, 11 May 2024 15:59:03 +0000 (15:59 +0000)
This is a fix for a bug where in network views (or otherwise slow
systems), pressing `Ctrl+Shift+N` multiple times opens multiple popup
windows and thus causes a crash when any of the popups is interacted
with after closing the topmost one. The problem is not the crash with
popups themselves, but that we're opening multiple popups in the first
place.

In regular views this works fine, since the `nameJob` does not take
long time at all and only one popup opens, immediately blocking the
shortcut.

In network views, the `nameJob` seems to take a while to run, since it
is loading info from network. If user spams `Ctrl+Shift+N` shortcut in
frustration, it starts more `nameJob`s and eventually when those jobs
are done, it opens multiple popups.

This code checks that if we're already running a `namejob`, we're very
likely waiting for the `createDir` popup to appear, so we don't do
anything until there is no more `nameJob` running.

I've tested that it works in both network and regular Dolphin views.

BUG:481401

CMakeLists.txt
src/dolphinmainwindow.cpp

index bd6269398b949fb8bc994eb6f1fbafada10a0b3e..8ea347952141136a7197ae3658a1df492f1ba0ad 100644 (file)
@@ -8,7 +8,7 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE
 project(Dolphin VERSION ${RELEASE_SERVICE_VERSION})
 
 set(QT_MIN_VERSION "6.4.0")
-set(KF6_MIN_VERSION "5.240.0")
+set(KF6_MIN_VERSION "6.2.0")
 
 # ECM setup
 find_package(ECM ${KF6_MIN_VERSION} CONFIG REQUIRED)
index 10dc9375de0a6d0318c2979af8e75f3190aa4ca4..cfdcb99d2ab88a8627628c8f8c40530c0da22c28 100644 (file)
@@ -783,8 +783,14 @@ void DolphinMainWindow::updateNewMenu()
 
 void DolphinMainWindow::createDirectory()
 {
-    m_newFileMenu->setWorkingDirectory(activeViewContainer()->url());
-    m_newFileMenu->createDirectory();
+    // When creating directory, namejob is being run. In network folders,
+    // this job can take long time, so instead of starting multiple namejobs,
+    // just check if we are already running one. This prevents opening multiple
+    // dialogs. BUG:481401
+    if (!m_newFileMenu->isCreateDirectoryRunning()) {
+        m_newFileMenu->setWorkingDirectory(activeViewContainer()->url());
+        m_newFileMenu->createDirectory();
+    }
 }
 
 void DolphinMainWindow::quit()