diff --git a/src/EditProfileDialog.cpp b/src/EditProfileDialog.cpp index a6413693..f93e9e16 100644 --- a/src/EditProfileDialog.cpp +++ b/src/EditProfileDialog.cpp @@ -1725,6 +1725,7 @@ void EditProfileDialog::setupAdvancedPage(const Profile::Ptr &profile) // encoding options auto codecAction = new KCodecAction(this); + codecAction->setCurrentCodec(profile->defaultEncoding()); _advancedUi->selectEncodingButton->setMenu(codecAction->menu()); connect(codecAction, QOverload::of(&KCodecAction::triggered), this, diff --git a/src/Session.cpp b/src/Session.cpp index 1103f6e1..483d8fd6 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -252,6 +252,8 @@ void Session::setCodec(QTextCodec* codec) } emulation()->setCodec(codec); + + emit sessionCodecChanged(codec); } bool Session::setCodec(const QByteArray& name) diff --git a/src/Session.h b/src/Session.h index 1b7da1b3..c1af3c05 100644 --- a/src/Session.h +++ b/src/Session.h @@ -661,6 +661,11 @@ Q_SIGNALS: */ void currentDirectoryChanged(const QString &dir); + /** + * Emitted when the session text encoding changes. + */ + void sessionCodecChanged(QTextCodec *codec); + /** Emitted when a bell event occurs in the session. */ void bellRequest(const QString &message); diff --git a/src/SessionController.cpp b/src/SessionController.cpp index 542955d2..1cf4a71b 100644 --- a/src/SessionController.cpp +++ b/src/SessionController.cpp @@ -691,7 +691,8 @@ void SessionController::setupCommonActions() _codecAction = new KCodecAction(i18n("Set &Encoding"), this); _codecAction->setIcon(QIcon::fromTheme(QStringLiteral("character-set"))); collection->addAction(QStringLiteral("set-encoding"), _codecAction); - connect(_codecAction->menu(), &QMenu::aboutToShow, this, &Konsole::SessionController::updateCodecAction); + _codecAction->setCurrentCodec(QString::fromUtf8(_session->codec())); + connect(_session.data(), &Konsole::Session::sessionCodecChanged, this, &Konsole::SessionController::updateCodecAction); connect(_codecAction, QOverload::of(&KCodecAction::triggered), this, &Konsole::SessionController::changeCodec); @@ -846,9 +847,9 @@ void SessionController::prepareSwitchProfileMenu() _switchProfileMenu->menu()->clear(); _switchProfileMenu->menu()->addActions(_profileList->actions()); } -void SessionController::updateCodecAction() +void SessionController::updateCodecAction(QTextCodec *codec) { - _codecAction->setCurrentCodec(QString::fromUtf8(_session->codec())); + _codecAction->setCurrentCodec(codec); } void SessionController::changeCodec(QTextCodec* codec) diff --git a/src/SessionController.h b/src/SessionController.h index 057a3144..5062833b 100644 --- a/src/SessionController.h +++ b/src/SessionController.h @@ -260,7 +260,7 @@ private Q_SLOTS: // other void setupSearchBar(); void prepareSwitchProfileMenu(); - void updateCodecAction(); + void updateCodecAction(QTextCodec *codec); void showDisplayContextMenu(const QPoint &position); void movementKeyFromSearchBarReceived(QKeyEvent *event); void sessionNotificationsChanged(Session::Notification notification, bool enabled);