diff --git a/sass/_chatbox.scss b/sass/_chatbox.scss
index 822bf8129..7401fda74 100644
--- a/sass/_chatbox.scss
+++ b/sass/_chatbox.scss
@@ -597,7 +597,7 @@
.chat-body {
height: inherit;
overflow: hidden;
- background-color: var(--chat-head-color);
+ background-color: var(--chat-background-color);
}
.chat-title {
font-size: var(--font-size-huge);
diff --git a/sass/_variables.scss b/sass/_variables.scss
index 780422465..82a411d67 100644
--- a/sass/_variables.scss
+++ b/sass/_variables.scss
@@ -38,6 +38,8 @@ $mobile_portrait_length: 480px !default;
--message-avatar-width: 36px;
--message-avatar-height: 36px;
+ --chat-background-color: white;
+
--chat-textarea-color: #666;
--chat-textarea-background-color: white;
--chat-textarea-height: 60px;
diff --git a/src/plugins/chatboxviews/templates/chats.js b/src/plugins/chatboxviews/templates/chats.js
index 6dfe72b9a..06117950c 100644
--- a/src/plugins/chatboxviews/templates/chats.js
+++ b/src/plugins/chatboxviews/templates/chats.js
@@ -5,7 +5,8 @@ import { _converse, api } from '@converse/headless/core';
export default () => {
const { chatboxes, CONTROLBOX_TYPE, CHATROOMS_TYPE, HEADLINES_TYPE } = _converse;
const view_mode = api.settings.get('view_mode');
-
+ const connection = _converse?.connection;
+ const logged_out = !connection?.connected || !connection?.authenticated || connection?.disconnecting;
return html`
${view_mode === 'overlayed' ? html`` : ''}
${repeat(chatboxes, m => m.get('jid'), m => {
@@ -14,7 +15,7 @@ export default () => {
${view_mode === 'overlayed' ? html`` : ''}
`;
} else if (m.get('type') === CHATROOMS_TYPE) {
diff --git a/src/plugins/chatboxviews/view.js b/src/plugins/chatboxviews/view.js
index 051444400..7173943cc 100644
--- a/src/plugins/chatboxviews/view.js
+++ b/src/plugins/chatboxviews/view.js
@@ -16,6 +16,12 @@ class ConverseChats extends ElementView {
this.listenTo(this.model, 'change:minimized', this.render);
this.listenTo(this.model, 'destroy', this.render);
+ // Use listenTo instead of api.listen.to so that event handlers
+ // automatically get deregistered when the component is dismounted
+ this.listenTo(_converse, 'connected', this.render);
+ this.listenTo(_converse, 'reconnected', this.render);
+ this.listenTo(_converse, 'disconnected', this.render);
+
const bg = document.getElementById('conversejs-bg');
if (bg && !bg.innerHTML.trim()) {
render(tpl_background_logo(), bg);
diff --git a/src/plugins/controlbox/view.js b/src/plugins/controlbox/view.js
index ce71173f5..fc970daed 100644
--- a/src/plugins/controlbox/view.js
+++ b/src/plugins/controlbox/view.js
@@ -58,13 +58,6 @@ class ControlBoxView extends ElementView {
if (this.model.get('connected') && this.model.get('closed') === undefined) {
this.model.set('closed', !api.settings.get('show_controlbox_by_default'));
}
-
- const connection = _converse?.connection;
- if (!connection?.connected || !connection?.authenticated || connection?.disconnecting) {
- this.classList.add('logged-out');
- } else {
- this.classList.remove('logged-out');
- }
}
close (ev) {