55#include " interface/c_controller.hpp"
66#include " interface/user_interface_text.hpp"
77#include " memory/module.hpp"
8+ #include " shell/shell.hpp"
89#include " xbox/xbox.hpp"
910
1011#include < windows.h>
@@ -20,15 +21,22 @@ HOOK_DECLARE_CLASS_MEMBER(0x004E1A20, c_virtual_keyboard_task, _success);
2021
2122HOOK_DECLARE (0x004E1860 , online_guide_delay_toasts);
2223HOOK_DECLARE (0x004E1870 , online_guide_dispose);
24+ HOOK_DECLARE (0x004E1880 , online_guide_handle_custom_action_pressed);
25+ HOOK_DECLARE (0x004E1890 , online_guide_handle_custom_gamercard);
2326HOOK_DECLARE (0x004E18A0 , online_guide_initialize);
2427HOOK_DECLARE (0x004E18B0 , online_guide_set_toast_position);
2528HOOK_DECLARE (0x004E18C0 , online_guide_show_damaged_media_ui);
29+ HOOK_DECLARE (0x004E18D0 , online_guide_show_device_selector_ui);
2630HOOK_DECLARE (0x004E18E0 , online_guide_show_file_share_recommendation);
2731HOOK_DECLARE (0x004E18F0 , online_guide_show_friend_request_ui);
2832HOOK_DECLARE (0x004E1900 , online_guide_show_friends_ui);
2933HOOK_DECLARE (0x004E1910 , online_guide_show_gamer_card_ui);
34+ HOOK_DECLARE (0x004E1920 , online_guide_show_marketplace);
35+ HOOK_DECLARE (0x004E1930 , online_guide_show_marketplace_offer);
36+ HOOK_DECLARE (0x004E1940 , online_guide_show_message_ui);
3037HOOK_DECLARE (0x004E1950 , online_guide_show_player_review_ui);
3138HOOK_DECLARE (0x004E1960 , online_guide_show_sign_in_ui);
39+ HOOK_DECLARE (0x004E1970 , online_guide_show_virtual_keyboard_ui);
3240HOOK_DECLARE (0x004E1980 , online_guide_update);
3341
3442c_virtual_keyboard_task* __cdecl c_virtual_keyboard_task::constructor (
@@ -39,7 +47,7 @@ c_virtual_keyboard_task* __cdecl c_virtual_keyboard_task::constructor(
3947 wchar_t const * title_text,
4048 wchar_t const * description_text,
4149 dword maximum_input_characters,
42- dword_flags character_flags,
50+ dword character_flags,
4351 bool sanitize_result
4452)
4553{
@@ -51,17 +59,17 @@ c_virtual_keyboard_task* __cdecl c_virtual_keyboard_task::constructor(
5159 m_controller_index = controller_index;
5260 m_character_flags = character_flags;
5361
54- csmemset (m_result_text , 0 , sizeof (m_result_text ));
55- csmemset (m_default_text , 0 , sizeof (m_default_text ));
56- csmemset (m_title_text , 0 , sizeof (m_title_text ));
57- csmemset (m_description_text , 0 , sizeof (m_description_text ));
62+ csmemset (m_result_text_buffer , 0 , sizeof (m_result_text_buffer ));
63+ csmemset (m_default_text_buffer , 0 , sizeof (m_default_text_buffer ));
64+ csmemset (m_title_text_buffer , 0 , sizeof (m_title_text_buffer ));
65+ csmemset (m_description_text_buffer , 0 , sizeof (m_description_text_buffer ));
5866
5967 if (maximum_input_characters > 256 )
6068 maximum_input_characters = 256 ;
6169 m_maximum_input_characters = maximum_input_characters;
6270
6371 m_sanitize_result = sanitize_result;
64- m_result_text [0 ] = 0 ;
72+ m_result_text_buffer [0 ] = 0 ;
6573
6674 set_default_text (default_text);
6775 set_title_text (title_text);
@@ -93,33 +101,33 @@ void __cdecl c_virtual_keyboard_task::set_controller_index(e_controller_index co
93101void __cdecl c_virtual_keyboard_task::set_default_text (wchar_t const * default_text)
94102{
95103 if (default_text)
96- ustrnzcpy (m_default_text , default_text, 256 );
104+ ustrnzcpy (m_default_text_buffer , default_text, 256 );
97105 else
98- m_default_text [0 ] = 0 ;
106+ m_default_text_buffer [0 ] = 0 ;
99107}
100108
101109void __cdecl c_virtual_keyboard_task::set_description_text (wchar_t const * description_text)
102110{
103111 if (description_text)
104- ustrnzcpy (m_description_text , description_text, 64 );
112+ ustrnzcpy (m_description_text_buffer , description_text, 64 );
105113 else
106- m_description_text [0 ] = 0 ;
114+ m_description_text_buffer [0 ] = 0 ;
107115}
108116
109117void __cdecl c_virtual_keyboard_task::set_title_text (wchar_t const * title_text)
110118{
111119 if (title_text)
112- ustrnzcpy (m_title_text , title_text, 64 );
120+ ustrnzcpy (m_title_text_buffer , title_text, 64 );
113121 else
114- m_title_text [0 ] = 0 ;
122+ m_title_text_buffer [0 ] = 0 ;
115123}
116124
117125void __cdecl c_virtual_keyboard_task::set_maximum_input_characters (dword maximum_input_characters)
118126{
119127 m_maximum_input_characters = maximum_input_characters;
120128}
121129
122- void __cdecl c_virtual_keyboard_task::set_character_flags (dword_flags character_flags)
130+ void __cdecl c_virtual_keyboard_task::set_character_flags (dword character_flags)
123131{
124132 m_character_flags = character_flags;
125133}
@@ -137,7 +145,7 @@ c_virtual_keyboard_task* __cdecl c_virtual_keyboard_task::get_instance(
137145 wchar_t const * title_text,
138146 wchar_t const * description_text,
139147 dword maximum_input_characters,
140- dword_flags character_flags,
148+ dword character_flags,
141149 bool sanitize_result
142150)
143151{
@@ -205,33 +213,16 @@ char const* c_virtual_keyboard_task::get_context_string()
205213 return " XShowKeyboardUI" ;
206214}
207215
208- dword __cdecl online_guide_show_virtual_keyboard_ui (e_controller_index controller_index, dword_flags character_flags, wchar_t const * default_text, wchar_t const * title_text, wchar_t const * description_text, wchar_t * result_text, dword maximum_character_count, void * overlapped)
209- {
210- ASSERT (VALID_INDEX (controller_index, k_number_of_controllers));
211- ASSERT (result_text != NULL );
212- ASSERT (maximum_character_count > 0 );
213- ASSERT (overlapped != NULL );
214-
215- c_controller_interface* controller = controller_get (controller_index);
216- if (!controller->is_signed_in_to_machine ())
217- return E_FAIL;
218-
219- // $TODO: properly implement `XShowKeyboardUI`
220- return ERROR_SUCCESS;
221-
222- return XShowKeyboardUI (controller_index, character_flags, default_text, title_text, description_text, result_text, maximum_character_count, overlapped);
223- }
224-
225216dword c_virtual_keyboard_task::start (void * overlapped)
226217{
227218 c_controller_interface* controller = controller_get (m_controller_index);
228219 if (!controller->is_signed_in_to_machine ())
229220 return E_FAIL;
230221
231222 if (m_maximum_input_characters > 256 )
232- return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text, m_title_text, m_description_text, m_result_text , 256 , overlapped);
223+ return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text_buffer, m_title_text_buffer, m_description_text_buffer, m_result_text_buffer , 256 , overlapped);
233224
234- return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text, m_title_text, m_description_text, m_result_text , m_maximum_input_characters, overlapped);
225+ return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text_buffer, m_title_text_buffer, m_description_text_buffer, m_result_text_buffer , m_maximum_input_characters, overlapped);
235226}
236227
237228dword __thiscall c_virtual_keyboard_task::_start (void * overlapped)
@@ -241,9 +232,9 @@ dword __thiscall c_virtual_keyboard_task::_start(void* overlapped)
241232 return E_FAIL;
242233
243234 if (m_maximum_input_characters > 256 )
244- return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text, m_title_text, m_description_text, m_result_text , 256 , overlapped);
235+ return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text_buffer, m_title_text_buffer, m_description_text_buffer, m_result_text_buffer , 256 , overlapped);
245236
246- return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text, m_title_text, m_description_text, m_result_text , m_maximum_input_characters, overlapped);
237+ return online_guide_show_virtual_keyboard_ui (m_controller_index, m_character_flags, m_default_text_buffer, m_title_text_buffer, m_description_text_buffer, m_result_text_buffer , m_maximum_input_characters, overlapped);
247238}
248239
249240void __thiscall c_virtual_keyboard_task::_success (dword return_result)
@@ -252,24 +243,32 @@ void __thiscall c_virtual_keyboard_task::_success(dword return_result)
252243
253244 // c_overlapped_task::success(return_result);
254245
255- if (!ustrncmp (m_result_text , L" .fortune" , 9 ))
256- ustrnzcpy (m_result_text , L" My modem is on file" , 256 );
246+ if (!ustrncmp (m_result_text_buffer , L" .fortune" , 9 ))
247+ ustrnzcpy (m_result_text_buffer , L" My modem is on file" , 256 );
257248
258- wchar_string_sanitize_for_game (m_result_text , 256 );
249+ wchar_string_sanitize_for_game (m_result_text_buffer , 256 );
259250}
260251
261252dword __cdecl online_guide_delay_toasts (long milliseconds)
262253{
263254 // return XNotifyDelayUI(milliseconds);
264255
265- return - 1 ;
256+ return NONE ;
266257}
267258
268259void __cdecl online_guide_dispose ()
269260{
270261 // overlapped_task_block_until_finished(&g_online_guide_globals);
271262}
272263
264+ void __cdecl online_guide_handle_custom_action_pressed ()
265+ {
266+ }
267+
268+ void __cdecl online_guide_handle_custom_gamercard (bool guide_is_open)
269+ {
270+ }
271+
273272void __cdecl online_guide_initialize ()
274273{
275274 // g_online_guide_globals = 0;
@@ -293,7 +292,12 @@ void __cdecl online_guide_show_damaged_media_ui()
293292 // XShowDirtyDiscErrorUI(controller_index);
294293}
295294
296- void __cdecl online_guide_show_file_share_recommendation (e_controller_index controller_index, qword user_xuid, long a3, char const * a4, s_service_record_identity const * identity, wchar_t const * a6)
295+ dword __cdecl online_guide_show_device_selector_ui (e_controller_index controller_index, dword requested_bytes, bool always_show, dword* device_id, void * xenon_task_handle)
296+ {
297+ return NONE;
298+ }
299+
300+ void __cdecl online_guide_show_file_share_recommendation (e_controller_index controller_index, qword file_share_xuid, long slot_index, char const * server_id, s_service_record_identity const * service_record_identity, s_custom_message_text* custom_message_text)
297301{
298302 MessageBoxA (NULL , " File Share Recommendation UI Placeholder" , " networking:online:guide" , MB_OK);
299303
@@ -318,7 +322,7 @@ dword __cdecl online_guide_show_friend_request_ui(e_controller_index controller_
318322 //
319323 // return result;
320324
321- return - 1 ;
325+ return NONE ;
322326}
323327
324328dword __cdecl online_guide_show_friends_ui (e_controller_index controller_index)
@@ -337,7 +341,7 @@ dword __cdecl online_guide_show_friends_ui(e_controller_index controller_index)
337341 //
338342 // return result;
339343
340- return - 1 ;
344+ return NONE ;
341345}
342346
343347dword __cdecl online_guide_show_gamer_card_ui (e_controller_index controller_index, qword user_xuid)
@@ -357,7 +361,20 @@ dword __cdecl online_guide_show_gamer_card_ui(e_controller_index controller_inde
357361 //
358362 // return result;
359363
360- return -1 ;
364+ return NONE;
365+ }
366+
367+ void __cdecl online_guide_show_marketplace (e_controller_index controller_index)
368+ {
369+ }
370+
371+ void __cdecl online_guide_show_marketplace_offer (e_controller_index controller_index, qword marketplace_offer_id)
372+ {
373+ }
374+
375+ dword __cdecl online_guide_show_message_ui (e_controller_index controller_index, qword target_player_xuid)
376+ {
377+ return 0 ;
361378}
362379
363380dword __cdecl online_guide_show_player_review_ui (e_controller_index controller_index, qword target_user_xuid)
@@ -378,10 +395,10 @@ dword __cdecl online_guide_show_player_review_ui(e_controller_index controller_i
378395 //
379396 // return result;
380397
381- return - 1 ;
398+ return NONE ;
382399}
383400
384- bool __cdecl online_guide_show_sign_in_ui (long pane_count, dword_flags flags)
401+ bool __cdecl online_guide_show_sign_in_ui (long pane_count, dword flags)
385402{
386403 // MessageBoxA(NULL, "Signin UI Placeholder", "networking:online:guide", MB_OK);
387404
@@ -400,6 +417,24 @@ bool __cdecl online_guide_show_sign_in_ui(long pane_count, dword_flags flags)
400417 return true ;
401418}
402419
420+ // dword __cdecl online_guide_show_virtual_keyboard_ui(e_controller_index controller_index, dword character_flags, wchar_t const* default_text, wchar_t const* title_text, wchar_t const* description_text, wchar_t* result_text, dword maximum_character_count, struct _XOVERLAPPED* platform_handle)
421+ dword __cdecl online_guide_show_virtual_keyboard_ui (e_controller_index controller_index, dword character_flags, wchar_t const * default_text, wchar_t const * title_text, wchar_t const * description_text, wchar_t * result_text, dword maximum_character_count, void * overlapped)
422+ {
423+ ASSERT (VALID_INDEX (controller_index, k_number_of_controllers));
424+ ASSERT (result_text != NULL );
425+ ASSERT (maximum_character_count > 0 );
426+ ASSERT (overlapped != NULL );
427+
428+ c_controller_interface* controller = controller_get (controller_index);
429+ if (!controller->is_signed_in_to_machine ())
430+ return E_FAIL;
431+
432+ // $TODO: properly implement `XShowKeyboardUI`
433+ return ERROR_SUCCESS;
434+
435+ return XShowKeyboardUI (controller_index, character_flags, default_text, title_text, description_text, result_text, maximum_character_count, overlapped);
436+ }
437+
403438void __cdecl online_guide_update ()
404439{
405440 // online_guide_update_gamercard_dynamic_actions();
0 commit comments