]> git.sesse.net Git - pistorm/blobdiff - emulator.c
handle keyboard/mouse autoconnect
[pistorm] / emulator.c
index 320c080ccd583f0e4483d65ed5d60a833f2a4d18..1174bd06f455e61f6fa2852d3214a0b6c5313ecf 100644 (file)
@@ -240,7 +240,6 @@ cpu_loop:
 //    printf("CPU emulation reset.\n");
   }
 
-
   if (mouse_hook_enabled && (mouse_extra != 0x00)) {
     // mouse wheel events have occurred; unlike l/m/r buttons, these are queued as keypresses, so add to end of buffer
     switch (mouse_extra) {
@@ -263,7 +262,7 @@ cpu_loop:
 
   goto cpu_loop;
 
-//stop_cpu_emulation:
+stop_cpu_emulation:
   printf("[CPU] End of CPU thread\n");
 }
 
@@ -350,7 +349,8 @@ key_loop:
       }
       if (c == 'q') {
         printf("Quitting and exiting emulator.\n");
-       end_signal = 1;
+             end_signal = 1;
+        goto key_end;
       }
       if (c == 'd') {
         realtime_disassembly ^= 1;
@@ -379,6 +379,10 @@ key_loop:
 
 key_end:
   printf("[KBD] Keyboard thread ending\n");
+  if (cfg->keyboard_grab) {
+    printf(ungrab_message);
+    release_device(keyboard_fd);
+  }
   return (void*)NULL;
 }
 
@@ -515,6 +519,12 @@ int main(int argc, char *argv[]) {
     printf("Failed to open keyboard event source.\n");
   }
 
+  if (cfg->mouse_autoconnect)
+    mouse_hook_enabled = 1;
+
+  if (cfg->keyboard_autoconnect)
+    kb_hook_enabled = 1;
+
   InitGayle();
 
   signal(SIGINT, sigint_handler);