File N_zap_warning_xserver.diff of Package xorg-x11-server.28361

From: Luc Verhaegen <lverhaegen@suse.de>

Handle 'Zap' - Ctrl-Alt-Backspace more gracefully

To avoid accidental zapping of the Xserver warn after
the first ctrl-alt-backspace by emitting a beep. Only
Zap the server if a second ctrl-alt-backspace is sent
within 2 seconds.
This can be enabled with a new option flag "ZapWarning"

Index: xorg-server-1.12.1/hw/xfree86/common/xf86Config.c
===================================================================
--- xorg-server-1.12.1.orig/hw/xfree86/common/xf86Config.c
+++ xorg-server-1.12.1/hw/xfree86/common/xf86Config.c
@@ -680,6 +680,7 @@ typedef enum {
     FLAG_NOTRAPSIGNALS,
     FLAG_DONTVTSWITCH,
     FLAG_DONTZAP,
+    FLAG_ZAPWARNING,
     FLAG_DONTZOOM,
     FLAG_DISABLEVIDMODE,
     FLAG_ALLOWNONLOCAL,
@@ -717,6 +718,8 @@ static OptionInfoRec FlagOptions[] = {
      {0}, FALSE},
     {FLAG_DONTZAP, "DontZap", OPTV_BOOLEAN,
      {0}, FALSE},
+    { FLAG_ZAPWARNING,           "ZapWarning",                   OPTV_BOOLEAN,
+     {0}, FALSE },
     {FLAG_DONTZOOM, "DontZoom", OPTV_BOOLEAN,
      {0}, FALSE},
     {FLAG_DISABLEVIDMODE, "DisableVidModeExtension", OPTV_BOOLEAN,
@@ -805,6 +805,7 @@ configServerFlags(XF86ConfFlagsPtr flags
     xf86GetOptValBool(FlagOptions, FLAG_NOTRAPSIGNALS, &xf86Info.notrapSignals);
     xf86GetOptValBool(FlagOptions, FLAG_DONTVTSWITCH, &xf86Info.dontVTSwitch);
     xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap);
+    xf86GetOptValBool(FlagOptions, FLAG_ZAPWARNING, &xf86Info.ZapWarning);
     xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom);
 
     xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI);
Index: xorg-server-1.12.1/hw/xfree86/common/xf86Events.c
===================================================================
--- xorg-server-1.12.1.orig/hw/xfree86/common/xf86Events.c
+++ xorg-server-1.12.1/hw/xfree86/common/xf86Events.c
@@ -182,13 +182,25 @@ xf86ProcessActionEvent(ActionEvent actio
     DebugF("ProcessActionEvent(%d,%p)\n", (int) action, arg);
     switch (action) {
     case ACTION_TERMINATE:
-        if (!xf86Info.dontZap) {
-            xf86Msg(X_INFO, "Server zapped. Shutting down.\n");
+        if (xf86Info.dontZap)
+            break;
+
+	if (xf86Info.ZapWarning) {
+		static struct timeval LastZap = { 0, 0};
+		struct timeval NewZap;
+
+		gettimeofday(&NewZap, NULL);
+
+		if ((NewZap.tv_sec - LastZap.tv_sec) >= 2) {
+			xf86OSRingBell(30, 1000, 50);
+			LastZap = NewZap;
+			break;
+		}
+	}
 #ifdef XFreeXDGA
-            DGAShutdown();
+        DGAShutdown();
 #endif
-            GiveUp(0);
-        }
+        GiveUp(0);
         break;
     case ACTION_NEXT_MODE:
         if (!xf86Info.dontZoom)
Index: xorg-server-1.12.1/hw/xfree86/common/xf86Globals.c
===================================================================
--- xorg-server-1.12.1.orig/hw/xfree86/common/xf86Globals.c
+++ xorg-server-1.12.1/hw/xfree86/common/xf86Globals.c
@@ -108,6 +108,7 @@ xf86InfoRec xf86Info = {
     .autoVTSwitch = TRUE,
     .ShareVTs = FALSE,
     .dontZap = FALSE,
+    .ZapWarning = TRUE,
     .dontZoom = FALSE,
     .notrapSignals = FALSE,
     .currentScreen = NULL,
Index: xorg-server-1.12.1/hw/xfree86/common/xf86Privstr.h
===================================================================
--- xorg-server-1.12.1.orig/hw/xfree86/common/xf86Privstr.h
+++ xorg-server-1.12.1/hw/xfree86/common/xf86Privstr.h
@@ -70,6 +70,7 @@ typedef struct {
     Bool autoVTSwitch;
     Bool ShareVTs;
     Bool dontZap;
+    Bool ZapWarning;
     Bool dontZoom;
     Bool notrapSignals;         /* don't exit cleanly - die at fault */
 
openSUSE Build Service is sponsored by