mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Signal styleset changes at a better time
We should signal when a net controller is added and our event should be manual, not automatic.
This commit is contained in:
		
							parent
							
								
									376f1a4432
								
							
						
					
					
						commit
						77fbf29047
					
				@ -165,13 +165,14 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
 | 
			
		||||
    controller.battery_level[0] = BATTERY_FULL;
 | 
			
		||||
    controller.battery_level[1] = BATTERY_FULL;
 | 
			
		||||
    controller.battery_level[2] = BATTERY_FULL;
 | 
			
		||||
    styleset_changed_events[controller_idx].writable->Signal();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Controller_NPad::OnInit() {
 | 
			
		||||
    auto& kernel = system.Kernel();
 | 
			
		||||
    for (std::size_t i = 0; i < styleset_changed_events.size(); i++) {
 | 
			
		||||
        styleset_changed_events[i] = Kernel::WritableEvent::CreateEventPair(
 | 
			
		||||
            kernel, Kernel::ResetType::Automatic, fmt::format("npad:NpadStyleSetChanged_{}", i));
 | 
			
		||||
            kernel, Kernel::ResetType::Manual, fmt::format("npad:NpadStyleSetChanged_{}", i));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!IsControllerActivated()) {
 | 
			
		||||
@ -433,7 +434,6 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) {
 | 
			
		||||
    supported_npad_id_types.clear();
 | 
			
		||||
    supported_npad_id_types.resize(length / sizeof(u32));
 | 
			
		||||
    std::memcpy(supported_npad_id_types.data(), data, length);
 | 
			
		||||
    bool had_controller_update = false;
 | 
			
		||||
    for (std::size_t i = 0; i < connected_controllers.size(); i++) {
 | 
			
		||||
        auto& controller = connected_controllers[i];
 | 
			
		||||
        if (!controller.is_connected) {
 | 
			
		||||
@ -452,10 +452,6 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) {
 | 
			
		||||
                controller.type = requested_controller;
 | 
			
		||||
                InitNewlyAddedControler(i);
 | 
			
		||||
            }
 | 
			
		||||
            had_controller_update = true;
 | 
			
		||||
        }
 | 
			
		||||
        if (had_controller_update) {
 | 
			
		||||
            styleset_changed_events[i].writable->Signal();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -481,7 +477,6 @@ void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode)
 | 
			
		||||
    const std::size_t npad_index = NPadIdToIndex(npad_id);
 | 
			
		||||
    ASSERT(npad_index < shared_memory_entries.size());
 | 
			
		||||
    if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) {
 | 
			
		||||
        styleset_changed_events[npad_index].writable->Signal();
 | 
			
		||||
        shared_memory_entries[npad_index].pad_assignment = assignment_mode;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -507,7 +502,6 @@ Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEven
 | 
			
		||||
    // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should
 | 
			
		||||
    // be signalled at least once, and signaled after a new controller is connected?
 | 
			
		||||
    const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)];
 | 
			
		||||
    styleset_event.writable->Signal();
 | 
			
		||||
    return styleset_event.readable;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user