File xv-3.10a-signal.dif of Package xv.import4872

--- Imakefile
+++ Imakefile	2008-05-23 13:21:23.000000000 +0200
@@ -150,7 +150,7 @@ SYS_LIBRARIES=        -lm
 
 
 DEPLIBS = $(LIBJPEG) $(LIBTIFF)
-LOCAL_LIBRARIES = $(XLIB) $(DEPLIBS)
+LOCAL_LIBRARIES = $(XLIB) $(XTOOLLIB) $(DEPLIBS)
 
 DEFINES= $(SCO) $(UNIX) $(NODIRENT) $(VPRINTF) $(TIMERS) \
 	$(HPUX7) $(JPEG) $(TIFF) $(PDS) $(DXWM) $(RAND) \
--- xv.c
+++ xv.c	2008-05-23 13:03:36.000000000 +0200
@@ -159,6 +159,8 @@ static int  curstype, stdinflag, browseM
 static int  nodecor;
 static double gamval, rgamval, ggamval, bgamval;
 
+XtAppContext context;
+
 /*******************************************/
 int main(argc, argv)
      int    argc;
@@ -173,6 +175,12 @@ int main(argc, argv)
   Window rootReturn, parentReturn, *children;
   unsigned int numChildren, rootDEEP;
 
+#ifdef AUTO_EXPAND
+  signal(SIGHUP, SIG_IGN);
+#endif
+#ifndef NOSIGNAL
+  signal(SIGQUIT, SIG_IGN);
+#endif
 
 #ifdef VMS
   /* convert VMS-style arguments to unix names and glob */
@@ -279,11 +279,6 @@ int main(argc, argv)
   if (!tmpdir) FatalError("can't malloc 'tmpdir'\n");
   strcpy(tmpdir, tmpstr);
 
-#ifdef AUTO_EXPAND
-  Vdinit();
-  vd_handler_setup();
-#endif
-
   /* init command-line options flags */
   infogeom = DEFINFOGEOM;  ctrlgeom = DEFCTRLGEOM;
   gamgeom  = DEFGAMGEOM;   browgeom = DEFBROWGEOM;
@@ -378,7 +383,10 @@ int main(argc, argv)
   parseResources(argc,argv);
   parseCmdLine(argc, argv);
   verifyArgs();
+#ifdef AUTO_EXPAND
+  Vdinit();
+  vd_handler_setup();
+#endif
-
 
 #if 0
 #ifdef XVEXECPATH
@@ -1245,6 +1253,10 @@ static void parseResources(argc, argv)
     exit(1);
   }
 
+  i = 0;
+  XtToolkitInitialize();
+  context = XtCreateApplicationContext();
+  XtDisplayInitialize(context, theDisp, NULL, "XV", NULL, 0, &i, argv);
 
 
   if (rd_str ("aspect")) {
--- xv.h
+++ xv.h	2008-05-23 12:25:12.000000000 +0200
@@ -1946,10 +1946,6 @@ int   Rmvdir               PARM((char *)
 int   Movevdir             PARM((char *, char *));
 int   Isarchive            PARM((char *));
 int   Isvdir               PARM((char *));
-void  vd_HUPhandler        PARM((void));
-void  vd_handler           PARM((int));
-int   vd_Xhandler          PARM((Display *, XErrorEvent *));
-int   vd_XIOhandler        PARM((Display *));
 void  vd_handler_setup     PARM((void));
 
 
--- xvevent.c
+++ xvevent.c	2008-05-23 12:18:44.000000000 +0200
@@ -58,6 +58,7 @@ static void CropKey            PARM((int
 static void TrackPicValues     PARM((int, int));
 static int  CheckForConfig     PARM((void));
 static Bool IsConfig           PARM((Display *, XEvent *, char *));
+static void QuitOnInterrupt    PARM((XtPointer dummy, XtSignalId* Id));
 static void onInterrupt        PARM((int));
 
 static void   Paint            PARM((void));
@@ -74,6 +75,11 @@ static void   annotatePic      PARM((voi
 static int    debkludge_offx;
 static int    debkludge_offy;
 
+#ifndef NOSIGNAL
+static XtSignalId IdQuit = 0;
+extern XtAppContext context;
+#endif
+
 /****************/
 int EventLoop()
 /****************/
@@ -90,6 +96,9 @@ int EventLoop()
 
 
 #ifndef NOSIGNAL
+  if (IdQuit)
+    XtRemoveSignal(IdQuit);
+  IdQuit = XtAppAddSignal(context, QuitOnInterrupt, NULL);
   signal(SIGQUIT, onInterrupt);
 #endif
 
@@ -140,7 +149,11 @@ int EventLoop()
        in real-time (polling, flashing the selection, etc.) get next event */
     if ((waitsec<0.0 && !polling && !HaveSelection()) || XPending(theDisp)>0)
     {
+#ifndef NOSIGNAL
+      XtAppNextEvent(context, &event);
+#else
       XNextEvent(theDisp, &event);
+#endif
       retval = HandleEvent(&event,&done);
     }
 
@@ -2681,8 +2694,7 @@ int xvErrorHandler(disp, err)
 
 
 /************************************************************************/
-static void onInterrupt(i)
-     int i;
+static void QuitOnInterrupt(XtPointer dummy, XtSignalId* Id)
 {
   /* but first, if any input-grabbing popups are active, we have to 'cancel'
      them. */
@@ -2727,6 +2739,10 @@ static void onInterrupt(i)
   frominterrupt = 1;
 }
 
+static void onInterrupt(int i)
+{
+  XtNoticeSignal(IdQuit);
+}
 
 
 
--- xvgrab.c
+++ xvgrab.c	2008-05-26 14:06:49.591033050 +0200
@@ -69,6 +69,10 @@ static int    CountColors24       PARM((
 static int    Trivial24to8        PARM((byte *, int, int, byte *,
 					byte *, byte *, byte *, int));
 
+#ifndef NOSIGNAL
+extern XtAppContext context;
+#endif
+
 /***********************************/
 int Grab()
 {
@@ -113,7 +117,11 @@ int Grab()
       if (t >= startT + grabDelay) break;
       if (XPending(theDisp)>0) {
 	XEvent evt;
+#ifndef NOSIGNAL
+	XtAppNextEvent(context, &evt);
+#else
 	XNextEvent(theDisp, &evt);
+#endif
 	i = HandleEvent(&evt, &done);
 	if (done) {                    /* only 'new image' cmd accepted=quit */
 	  if (i==QUIT) Quit(0);
@@ -175,7 +183,11 @@ int Grab()
       }
 
       /* continue to handle events while waiting... */
+#ifndef NOSIGNAL
+      XtAppNextEvent(context, &evt);
+#else
       XNextEvent(theDisp, &evt);
+#endif
       i = HandleEvent(&evt, &done);
       if (done) {                    /* only 'new image' cmd accepted=quit */
 	if (i==QUIT) {
@@ -365,7 +377,11 @@ int Grab()
       state = 0;
       while (state != 3) {
 	XEvent event;
+#ifndef NOSIGNAL
+	XtAppNextEvent(context, &event);
+#else
 	XNextEvent(theDisp, &event);
+#endif
 	HandleEvent(&event, &i);
 
 	if (!(state&1) && event.type == MapNotify &&
--- xvpcd.c
+++ xvpcd.c	2008-05-26 14:08:19.428156862 +0200
@@ -114,6 +114,10 @@ static  byte  Y[351] = {
   255
 };
 
+#ifndef NOSIGNAL
+extern XtAppContext context;
+#endif
+
 /*******************************************/
 /* The size should be -1 for the popup to ask otherwise fast is assumed */
 /* returns '1' on success */
@@ -259,7 +263,11 @@ data for 16 base:
     while (leaveitup) {
       int i;
       XEvent event;
+#ifndef NOSIGNAL
+      XtAppNextEvent(context, &event);
+#else
       XNextEvent(theDisp, &event);
+#endif
       HandleEvent(&event, &i);
     }
     /* At this point goforit and size will have been set */
--- xvpic2.c
+++ xvpic2.c	2008-05-26 14:09:26.354952942 +0200
@@ -321,6 +321,10 @@ struct _form_tab {
 #define P2BM 2
 #define P2BI 3
 
+#ifndef NOSIGNAL
+extern XtAppContext context;
+#endif
+
 /* The main routine to load a PIC2 file. */
 int LoadPIC2(fname, pinfo, quick)
 char *fname;
@@ -3541,7 +3545,11 @@ int cmd;
 	x_offset = atoi(x_offsetp);
 	y_offset = atoi(y_offsetp);
 
+#ifndef NOSIGNAL
+	XtAppNextEvent(context, &event);
+#else
         XNextEvent(theDisp, &event);
+#endif
 	HandleEvent(&event, &i);
 
 	writePIC2();
--- xvpopup.c
+++ xvpopup.c	2008-05-26 14:10:21.880590702 +0200
@@ -130,6 +130,9 @@ static int         padLoadLen = 0;
 static const char *padLoadNames[PAD_MAXDEFLEN];
 static const char *padLoadVals [PAD_MAXDEFLEN];
 
+#ifndef NOSIGNAL
+extern XtAppContext context;
+#endif
 
 /***************************************************/
 void CenterMapWindow(win, dx, dy, w, h)
@@ -311,7 +314,11 @@ static int doPopUp(txt, labels, n, popty
 
   /* block until this window gets closed */
   while (popUp) {
+#ifndef NOSIGNAL
+    XtAppNextEvent(context, &event);
+#else
     XNextEvent(theDisp, &event);
+#endif
     HandleEvent(&event, &i);
   }
 
--- xvvd.c
+++ xvvd.c	2008-05-26 14:02:00.241635107 +0200
@@ -26,6 +26,11 @@ static int   vd_UncompressFile		PARM((ch
 static int   vd_tarc			PARM((char *));
 static u_int vd_tar_sumchk		PARM((char *));
 
+static XtSignalId IdHup = 0;
+static XtSignalId IdInt = 0;
+static int   UsedSignal = 0;
+extern XtAppContext context;
+
 #define VD_VDTABLESIZE	100
 
 #define VD_ERR -2
@@ -1041,7 +1046,15 @@ char *prog, *mode;
  * If XV end by C-c, there are dust of directory which name is .xvvd???,
  * made by xvvd. Then, I handle SIGINT, and add good finish.
  */
-void vd_HUPhandler()
+static void vd_HUPhandler(int sig)
+{
+    XtNoticeSignal(IdHup);
+#if defined(SYSV) || defined(SVR4) || defined(__USE_XOPEN_EXTENDED)
+    signal(SIGHUP, (void (*)PARM((int))) vd_HUPhandler);
+#endif
+}
+
+static void HUPhandler(XtPointer dummy, XtSignalId* Id)
 {
 #if defined(SYSV) || defined(SVR4) || defined(__USE_XOPEN_EXTENDED)
     sighold(SIGHUP);
@@ -1054,19 +1067,23 @@ void vd_HUPhandler()
 
 #if defined(SYSV) || defined(SVR4) || defined(__USE_XOPEN_EXTENDED)
     sigrelse(SIGHUP);
-    signal(SIGHUP, (void (*)PARM((int))) vd_HUPhandler);
 #else
     sigsetmask(mask);
 #endif
 }
 
-void vd_handler(sig)
-int sig;
+static void vd_handler(int sig)
+{
+    UsedSignal = sig;
+    XtNoticeSignal(IdInt);
+}
+
+static void INThandler(XtPointer dummy, XtSignalId* Id)
 {
 #if defined(SYSV) || defined(SVR4) || defined(__USE_XOPEN_EXTENDED)
-    sighold(sig);
+    sighold(UsedSignal);
 #else
-    sigblock(sigmask(sig));
+    sigblock(sigmask(UsedSignal));
 #endif
 
     Quit(1); /*exit(1);*/
@@ -1091,6 +1108,9 @@ Display *disp;
 
 void vd_handler_setup()
 {
+    IdHup = XtAppAddSignal(context, HUPhandler, NULL);
+    IdInt = XtAppAddSignal(context, INThandler, NULL);
+
     signal(SIGHUP, (void (*)PARM((int))) vd_HUPhandler);
     signal(SIGINT, (void (*)PARM((int))) vd_handler);
     signal(SIGTERM,(void (*)PARM((int))) vd_handler);
openSUSE Build Service is sponsored by