56 lines
		
	
	
	
		
			987 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			987 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| This file is part of Telegram Desktop,
 | |
| the official desktop application for the Telegram messaging service.
 | |
| 
 | |
| For license and copyright information please follow this link:
 | |
| https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | |
| */
 | |
| #include "ui/power_saving.h"
 | |
| 
 | |
| namespace PowerSaving {
 | |
| namespace {
 | |
| 
 | |
| Flags Data/* = {}*/;
 | |
| rpl::event_stream<> Events;
 | |
| bool AllForced/* = false*/;
 | |
| 
 | |
| } // namespace
 | |
| 
 | |
| void Set(Flags flags) {
 | |
| 	if (const auto diff = Data ^ flags) {
 | |
| 		Data = flags;
 | |
| 		if (!AllForced) {
 | |
| 			if (diff & kAnimations) {
 | |
| 				anim::SetDisabled(On(kAnimations));
 | |
| 			}
 | |
| 			Events.fire({});
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| Flags Current() {
 | |
| 	return Data;
 | |
| }
 | |
| 
 | |
| void SetForceAll(bool force) {
 | |
| 	if (AllForced == force) {
 | |
| 		return;
 | |
| 	}
 | |
| 	AllForced = force;
 | |
| 	if (const auto diff = Data ^ kAll) {
 | |
| 		if (diff & kAnimations) {
 | |
| 			anim::SetDisabled(On(kAnimations));
 | |
| 		}
 | |
| 		Events.fire({});
 | |
| 	}
 | |
| }
 | |
| 
 | |
| bool ForceAll() {
 | |
| 	return AllForced;
 | |
| }
 | |
| 
 | |
| rpl::producer<> Changes() {
 | |
| 	return Events.events();
 | |
| }
 | |
| 
 | |
| } // namespace PowerSaving
 | 
