diff --git a/stepmania/src/ScreenNetworkOptions.cpp b/stepmania/src/ScreenNetworkOptions.cpp
index 9918f25264..28f5e92f20 100644
--- a/stepmania/src/ScreenNetworkOptions.cpp
+++ b/stepmania/src/ScreenNetworkOptions.cpp
@@ -12,6 +12,10 @@
#include "ScreenPrompt.h"
#include "NetworkSyncServer.h"
+#if defined(XBOX)
+#include "archutils/Xbox/VirtualKeyboard.h"
+#endif
+
enum {
PO_CONNECTION,
PO_SERVER,
@@ -111,7 +115,14 @@ void ScreenNetworkOptions::MenuStart( PlayerNumber pn, const InputEventType type
{
case PO_CONNECTION:
if ( !NSMAN->useSMserver )
+ {
+
+#if defined(XBOX)
+ XBOX_VKB.Reset(VKMODE_IP);
+#endif
+
SCREENMAN->TextEntry( SM_DoneConnecting, "Enter a Network Address\n127.0.0.1 to connect to yourself", PREFSMAN->m_sLastServer );
+ }
else {
NSMAN->CloseConnection();
SCREENMAN->SystemMessage("Disconnected from server.");
@@ -123,6 +134,10 @@ void ScreenNetworkOptions::MenuStart( PlayerNumber pn, const InputEventType type
{
case NO_START_SERVER:
if (!NSMAN->isLanServer)
+#if defined(XBOX)
+ XBOX_VKB.Reset(VKMODE_PROFILE);
+#endif
+
SCREENMAN->TextEntry( SM_ServerNameEnter, "Enter a server name...", "", NULL );
break;
case NO_STOP_SERVER:
diff --git a/stepmania/src/ScreenProfileOptions.cpp b/stepmania/src/ScreenProfileOptions.cpp
index 1efdef2396..fa1193f317 100644
--- a/stepmania/src/ScreenProfileOptions.cpp
+++ b/stepmania/src/ScreenProfileOptions.cpp
@@ -9,6 +9,10 @@
#include "ScreenTextEntry.h"
#include "ScreenPrompt.h"
+#if defined(XBOX)
+#include "archutils/Xbox/VirtualKeyboard.h"
+#endif
+
enum {
PO_PLAYER1,
@@ -173,6 +177,11 @@ void ScreenProfileOptions::MenuStart( PlayerNumber pn, const InputEventType type
switch( GetCurrentRow() )
{
case PO_CREATE_NEW:
+
+#if defined(XBOX)
+ XBOX_VKB.Reset(VKMODE_PROFILE); // set the xbox virtual keyboard to profile mode
+#endif
+
SCREENMAN->TextEntry( SM_DoneCreating, "Enter a profile name", "", NULL );
break;
case PO_DELETE_:
diff --git a/stepmania/src/ScreenTextEntry.cpp b/stepmania/src/ScreenTextEntry.cpp
index e2b003ff11..0521f2d0ee 100644
--- a/stepmania/src/ScreenTextEntry.cpp
+++ b/stepmania/src/ScreenTextEntry.cpp
@@ -10,6 +10,10 @@
#include "FontCharAliases.h"
#include "ScreenDimensions.h"
+#if defined(XBOX)
+#include "archutils/Xbox/VirtualKeyboard.h"
+#endif
+
#define QUESTION_X (CENTER_X)
#define QUESTION_Y (CENTER_Y - 60)
@@ -93,7 +97,31 @@ void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType ty
if( type != IET_FIRST_PRESS )
return;
- switch( DeviceI.button )
+ int button = DeviceI.button;
+
+#if defined(XBOX)
+ bool nextChar = false;
+
+ int toAdd = XBOX_VKB.Translate(button, m_sAnswer, &nextChar);
+
+ if( toAdd != 0 && toAdd != KEY_BACK && toAdd != KEY_ESC && toAdd != KEY_ENTER )
+ {
+ if(!nextChar)
+ {
+ if(!m_sAnswer.empty())
+ m_sAnswer = m_sAnswer.erase( m_sAnswer.size()-1 );
+ }
+
+ m_sAnswer += toAdd;
+
+ UpdateText();
+ return;
+ }
+
+ button = toAdd;
+#endif
+
+ switch( button )
{
case KEY_ESC:
m_bCancelled = true;
@@ -110,6 +138,7 @@ void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType ty
break;
default:
char c;
+
c = DeviceI.ToChar();
bool bHoldingShift =
diff --git a/stepmania/src/StepManiaXbox.vcproj b/stepmania/src/StepManiaXbox.vcproj
index 3318a564e1..adb302c37a 100644
--- a/stepmania/src/StepManiaXbox.vcproj
+++ b/stepmania/src/StepManiaXbox.vcproj
@@ -1315,6 +1315,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
+
+
+
+