From 46ff69377b9575f57e512784fb13f480fe5654cc Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Sun, 29 Oct 2023 11:29:50 +0100
Subject: [PATCH] LINUX: Use the flag from the config flag to set or not the
 QT_QPA_PLATFORM to xcb or not...

---
 lektord/c/module_qt_window.cc               | 12 +++++++++++
 lektord/c/mpvwidget.cc                      | 17 ++++------------
 lektord/src/c_wrapper/mod.rs                | 22 ++++++++++-----------
 utils/scripts/docker/package_appimages.bash |  1 -
 utils/scripts/docker/prepare_workspace.bash |  4 +++-
 5 files changed, 29 insertions(+), 27 deletions(-)

diff --git a/lektord/c/module_qt_window.cc b/lektord/c/module_qt_window.cc
index 90012eba..7559b451 100644
--- a/lektord/c/module_qt_window.cc
+++ b/lektord/c/module_qt_window.cc
@@ -1,6 +1,7 @@
 #include "module_qt_window.hh"
 #include <QApplication>
 #include "common.h"
+#include <cstdlib>
 #include <sched.h>
 #include "mainwindow.hh"
 
@@ -12,6 +13,17 @@ ___create_mpv_widget(void *arg)
     /* Unsafe reinterpret cast, but isok */
     module_qt_window_s *qt_window = reinterpret_cast<module_qt_window_s *>(arg);
 
+#if defined(LKT_OS_TOASTER) && LKT_OS_TOASTER == 1
+    if (module_force_x11) {
+        if (0 != setenv("QT_QPA_PLATFORM", "xcb", true)) {
+            LOG_ERROR("WINDOW", "failed to set QT_QPA_PLATFORM to xcb");
+        }
+    }
+    if (const char *const qpa = getenv("QT_QPA_PLATFORM"); qpa != nullptr) {
+        LOG_INFO("WINDOW", "launching with QT_QPA_PLATFORM = %s", qpa);
+    }
+#endif
+
     int argc = 0;
     QApplication app(argc, nullptr);
     setlocale(LC_NUMERIC, "C");
diff --git a/lektord/c/mpvwidget.cc b/lektord/c/mpvwidget.cc
index 006cde1b..905c60dd 100644
--- a/lektord/c/mpvwidget.cc
+++ b/lektord/c/mpvwidget.cc
@@ -49,13 +49,9 @@ MpvWidget::MpvWidget(bool *launched, QWidget *parent) noexcept
     }
     setFocusPolicy(Qt::StrongFocus);
 
