]> git.pld-linux.org Git - packages/dosemu.git/blob - dosemu-Xquit.patch
- don't make SDL subpackage when building without x
[packages/dosemu.git] / dosemu-Xquit.patch
1 diff -Nur dosemu-1.4.0.orig/src/env/video/text.c dosemu-1.4.0.chng/src/env/video/text.c
2 --- dosemu-1.4.0.orig/src/env/video/text.c      2007-05-04 07:59:48.000000000 +0200
3 +++ dosemu-1.4.0.chng/src/env/video/text.c      2008-04-21 22:36:23.000000000 +0200
4 @@ -96,6 +96,11 @@
5    return 1;
6  }
7  
8 +struct text_system* registered_text_system(void)
9 +{
10 +       return Text;
11 +}
12 +
13  /*
14   * Draw a text string.
15   * The attribute is the VGA color/mono text attribute.
16 diff -Nur dosemu-1.4.0.orig/src/plugin/X/X.c dosemu-1.4.0.chng/src/plugin/X/X.c
17 --- dosemu-1.4.0.orig/src/plugin/X/X.c  2007-05-04 07:59:48.000000000 +0200
18 +++ dosemu-1.4.0.chng/src/plugin/X/X.c  2008-04-21 23:03:06.000000000 +0200
19 @@ -383,6 +383,12 @@
20  static Atom comm_atom = None;
21  static Boolean kdos_client = FALSE;            /* started by kdos */
22  
23 +static Boolean about_to_quit = FALSE;
24 +static struct text_system* Text_Tmp;
25 +extern struct text_system* registered_text_system(void);
26 +void (*Draw_cursor_backup)(int x, int y, Bit8u attr, int first, int last, Boolean focus);
27 +void (*Draw_string_backup)(int x, int y , unsigned char *s, int len, Bit8u attr); 
28 +
29  
30  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
31  
32 @@ -486,6 +492,16 @@
33  
34  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
35  
36 +void Draw_cursor_fake(int x, int y, Bit8u attr, int first, int last, Boolean focus)
37 +{
38 +       return;
39 +}
40 +
41 +void Draw_string_fake(int x, int y , unsigned char *s, int len, Bit8u attr)
42 +{
43 +       return;
44 +}
45 +
46  /* utility function for opening a connection and making certain
47   * I am either using or not using the X keyboard Extension.
48   */
49 @@ -1458,9 +1474,40 @@
50            * atom, it means the window manager wants us to die.
51            */
52           if(e.xclient.message_type == proto_atom && *e.xclient.data.l == delete_atom) {
53 +           int i;
54 +
55             X_printf("X: got window delete message\n");
56 -           /* XXX - Is it ok to call this from a SIGALRM handler? */
57 -           leavedos(0);
58 +
59 +           if (about_to_quit)
60 +               break;
61 +               
62 +           about_to_quit = TRUE;
63 +           Text_Tmp = registered_text_system(); 
64 +
65 +           Draw_cursor_backup = Text_Tmp->Draw_cursor;
66 +           Text_Tmp->Draw_cursor = Draw_cursor_fake;
67 +
68 +            for (i = 0; i < 12; i++)
69 +               Text_Tmp->Draw_string(14, i+6, "                                                    " , 52, 0xf0);
70 +               
71 +           Text_Tmp->Draw_string(15,  7, "                                                  " , 50, 0x4f);
72 +           Text_Tmp->Draw_string(15,  8, " You are about to abort DosEmu session.           " , 50, 0x4f);
73 +           Text_Tmp->Draw_string(15,  9, " This is not recomended way for closing DosEmu.   " , 50, 0x4f);
74 +           Text_Tmp->Draw_string(15, 10, " Close all your programs and use exitemu command. " , 50, 0x4f);
75 +           Text_Tmp->Draw_string(15, 11, "                                                  " , 50, 0x4f);
76 +           Text_Tmp->Draw_string(15, 12, " Do you still want to continue?                   " , 50, 0x4f);
77 +           Text_Tmp->Draw_string(15, 13, "                                                  " , 50, 0x4f);
78 +           Text_Tmp->Draw_string(15, 14, "   Y - abort DosEmu session                       " , 50, 0x4f);
79 +           Text_Tmp->Draw_string(15, 15, "   N - continue DosEmu session                    " , 50, 0x4f);
80 +           Text_Tmp->Draw_string(15, 16, "                                                  " , 50, 0x4f);
81 +           
82 +           Text_Tmp->Draw_string(48, 10, "exitemu" , 7, 0x4a);
83 +           Text_Tmp->Draw_string(18, 14, "Y" , 1, 0x4e);
84 +           Text_Tmp->Draw_string(18, 15, "N" , 1, 0x4e);
85 +           
86 +           Draw_string_backup = Text_Tmp->Draw_string;
87 +           Text_Tmp->Draw_string = Draw_string_fake;
88 +           
89             break;
90           }
91  
92 @@ -1490,6 +1537,24 @@
93             keyrel_pending = 0;
94           }
95  
96 +          if (about_to_quit) {
97 +               KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
98 +               if (keysym == XK_Y || keysym == XK_y) {
99 +                  leavedos(0);
100 +               } else if (keysym == XK_N || keysym == XK_n) {
101 +                   about_to_quit = FALSE;
102 +                   Text_Tmp->Draw_cursor = Draw_cursor_backup;
103 +                   Text_Tmp->Draw_string = Draw_string_backup;
104 +                   if(vga.mode_class == TEXT) {
105 +                       X_redraw_text_screen();
106 +                   } else {
107 +                       dirty_all_video_pages();
108 +                       X_update_screen();
109 +                   }
110 +               }
111 +               break;
112 +          }
113 +
114            if((e.xkey.state & ControlMask) && (e.xkey.state & Mod1Mask)) {
115              KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
116              if (keysym == grab_keysym) {
117 @@ -1504,6 +1569,7 @@
118                break;
119              }
120            }
121 +          
122  /* 
123        Clears the visible selection if the cursor is inside the selection
124  */
This page took 0.041799 seconds and 3 git commands to generate.