Browse Source

* set inited boolean to prevent crashes

peter 22 years ago
parent
commit
450c9a848c
1 changed files with 18 additions and 2 deletions
  1. 18 2
      rtl/win32/keyboard.pp

+ 18 - 2
rtl/win32/keyboard.pp

@@ -56,7 +56,8 @@ var
    altNumBuffer   : string [3];
    altNumBuffer   : string [3];
    { used for keyboard specific stuff }
    { used for keyboard specific stuff }
    KeyBoardLayout : HKL;
    KeyBoardLayout : HKL;
-
+   Inited : Boolean;
+   
 procedure incqueueindex(var l : longint);
 procedure incqueueindex(var l : longint);
 
 
   begin
   begin
@@ -75,6 +76,11 @@ end;
 { gets or peeks the next key from the queue, does not wait for new keys }
 { gets or peeks the next key from the queue, does not wait for new keys }
 function getKeyEventFromQueue (VAR t : TKeyEventRecord; Peek : boolean) : boolean;
 function getKeyEventFromQueue (VAR t : TKeyEventRecord; Peek : boolean) : boolean;
 begin
 begin
+  if not Inited then
+    begin
+    getKeyEventFromQueue := false;
+    exit;
+    end;
   EnterCriticalSection (lockVar);
   EnterCriticalSection (lockVar);
   if keyEventsInQueue then
   if keyEventsInQueue then
   begin
   begin
@@ -94,6 +100,11 @@ end;
 { gets the next key from the queue, does wait for new keys }
 { gets the next key from the queue, does wait for new keys }
 function getKeyEventFromQueueWait (VAR t : TKeyEventRecord) : boolean;
 function getKeyEventFromQueueWait (VAR t : TKeyEventRecord) : boolean;
 begin
 begin
+  if not Inited then
+    begin
+      getKeyEventFromQueueWait := false;
+      exit;
+    end;
   WaitForSingleObject (newKeyEvent, dword(INFINITE));
   WaitForSingleObject (newKeyEvent, dword(INFINITE));
   getKeyEventFromQueueWait := getKeyEventFromQueue (t, false);
   getKeyEventFromQueueWait := getKeyEventFromQueue (t, false);
 end;
 end;
@@ -236,6 +247,7 @@ begin
    nextkeyevent:=0;
    nextkeyevent:=0;
    nextfreekeyevent:=0;
    nextfreekeyevent:=0;
    SetKeyboardEventHandler (@HandleKeyboard);
    SetKeyboardEventHandler (@HandleKeyboard);
+   Inited:=true;
 end;
 end;
 
 
 procedure SysDoneKeyboard;
 procedure SysDoneKeyboard;
@@ -244,6 +256,7 @@ begin
   DeleteCriticalSection (lockVar);
   DeleteCriticalSection (lockVar);
   FlushConsoleInputBuffer(StdInputHandle);
   FlushConsoleInputBuffer(StdInputHandle);
   closeHandle (newKeyEvent);
   closeHandle (newKeyEvent);
+  Inited:=false;
 end;
 end;
 
 
 {$define USEKEYCODES}
 {$define USEKEYCODES}
@@ -820,7 +833,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.9  2002-09-07 16:01:28  peter
+  Revision 1.10  2003-10-27 15:28:07  peter
+    * set inited boolean to prevent crashes
+
+  Revision 1.9  2002/09/07 16:01:28  peter
     * old logs removed and tabs fixed
     * old logs removed and tabs fixed
 
 
   Revision 1.8  2002/07/17 07:28:21  pierre
   Revision 1.8  2002/07/17 07:28:21  pierre