diff --git a/src/eql.cpp b/src/eql.cpp index b0a9bcc..25d52c2 100644 --- a/src/eql.cpp +++ b/src/eql.cpp @@ -9,7 +9,7 @@ #include #include -const char EQL::version[] = "21.3.2"; // March 2021 +const char EQL::version[] = "21.3.3"; // March 2021 extern "C" void ini_EQL(cl_object); diff --git a/src/lisp/package.lisp b/src/lisp/package.lisp index 3b7284e..5d9d148 100644 --- a/src/lisp/package.lisp +++ b/src/lisp/package.lisp @@ -127,6 +127,7 @@ #:file-to-url #:find-quick-item #:ini-quick-view + #:ini-sailfish #:js #:js-arg #:qml-call diff --git a/src/lisp/qml.lisp b/src/lisp/qml.lisp index 37154af..1aa11ae 100644 --- a/src/lisp/qml.lisp +++ b/src/lisp/qml.lisp @@ -209,3 +209,31 @@ (|showFullScreen| *quick-view*) (|show| *quick-view*)))) +;;; for SailfishOS + +(defun ini-sailfish (file/url &optional root quick-view) + (when (and root + (qt-object-p root) + (= (qid "QUrl") (qt-object-id root))) + (setf *root* (x:cc (|toString| root) "/"))) + (setf *quick-view* (or quick-view (qnew "QQuickView"))) + (qconnect (|engine| *quick-view*) "quit()" 'qquit) + (qnew "QQmlFileSelector(QQmlEngine*,QObject*)" (|engine| *quick-view*) *quick-view*) + (|setSource| *quick-view* (if (stringp file/url) + (file-to-url file/url) + file/url)) + (when (= |QQuickView.Error| (|status| *quick-view*)) + ;; display eventual QML errors (don't use QMSG, doesn't work on Sailfish) + (print (x:join (mapcar '|toString| (|errors| *quick-view*)) + #.(make-string 2 :initial-element #\Newline)))) + (|setResizeMode| *quick-view* |QQuickView.SizeRootObjectToView|) + (|show| *quick-view*) + (when quick-view + ;; for compiled app; + ;; we add a fallback restart for eventual connections from Slime; + ;; this is needed if an exception occurs during event driven + ;; function calls (which would otherwise block the Slime REPL) + (loop + (with-simple-restart (restart-qt-events "Restart Qt event processing.") + (qexec))))) +