diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 9750599c7d..c0655a86cc 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -1700,10 +1700,27 @@ void MainWindow::processMessages(const QList& msg) try { WaitCursor wc; std::list files; - QString action = QStringLiteral("OpenFile:"); + QString openFileAction = QStringLiteral("OpenFile:"); + QString kindredScheme = QStringLiteral("kindred://"); for (const auto& it : msg) { - if (it.startsWith(action)) { - files.emplace_back(it.mid(action.size()).toStdString()); + if (it.startsWith(openFileAction)) { + QString payload = it.mid(openFileAction.size()); + if (payload.startsWith(kindredScheme)) { + // Dispatch kindred:// URLs to the Python handler + std::string urlStr = payload.toStdString(); + std::string script = "try:\n" + " from silo_commands import handle_kindred_url\n" + " handle_kindred_url('" + + urlStr + + "')\n" + "except Exception as e:\n" + " FreeCAD.Console.PrintError(" + "'Kindred URL handler error: ' + str(e) + '\\n')\n"; + Base::Interpreter().runString(script.c_str()); + } + else { + files.emplace_back(payload.toStdString()); + } } } files = App::Application::processFiles(files);