Merge pull request #4222 from alexanderkyte/fix_mismatch_com_disabled
[mono.git] / mcs / class / corlib / System / WindowsConsoleDriver.cs
index c262701f7940a972844ac4d6a5ab965a0f556673..10ba8db45e5afdda5b1afc90d3892f5a6e649e0b 100755 (executable)
@@ -26,7 +26,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if !NET_2_1
+#if !MOBILE
 using System.Runtime.InteropServices;
 using System.Text;
 namespace System {
@@ -265,7 +265,7 @@ namespace System {
                                                return false;
 
                                        //KEY_EVENT == 1
-                                       if (record.EventType == 1 && record.KeyDown)
+                                       if (record.EventType == 1 && record.KeyDown && !IsModifierKey (record.VirtualKeyCode))
                                                return true;
 
                                        if (!ReadConsoleInput (inputHandle, out record, 1, out eventsRead))
@@ -330,7 +330,7 @@ namespace System {
                public bool TreatControlCAsInput {
                        get {
                                int mode;
-                               if (!GetConsoleMode (outputHandle, out mode))
+                               if (!GetConsoleMode (inputHandle, out mode))
                                        throw new Exception ("Failed in GetConsoleMode: " + Marshal.GetLastWin32Error ());
 
                                // ENABLE_PROCESSED_INPUT
@@ -339,7 +339,7 @@ namespace System {
 
                        set {
                                int mode;
-                               if (!GetConsoleMode (outputHandle, out mode))
+                               if (!GetConsoleMode (inputHandle, out mode))
                                        throw new Exception ("Failed in GetConsoleMode: " + Marshal.GetLastWin32Error ());
 
                                bool cAsInput = ((mode & 1) == 0);
@@ -349,9 +349,9 @@ namespace System {
                                if (value)
                                        mode &= ~1;
                                else
-                                       mode++;
+                                       mode |= 1;
 
-                               if (!SetConsoleMode (outputHandle, mode))
+                               if (!SetConsoleMode (inputHandle, mode))
                                        throw new Exception ("Failed in SetConsoleMode: " + Marshal.GetLastWin32Error ());
                        }
                }
@@ -542,7 +542,7 @@ namespace System {
                                throw new ArgumentOutOfRangeException ("left/top", "Windows error " + Marshal.GetLastWin32Error ());
                }
 
-               private bool IsModifierKey(short virtualKeyCode)
+               static bool IsModifierKey (short virtualKeyCode)
                {
                        // 0x10 through 0x14 is shift/control/alt/pause/capslock
                        // 0x2C is print screen, 0x90 is numlock, 0x91 is scroll lock
@@ -550,10 +550,7 @@ namespace System {
                        case 0x10:
                        case 0x11:
                        case 0x12:
-                       case 0x13:
                        case 0x14:
-                               return true;
-                       case 0x2C:
                        case 0x90:
                        case 0x91:
                                return true;