diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc index ee6902346b5276acc668f7beb77d77917c1fdf68..8d22e104747be319ab059c2e88da2c88b9268add 100644 --- a/src/module/qt_window/mainwindow.cc +++ b/src/module/qt_window/mainwindow.cc @@ -4,6 +4,7 @@ MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent) : QMainWindow(parent) { qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, this); + connect(qt_window->mpv_widget, &MpvWidget::titleChanged, this, &MainWindow::updateWindowTitle); setCentralWidget(qt_window->mpv_widget); setFocusPolicy(Qt::StrongFocus); } diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh index 245d7fb6c134539ca3e8fb2107abaa360630536a..cb97f0e690e014aed7e4c12b41f47a30a929994e 100644 --- a/src/module/qt_window/mainwindow.hh +++ b/src/module/qt_window/mainwindow.hh @@ -10,4 +10,9 @@ class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = nullptr); + +public slots: + inline void updateWindowTitle(QString str) noexcept { + setWindowTitle(str); + } }; diff --git a/src/module/qt_window/mpvwidget.cc b/src/module/qt_window/mpvwidget.cc index 4207e156b7d5ecd5bb6aeabf7da268ea7bba9079..76aced8a62a487146effac80da3e44b7f6c0a5c6 100644 --- a/src/module/qt_window/mpvwidget.cc +++ b/src/module/qt_window/mpvwidget.cc @@ -5,10 +5,13 @@ #include <QtCore/QMetaObject> #include <QApplication> #include <QKeyEvent> +#include <QString> #include "qthelper.hh" #include "../mpv.h" +#include <lektor/mkv.h> + PRIVATE_FUNCTION void wakeup(void *ctx) { @@ -235,7 +238,7 @@ MpvWidget::load_file(const char *filepath) if (ret) { LOG_DEBUG("WINDOW", "Loaded file: %s", filepath); - //set_window_title(win); + update_window_title(); } else { LOG_ERROR("WINDOW", "Failed to load kara with path: %s", filepath); } @@ -244,6 +247,27 @@ MpvWidget::load_file(const char *filepath) return ret; } +void +MpvWidget::update_window_title() +{ + struct kara_metadata kara_mdt; + int changed_kara = 0; + char *kara_title = NULL; + char window_title[LKT_LINE_MAX]; + + if (database_queue_current_kara(m_db, &kara_mdt, &changed_kara)) { + mdtcat(&kara_mdt, &kara_title); + safe_snprintf(window_title, LKT_LINE_MAX, "[Lektord] %d: %s", changed_kara, kara_title); + LOG_DEBUG("WINDOW", "Set window title to: %s", window_title); + titleChanged(QString::fromLocal8Bit(window_title)); + free(kara_title); + } + + else { + LOG_ERROR("WINDOW", "Failed to get current kara, can't change window title"); + } +} + bool MpvWidget::toggle_pause() { diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh index 00355bccf0b04831a98aa5fbe26a706f9de48f27..38b8190c8dbd6c0fa7692a06475367f92306cec9 100644 --- a/src/module/qt_window/mpvwidget.hh +++ b/src/module/qt_window/mpvwidget.hh @@ -48,4 +48,10 @@ public: bool set_position(int); bool load_file(const char *); bool toggle_pause(); + +private: + void update_window_title(); + +signals: + void titleChanged(QString str); };