mirror of
				https://github.com/vector-im/element-web.git
				synced 2025-11-04 10:11:03 +01:00 
			
		
		
		
	Merge pull request #3634 from matrix-org/dbkr/theme_use_watcher
Use a settings watcher to set the theme
This commit is contained in:
		
						commit
						d3730175a2
					
				@ -274,6 +274,7 @@ export default createReactClass({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    componentDidMount: function() {
 | 
					    componentDidMount: function() {
 | 
				
			||||||
        this.dispatcherRef = dis.register(this.onAction);
 | 
					        this.dispatcherRef = dis.register(this.onAction);
 | 
				
			||||||
 | 
					        this._themeWatchRef = SettingsStore.watchSetting("theme", null, this._onThemeChanged);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.focusComposer = false;
 | 
					        this.focusComposer = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -360,6 +361,7 @@ export default createReactClass({
 | 
				
			|||||||
    componentWillUnmount: function() {
 | 
					    componentWillUnmount: function() {
 | 
				
			||||||
        Lifecycle.stopMatrixClient();
 | 
					        Lifecycle.stopMatrixClient();
 | 
				
			||||||
        dis.unregister(this.dispatcherRef);
 | 
					        dis.unregister(this.dispatcherRef);
 | 
				
			||||||
 | 
					        SettingsStore.unwatchSetting(this._themeWatchRef);
 | 
				
			||||||
        window.removeEventListener("focus", this.onFocus);
 | 
					        window.removeEventListener("focus", this.onFocus);
 | 
				
			||||||
        window.removeEventListener('resize', this.handleResize);
 | 
					        window.removeEventListener('resize', this.handleResize);
 | 
				
			||||||
        this.state.resizeNotifier.removeListener("middlePanelResized", this._dispatchTimelineResize);
 | 
					        this.state.resizeNotifier.removeListener("middlePanelResized", this._dispatchTimelineResize);
 | 
				
			||||||
@ -382,6 +384,13 @@ export default createReactClass({
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _onThemeChanged: function(settingName, roomId, atLevel, newValue) {
 | 
				
			||||||
 | 
					        dis.dispatch({
 | 
				
			||||||
 | 
					            action: 'set_theme',
 | 
				
			||||||
 | 
					            value: newValue,
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    startPageChangeTimer() {
 | 
					    startPageChangeTimer() {
 | 
				
			||||||
        // Tor doesn't support performance
 | 
					        // Tor doesn't support performance
 | 
				
			||||||
        if (!performance || !performance.mark) return null;
 | 
					        if (!performance || !performance.mark) return null;
 | 
				
			||||||
@ -1376,17 +1385,6 @@ export default createReactClass({
 | 
				
			|||||||
            }, null, true);
 | 
					            }, null, true);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cli.on("accountData", function(ev) {
 | 
					 | 
				
			||||||
            if (ev.getType() === 'im.vector.web.settings') {
 | 
					 | 
				
			||||||
                if (ev.getContent() && ev.getContent().theme) {
 | 
					 | 
				
			||||||
                    dis.dispatch({
 | 
					 | 
				
			||||||
                        action: 'set_theme',
 | 
					 | 
				
			||||||
                        value: ev.getContent().theme,
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const dft = new DecryptionFailureTracker((total, errorCode) => {
 | 
					        const dft = new DecryptionFailureTracker((total, errorCode) => {
 | 
				
			||||||
            Analytics.trackEvent('E2E', 'Decryption failure', errorCode, total);
 | 
					            Analytics.trackEvent('E2E', 'Decryption failure', errorCode, total);
 | 
				
			||||||
        }, (errorCode) => {
 | 
					        }, (errorCode) => {
 | 
				
			||||||
 | 
				
			|||||||
@ -173,8 +173,17 @@ export default class GeneralUserSettingsTab extends React.Component {
 | 
				
			|||||||
        const newTheme = e.target.value;
 | 
					        const newTheme = e.target.value;
 | 
				
			||||||
        if (this.state.theme === newTheme) return;
 | 
					        if (this.state.theme === newTheme) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        SettingsStore.setValue("theme", null, SettingLevel.ACCOUNT, newTheme);
 | 
					        // doing getValue in the .catch will still return the value we failed to set,
 | 
				
			||||||
 | 
					        // so remember what the value was before we tried to set it so we can revert
 | 
				
			||||||
 | 
					        const oldTheme = SettingsStore.getValue('theme');
 | 
				
			||||||
 | 
					        SettingsStore.setValue("theme", null, SettingLevel.ACCOUNT, newTheme).catch(() => {
 | 
				
			||||||
 | 
					            dis.dispatch({action: 'set_theme', value: oldTheme});
 | 
				
			||||||
 | 
					            this.setState({theme: oldTheme});
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
        this.setState({theme: newTheme});
 | 
					        this.setState({theme: newTheme});
 | 
				
			||||||
 | 
					        // The settings watcher doesn't fire until the echo comes back from the
 | 
				
			||||||
 | 
					        // server, so to make the theme change immediately we need to manually
 | 
				
			||||||
 | 
					        // do the dispatch now
 | 
				
			||||||
        dis.dispatch({action: 'set_theme', value: newTheme});
 | 
					        dis.dispatch({action: 'set_theme', value: newTheme});
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user