-#define MPV_SET_OPTION(opt, value)                                        \
-    {                                                                     \
-        int status = 0;                                                   \
-        if ((status = mpv_set_option_string(mpv, opt, value)) < 0) {      \
-            LOG_ERROR("WINDOW", "Failed to set %s to %s: %s", opt, value, \
-                      mpv_error_string(status));                          \
-        }                                                                 \
+#define MPV_SET_OPTION(opt, value)                                                               \
+    if (int status = mpv_set_option_string(mpv, opt, value); status < 0) {                       \
+        LOG_ERROR("WINDOW", "Failed to set %s to %s: %s", opt, value, mpv_error_string(status)); \
     }
 #define MPV_SET_OPTION_COND(opt, value, cond) \
     if (cond) {                               \
@@ -178,11 +174,6 @@ MpvWidget::onMpvEvents() noexcept
 void
 MpvWidget::handleMpvEvent(mpv_event *event) noexcept
 {
-    size_t ao_volume;
-    mpv_event_property *prop;
-    (void)ao_volume;
-    (void)prop;
-
     switch (event->event_id) {
     case MPV_EVENT_SHUTDOWN:
         lkt_toggle_play_state(LKT_PLAY_STOP);
@@ -203,7 +194,7 @@ MpvWidget::handleMpvEvent(mpv_event *event) noexcept
         break;
 
     case MPV_EVENT_PROPERTY_CHANGE: {
-        prop = static_cast<mpv_event_property *>(event->data);
+        const mpv_event_property *const prop = static_cast<mpv_event_property *>(event->data);
         if (strcmp(prop->name, "time-pos") == 0) {
             if (prop->format == MPV_FORMAT_DOUBLE) {
                 m_position = static_cast<int>(*reinterpret_cast<double *>(prop->data));
diff --git a/lektord/src/c_wrapper/mod.rs b/lektord/src/c_wrapper/mod.rs
index 83386bb3..98b09a34 100644
--- a/lektord/src/c_wrapper/mod.rs
+++ b/lektord/src/c_wrapper/mod.rs
@@ -44,16 +44,12 @@ enum PlayerEvent {
 
 /// Init the player module!
 pub(crate) fn init_player_module(ptr: LektorStatePtr, config: LektorPlayerConfig) -> Result<()> {
+    #[allow(non_camel_case_types)]
+    type c_char_ptr = NonNull<c_char>;
+
     #[repr(C)]
     struct FunctionTable {
-        log: unsafe extern "C" fn(
-            c_int,
-            NonNull<c_char>,
-            NonNull<c_char>,
-            NonNull<c_char>,
-            u64,
-            NonNull<c_char>,
-        ),
+        log: unsafe extern "C" fn(c_int, c_char_ptr, c_char_ptr, c_char_ptr, u64, c_char_ptr),
         abort: extern "C" fn(),
         next: extern "C" fn(),
         prev: extern "C" fn(),
@@ -65,12 +61,14 @@ pub(crate) fn init_player_module(ptr: LektorStatePtr, config: LektorPlayerConfig
         fn mod_set_msg_options(_: NonNull<c_char>, _: u64, _: u64) -> c_int;
         fn mod_set_force_x11(_: bool) -> c_int;
     }
+
     let LektorPlayerConfig {
         font_size,
         font_name,
         msg_duration,
         force_x11,
     } = config;
+
     unsafe {
         // We must use non-async stuff to propagate things from the player module back to the tokio
         // runtime... The code called form C/C++ will use `sender.blocking_send`.
@@ -108,7 +106,7 @@ pub(crate) fn init_player_module(ptr: LektorStatePtr, config: LektorPlayerConfig
 
         // Set the state for the C/C++ code
         if STATE.set((sender, handle)).is_err() {
-            anyhow::bail!("failed to register the lektord state pointer for the player module");
+            bail!("failed to register the lektord state pointer for the player module");
         }
 
         // Pass options to the C/C++ code
@@ -117,11 +115,11 @@ pub(crate) fn init_player_module(ptr: LektorStatePtr, config: LektorPlayerConfig
             font_size,
             msg_duration,
         ) {
-            anyhow::bail!("failed to set informations relative to fonts for the player module")
+            bail!("failed to set informations relative to fonts for the player module")
         }
 
         if 0 != mod_set_force_x11(force_x11) {
-            anyhow::bail!("failed to set informations relative x11 for the player module")
+            bail!("failed to set informations relative x11 for the player module")
         }
 
         // Create the player
@@ -133,7 +131,7 @@ pub(crate) fn init_player_module(ptr: LektorStatePtr, config: LektorPlayerConfig
             abort: lkt_abort,
         };
         if 0 != mod_new(&table as *const _) {
-            anyhow::bail!("failed to init the player module")
+            bail!("failed to init the player module")
         }
         Ok(())
     }
diff --git a/utils/scripts/docker/package_appimages.bash b/utils/scripts/docker/package_appimages.bash
index 858d1ad8..fa70e202 100755
--- a/utils/scripts/docker/package_appimages.bash
+++ b/utils/scripts/docker/package_appimages.bash
@@ -71,7 +71,6 @@ function deploy() {
     mkdir -p ${EXEC^}/apprun-hooks/
     case ${*:2} in
         *qt*)
-        echo "export QT_QPA_PLATFORM=xcb" > ${EXEC^}/apprun-hooks/force-xcb.sh
         for PLUGIN in ${QT_SRC}/*; do
             local PLUGIN=$(basename ${PLUGIN})
             if [ ! -d ${QT_DST}/${PLUGIN} ]; then
diff --git a/utils/scripts/docker/prepare_workspace.bash b/utils/scripts/docker/prepare_workspace.bash
index c504e7aa..3bcc61b6 100755
--- a/utils/scripts/docker/prepare_workspace.bash
+++ b/utils/scripts/docker/prepare_workspace.bash
@@ -18,7 +18,9 @@ if [ "x$STAGE" = "x1" ]; then
         echo "source $HOME.cargo/env" >> $HOME/.bashrc
     fi
 else
-    find . -type f -exec touch -d "1990-01-01 00:00:00" {} \;
     cargo build --release $*
+    for PKG in kurisu_api lektor_* lkt amadeus lektord; do
+        cargo clean -p ${PKG}
+    done
     rm -rf kurisu_api lektor_* lkt amadeus lektord
 fi
-- 
GitLab