diff --git a/src/resources/themes/v_white/v_white.palette b/src/resources/themes/v_white/v_white.palette index 7fb3890e..1ca8f9f1 100644 --- a/src/resources/themes/v_white/v_white.palette +++ b/src/resources/themes/v_white/v_white.palette @@ -43,6 +43,11 @@ content_bg=#FFFFFF selection_fg=#000000 selection_bg=#64b5f6 +[soft_defined] +; VAvatar. +; The border background color of the avatar when Captain mode is triggered. +avatar_captain_mode_border_bg=#6C6C6C + [widgets] ; Widget color attributes. diff --git a/src/vcaptain.cpp b/src/vcaptain.cpp index fe01d6df..916d5e21 100644 --- a/src/vcaptain.cpp +++ b/src/vcaptain.cpp @@ -199,7 +199,7 @@ void VCaptain::exitCaptainMode() restoreFocus(); - qDebug() << "exit Captain mode"; + emit captainModeChanged(false); } bool VCaptain::registerCaptainTarget(const QString &p_name, @@ -255,14 +255,14 @@ bool VCaptain::navigationModeByCaptain(void *p_target, void *p_data) void VCaptain::triggerCaptainMode() { - qDebug() << "trigger Captain mode"; - m_widgetBeforeCaptain = QApplication::focusWidget(); m_ignoreFocusChange = false; setMode(CaptainMode::Pending); + emit captainModeChanged(true); + // Focus to listen pending key press. setFocus(); } diff --git a/src/vcaptain.h b/src/vcaptain.h index 73e82282..15d4670f 100644 --- a/src/vcaptain.h +++ b/src/vcaptain.h @@ -43,6 +43,10 @@ public: void *p_target, CaptainFunc p_func); +signals: + // Emit when mode changed. + void captainModeChanged(bool p_captainMode); + protected: void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index 7dff73ce..5a92c0bd 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -33,11 +33,14 @@ #include "vsnippetlist.h" #include "vtoolbox.h" #include "vbuttonmenuitem.h" +#include "vpalette.h" VMainWindow *g_mainWin; extern VConfigManager *g_config; +extern VPalette *g_palette; + VNote *g_vnote; const int VMainWindow::c_sharedMemTimerInterval = 1000; @@ -110,6 +113,17 @@ void VMainWindow::initCaptain() // VCaptain should be visible to accpet key focus. But VCaptain // may hide other widgets. m_captain = new VCaptain(this); + connect(m_captain, &VCaptain::captainModeChanged, + this, [this](bool p_captainMode) { + static QString normalBaseColor = m_avatar->getBaseColor(); + static QString captainModeColor = g_palette->color("avatar_captain_mode_border_bg"); + + if (p_captainMode) { + m_avatar->updateBaseColor(captainModeColor); + } else { + m_avatar->updateBaseColor(normalBaseColor); + } + }); } void VMainWindow::registerCaptainAndNavigationTargets() diff --git a/src/vpalette.cpp b/src/vpalette.cpp index 13730c8f..69995c62 100644 --- a/src/vpalette.cpp +++ b/src/vpalette.cpp @@ -20,6 +20,7 @@ void VPalette::init(const QString &p_file) QSettings settings(p_file, QSettings::IniFormat); initMetaData(&settings, "metadata"); initPaleteFromSettings(&settings, "phony"); + initPaleteFromSettings(&settings, "soft_defined"); initPaleteFromSettings(&settings, "widgets"); }