From 8b2ce4b73a457fe065f38344c93f3648171be754 Mon Sep 17 00:00:00 2001 From: forbes-0023 Date: Tue, 10 Feb 2026 10:30:50 -0600 Subject: [PATCH] feat: native Qt start panel + kindred:// URL scheme (#167) Replace QWebEngineView-based start page with a rich native Qt panel. QWebEngineView (PySide6.QtWebEngineWidgets) is not available on conda-forge for Qt6, so the start page was always falling back to a bare offline widget. Start panel (silo_start.py): - Database Items list with search from Silo REST API - Recent Files from FreeCAD preferences - Real-time Activity Feed via SSE (SiloEventListener) - Context menu: Open in Create, Open in Browser, Copy Part Number - 'Open in Browser' button via QDesktopServices - Catppuccin Mocha dark theme kindred:// URL scheme: - Desktop file registers x-scheme-handler/kindred MIME type - MainWindow::processMessages() dispatches kindred:// URLs to Python - handle_kindred_url() in silo_commands.py opens items by part number - InitGui.py handles kindred:// URLs on cold start via QTimer Closes #167 --- mods/silo | 2 +- resources/kindred-create.desktop | 4 ++-- src/Gui/MainWindow.cpp | 23 ++++++++++++++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/mods/silo b/mods/silo index 7cf5867a7a..85bfb17854 160000 --- a/mods/silo +++ b/mods/silo @@ -1 +1 @@ -Subproject commit 7cf5867a7ac16375fbffc69aeba8af436dec7523 +Subproject commit 85bfb178541b04ff4c2854cd2fd3ef1723345ba5 diff --git a/resources/kindred-create.desktop b/resources/kindred-create.desktop index c3b942a39d..6432edaf03 100644 --- a/resources/kindred-create.desktop +++ b/resources/kindred-create.desktop @@ -2,12 +2,12 @@ Name=Kindred Create GenericName=CAD Application Comment=Parametric 3D CAD modeler based on FreeCAD -Exec=kindred-create %F +Exec=kindred-create %U Icon=kindred-create Terminal=false Type=Application Categories=Graphics;Science;Engineering; -MimeType=application/x-extension-fcstd; +MimeType=application/x-extension-fcstd;x-scheme-handler/kindred; Keywords=CAD;3D;modeling;engineering;design;parametric; StartupNotify=true StartupWMClass=KindredCreate diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index b942f71d7c..c72d1288f4 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); -- 2.49.1