diff --git a/src/Notifier.js b/src/Notifier.js
index 80e8be1084..ab8009c457 100644
--- a/src/Notifier.js
+++ b/src/Notifier.js
@@ -220,7 +220,17 @@ const Notifier = {
}
},
- isToolbarHidden: function() {
+ shouldShowToolbar: function() {
+ const client = MatrixClientPeg.get();
+ if (!client) {
+ return false;
+ }
+ const isGuest = client.isGuest();
+ return !isGuest && Notifier.supportsDesktopNotifications() &&
+ !Notifier.isEnabled() && !Notifier._isToolbarHidden();
+ },
+
+ _isToolbarHidden: function() {
// Check localStorage for any such meta data
if (global.localStorage) {
return global.localStorage.getItem("notifications_hidden") === "true";
diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js
index 5267dba715..c22c217e5f 100644
--- a/src/components/structures/LoggedInView.js
+++ b/src/components/structures/LoggedInView.js
@@ -22,7 +22,6 @@ import PropTypes from 'prop-types';
import { DragDropContext } from 'react-beautiful-dnd';
import { KeyCode, isOnlyCtrlOrCmdKeyEvent } from '../../Keyboard';
-import Notifier from '../../Notifier';
import PageTypes from '../../PageTypes';
import CallMediaHandler from '../../CallMediaHandler';
import sdk from '../../index';
@@ -121,6 +120,18 @@ const LoggedInView = React.createClass({
this._matrixClient.on("RoomState.events", this.onRoomStateEvents);
},
+ componentDidUpdate(prevProps) {
+ // attempt to guess when a banner was opened or closed
+ if (
+ (prevProps.showCookieBar !== this.props.showCookieBar) ||
+ (prevProps.hasNewVersion !== this.props.hasNewVersion) ||
+ (prevProps.userHasGeneratedPassword !== this.props.userHasGeneratedPassword) ||
+ (prevProps.showNotifierToolbar !== this.props.showNotifierToolbar)
+ ) {
+ this.props.resizeNotifier.notifyBannersChanged();
+ }
+ },
+
componentWillUnmount: function() {
document.removeEventListener('keydown', this._onKeyDown);
this._matrixClient.removeListener("accountData", this.onAccountData);
@@ -491,7 +502,6 @@ const LoggedInView = React.createClass({
});
let topBar;
- const isGuest = this.props.matrixClient.isGuest();
if (this.state.syncErrorData && this.state.syncErrorData.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED') {
topBar = ;
} else if (this.state.userHasGeneratedPassword) {
topBar = ;
- } else if (
- !isGuest && Notifier.supportsDesktopNotifications() &&
- !Notifier.isEnabled() && !Notifier.isToolbarHidden()
- ) {
+ } else if (this.props.showNotifierToolbar) {
topBar = ;
}
diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js
index 6e05138e2d..a7192b96cb 100644
--- a/src/components/structures/MatrixChat.js
+++ b/src/components/structures/MatrixChat.js
@@ -29,6 +29,7 @@ import PlatformPeg from "../../PlatformPeg";
import SdkConfig from "../../SdkConfig";
import * as RoomListSorter from "../../RoomListSorter";
import dis from "../../dispatcher";
+import Notifier from '../../Notifier';
import Modal from "../../Modal";
import Tinter from "../../Tinter";
@@ -196,6 +197,7 @@ export default React.createClass({
syncError: null, // If the current syncing status is ERROR, the error object, otherwise null.
resizeNotifier: new ResizeNotifier(),
+ showNotifierToolbar: Notifier.shouldShowToolbar(),
};
return s;
},
@@ -644,8 +646,9 @@ export default React.createClass({
case 'view_invite':
showRoomInviteDialog(payload.roomId);
break;
- case 'notifier_enabled':
- this.forceUpdate();
+ case 'notifier_enabled': {
+ this.setState({showNotifierToolbar: Notifier.shouldShowToolbar()});
+ }
break;
case 'hide_left_panel':
this.setState({
@@ -1180,6 +1183,7 @@ export default React.createClass({
*/
_onLoggedIn: async function() {
this.setStateForNewView({view: VIEWS.LOGGED_IN});
+ this.setState({showNotifierToolbar: Notifier.shouldShowToolbar()});
if (this._is_registered) {
this._is_registered = false;
@@ -1672,7 +1676,10 @@ export default React.createClass({
},
_dispatchTimelineResize() {
- dis.dispatch({ action: 'timeline_resize' }, true);
+ // prevent dispatch from within dispatch error
+ setTimeout(() => {
+ dis.dispatch({ action: 'timeline_resize' }, true);
+ }, 0);
},
onRoomCreated: function(roomId) {