Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!olivea!uunet!mcsun!ukc!abekrd!ecmwf!ecmwf!usd From: usd@ecmwf.co.uk (Ditlef Martens) Newsgroups: comp.windows.x Subject: Re: XView Applications on a DEC Message-ID: <1991May23.102200.9797@ecmwf.co.uk> Date: 23 May 91 10:22:00 GMT References: <33931@edsews.eds.com> Sender: usenet@ecmwf.co.uk (NEWS deafult user) Reply-To: usd@ecmwf.co.uk (Ditlef Martens) Organization: ECMWF Lines: 140 We at ECMWF has had the same problem. It seems that the DEC server does not know about the extended event types defined by the ICCCM. The event gets messed up, but the funny thing is that the result depends on the window manager you are running. Fortunately some people are kind enough to give you the sources ... and there is a way around the problem. We run this patch for DECstation 5000 / ULTRIX 4.0 To be able to run SUN XView programs on a SUN, displaying the window on a DECstation you have to do the following. 1. Get the source of xview. 2. Patch the file : xview2/lib/libxvin/win/win_input.c The patches are included. 3. Do a make world. 4. When you want to run an xview application you change the LD_LIBRARY_PATH We use: setenv LD_LIBRARY_PATH "/home/unix/xview2/lib/libxview:$LD_LIBRARY_PATH" Note that you also need some OpenLook fonts. The patch: A quick and dirty patch to win_input.c is enclosed. Two parts of the event processing is patched. a) Drag and drop events. The positions gets garbled up, I have not found a way to patch the positions. These events are ignored. b) Focus and delete-window. Mapped to correct values for different window managers. If the env. variable DEC_XVIEW_DEBUG is defined the events are printed. If the "return (result);" statement in the patch for lines: 1561,1586 is removed, XView programs on SUN servers will run without side-effects. *** win_input.c Thu May 23 11:09:07 1991 --- win_input.c.ORIG Fri Aug 10 04:49:26 1990 *************** *** 1561,1586 **** { int final_x, final_y; - - - if (1) { - static int print_debug; - if (print_debug == 0) { - print_debug = getenv("DEC_XVIEW_DEBUG"); - if (print_debug == 0) print_debug = 1; - } - if (print_debug != 1) { - fprintf(stderr, "Xview*win/win_input.c (SERVER_DO_DRAG*) ok for DEC ??\n"); - fprintf(stderr, " data.l[0]=%lx\n", clientmessage->data.l[0]); - fprintf(stderr, " data.l[1]=%lx\n", clientmessage->data.l[1]); - fprintf(stderr, " data.l[2]=%lx\n", clientmessage->data.l[2]); - fprintf(stderr, " data.l[3]=%lx\n", clientmessage->data.l[3]); - } - return (result); - } - - - /* * the xy is in the sender's coordinate, need to translate it */ --- 1561,1566 ---- *************** *** 1612,1658 **** } break; case SERVER_WM_PROTOCOLS_TYPE:{ ! Server_atom_type atom_type2 ; ! ! /* usd USD 20-feb-91 - original file in *ORIG */ ! if (1) { ! static Atom wm_take_focus, wm_delete_window; ! static int print_debug; ! if (wm_take_focus == 0) { ! wm_take_focus = XInternAtom(xv_display(info), "WM_TAKE_FOCUS", False); ! wm_delete_window = XInternAtom(xv_display(info), "WM_DELETE_WINDOW", False); ! print_debug = getenv("DEC_XVIEW_DEBUG"); ! } ! ! if (print_debug) { ! fprintf(stderr, "~Xview/win/win_input.c (WM_PROTOCOLS) fixed for DEC\n"); ! fprintf(stderr, " data.l[0]=%lx\n", clientmessage->data.l[0]); ! fprintf(stderr, " data.l[1]=%lx\n", clientmessage->data.l[1]); ! } ! ! if (clientmessage->data.l[0] == (long)wm_take_focus ! || clientmessage->data.l[0] == (long)0x2880 /* SUN OLWM on DEC */ ! || clientmessage->data.l[0] == (long)0x850800 /* MOTIF mwm on DEC */ ! ) { ! clientmessage->data.l[0] = (long)wm_take_focus; ! } ! else ! if (clientmessage->data.l[0] == (long)wm_delete_window ! || clientmessage->data.l[0] == (long)0x243b /* SUN OLWM on DEC */ ! || clientmessage->data.l[0] == (long)0x7c0000 /* MOTIF mwm on DEC */ ! ) { ! clientmessage->data.l[0] = (long)wm_delete_window; ! } ! else ! return(result); ! ! ! if (print_debug) ! fprintf(stderr, " NEW data.l[0]=%lx\n", clientmessage->data.l[0]); ! } ! ! ! atom_type2 = server_get_atom_type(server_public, clientmessage->data.l[0]); switch (atom_type2) { case SERVER_WM_SAVE_YOURSELF_TYPE:{ char str[200]; --- 1592,1599 ---- } break; case SERVER_WM_PROTOCOLS_TYPE:{ ! Server_atom_type atom_type2 = ! server_get_atom_type(server_public, clientmessage->data.l[0]); switch (atom_type2) { case SERVER_WM_SAVE_YOURSELF_TYPE:{ char str[200]; ==================================================== -- Ditlef Martens User Support ECMWF (European Centre for Medium Range Weather Forecasts) Shinfield Park, Reading, Berkshire RG2 9AX, UK EMail: Ditlef.Martens@ecmwf.co.uk Phone: +44 734 499 000 Fax: .. 869 450