diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js
index 227dd318ed..2de9918e6e 100644
--- a/src/components/views/rooms/RoomList.js
+++ b/src/components/views/rooms/RoomList.js
@@ -212,7 +212,7 @@ module.exports = React.createClass({
this._checkSubListsOverflow();
this.resizer.attach();
- window.addEventListener("resize", this.onWindowResize);
+ this.props.resizeNotifier.on("leftPanelResized", this.onResize);
this.mounted = true;
},
@@ -260,7 +260,6 @@ module.exports = React.createClass({
componentWillUnmount: function() {
this.mounted = false;
- window.removeEventListener("resize", this.onWindowResize);
dis.unregister(this.dispatcherRef);
if (MatrixClientPeg.get()) {
MatrixClientPeg.get().removeListener("Room", this.onRoom);
@@ -272,6 +271,8 @@ module.exports = React.createClass({
MatrixClientPeg.get().removeListener("Group.myMembership", this._onGroupMyMembership);
MatrixClientPeg.get().removeListener("RoomState.events", this.onRoomStateEvents);
}
+ this.props.resizeNotifier.removeListener("leftPanelResized", this.onResize);
+
if (this._tagStoreToken) {
this._tagStoreToken.remove();
@@ -293,13 +294,14 @@ module.exports = React.createClass({
this._delayedRefreshRoomList.cancelPendingCall();
},
- onWindowResize: function() {
+
+ onResize: function() {
if (this.mounted && this._layout && this.resizeContainer &&
Array.isArray(this._layoutSections)
) {
this._layout.update(
this._layoutSections,
- this.resizeContainer.offsetHeight
+ this.resizeContainer.offsetHeight,
);
}
},
diff --git a/src/utils/ResizeNotifier.js b/src/utils/ResizeNotifier.js
index 43578ebcaa..ff4b79091b 100644
--- a/src/utils/ResizeNotifier.js
+++ b/src/utils/ResizeNotifier.js
@@ -31,11 +31,13 @@ export default class ResizeNotifier extends EventEmitter {
}
notifyBannersChanged() {
+ this.emit("leftPanelResized");
this.emit("middlePanelResized");
}
// can be called in quick succession
notifyLeftHandleResized() {
+ // don't emit event for own region
this._throttledMiddlePanel();
}
@@ -46,6 +48,12 @@ export default class ResizeNotifier extends EventEmitter {
// can be called in quick succession
notifyWindowResized() {
+ // no need to throttle this one,
+ // also it could make scrollbars appear for
+ // a split second when the room list manual layout is now
+ // taller than the available space
+ this.emit("leftPanelResized");
+
this._throttledMiddlePanel();
}
}