From b9d7e3be24b70e560c94d18b6ac326d5f4f42eba Mon Sep 17 00:00:00 2001
From: Fons Rademakers <Fons.Rademakers@cern.ch>
Date: Sun, 15 Jul 2001 18:01:39 +0000
Subject: [PATCH] turn on again keyboard AutoRepeat in tetris dtor.

git-svn-id: http://root.cern.ch/svn/root/trunk@2578 27541ba8-7e3a-0410-8455-c3a389f83636
---
 test/Tetris.cxx | 23 +++++++++++++++++++++--
 test/Tetris.h   |  5 +++--
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/test/Tetris.cxx b/test/Tetris.cxx
index 75ad5d678c7..2c0e1dfca2c 100644
--- a/test/Tetris.cxx
+++ b/test/Tetris.cxx
@@ -1,4 +1,4 @@
-// @(#)root/test:$Name:  $:$Id: Tetris.cxx,v 1.8 2001/03/15 18:41:33 rdm Exp $
+// @(#)root/test:$Name:  $:$Id: Tetris.cxx,v 1.9 2001/06/26 12:27:45 brun Exp $
 // Author: Valeriy Onuchin & Fons Rademakers   04/10/98
 
 ///////////////////////////////////////////////////////////////////
@@ -828,6 +828,25 @@ KeyHandler::KeyHandler() : TGFrame(gClient->GetRoot(),0,0)
    main_frame->BindKey(this, gVirtualX->KeysymToKeycode(kKey_Space), kAnyModifier);
 }
 
+KeyHandler::~KeyHandler()
+{
+   // Cleanup key handler.
+
+   // get main frame of Tetris canvas
+   TRootCanvas *main_frame = (TRootCanvas*)(gTetris->GetCanvasImp());
+
+   // remove binding of arrow keys and space-bar key
+printf("Remove key bindings\n");
+   main_frame->RemoveBind(this, gVirtualX->KeysymToKeycode(kKey_Up),    kAnyModifier);
+   main_frame->RemoveBind(this, gVirtualX->KeysymToKeycode(kKey_Left),  kAnyModifier);
+   main_frame->RemoveBind(this, gVirtualX->KeysymToKeycode(kKey_Right), kAnyModifier);
+   main_frame->RemoveBind(this, gVirtualX->KeysymToKeycode(kKey_Down),  kAnyModifier);
+   main_frame->RemoveBind(this, gVirtualX->KeysymToKeycode(kKey_Space), kAnyModifier);
+   // restore key auto repeat functionality, was turned off in TGMainFrame::HandleKey()
+   gVirtualX->SetKeyAutoRepeat(kTRUE);
+}
+
+
 Bool_t KeyHandler::HandleKey(Event_t *event)
 {
    // Handle arrow and spacebar keys
@@ -926,7 +945,7 @@ Tetris::Tetris() :
    fPiecesDropped = 0;
    SetFillColor(31);
 
-   new KeyHandler();
+   fKeyHandler = new KeyHandler();
    fUpdateLevelTimer = new UpdateLevelTimer(60000);  // every  minute
    SetFixedSize();
    Update();
diff --git a/test/Tetris.h b/test/Tetris.h
index 09dea2d8ac6..bcf06d58c23 100644
--- a/test/Tetris.h
+++ b/test/Tetris.h
@@ -328,7 +328,7 @@ class KeyHandler : public TGFrame {
 
 public:
    KeyHandler();
-   ~KeyHandler() { }
+   ~KeyHandler();
 
    Bool_t HandleKey(Event_t *event);    // handler of the key events
 };
@@ -366,6 +366,7 @@ private:
    NewGameButton    *fNewGame;            // clicking on button initiates new game
    QuitButton       *fQuit;               // clicking on button makes game over
    PauseButton      *fPause;              // pause/continue button
+   KeyHandler       *fKeyHandler;         // handler for arrow keys
 
    Int_t             fPiecesDropped;      // number of pieces dropped
    UpdateLevelTimer *fUpdateLevelTimer;   // periodically updates game level
@@ -387,7 +388,7 @@ protected:
 
 public:
    Tetris();
-   virtual ~Tetris() { }
+   virtual ~Tetris() { delete fKeyHandler; }
 
    Int_t  GetLevel()           { return fLevel->GetValue(); }
    Int_t  GetLinesRemoved()    { return fLinesRemoved->GetValue(); }
-- 
GitLab