summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt5
-rw-r--r--src/core/hle/ipc.h4
-rw-r--r--src/core/hle/ipc_helpers.h4
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp34
-rw-r--r--src/core/hle/kernel/hle_ipc.h6
-rw-r--r--src/core/hle/service/am/applet_oe.cpp86
-rw-r--r--src/core/hle/service/lm/lm.cpp7
-rw-r--r--src/core/hle/service/service.cpp2
-rw-r--r--src/core/hle/service/sockets/bsd_u.cpp67
-rw-r--r--src/core/hle/service/sockets/bsd_u.h29
-rw-r--r--src/core/hle/service/sockets/sfdnsres.h22
-rw-r--r--src/core/hle/service/sockets/sockets.cpp18
-rw-r--r--src/core/hle/service/sockets/sockets.h16
-rw-r--r--src/yuzu/bootmanager.cpp4
-rw-r--r--src/yuzu/configuration/configure.ui2
-rw-r--r--src/yuzu/configuration/configure_input.ui132
-rw-r--r--src/yuzu/debugger/profiler.cpp5
-rw-r--r--src/yuzu/game_list.cpp5
-rw-r--r--src/yuzu/main.cpp46
-rw-r--r--src/yuzu/util/spinbox.cpp2
20 files changed, 391 insertions, 105 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 98fd2a4cc..57f578bae 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -128,6 +128,11 @@ add_library(core STATIC
128 hle/service/sm/controller.h 128 hle/service/sm/controller.h
129 hle/service/sm/sm.cpp 129 hle/service/sm/sm.cpp
130 hle/service/sm/sm.h 130 hle/service/sm/sm.h
131 hle/service/sockets/bsd_u.cpp
132 hle/service/sockets/bsd_u.h
133 hle/service/sockets/sfdnsres.h
134 hle/service/sockets/sockets.cpp
135 hle/service/sockets/sockets.h
131 hle/service/time/time.cpp 136 hle/service/time/time.cpp
132 hle/service/time/time.h 137 hle/service/time/time.h
133 hle/service/time/time_s.cpp 138 hle/service/time/time_s.cpp
diff --git a/src/core/hle/ipc.h b/src/core/hle/ipc.h
index 1840fac12..0dcaede67 100644
--- a/src/core/hle/ipc.h
+++ b/src/core/hle/ipc.h
@@ -133,6 +133,10 @@ struct BufferDescriptorC {
133 address |= static_cast<VAddr>(address_bits_32_47) << 32; 133 address |= static_cast<VAddr>(address_bits_32_47) << 32;
134 return address; 134 return address;
135 } 135 }
136
137 u64 Size() const {
138 return static_cast<u64>(size);
139 }
136}; 140};
137static_assert(sizeof(BufferDescriptorC) == 8, "BufferDescriptorC size is incorrect"); 141static_assert(sizeof(BufferDescriptorC) == 8, "BufferDescriptorC size is incorrect");
138 142
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h
index 25530a3c8..4c9b0de28 100644
--- a/src/core/hle/ipc_helpers.h
+++ b/src/core/hle/ipc_helpers.h
@@ -54,6 +54,10 @@ public:
54 unsigned GetCurrentOffset() const { 54 unsigned GetCurrentOffset() const {
55 return static_cast<unsigned>(index); 55 return static_cast<unsigned>(index);
56 } 56 }
57
58 void SetCurrentOffset(unsigned offset) {
59 index = static_cast<ptrdiff_t>(offset);
60 }
57}; 61};
58 62
59class RequestBuilder : public RequestHelperBase { 63class RequestBuilder : public RequestHelperBase {
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index ac62a0d5a..73bb6a8be 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -81,13 +81,8 @@ void HLERequestContext::ParseCommandBuffer(u32_le* src_cmdbuf, bool incoming) {
81 for (unsigned i = 0; i < command_header->num_buf_w_descriptors; ++i) { 81 for (unsigned i = 0; i < command_header->num_buf_w_descriptors; ++i) {
82 buffer_w_desciptors.push_back(rp.PopRaw<IPC::BufferDescriptorABW>()); 82 buffer_w_desciptors.push_back(rp.PopRaw<IPC::BufferDescriptorABW>());
83 } 83 }
84 if (command_header->buf_c_descriptor_flags != 84
85 IPC::CommandHeader::BufferDescriptorCFlag::Disabled) { 85 buffer_c_offset = rp.GetCurrentOffset() + command_header->data_size;
86 if (command_header->buf_c_descriptor_flags !=
87 IPC::CommandHeader::BufferDescriptorCFlag::OneDescriptor) {
88 UNIMPLEMENTED();
89 }
90 }
91 86
92 // Padding to align to 16 bytes 87 // Padding to align to 16 bytes
93 rp.AlignWithPadding(); 88 rp.AlignWithPadding();
@@ -117,6 +112,31 @@ void HLERequestContext::ParseCommandBuffer(u32_le* src_cmdbuf, bool incoming) {
117 ASSERT(data_payload_header->magic == Common::MakeMagic('S', 'F', 'C', 'O')); 112 ASSERT(data_payload_header->magic == Common::MakeMagic('S', 'F', 'C', 'O'));
118 } 113 }
119 114
115 rp.SetCurrentOffset(buffer_c_offset);
116
117 // For Inline buffers, the response data is written directly to buffer_c_offset
118 // and in this case we don't have any BufferDescriptorC on the request.
119 if (command_header->buf_c_descriptor_flags >
120 IPC::CommandHeader::BufferDescriptorCFlag::InlineDescriptor) {
121 if (command_header->buf_c_descriptor_flags ==
122 IPC::CommandHeader::BufferDescriptorCFlag::OneDescriptor) {
123 buffer_c_desciptors.push_back(rp.PopRaw<IPC::BufferDescriptorC>());
124 } else {
125 unsigned num_buf_c_descriptors =
126 static_cast<unsigned>(command_header->buf_c_descriptor_flags.Value()) - 2;
127
128 // This is used to detect possible underflows, in case something is broken
129 // with the two ifs above and the flags value is == 0 || == 1.
130 ASSERT(num_buf_c_descriptors < 14);
131
132 for (unsigned i = 0; i < num_buf_c_descriptors; ++i) {
133 buffer_c_desciptors.push_back(rp.PopRaw<IPC::BufferDescriptorC>());
134 }
135 }
136 }
137
138 rp.SetCurrentOffset(data_payload_offset);
139
120 command = rp.Pop<u32_le>(); 140 command = rp.Pop<u32_le>();
121 rp.Skip(1, false); // The command is actually an u64, but we don't use the high part. 141 rp.Skip(1, false); // The command is actually an u64, but we don't use the high part.
122} 142}
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h
index 6dceb766d..80fa48d7f 100644
--- a/src/core/hle/kernel/hle_ipc.h
+++ b/src/core/hle/kernel/hle_ipc.h
@@ -143,6 +143,10 @@ public:
143 return buffer_b_desciptors; 143 return buffer_b_desciptors;
144 } 144 }
145 145
146 const std::vector<IPC::BufferDescriptorC>& BufferDescriptorC() const {
147 return buffer_c_desciptors;
148 }
149
146 const std::unique_ptr<IPC::DomainMessageHeader>& GetDomainMessageHeader() const { 150 const std::unique_ptr<IPC::DomainMessageHeader>& GetDomainMessageHeader() const {
147 return domain_message_header; 151 return domain_message_header;
148 } 152 }
@@ -200,8 +204,10 @@ private:
200 std::vector<IPC::BufferDescriptorABW> buffer_a_desciptors; 204 std::vector<IPC::BufferDescriptorABW> buffer_a_desciptors;
201 std::vector<IPC::BufferDescriptorABW> buffer_b_desciptors; 205 std::vector<IPC::BufferDescriptorABW> buffer_b_desciptors;
202 std::vector<IPC::BufferDescriptorABW> buffer_w_desciptors; 206 std::vector<IPC::BufferDescriptorABW> buffer_w_desciptors;
207 std::vector<IPC::BufferDescriptorC> buffer_c_desciptors;
203 208
204 unsigned data_payload_offset{}; 209 unsigned data_payload_offset{};
210 unsigned buffer_c_offset{};
205 u32_le command{}; 211 u32_le command{};
206}; 212};
207 213
diff --git a/src/core/hle/service/am/applet_oe.cpp b/src/core/hle/service/am/applet_oe.cpp
index b360e7e5f..0d7f9c03d 100644
--- a/src/core/hle/service/am/applet_oe.cpp
+++ b/src/core/hle/service/am/applet_oe.cpp
@@ -201,10 +201,76 @@ private:
201 Kernel::SharedPtr<Kernel::Event> event; 201 Kernel::SharedPtr<Kernel::Event> event;
202}; 202};
203 203
204class IStorageAccessor final : public ServiceFramework<IStorageAccessor> {
205public:
206 explicit IStorageAccessor(std::vector<u8> buffer)
207 : ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) {
208 static const FunctionInfo functions[] = {
209 {0, &IStorageAccessor::GetSize, "GetSize"},
210 {11, &IStorageAccessor::Read, "Read"},
211 };
212 RegisterHandlers(functions);
213 }
214
215private:
216 std::vector<u8> buffer;
217
218 void GetSize(Kernel::HLERequestContext& ctx) {
219 IPC::RequestBuilder rb{ctx, 4};
220
221 rb.Push(RESULT_SUCCESS);
222 rb.Push(static_cast<u64>(buffer.size()));
223
224 LOG_DEBUG(Service, "called");
225 }
226
227 void Read(Kernel::HLERequestContext& ctx) {
228 IPC::RequestParser rp{ctx};
229
230 u64 offset = rp.Pop<u64>();
231
232 const auto& output_buffer = ctx.BufferDescriptorC()[0];
233
234 ASSERT(offset + output_buffer.Size() <= buffer.size());
235
236 Memory::WriteBlock(output_buffer.Address(), buffer.data() + offset, output_buffer.Size());
237
238 IPC::RequestBuilder rb{ctx, 2};
239
240 rb.Push(RESULT_SUCCESS);
241
242 LOG_DEBUG(Service, "called");
243 }
244};
245
246class IStorage final : public ServiceFramework<IStorage> {
247public:
248 explicit IStorage(std::vector<u8> buffer)
249 : ServiceFramework("IStorage"), buffer(std::move(buffer)) {
250 static const FunctionInfo functions[] = {
251 {0, &IStorage::Open, "Open"},
252 };
253 RegisterHandlers(functions);
254 }
255
256private:
257 std::vector<u8> buffer;
258
259 void Open(Kernel::HLERequestContext& ctx) {
260 IPC::RequestBuilder rb{ctx, 2, 0, 0, 1};
261
262 rb.Push(RESULT_SUCCESS);
263 rb.PushIpcInterface<AM::IStorageAccessor>(buffer);
264
265 LOG_DEBUG(Service, "called");
266 }
267};
268
204class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> { 269class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> {
205public: 270public:
206 IApplicationFunctions() : ServiceFramework("IApplicationFunctions") { 271 IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
207 static const FunctionInfo functions[] = { 272 static const FunctionInfo functions[] = {
273 {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},
208 {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"}, 274 {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"},
209 {66, &IApplicationFunctions::InitializeGamePlayRecording, 275 {66, &IApplicationFunctions::InitializeGamePlayRecording,
210 "InitializeGamePlayRecording"}, 276 "InitializeGamePlayRecording"},
@@ -215,6 +281,26 @@ public:
215 } 281 }
216 282
217private: 283private:
284 void PopLaunchParameter(Kernel::HLERequestContext& ctx) {
285 constexpr u8 data[0x88] = {
286 0xca, 0x97, 0x94, 0xc7, // Magic
287 1, 0, 0, 0, // IsAccountSelected (bool)
288 1, 0, 0, 0, // User Id (word 0)
289 0, 0, 0, 0, // User Id (word 1)
290 0, 0, 0, 0, // User Id (word 2)
291 0, 0, 0, 0 // User Id (word 3)
292 };
293
294 std::vector<u8> buffer(data, data + sizeof(data));
295
296 IPC::RequestBuilder rb{ctx, 2, 0, 0, 1};
297
298 rb.Push(RESULT_SUCCESS);
299 rb.PushIpcInterface<AM::IStorage>(buffer);
300
301 LOG_DEBUG(Service, "called");
302 }
303
218 void SetTerminateResult(Kernel::HLERequestContext& ctx) { 304 void SetTerminateResult(Kernel::HLERequestContext& ctx) {
219 // Takes an input u32 Result, no output. 305 // Takes an input u32 Result, no output.
220 // For example, in some cases official apps use this with error 0x2A2 then uses svcBreak. 306 // For example, in some cases official apps use this with error 0x2A2 then uses svcBreak.
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp
index 2d0d2fb65..13c9ee3d3 100644
--- a/src/core/hle/service/lm/lm.cpp
+++ b/src/core/hle/service/lm/lm.cpp
@@ -47,6 +47,7 @@ private:
47 47
48 /// Log field type 48 /// Log field type
49 enum class Field : u8 { 49 enum class Field : u8 {
50 Skip = 1,
50 Message = 2, 51 Message = 2,
51 Line = 3, 52 Line = 3,
52 Filename = 4, 53 Filename = 4,
@@ -85,6 +86,11 @@ private:
85 while (addr < end_addr) { 86 while (addr < end_addr) {
86 const Field field{static_cast<Field>(Memory::Read8(addr++))}; 87 const Field field{static_cast<Field>(Memory::Read8(addr++))};
87 size_t length{Memory::Read8(addr++)}; 88 size_t length{Memory::Read8(addr++)};
89
90 if (static_cast<Field>(Memory::Read8(addr)) == Field::Skip) {
91 ++addr;
92 }
93
88 switch (field) { 94 switch (field) {
89 case Field::Message: 95 case Field::Message:
90 message = Memory::ReadCString(addr, length); 96 message = Memory::ReadCString(addr, length);
@@ -99,6 +105,7 @@ private:
99 function = Memory::ReadCString(addr, length); 105 function = Memory::ReadCString(addr, length);
100 break; 106 break;
101 } 107 }
108
102 addr += length; 109 addr += length;
103 } 110 }
104 111
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index fe76b381c..9a49d9e9c 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -26,6 +26,7 @@
26#include "core/hle/service/service.h" 26#include "core/hle/service/service.h"
27#include "core/hle/service/sm/controller.h" 27#include "core/hle/service/sm/controller.h"
28#include "core/hle/service/sm/sm.h" 28#include "core/hle/service/sm/sm.h"
29#include "core/hle/service/sockets/sockets.h"
29#include "core/hle/service/time/time.h" 30#include "core/hle/service/time/time.h"
30#include "core/hle/service/vi/vi.h" 31#include "core/hle/service/vi/vi.h"
31 32
@@ -174,6 +175,7 @@ void Init() {
174 LM::InstallInterfaces(*SM::g_service_manager); 175 LM::InstallInterfaces(*SM::g_service_manager);
175 Nvidia::InstallInterfaces(*SM::g_service_manager); 176 Nvidia::InstallInterfaces(*SM::g_service_manager);
176 PCTL::InstallInterfaces(*SM::g_service_manager); 177 PCTL::InstallInterfaces(*SM::g_service_manager);
178 Sockets::InstallInterfaces(*SM::g_service_manager);
177 Time::InstallInterfaces(*SM::g_service_manager); 179 Time::InstallInterfaces(*SM::g_service_manager);
178 VI::InstallInterfaces(*SM::g_service_manager); 180 VI::InstallInterfaces(*SM::g_service_manager);
179 181
diff --git a/src/core/hle/service/sockets/bsd_u.cpp b/src/core/hle/service/sockets/bsd_u.cpp
new file mode 100644
index 000000000..a819acc96
--- /dev/null
+++ b/src/core/hle/service/sockets/bsd_u.cpp
@@ -0,0 +1,67 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/ipc_helpers.h"
6#include "core/hle/service/sockets/bsd_u.h"
7
8namespace Service {
9namespace Sockets {
10
11void BSD_U::RegisterClient(Kernel::HLERequestContext& ctx) {
12 LOG_WARNING(Service, "(STUBBED) called");
13
14 IPC::RequestBuilder rb{ctx, 3};
15
16 rb.Push(RESULT_SUCCESS);
17 rb.Push<u32>(0); // bsd errno
18}
19
20void BSD_U::Socket(Kernel::HLERequestContext& ctx) {
21 IPC::RequestParser rp{ctx};
22
23 u32 domain = rp.Pop<u32>();
24 u32 type = rp.Pop<u32>();
25 u32 protocol = rp.Pop<u32>();
26
27 LOG_WARNING(Service, "(STUBBED) called domain=%u type=%u protocol=%u", domain, type, protocol);
28
29 u32 fd = next_fd++;
30
31 IPC::RequestBuilder rb{ctx, 4};
32
33 rb.Push(RESULT_SUCCESS);
34 rb.Push<u32>(fd);
35 rb.Push<u32>(0); // bsd errno
36}
37
38void BSD_U::Connect(Kernel::HLERequestContext& ctx) {
39 LOG_WARNING(Service, "(STUBBED) called");
40
41 IPC::RequestBuilder rb{ctx, 4};
42
43 rb.Push(RESULT_SUCCESS);
44 rb.Push<u32>(0); // ret
45 rb.Push<u32>(0); // bsd errno
46}
47
48void BSD_U::SendTo(Kernel::HLERequestContext& ctx) {
49 LOG_WARNING(Service, "(STUBBED) called");
50
51 IPC::RequestBuilder rb{ctx, 4};
52
53 rb.Push(RESULT_SUCCESS);
54 rb.Push<u32>(0); // ret
55 rb.Push<u32>(0); // bsd errno
56}
57
58BSD_U::BSD_U() : ServiceFramework("bsd:u") {
59 static const FunctionInfo functions[] = {{0, &BSD_U::RegisterClient, "RegisterClient"},
60 {2, &BSD_U::Socket, "Socket"},
61 {11, &BSD_U::SendTo, "SendTo"},
62 {14, &BSD_U::Connect, "Connect"}};
63 RegisterHandlers(functions);
64}
65
66} // namespace Sockets
67} // namespace Service
diff --git a/src/core/hle/service/sockets/bsd_u.h b/src/core/hle/service/sockets/bsd_u.h
new file mode 100644
index 000000000..1fe96d850
--- /dev/null
+++ b/src/core/hle/service/sockets/bsd_u.h
@@ -0,0 +1,29 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace Sockets {
12
13class BSD_U final : public ServiceFramework<BSD_U> {
14public:
15 BSD_U();
16 ~BSD_U() = default;
17
18private:
19 void RegisterClient(Kernel::HLERequestContext& ctx);
20 void Socket(Kernel::HLERequestContext& ctx);
21 void Connect(Kernel::HLERequestContext& ctx);
22 void SendTo(Kernel::HLERequestContext& ctx);
23
24 /// Id to use for the next open file descriptor.
25 u32 next_fd = 1;
26};
27
28} // namespace Sockets
29} // namespace Service
diff --git a/src/core/hle/service/sockets/sfdnsres.h b/src/core/hle/service/sockets/sfdnsres.h
new file mode 100644
index 000000000..32a3ac8c5
--- /dev/null
+++ b/src/core/hle/service/sockets/sfdnsres.h
@@ -0,0 +1,22 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace Sockets {
12
13class SFDNSRES final : public ServiceFramework<SFDNSRES> {
14public:
15 SFDNSRES() : ServiceFramework("sfdnsres") {}
16 ~SFDNSRES() = default;
17
18private:
19};
20
21} // namespace Sockets
22} // namespace Service
diff --git a/src/core/hle/service/sockets/sockets.cpp b/src/core/hle/service/sockets/sockets.cpp
new file mode 100644
index 000000000..f1396eaa1
--- /dev/null
+++ b/src/core/hle/service/sockets/sockets.cpp
@@ -0,0 +1,18 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/sockets/bsd_u.h"
6#include "core/hle/service/sockets/sfdnsres.h"
7#include "core/hle/service/sockets/sockets.h"
8
9namespace Service {
10namespace Sockets {
11
12void InstallInterfaces(SM::ServiceManager& service_manager) {
13 std::make_shared<BSD_U>()->InstallAsService(service_manager);
14 std::make_shared<SFDNSRES>()->InstallAsService(service_manager);
15}
16
17} // namespace Sockets
18} // namespace Service
diff --git a/src/core/hle/service/sockets/sockets.h b/src/core/hle/service/sockets/sockets.h
new file mode 100644
index 000000000..7e89c8d2c
--- /dev/null
+++ b/src/core/hle/service/sockets/sockets.h
@@ -0,0 +1,16 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9namespace Service {
10namespace Sockets {
11
12/// Registers all Sockets services with the specified service manager.
13void InstallInterfaces(SM::ServiceManager& service_manager);
14
15} // namespace Sockets
16} // namespace Service
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index b9dc4943a..469988d63 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -289,6 +289,6 @@ void GRenderWindow::showEvent(QShowEvent* event) {
289 QWidget::showEvent(event); 289 QWidget::showEvent(event);
290 290
291 // windowHandle() is not initialized until the Window is shown, so we connect it here. 291 // windowHandle() is not initialized until the Window is shown, so we connect it here.
292 connect(this->windowHandle(), SIGNAL(screenChanged(QScreen*)), this, 292 connect(windowHandle(), &QWindow::screenChanged, this, &GRenderWindow::OnFramebufferSizeChanged,
293 SLOT(OnFramebufferSizeChanged()), Qt::UniqueConnection); 293 Qt::UniqueConnection);
294} 294}
diff --git a/src/yuzu/configuration/configure.ui b/src/yuzu/configuration/configure.ui
index babd583a2..c5303851c 100644
--- a/src/yuzu/configuration/configure.ui
+++ b/src/yuzu/configuration/configure.ui
@@ -6,7 +6,7 @@
6 <rect> 6 <rect>
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>740</width> 9 <width>461</width>
10 <height>500</height> 10 <height>500</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
diff --git a/src/yuzu/configuration/configure_input.ui b/src/yuzu/configuration/configure_input.ui
index c162ca02c..377b79c77 100644
--- a/src/yuzu/configuration/configure_input.ui
+++ b/src/yuzu/configuration/configure_input.ui
@@ -15,9 +15,9 @@
15 </property> 15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout_5"> 16 <layout class="QVBoxLayout" name="verticalLayout_5">
17 <item> 17 <item>
18 <layout class="QGridLayout" name="gridLayout_7"> 18 <layout class="QGridLayout" name="buttons">
19 <item row="3" column="1"> 19 <item row="3" column="1">
20 <widget class="QGroupBox" name="faceButtons_6"> 20 <widget class="QGroupBox" name="misc">
21 <property name="title"> 21 <property name="title">
22 <string>Misc.</string> 22 <string>Misc.</string>
23 </property> 23 </property>
@@ -29,9 +29,9 @@
29 </property> 29 </property>
30 <layout class="QGridLayout" name="gridLayout_6"> 30 <layout class="QGridLayout" name="gridLayout_6">
31 <item row="0" column="0"> 31 <item row="0" column="0">
32 <layout class="QVBoxLayout" name="verticalLayout_25"> 32 <layout class="QVBoxLayout" name="buttonMiscPlusVerticalLayout">
33 <item> 33 <item>
34 <widget class="QLabel" name="label_29"> 34 <widget class="QLabel" name="labelPlus">
35 <property name="text"> 35 <property name="text">
36 <string>Plus:</string> 36 <string>Plus:</string>
37 </property> 37 </property>
@@ -47,9 +47,9 @@
47 </layout> 47 </layout>
48 </item> 48 </item>
49 <item row="0" column="1"> 49 <item row="0" column="1">
50 <layout class="QVBoxLayout" name="verticalLayout_26"> 50 <layout class="QVBoxLayout" name="buttonMiscMinusVerticalLayout">
51 <item> 51 <item>
52 <widget class="QLabel" name="label_30"> 52 <widget class="QLabel" name="labelMinus">
53 <property name="text"> 53 <property name="text">
54 <string>Minus:</string> 54 <string>Minus:</string>
55 </property> 55 </property>
@@ -65,9 +65,9 @@
65 </layout> 65 </layout>
66 </item> 66 </item>
67 <item row="1" column="0"> 67 <item row="1" column="0">
68 <layout class="QVBoxLayout" name="verticalLayout_27"> 68 <layout class="QVBoxLayout" name="buttonMiscHomeVerticalLayout">
69 <item> 69 <item>
70 <widget class="QLabel" name="label_31"> 70 <widget class="QLabel" name="labelHome">
71 <property name="text"> 71 <property name="text">
72 <string>Home:</string> 72 <string>Home:</string>
73 </property> 73 </property>
@@ -83,9 +83,9 @@
83 </layout> 83 </layout>
84 </item> 84 </item>
85 <item row="1" column="1"> 85 <item row="1" column="1">
86 <layout class="QVBoxLayout" name="verticalLayout_28"> 86 <layout class="QVBoxLayout" name="buttonMiscScrCapVerticalLayout">
87 <item> 87 <item>
88 <widget class="QLabel" name="label_11"> 88 <widget class="QLabel" name="labelScrCap">
89 <property name="text"> 89 <property name="text">
90 <string>Screen 90 <string>Screen
91Capture:</string> 91Capture:</string>
@@ -130,9 +130,9 @@ Capture:</string>
130 </property> 130 </property>
131 <layout class="QGridLayout" name="gridLayout"> 131 <layout class="QGridLayout" name="gridLayout">
132 <item row="0" column="0"> 132 <item row="0" column="0">
133 <layout class="QVBoxLayout" name="verticalLayout"> 133 <layout class="QVBoxLayout" name="buttonFaceButtonsAVerticalLayout">
134 <item> 134 <item>
135 <widget class="QLabel" name="label"> 135 <widget class="QLabel" name="labelA">
136 <property name="text"> 136 <property name="text">
137 <string>A:</string> 137 <string>A:</string>
138 </property> 138 </property>
@@ -148,9 +148,9 @@ Capture:</string>
148 </layout> 148 </layout>
149 </item> 149 </item>
150 <item row="0" column="1"> 150 <item row="0" column="1">
151 <layout class="QVBoxLayout" name="verticalLayout_2"> 151 <layout class="QVBoxLayout" name="buttonFaceButtonsBVerticalLayout">
152 <item> 152 <item>
153 <widget class="QLabel" name="label_2"> 153 <widget class="QLabel" name="labelB">
154 <property name="text"> 154 <property name="text">
155 <string>B:</string> 155 <string>B:</string>
156 </property> 156 </property>
@@ -166,9 +166,9 @@ Capture:</string>
166 </layout> 166 </layout>
167 </item> 167 </item>
168 <item row="1" column="0"> 168 <item row="1" column="0">
169 <layout class="QVBoxLayout" name="verticalLayout_3"> 169 <layout class="QVBoxLayout" name="buttonFaceButtonsXVerticalLayout">
170 <item> 170 <item>
171 <widget class="QLabel" name="label_3"> 171 <widget class="QLabel" name="labelX">
172 <property name="text"> 172 <property name="text">
173 <string>X:</string> 173 <string>X:</string>
174 </property> 174 </property>
@@ -184,9 +184,9 @@ Capture:</string>
184 </layout> 184 </layout>
185 </item> 185 </item>
186 <item row="1" column="1"> 186 <item row="1" column="1">
187 <layout class="QVBoxLayout" name="verticalLayout_4"> 187 <layout class="QVBoxLayout" name="buttonFaceButtonsYVerticalLayout">
188 <item> 188 <item>
189 <widget class="QLabel" name="label_4"> 189 <widget class="QLabel" name="labelY">
190 <property name="text"> 190 <property name="text">
191 <string>Y:</string> 191 <string>Y:</string>
192 </property> 192 </property>
@@ -205,7 +205,7 @@ Capture:</string>
205 </widget> 205 </widget>
206 </item> 206 </item>
207 <item row="0" column="1"> 207 <item row="0" column="1">
208 <widget class="QGroupBox" name="faceButtons_2"> 208 <widget class="QGroupBox" name="Dpad">
209 <property name="title"> 209 <property name="title">
210 <string>Directional Pad</string> 210 <string>Directional Pad</string>
211 </property> 211 </property>
@@ -217,9 +217,9 @@ Capture:</string>
217 </property> 217 </property>
218 <layout class="QGridLayout" name="gridLayout_2"> 218 <layout class="QGridLayout" name="gridLayout_2">
219 <item row="1" column="0"> 219 <item row="1" column="0">
220 <layout class="QVBoxLayout" name="verticalLayout_12"> 220 <layout class="QVBoxLayout" name="buttonDpadUpVerticalLayout">
221 <item> 221 <item>
222 <widget class="QLabel" name="label_34"> 222 <widget class="QLabel" name="labelDpadUp">
223 <property name="text"> 223 <property name="text">
224 <string>Up:</string> 224 <string>Up:</string>
225 </property> 225 </property>
@@ -235,9 +235,9 @@ Capture:</string>
235 </layout> 235 </layout>
236 </item> 236 </item>
237 <item row="1" column="1"> 237 <item row="1" column="1">
238 <layout class="QVBoxLayout" name="verticalLayout_9"> 238 <layout class="QVBoxLayout" name="buttonDpadDownVerticalLayout">
239 <item> 239 <item>
240 <widget class="QLabel" name="label_35"> 240 <widget class="QLabel" name="labelDpadDown">
241 <property name="text"> 241 <property name="text">
242 <string>Down:</string> 242 <string>Down:</string>
243 </property> 243 </property>
@@ -253,9 +253,9 @@ Capture:</string>
253 </layout> 253 </layout>
254 </item> 254 </item>
255 <item row="0" column="0"> 255 <item row="0" column="0">
256 <layout class="QVBoxLayout" name="verticalLayout_10"> 256 <layout class="QVBoxLayout" name="buttonDpadLeftVerticalLayout">
257 <item> 257 <item>
258 <widget class="QLabel" name="label_32"> 258 <widget class="QLabel" name="labelDpadLeft">
259 <property name="text"> 259 <property name="text">
260 <string>Left:</string> 260 <string>Left:</string>
261 </property> 261 </property>
@@ -271,9 +271,9 @@ Capture:</string>
271 </layout> 271 </layout>
272 </item> 272 </item>
273 <item row="0" column="1"> 273 <item row="0" column="1">
274 <layout class="QVBoxLayout" name="verticalLayout_11"> 274 <layout class="QVBoxLayout" name="buttonDpadRightVerticalLayout">
275 <item> 275 <item>
276 <widget class="QLabel" name="label_33"> 276 <widget class="QLabel" name="labelDpadRight">
277 <property name="text"> 277 <property name="text">
278 <string>Right:</string> 278 <string>Right:</string>
279 </property> 279 </property>
@@ -292,7 +292,7 @@ Capture:</string>
292 </widget> 292 </widget>
293 </item> 293 </item>
294 <item row="3" column="0"> 294 <item row="3" column="0">
295 <widget class="QGroupBox" name="faceButtons_3"> 295 <widget class="QGroupBox" name="shoulderButtons">
296 <property name="title"> 296 <property name="title">
297 <string>Shoulder Buttons</string> 297 <string>Shoulder Buttons</string>
298 </property> 298 </property>
@@ -304,9 +304,9 @@ Capture:</string>
304 </property> 304 </property>
305 <layout class="QGridLayout" name="gridLayout_3"> 305 <layout class="QGridLayout" name="gridLayout_3">
306 <item row="0" column="0"> 306 <item row="0" column="0">
307 <layout class="QVBoxLayout" name="verticalLayout_13"> 307 <layout class="QVBoxLayout" name="buttonShoulderButtonsLVerticalLayout">
308 <item> 308 <item>
309 <widget class="QLabel" name="label_17"> 309 <widget class="QLabel" name="labelL">
310 <property name="text"> 310 <property name="text">
311 <string>L:</string> 311 <string>L:</string>
312 </property> 312 </property>
@@ -322,9 +322,9 @@ Capture:</string>
322 </layout> 322 </layout>
323 </item> 323 </item>
324 <item row="0" column="1"> 324 <item row="0" column="1">
325 <layout class="QVBoxLayout" name="verticalLayout_14"> 325 <layout class="QVBoxLayout" name="buttonShoulderButtonsRVerticalLayout">
326 <item> 326 <item>
327 <widget class="QLabel" name="label_19"> 327 <widget class="QLabel" name="labelR">
328 <property name="text"> 328 <property name="text">
329 <string>R:</string> 329 <string>R:</string>
330 </property> 330 </property>
@@ -340,9 +340,9 @@ Capture:</string>
340 </layout> 340 </layout>
341 </item> 341 </item>
342 <item row="1" column="0"> 342 <item row="1" column="0">
343 <layout class="QVBoxLayout" name="verticalLayout_15"> 343 <layout class="QVBoxLayout" name="buttonShoulderButtonsZLVerticalLayout">
344 <item> 344 <item>
345 <widget class="QLabel" name="label_20"> 345 <widget class="QLabel" name="labelZL">
346 <property name="text"> 346 <property name="text">
347 <string>ZL:</string> 347 <string>ZL:</string>
348 </property> 348 </property>
@@ -358,9 +358,9 @@ Capture:</string>
358 </layout> 358 </layout>
359 </item> 359 </item>
360 <item row="1" column="1"> 360 <item row="1" column="1">
361 <layout class="QVBoxLayout" name="verticalLayout_16"> 361 <layout class="QVBoxLayout" name="buttonShoulderButtonsZRVerticalLayout">
362 <item> 362 <item>
363 <widget class="QLabel" name="label_18"> 363 <widget class="QLabel" name="labelZR">
364 <property name="text"> 364 <property name="text">
365 <string>ZR:</string> 365 <string>ZR:</string>
366 </property> 366 </property>
@@ -376,9 +376,9 @@ Capture:</string>
376 </layout> 376 </layout>
377 </item> 377 </item>
378 <item row="2" column="0"> 378 <item row="2" column="0">
379 <layout class="QVBoxLayout" name="verticalLayout_8"> 379 <layout class="QVBoxLayout" name="buttonShoulderButtonsSLVerticalLayout">
380 <item> 380 <item>
381 <widget class="QLabel" name="label_7"> 381 <widget class="QLabel" name="labelSL">
382 <property name="text"> 382 <property name="text">
383 <string>SL:</string> 383 <string>SL:</string>
384 </property> 384 </property>
@@ -394,9 +394,9 @@ Capture:</string>
394 </layout> 394 </layout>
395 </item> 395 </item>
396 <item row="2" column="1"> 396 <item row="2" column="1">
397 <layout class="QVBoxLayout" name="verticalLayout_29"> 397 <layout class="QVBoxLayout" name="buttonShoulderButtonsSRVerticalLayout">
398 <item> 398 <item>
399 <widget class="QLabel" name="label_8"> 399 <widget class="QLabel" name="labelSR">
400 <property name="text"> 400 <property name="text">
401 <string>SR:</string> 401 <string>SR:</string>
402 </property> 402 </property>
@@ -415,7 +415,7 @@ Capture:</string>
415 </widget> 415 </widget>
416 </item> 416 </item>
417 <item row="1" column="1"> 417 <item row="1" column="1">
418 <widget class="QGroupBox" name="faceButtons_5"> 418 <widget class="QGroupBox" name="RStick">
419 <property name="title"> 419 <property name="title">
420 <string>Right Stick</string> 420 <string>Right Stick</string>
421 </property> 421 </property>
@@ -430,9 +430,9 @@ Capture:</string>
430 </property> 430 </property>
431 <layout class="QGridLayout" name="gridLayout_5"> 431 <layout class="QGridLayout" name="gridLayout_5">
432 <item row="1" column="1"> 432 <item row="1" column="1">
433 <layout class="QVBoxLayout" name="verticalLayout_24"> 433 <layout class="QVBoxLayout" name="buttonRStickDownVerticalLayout">
434 <item> 434 <item>
435 <widget class="QLabel" name="label_26"> 435 <widget class="QLabel" name="labelRStickDown">
436 <property name="text"> 436 <property name="text">
437 <string>Down:</string> 437 <string>Down:</string>
438 </property> 438 </property>
@@ -448,9 +448,9 @@ Capture:</string>
448 </layout> 448 </layout>
449 </item> 449 </item>
450 <item row="0" column="1"> 450 <item row="0" column="1">
451 <layout class="QVBoxLayout" name="verticalLayout_22"> 451 <layout class="QVBoxLayout" name="buttonRStickRightVerticalLayout">
452 <item> 452 <item>
453 <widget class="QLabel" name="label_27"> 453 <widget class="QLabel" name="labelRStickRight">
454 <property name="text"> 454 <property name="text">
455 <string>Right:</string> 455 <string>Right:</string>
456 </property> 456 </property>
@@ -473,9 +473,9 @@ Capture:</string>
473 </widget> 473 </widget>
474 </item> 474 </item>
475 <item row="1" column="0"> 475 <item row="1" column="0">
476 <layout class="QVBoxLayout" name="verticalLayout_21"> 476 <layout class="QVBoxLayout" name="buttonRStickLeftVerticalLayout">
477 <item> 477 <item>
478 <widget class="QLabel" name="label_25"> 478 <widget class="QLabel" name="labelRStickLeft">
479 <property name="text"> 479 <property name="text">
480 <string>Left:</string> 480 <string>Left:</string>
481 </property> 481 </property>
@@ -491,9 +491,9 @@ Capture:</string>
491 </layout> 491 </layout>
492 </item> 492 </item>
493 <item row="0" column="0"> 493 <item row="0" column="0">
494 <layout class="QVBoxLayout" name="verticalLayout_25"> 494 <layout class="QVBoxLayout" name="buttonRStickUpVerticalLayout">
495 <item> 495 <item>
496 <widget class="QLabel" name="label_28"> 496 <widget class="QLabel" name="labelRStickUp">
497 <property name="text"> 497 <property name="text">
498 <string>Up:</string> 498 <string>Up:</string>
499 </property> 499 </property>
@@ -509,9 +509,9 @@ Capture:</string>
509 </layout> 509 </layout>
510 </item> 510 </item>
511 <item row="2" column="0"> 511 <item row="2" column="0">
512 <layout class="QVBoxLayout" name="verticalLayout_6"> 512 <layout class="QVBoxLayout" name="buttonRStickPressedVerticalLayout">
513 <item> 513 <item>
514 <widget class="QLabel" name="label_5"> 514 <widget class="QLabel" name="labelRStickPressed">
515 <property name="text"> 515 <property name="text">
516 <string>Pressed:</string> 516 <string>Pressed:</string>
517 </property> 517 </property>
@@ -527,9 +527,9 @@ Capture:</string>
527 </layout> 527 </layout>
528 </item> 528 </item>
529 <item row="2" column="1"> 529 <item row="2" column="1">
530 <layout class="QVBoxLayout" name="verticalLayout_32"> 530 <layout class="QVBoxLayout" name="buttonRStickModVerticalLayout">
531 <item> 531 <item>
532 <widget class="QLabel" name="label_10"> 532 <widget class="QLabel" name="labelRStickMod">
533 <property name="text"> 533 <property name="text">
534 <string>Modifier:</string> 534 <string>Modifier:</string>
535 </property> 535 </property>
@@ -548,7 +548,7 @@ Capture:</string>
548 </widget> 548 </widget>
549 </item> 549 </item>
550 <item row="1" column="0"> 550 <item row="1" column="0">
551 <widget class="QGroupBox" name="faceButtons_4"> 551 <widget class="QGroupBox" name="LStick">
552 <property name="title"> 552 <property name="title">
553 <string>Left Stick</string> 553 <string>Left Stick</string>
554 </property> 554 </property>
@@ -560,9 +560,9 @@ Capture:</string>
560 </property> 560 </property>
561 <layout class="QGridLayout" name="gridLayout_4"> 561 <layout class="QGridLayout" name="gridLayout_4">
562 <item row="1" column="1"> 562 <item row="1" column="1">
563 <layout class="QVBoxLayout" name="verticalLayout_20"> 563 <layout class="QVBoxLayout" name="buttonLStickDownVerticalLayout">
564 <item> 564 <item>
565 <widget class="QLabel" name="label_22"> 565 <widget class="QLabel" name="labelLStickDown">
566 <property name="text"> 566 <property name="text">
567 <string>Down:</string> 567 <string>Down:</string>
568 </property> 568 </property>
@@ -585,9 +585,9 @@ Capture:</string>
585 </widget> 585 </widget>
586 </item> 586 </item>
587 <item row="0" column="1"> 587 <item row="0" column="1">
588 <layout class="QVBoxLayout" name="verticalLayout_18"> 588 <layout class="QVBoxLayout" name="buttonLStickRightVerticalLayout">
589 <item> 589 <item>
590 <widget class="QLabel" name="label_23"> 590 <widget class="QLabel" name="labelLStickRight">
591 <property name="text"> 591 <property name="text">
592 <string>Right:</string> 592 <string>Right:</string>
593 </property> 593 </property>
@@ -603,9 +603,9 @@ Capture:</string>
603 </layout> 603 </layout>
604 </item> 604 </item>
605 <item row="0" column="0"> 605 <item row="0" column="0">
606 <layout class="QVBoxLayout" name="verticalLayout_17"> 606 <layout class="QVBoxLayout" name="buttonLStickLeftVerticalLayout">
607 <item> 607 <item>
608 <widget class="QLabel" name="label_21"> 608 <widget class="QLabel" name="labelLStickLeft">
609 <property name="text"> 609 <property name="text">
610 <string>Left:</string> 610 <string>Left:</string>
611 </property> 611 </property>
@@ -621,9 +621,9 @@ Capture:</string>
621 </layout> 621 </layout>
622 </item> 622 </item>
623 <item row="1" column="0"> 623 <item row="1" column="0">
624 <layout class="QVBoxLayout" name="verticalLayout_19"> 624 <layout class="QVBoxLayout" name="buttonLStickUpVerticalLayout">
625 <item> 625 <item>
626 <widget class="QLabel" name="label_24"> 626 <widget class="QLabel" name="labelLStickUp">
627 <property name="text"> 627 <property name="text">
628 <string>Up:</string> 628 <string>Up:</string>
629 </property> 629 </property>
@@ -639,9 +639,9 @@ Capture:</string>
639 </layout> 639 </layout>
640 </item> 640 </item>
641 <item row="3" column="0"> 641 <item row="3" column="0">
642 <layout class="QVBoxLayout" name="verticalLayout_31"> 642 <layout class="QVBoxLayout" name="buttonLStickModVerticalLayout">
643 <item> 643 <item>
644 <widget class="QLabel" name="label_9"> 644 <widget class="QLabel" name="labelLStickMod">
645 <property name="text"> 645 <property name="text">
646 <string>Modifier:</string> 646 <string>Modifier:</string>
647 </property> 647 </property>
@@ -657,9 +657,9 @@ Capture:</string>
657 </layout> 657 </layout>
658 </item> 658 </item>
659 <item row="3" column="1"> 659 <item row="3" column="1">
660 <layout class="QVBoxLayout" name="verticalLayout_7" stretch="0,0"> 660 <layout class="QVBoxLayout" name="buttonLStickPressedVerticalLayout" stretch="0,0">
661 <item> 661 <item>
662 <widget class="QLabel" name="label_6"> 662 <widget class="QLabel" name="labelLStickPressed">
663 <property name="text"> 663 <property name="text">
664 <string>Pressed:</string> 664 <string>Pressed:</string>
665 </property> 665 </property>
diff --git a/src/yuzu/debugger/profiler.cpp b/src/yuzu/debugger/profiler.cpp
index cc9babe84..8b30e0a85 100644
--- a/src/yuzu/debugger/profiler.cpp
+++ b/src/yuzu/debugger/profiler.cpp
@@ -74,7 +74,7 @@ QAction* MicroProfileDialog::toggleViewAction() {
74 toggle_view_action = new QAction(windowTitle(), this); 74 toggle_view_action = new QAction(windowTitle(), this);
75 toggle_view_action->setCheckable(true); 75 toggle_view_action->setCheckable(true);
76 toggle_view_action->setChecked(isVisible()); 76 toggle_view_action->setChecked(isVisible());
77 connect(toggle_view_action, SIGNAL(toggled(bool)), SLOT(setVisible(bool))); 77 connect(toggle_view_action, &QAction::toggled, this, &MicroProfileDialog::setVisible);
78 } 78 }
79 79
80 return toggle_view_action; 80 return toggle_view_action;
@@ -107,7 +107,8 @@ MicroProfileWidget::MicroProfileWidget(QWidget* parent) : QWidget(parent) {
107 MicroProfileSetDisplayMode(1); // Timers screen 107 MicroProfileSetDisplayMode(1); // Timers screen
108 MicroProfileInitUI(); 108 MicroProfileInitUI();
109 109
110 connect(&update_timer, SIGNAL(timeout()), SLOT(update())); 110 connect(&update_timer, &QTimer::timeout, this,
111 static_cast<void (MicroProfileWidget::*)()>(&MicroProfileWidget::update));
111} 112}
112 113
113void MicroProfileWidget::paintEvent(QPaintEvent* ev) { 114void MicroProfileWidget::paintEvent(QPaintEvent* ev) {
diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp
index 6d7c409d0..76ced4de4 100644
--- a/src/yuzu/game_list.cpp
+++ b/src/yuzu/game_list.cpp
@@ -114,8 +114,7 @@ GameList::SearchField::SearchField(GameList* parent) : QWidget{parent} {
114 edit_filter->setPlaceholderText(tr("Enter pattern to filter")); 114 edit_filter->setPlaceholderText(tr("Enter pattern to filter"));
115 edit_filter->installEventFilter(keyReleaseEater); 115 edit_filter->installEventFilter(keyReleaseEater);
116 edit_filter->setClearButtonEnabled(true); 116 edit_filter->setClearButtonEnabled(true);
117 connect(edit_filter, SIGNAL(textChanged(const QString&)), parent, 117 connect(edit_filter, &QLineEdit::textChanged, parent, &GameList::onTextChanged);
118 SLOT(onTextChanged(const QString&)));
119 label_filter_result = new QLabel; 118 label_filter_result = new QLabel;
120 button_filter_close = new QToolButton(this); 119 button_filter_close = new QToolButton(this);
121 button_filter_close->setText("X"); 120 button_filter_close->setText("X");
@@ -124,7 +123,7 @@ GameList::SearchField::SearchField(GameList* parent) : QWidget{parent} {
124 "#000000; font-weight: bold; background: #F0F0F0; }" 123 "#000000; font-weight: bold; background: #F0F0F0; }"
125 "QToolButton:hover{ border: none; padding: 0px; color: " 124 "QToolButton:hover{ border: none; padding: 0px; color: "
126 "#EEEEEE; font-weight: bold; background: #E81123}"); 125 "#EEEEEE; font-weight: bold; background: #E81123}");
127 connect(button_filter_close, SIGNAL(clicked()), parent, SLOT(onFilterCloseClicked())); 126 connect(button_filter_close, &QToolButton::clicked, parent, &GameList::onFilterCloseClicked);
128 layout_filter->setSpacing(10); 127 layout_filter->setSpacing(10);
129 layout_filter->addWidget(label_filter); 128 layout_filter->addWidget(label_filter);
130 layout_filter->addWidget(edit_filter); 129 layout_filter->addWidget(edit_filter);
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 31f2825ee..e5252abdc 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -175,7 +175,7 @@ void GMainWindow::InitializeRecentFileMenuActions() {
175 for (int i = 0; i < max_recent_files_item; ++i) { 175 for (int i = 0; i < max_recent_files_item; ++i) {
176 actions_recent_files[i] = new QAction(this); 176 actions_recent_files[i] = new QAction(this);
177 actions_recent_files[i]->setVisible(false); 177 actions_recent_files[i]->setVisible(false);
178 connect(actions_recent_files[i], SIGNAL(triggered()), this, SLOT(OnMenuRecentFile())); 178 connect(actions_recent_files[i], &QAction::triggered, this, &GMainWindow::OnMenuRecentFile);
179 179
180 ui.menu_recent_files->addAction(actions_recent_files[i]); 180 ui.menu_recent_files->addAction(actions_recent_files[i]);
181 } 181 }
@@ -190,10 +190,10 @@ void GMainWindow::InitializeHotkeys() {
190 RegisterHotkey("Main Window", "Exit Fullscreen", QKeySequence::Cancel, Qt::ApplicationShortcut); 190 RegisterHotkey("Main Window", "Exit Fullscreen", QKeySequence::Cancel, Qt::ApplicationShortcut);
191 LoadHotkeys(); 191 LoadHotkeys();
192 192
193 connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, 193 connect(GetHotkey("Main Window", "Load File", this), &QShortcut::activated, this,
194 SLOT(OnMenuLoadFile())); 194 &GMainWindow::OnMenuLoadFile);
195 connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, 195 connect(GetHotkey("Main Window", "Start Emulation", this), &QShortcut::activated, this,
196 SLOT(OnStartGame())); 196 &GMainWindow::OnStartGame);
197 connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activated, 197 connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activated,
198 ui.action_Fullscreen, &QAction::trigger); 198 ui.action_Fullscreen, &QAction::trigger);
199 connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activatedAmbiguously, 199 connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activatedAmbiguously,
@@ -245,13 +245,14 @@ void GMainWindow::RestoreUIState() {
245} 245}
246 246
247void GMainWindow::ConnectWidgetEvents() { 247void GMainWindow::ConnectWidgetEvents() {
248 connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString))); 248 connect(game_list, &GameList::GameChosen, this, &GMainWindow::OnGameListLoadFile);
249 connect(game_list, SIGNAL(OpenSaveFolderRequested(u64)), this, 249 connect(game_list, &GameList::OpenSaveFolderRequested, this,
250 SLOT(OnGameListOpenSaveFolder(u64))); 250 &GMainWindow::OnGameListOpenSaveFolder);
251 251
252 connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, 252 connect(this, &GMainWindow::EmulationStarting, render_window,
253 SLOT(OnEmulationStarting(EmuThread*))); 253 &GRenderWindow::OnEmulationStarting);
254 connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); 254 connect(this, &GMainWindow::EmulationStopping, render_window,
255 &GRenderWindow::OnEmulationStopping);
255 256
256 connect(&status_bar_update_timer, &QTimer::timeout, this, &GMainWindow::UpdateStatusBar); 257 connect(&status_bar_update_timer, &QTimer::timeout, this, &GMainWindow::UpdateStatusBar);
257} 258}
@@ -398,17 +399,17 @@ void GMainWindow::BootGame(const QString& filename) {
398 render_window->moveContext(); 399 render_window->moveContext();
399 emu_thread->start(); 400 emu_thread->start();
400 401
401 connect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); 402 connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
402 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views 403 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
403 // before the CPU continues 404 // before the CPU continues
404 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, 405 connect(emu_thread.get(), &EmuThread::DebugModeEntered, registersWidget,
405 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); 406 &RegistersWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
406 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget, 407 connect(emu_thread.get(), &EmuThread::DebugModeEntered, waitTreeWidget,
407 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); 408 &WaitTreeWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
408 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()), 409 connect(emu_thread.get(), &EmuThread::DebugModeLeft, registersWidget,
409 Qt::BlockingQueuedConnection); 410 &RegistersWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
410 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()), 411 connect(emu_thread.get(), &EmuThread::DebugModeLeft, waitTreeWidget,
411 Qt::BlockingQueuedConnection); 412 &WaitTreeWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
412 413
413 // Update the GUI 414 // Update the GUI
414 registersWidget->OnDebugModeEntered(); 415 registersWidget->OnDebugModeEntered();
@@ -437,7 +438,7 @@ void GMainWindow::ShutdownGame() {
437 emu_thread = nullptr; 438 emu_thread = nullptr;
438 439
439 // The emulation is stopped, so closing the window or not does not matter anymore 440 // The emulation is stopped, so closing the window or not does not matter anymore
440 disconnect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); 441 disconnect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
441 442
442 // Update the GUI 443 // Update the GUI
443 ui.action_Start->setEnabled(false); 444 ui.action_Start->setEnabled(false);
@@ -548,8 +549,7 @@ void GMainWindow::OnStartGame() {
548 emu_thread->SetRunning(true); 549 emu_thread->SetRunning(true);
549 qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus"); 550 qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus");
550 qRegisterMetaType<std::string>("std::string"); 551 qRegisterMetaType<std::string>("std::string");
551 connect(emu_thread.get(), SIGNAL(ErrorThrown(Core::System::ResultStatus, std::string)), this, 552 connect(emu_thread.get(), &EmuThread::ErrorThrown, this, &GMainWindow::OnCoreError);
552 SLOT(OnCoreError(Core::System::ResultStatus, std::string)));
553 553
554 ui.action_Start->setEnabled(false); 554 ui.action_Start->setEnabled(false);
555 ui.action_Start->setText(tr("Continue")); 555 ui.action_Start->setText(tr("Continue"));
diff --git a/src/yuzu/util/spinbox.cpp b/src/yuzu/util/spinbox.cpp
index 92753ec1c..14ef1e884 100644
--- a/src/yuzu/util/spinbox.cpp
+++ b/src/yuzu/util/spinbox.cpp
@@ -39,7 +39,7 @@ CSpinBox::CSpinBox(QWidget* parent)
39 // TODO: Might be nice to not immediately call the slot. 39 // TODO: Might be nice to not immediately call the slot.
40 // Think of an address that is being replaced by a different one, in which case a lot 40 // Think of an address that is being replaced by a different one, in which case a lot
41 // invalid intermediate addresses would be read from during editing. 41 // invalid intermediate addresses would be read from during editing.
42 connect(lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(OnEditingFinished())); 42 connect(lineEdit(), &QLineEdit::textEdited, this, &CSpinBox::OnEditingFinished);
43 43
44 UpdateText(); 44 UpdateText();
45} 45}