diff --git a/package.json b/package.json
index e0883f5556..d6845e0981 100644
--- a/package.json
+++ b/package.json
@@ -151,7 +151,7 @@
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.1",
- "allchange": "^1.0.0",
+ "allchange": "^1.0.2",
"babel-jest": "^26.6.3",
"chokidar": "^3.5.1",
"concurrently": "^5.3.0",
diff --git a/res/css/_common.scss b/res/css/_common.scss
index 5fcc10add0..a16e7d4d8f 100644
--- a/res/css/_common.scss
+++ b/res/css/_common.scss
@@ -381,11 +381,6 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
font-size: $font-14px;
color: $primary-content;
word-wrap: break-word;
-
- a {
- color: $accent-color;
- cursor: pointer;
- }
}
.mx_Dialog_buttons {
diff --git a/res/css/structures/_ScrollPanel.scss b/res/css/structures/_ScrollPanel.scss
index 82caeae29d..a668594bba 100644
--- a/res/css/structures/_ScrollPanel.scss
+++ b/res/css/structures/_ScrollPanel.scss
@@ -15,8 +15,6 @@ limitations under the License.
*/
.mx_ScrollPanel {
- contain: strict;
-
.mx_RoomView_MessageList {
position: relative;
display: flex;
diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss
index 1c58dfb95b..447c878f14 100644
--- a/res/css/views/rooms/_EventTile.scss
+++ b/res/css/views/rooms/_EventTile.scss
@@ -514,7 +514,7 @@ $hover-select-border: 4px;
.mx_EventTile:hover .mx_EventTile_body pre,
.mx_EventTile.focus-visible:focus-within .mx_EventTile_body pre {
- border: 1px solid #e5e5e5; // deliberate constant as we're behind an invert filter
+ border: 1px solid $tertiary-content;
}
.mx_EventTile_pre_container {
diff --git a/src/CallHandler.tsx b/src/CallHandler.tsx
index e11e828864..8fd45c49ae 100644
--- a/src/CallHandler.tsx
+++ b/src/CallHandler.tsx
@@ -250,7 +250,15 @@ export default class CallHandler extends EventEmitter {
* @returns {boolean}
*/
private areAnyCallsUnsilenced(): boolean {
- return this.calls.size > this.silencedCalls.size;
+ for (const call of this.calls.values()) {
+ if (
+ call.state === CallState.Ringing &&
+ !this.isCallSilenced(call.callId)
+ ) {
+ return true;
+ }
+ }
+ return false;
}
private async checkProtocols(maxTries) {
@@ -878,6 +886,8 @@ export default class CallHandler extends EventEmitter {
break;
case 'hangup':
case 'reject':
+ this.stopRingingIfPossible(this.calls.get(payload.room_id).callId);
+
if (!this.calls.get(payload.room_id)) {
return; // no call to hangup
}
@@ -890,11 +900,15 @@ export default class CallHandler extends EventEmitter {
// the hangup event away)
break;
case 'hangup_all':
+ this.stopRingingIfPossible(this.calls.get(payload.room_id).callId);
+
for (const call of this.calls.values()) {
call.hangup(CallErrorCode.UserHangup, false);
}
break;
case 'answer': {
+ this.stopRingingIfPossible(this.calls.get(payload.room_id).callId);
+
if (!this.calls.has(payload.room_id)) {
return; // no call to answer
}
@@ -929,6 +943,12 @@ export default class CallHandler extends EventEmitter {
}
};
+ private stopRingingIfPossible(callId: string): void {
+ this.silencedCalls.delete(callId);
+ if (this.areAnyCallsUnsilenced()) return;
+ this.pause(AudioID.Ring);
+ }
+
private async dialNumber(number: string) {
const results = await this.pstnLookup(number);
if (!results || results.length === 0 || !results[0].userid) {
diff --git a/src/components/structures/LeftPanelWidget.tsx b/src/components/structures/LeftPanelWidget.tsx
index 144c0e3051..331e428355 100644
--- a/src/components/structures/LeftPanelWidget.tsx
+++ b/src/components/structures/LeftPanelWidget.tsx
@@ -115,7 +115,7 @@ const LeftPanelWidget: React.FC = () => {
aria-expanded={expanded}
aria-level={1}
onClick={() => {
- setExpanded(e => !e);
+ setExpanded(!expanded);
}}
>
;
widget: Widget;
@@ -97,10 +89,7 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent<
};
private closeAndTryRemember(approved: Capability[]) {
- if (this.state.rememberSelection) {
- setRememberedCapabilitiesForWidget(this.props.widget, approved);
- }
- this.props.onFinished({ approved });
+ this.props.onFinished({ approved, remember: this.state.rememberSelection });
}
public render() {
diff --git a/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx
index d9e97d570b..081b1a8698 100644
--- a/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx
+++ b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx
@@ -149,10 +149,12 @@ export default class SecurityRoomSettingsTab extends React.Component