weird mouse issue

Ive added mouse functionality to my game and a strange thing happens, any time i move the mouse outside the game display window for more then a second or two the program exits. It doesn't crash, it just exits with a normal status zero. (obviously thats without grab_mouse) but when i use grab_mouse the same thing occurs if i have the mouse at any of the corners for the same length of time. I have no code which should allow this to occur... any help would be very appreciated.

Edgar Reynaldo

You should show code and also try to produce a minimal example that reproduces this. Also, you ran it from a console and it is returning 0? On what conditions do you return from your program? Link the the allegro debug libraries and when your program runs, look at the allegro.log file created for clues.

And what versions are you using... compiler, allegro, and what os


Here is a minimal example that reproduces the effect:

1#include <iostream> 2 3#include"allegro5/allegro.h" 4#include"allegro5/allegro_image.h" 5#include"allegro5/debug.h" 6using namespace std; 7 8int main() 9{ 10 //initialize allegro 11 al_init(); 12 al_init_image_addon(); 13 // initialize display 14 ALLEGRO_DISPLAY_MODE DisplayData; 15 al_get_display_mode(al_get_num_display_modes() - 1, &DisplayData); 16 unsigned short ScreenHeight = 640; 17 unsigned short ScreenWidth = 640; 18 ALLEGRO_DISPLAY * Display = NULL; 19 Display = al_create_display(ScreenHeight, ScreenWidth); 20 // initialize Keyboard 21 al_install_keyboard(); 22 // initialize mouse 23 al_install_mouse(); 24 // Initalize events 25 ALLEGRO_EVENT_QUEUE * EventQueue = al_create_event_queue(); 26 al_register_event_source(EventQueue, al_get_mouse_event_source()); 27 al_register_event_source(EventQueue, al_get_keyboard_event_source()); 28 ALLEGRO_EVENT Events; 29 30 bool Run = true; 31 while(Run == true) 32 { 33 al_wait_for_event(EventQueue, & Events); 34 if(Events.keyboard.keycode == ALLEGRO_KEY_ESCAPE) // exit on escape 35 { 36 Run = false; 37 } 38 if(Events.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) 39 { 40 std::cout << "Mouse Event Detected. \n"; // to verify mouse events work 41 } 42 43 } 44 45 46 al_destroy_display(Display); 47 return 0; 48}

in order to get the exit to happen just wiggle the cursor around your desktop both on and off of the display. i added the debug.h file but could find no log.

i am running windows 7 home premium sp 1 64 bit, allegro 5 (the most recent stable release), mingw gcc 4.8.1


Change this part of your code:

1if(Events.keyboard.keycode == ALLEGRO_KEY_ESCAPE) // exit on escape 2{ 3 Run = false; 4}

To this:

1if(Events.type == ALLEGRO_EVENT_KEY_DOWN) 2{ 3 if(Events.keyboard.keycode == ALLEGRO_KEY_ESCAPE) // exit on escape 4 { 5 Run = false; 6 } 7}

You have to check first what kind of event you have got from the queue and then process is.

At first glance it seems that when the mouse leaves window area the ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY is fired, and the values of that event match the ALLEGRO_KEY_ESCAPE condition you are checking for ( without the check for event type ).
And that makes your program exit, just like you wanted. :)

Thomas Fjellstrom

One thing to know is that allegro stores the event data in a "shared" data type. It shares space in the same structure for the different event types. So you ALWAYS want to check what type the event is when checking for the actual events, otherways odd things can and will happen.


Yup, That did it, thanks! And I'll be sure to remember that in the future! 8-)

Thread #615216. Printed from