ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/SDL/video_sdl.cpp
(Generate patch)

Comparing BasiliskII/src/SDL/video_sdl.cpp (file contents):
Revision 1.8 by gbeauche, 2004-06-26T17:20:35Z vs.
Revision 1.9 by gbeauche, 2004-06-27T17:31:21Z

# Line 787 | Line 787 | static void keycode_init(void)
787  
788                          if (video_driver_found) {
789                                  // Skip aliases
790 <                                static const char alias_str[] = "alias";
791 <                                if (strncmp(line, alias_str, sizeof(alias_str) - 1) == 0)
790 >                                static const char sdl_str[] = "sdl";
791 >                                if (strncmp(line, sdl_str, sizeof(sdl_str) - 1) == 0)
792                                          continue;
793  
794                                  // Read keycode
# Line 799 | Line 799 | static void keycode_init(void)
799                                          break;
800                          } else {
801                                  // Search for SDL video driver string
802 <                                static const char alias_sdl_str[] = "alias SDL";
803 <                                if (strncmp(line, alias_sdl_str, sizeof(alias_sdl_str) - 1) == 0) {
804 <                                        char *p = line + sizeof(alias_sdl_str);
802 >                                static const char sdl_str[] = "sdl";
803 >                                if (strncmp(line, sdl_str, sizeof(sdl_str) - 1) == 0) {
804 >                                        char *p = line + sizeof(sdl_str);
805                                          if (strstr(video_driver, p) == video_driver)
806                                                  video_driver_found = true;
807                                  }
# Line 1629 | Line 1629 | void VideoInstallAccel(void)
1629  
1630  
1631   /*
1632 < *  Translate key event to Mac keycode, returns -1 if no keycode was found
1633 < *  and -2 if the key was recognized as a hotkey
1632 > *  Keyboard-related utilify functions
1633   */
1634  
1635 + static bool is_modifier_key(SDL_KeyboardEvent const & e)
1636 + {
1637 +        switch (e.keysym.sym) {
1638 +        case SDLK_NUMLOCK:
1639 +        case SDLK_CAPSLOCK:
1640 +        case SDLK_SCROLLOCK:
1641 +        case SDLK_RSHIFT:
1642 +        case SDLK_LSHIFT:
1643 +        case SDLK_RCTRL:
1644 +        case SDLK_LCTRL:
1645 +        case SDLK_RALT:
1646 +        case SDLK_LALT:
1647 +        case SDLK_RMETA:
1648 +        case SDLK_LMETA:
1649 +        case SDLK_LSUPER:
1650 +        case SDLK_RSUPER:
1651 +        case SDLK_MODE:
1652 +        case SDLK_COMPOSE:
1653 +                return true;
1654 +        }
1655 +        return false;
1656 + }
1657 +
1658   static bool is_ctrl_down(SDL_keysym const & ks)
1659   {
1660          return ctrl_down || (ks.mod & KMOD_CTRL);
1661   }
1662  
1663 +
1664 + /*
1665 + *  Translate key event to Mac keycode, returns -1 if no keycode was found
1666 + *  and -2 if the key was recognized as a hotkey
1667 + */
1668 +
1669   static int kc_decode(SDL_keysym const & ks, bool key_down)
1670   {
1671          switch (ks.sym) {
# Line 1707 | Line 1735 | static int kc_decode(SDL_keysym const &
1735          case SDLK_RCTRL: return 0x36;
1736          case SDLK_LSHIFT: return 0x38;
1737          case SDLK_RSHIFT: return 0x38;
1738 + #if (defined(__APPLE__) && defined(__MACH__))
1739 +        case SDLK_LALT: return 0x3a;
1740 +        case SDLK_RALT: return 0x3a;
1741 +        case SDLK_LMETA: return 0x37;
1742 +        case SDLK_RMETA: return 0x37;
1743 + #else
1744          case SDLK_LALT: return 0x37;
1745          case SDLK_RALT: return 0x37;
1746          case SDLK_LMETA: return 0x3a;
1747          case SDLK_RMETA: return 0x3a;
1748 + #endif
1749          case SDLK_MENU: return 0x32;
1750          case SDLK_CAPSLOCK: return 0x39;
1751          case SDLK_NUMLOCK: return 0x47;
# Line 1817 | Line 1852 | static void handle_events(void)
1852                          // Keyboard
1853                          case SDL_KEYDOWN: {
1854                                  int code = -1;
1855 <                                if (use_keycodes) {
1855 >                                if (use_keycodes && !is_modifier_key(event.key)) {
1856                                          if (event2keycode(event.key, true) != -2)       // This is called to process the hotkeys
1857                                                  code = keycode_table[event.key.keysym.scancode & 0xff];
1858                                  } else
# Line 1845 | Line 1880 | static void handle_events(void)
1880                          }
1881                          case SDL_KEYUP: {
1882                                  int code = -1;
1883 <                                if (use_keycodes) {
1883 >                                if (use_keycodes && !is_modifier_key(event.key)) {
1884                                          if (event2keycode(event.key, false) != -2)      // This is called to process the hotkeys
1885                                                  code = keycode_table[event.key.keysym.scancode & 0xff];
1886                                  } else
1887                                          code = event2keycode(event.key, false);
1888 <                                if (code >= 0 && code != 0x39) {        // Don't propagate Caps Lock releases
1889 <                                        ADBKeyUp(code);
1888 >                                if (code >= 0) {
1889 >                                        if (code == 0x39) {     // Caps Lock released
1890 >                                                if (caps_on) {
1891 >                                                        ADBKeyUp(code);
1892 >                                                        caps_on = false;
1893 >                                                } else {
1894 >                                                        ADBKeyDown(code);
1895 >                                                        caps_on = true;
1896 >                                                }
1897 >                                        } else
1898 >                                                ADBKeyUp(code);
1899                                          if (code == 0x36)
1900                                                  ctrl_down = false;
1901                                  }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines