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

Comparing BasiliskII/src/Unix/video_x.cpp (file contents):
Revision 1.1 by cebix, 1999-10-03T14:16:25Z vs.
Revision 1.6 by cebix, 1999-10-07T13:15:15Z

# Line 61 | Line 61 | enum {
61  
62  
63   // Constants
64 < const char KEYCODE_FILE_NAME[] = "/usr/local/lib/basilisk_ii_keycodes";
64 > const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes";
65  
66  
67   // Global variables
# Line 75 | Line 75 | static pthread_t redraw_thread;                                                //
75   static bool has_dga = false;                                            // Flag: Video DGA capable
76  
77   static bool ctrl_down = false;                                          // Flag: Ctrl key pressed
78 + static bool caps_on = false;                                            // Flag: Caps Lock on
79   static bool quit_full_screen = false;                           // Flag: DGA close requested from redraw thread
80   static bool emerg_quit = false;                                         // Flag: Ctrl-Esc pressed, emergency quit requested from MacOS thread
81   static bool emul_suspended = false;                                     // Flag: Emulator suspended
# Line 141 | Line 142 | extern void SysMountFirstFloppy(void);
142   // Set VideoMonitor according to video mode
143   void set_video_monitor(int width, int height, int bytes_per_row, bool native_byte_order)
144   {
145 <        int layout;
145 >        int layout = FLAYOUT_DIRECT;
146          switch (depth) {
147                  case 1:
148                          layout = FLAYOUT_DIRECT;
# Line 203 | Line 204 | static bool init_window(int width, int h
204          wattr.event_mask = eventmask = win_eventmask;
205          wattr.background_pixel = black_pixel;
206          wattr.border_pixel = black_pixel;
207 <        wattr.backing_store = Always;
207 <        wattr.backing_planes = xdepth;
207 >        wattr.backing_store = NotUseful;
208  
209          XSync(x_display, false);
210          the_win = XCreateWindow(x_display, rootwin, 0, 0, width, height, 0, xdepth,
211 <                InputOutput, vis, CWEventMask | CWBackPixel | CWBorderPixel |
212 <                CWBackingStore | CWBackingPlanes, &wattr);
211 >                InputOutput, vis, CWEventMask | CWBackPixel | CWBorderPixel | CWBackingStore, &wattr);
212          XSync(x_display, false);
213          XStoreName(x_display, the_win, GetString(STR_WINDOW_TITLE));
214          XMapRaised(x_display, the_win);
# Line 469 | Line 468 | bool VideoInit(bool classic)
468  
469   #if ENABLE_DGA
470          // DGA available?
471 <        int dga_flags = 0;
472 <        XF86DGAQueryDirectVideo(x_display, screen, &dga_flags);
473 <        has_dga = dga_flags & XF86DGADirectPresent;
471 >        int event_base, error_base;
472 >        if (XF86DGAQueryExtension(x_display, &event_base, &error_base)) {
473 >                int dga_flags = 0;
474 >                XF86DGAQueryDirectVideo(x_display, screen, &dga_flags);
475 >                has_dga = dga_flags & XF86DGADirectPresent;
476 >        } else
477 >                has_dga = false;
478   #endif
479  
480          // Find black and white colors
# Line 539 | Line 542 | bool VideoInit(bool classic)
542          if (mode_str) {
543                  if (sscanf(mode_str, "win/%d/%d", &width, &height) == 2)
544                          display_type = DISPLAY_WINDOW;
545 <                else if (has_dga && strcmp(mode_str, "dga") == 0) {
545 >                else if (has_dga && sscanf(mode_str, "dga/%d/%d", &width, &height) == 2) {
546                          display_type = DISPLAY_DGA;
547 +                        if (width > DisplayWidth(x_display, screen))
548 +                                width = DisplayWidth(x_display, screen);
549 +                        if (height > DisplayHeight(x_display, screen))
550 +                                height = DisplayHeight(x_display, screen);
551 +                }
552 +                if (width <= 0)
553                          width = DisplayWidth(x_display, screen);
554 +                if (height <= 0)
555                          height = DisplayHeight(x_display, screen);
546                }
556          }
557  
558          // Initialize according to display type
# Line 968 | Line 977 | static void handle_events(void)
977                                          code = event2keycode((XKeyEvent *)&event);
978                                  if (code != -1) {
979                                          if (!emul_suspended) {
980 <                                                ADBKeyDown(code);
980 >                                                if (code == 0x39) {     // Caps Lock pressed
981 >                                                        if (caps_on) {
982 >                                                                ADBKeyUp(code);
983 >                                                                caps_on = false;
984 >                                                        } else {
985 >                                                                ADBKeyDown(code);
986 >                                                                caps_on = true;
987 >                                                        }
988 >                                                } else
989 >                                                        ADBKeyDown(code);
990                                                  if (code == 0x36)
991                                                          ctrl_down = true;
992                                          } else {
# Line 987 | Line 1005 | static void handle_events(void)
1005                                          code = keycode_table[((XKeyEvent *)&event)->keycode & 0xff];
1006                                  } else
1007                                          code = event2keycode((XKeyEvent *)&event);
1008 <                                if (code != -1) {
1008 >                                if (code != -1 && code != 0x39) {       // Don't propagate Caps Lock releases
1009                                          ADBKeyUp(code);
1010                                          if (code == 0x36)
1011                                                  ctrl_down = false;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines