From d47dbf4f327f025e60194eeb30b394c59a71fd26 Mon Sep 17 00:00:00 2001
From: darkf <lw9k123@gmail.com>
Date: Sun, 27 Apr 2014 05:33:31 -0700
Subject: [PATCH] pad: Send all button states so release events fire

---
 rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp
index f0dbd7792e..5e82b75a60 100644
--- a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp
+++ b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp
@@ -79,25 +79,25 @@ int cellPadGetData(u32 port_no, u32 data_addr)
 	if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED;
 	if(port_no >= pads.size()) return CELL_PAD_ERROR_INVALID_PARAMETER;
 
-	const Pad& pad = pads[port_no];
+	Pad& pad = pads[port_no];
 	CellPadData data;
 	memset(&data, 0, sizeof(CellPadData));
 
 	u16 d1 = 0;
 	u16 d2 = 0;
 
-	pads[port_no].m_port_status &= ~CELL_PAD_STATUS_ASSIGN_CHANGES;
+	pad.m_port_status &= ~CELL_PAD_STATUS_ASSIGN_CHANGES;
 
-	s32 len = 0;
-	for(Button& button : pads[port_no].m_buttons)
+	for(Button& button : pad.m_buttons)
 	{
-		if(!button.m_pressed)
-			continue;
-
 		switch(button.m_offset)
 		{
-		case CELL_PAD_BTN_OFFSET_DIGITAL1: if(!(d1 & button.m_outKeyCode)){d1 |= button.m_outKeyCode; len++;} break;
-		case CELL_PAD_BTN_OFFSET_DIGITAL2: if(!(d2 & button.m_outKeyCode)){d2 |= button.m_outKeyCode; len++;} break;
+		case CELL_PAD_BTN_OFFSET_DIGITAL1:
+			if (button.m_pressed) d1 |= button.m_outKeyCode;
+			break;
+		case CELL_PAD_BTN_OFFSET_DIGITAL2:
+			if (button.m_pressed) d2 |= button.m_outKeyCode;
+			break;
 		}
 
 		if(button.m_flush)
@@ -129,7 +129,7 @@ int cellPadGetData(u32 port_no, u32 data_addr)
 			*res = 0;
 	}
 
-	data.len = len;
+	data.len = pad.m_buttons.size();
 	data.button[CELL_PAD_BTN_OFFSET_DIGITAL1]       = d1;
 	data.button[CELL_PAD_BTN_OFFSET_DIGITAL2]       = d2;
 	data.button[CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X] = rx;