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