SOURCES: dosemu-Xquit.patch (NEW) - initial revision
pascalek
pascalek at pld-linux.org
Wed Jan 30 12:23:49 CET 2008
Author: pascalek Date: Wed Jan 30 11:23:49 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- initial revision
---- Files affected:
SOURCES:
dosemu-Xquit.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/dosemu-Xquit.patch
diff -u /dev/null SOURCES/dosemu-Xquit.patch:1.1
--- /dev/null Wed Jan 30 12:23:49 2008
+++ SOURCES/dosemu-Xquit.patch Wed Jan 30 12:23:44 2008
@@ -0,0 +1,114 @@
+diff -Nur dosemu-1.4.0.orig/src/plugin/X/X.c dosemu-1.4.0.chng/src/plugin/X/X.c
+--- dosemu-1.4.0.orig/src/plugin/X/X.c 2007-05-04 07:59:48.000000000 +0200
++++ dosemu-1.4.0.chng/src/plugin/X/X.c 2008-01-30 12:09:47.000000000 +0100
+@@ -383,6 +383,9 @@
+ static Atom comm_atom = None;
+ static Boolean kdos_client = FALSE; /* started by kdos */
+
++static Boolean about_to_quit = FALSE;
++extern struct text_system Text_X;
++void (*Draw_cursor_backup)(int x, int y, Bit8u attr, int first, int last, Boolean focus);
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+@@ -1434,6 +1437,7 @@
+
+ case FocusIn:
+ X_printf("X: focus in\n");
++ if (about_to_quit) break;
+ if (vga.mode_class == TEXT) text_gain_focus();
+ if (config.X_background_pause && !dosemu_user_froze) unfreeze_dosemu ();
+ have_focus = TRUE;
+@@ -1441,6 +1445,7 @@
+
+ case FocusOut:
+ X_printf("X: focus out\n");
++ if (about_to_quit) break;
+ if (mainwindow == fullscreenwindow) break;
+ if (vga.mode_class == TEXT) text_lose_focus();
+ output_byte_8042(port60_buffer | 0x80);
+@@ -1458,9 +1463,36 @@
+ * atom, it means the window manager wants us to die.
+ */
+ if(e.xclient.message_type == proto_atom && *e.xclient.data.l == delete_atom) {
++ int i;
++
+ X_printf("X: got window delete message\n");
+- /* XXX - Is it ok to call this from a SIGALRM handler? */
+- leavedos(0);
++
++ if (about_to_quit)
++ break;
++
++ about_to_quit = TRUE;
++ Draw_cursor_backup = Text_X.Draw_cursor;
++ Text_X.Draw_cursor = NULL;
++ freeze_dosemu();
++
++ for (i = 0; i < 12; i++)
++ Text_X.Draw_string(14, i+6, " " , 52, 0xf0);
++
++ Text_X.Draw_string(15, 7, " " , 50, 0x4f);
++ Text_X.Draw_string(15, 8, " You are about to abort DosEmu session. " , 50, 0x4f);
++ Text_X.Draw_string(15, 9, " This is not recomended way for closing DosEmu. " , 50, 0x4f);
++ Text_X.Draw_string(15, 10, " Close all your programs and use exitemu command. " , 50, 0x4f);
++ Text_X.Draw_string(15, 11, " " , 50, 0x4f);
++ Text_X.Draw_string(15, 12, " Do you still want to continue? " , 50, 0x4f);
++ Text_X.Draw_string(15, 13, " " , 50, 0x4f);
++ Text_X.Draw_string(15, 14, " Y - abort DosEmu session " , 50, 0x4f);
++ Text_X.Draw_string(15, 15, " N - continue DosEmu session " , 50, 0x4f);
++ Text_X.Draw_string(15, 16, " " , 50, 0x4f);
++
++ Text_X.Draw_string(48, 10, "exitemu" , 7, 0x4a);
++ Text_X.Draw_string(18, 14, "Y" , 1, 0x4e);
++ Text_X.Draw_string(18, 15, "N" , 1, 0x4e);
++
+ break;
+ }
+
+@@ -1490,6 +1522,24 @@
+ keyrel_pending = 0;
+ }
+
++ if (about_to_quit) {
++ KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
++ if (keysym == XK_Y || keysym == XK_y) {
++ leavedos(0);
++ } else if (keysym == XK_N || keysym == XK_n) {
++ about_to_quit = FALSE;
++ Text_X.Draw_cursor = Draw_cursor_backup;
++ if(vga.mode_class == TEXT) {
++ X_redraw_text_screen();
++ } else {
++ dirty_all_video_pages();
++ X_update_screen();
++ }
++ unfreeze_dosemu();
++ }
++ break;
++ }
++
+ if((e.xkey.state & ControlMask) && (e.xkey.state & Mod1Mask)) {
+ KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
+ if (keysym == grab_keysym) {
+@@ -1504,6 +1554,7 @@
+ break;
+ }
+ }
++
+ /*
+ Clears the visible selection if the cursor is inside the selection
+ */
+diff -Nur dosemu-1.4.0.orig/src/plugin/X/X_font.c dosemu-1.4.0.chng/src/plugin/X/X_font.c
+--- dosemu-1.4.0.orig/src/plugin/X/X_font.c 2007-05-04 07:59:48.000000000 +0200
++++ dosemu-1.4.0.chng/src/plugin/X/X_font.c 2008-01-30 10:04:00.000000000 +0100
+@@ -195,8 +195,7 @@
+ text_colors[i] = xc.pixel;
+ }
+
+-
+-static struct text_system Text_X =
++struct text_system Text_X =
+ {
+ X_draw_string,
+ X_draw_line,
================================================================
More information about the pld-cvs-commit
mailing list