aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/Xp/XpNotifyPdm.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/Xp/XpNotifyPdm.c')
-rw-r--r--nx-X11/lib/Xp/XpNotifyPdm.c900
1 files changed, 0 insertions, 900 deletions
diff --git a/nx-X11/lib/Xp/XpNotifyPdm.c b/nx-X11/lib/Xp/XpNotifyPdm.c
deleted file mode 100644
index feb62f0eb..000000000
--- a/nx-X11/lib/Xp/XpNotifyPdm.c
+++ /dev/null
@@ -1,900 +0,0 @@
-/* $Xorg: XpNotifyPdm.c,v 1.4 2000/08/17 19:46:07 cpqbld Exp $ */
-/******************************************************************************
- ******************************************************************************
- **
- ** Description: XpNotifyPdm is used to engage a Page Dialog Manager
- ** (PDM). Though the PDM is not a formal part of the
- ** Print Extension, the concept and likely usage of
- ** PDM's is strong enough that this routine is being
- ** provided as a sample standard mechanism for engaging
- ** PDM's from the Print Extension.
- **
- ** (c) Copyright 1996 Hewlett-Packard Company
- ** (c) Copyright 1996 International Business Machines Corp.
- ** (c) Copyright 1996 Sun Microsystems, Inc.
- ** (c) Copyright 1996 Novell, Inc.
- ** (c) Copyright 1996 Digital Equipment Corp.
- ** (c) Copyright 1996 Fujitsu Limited
- ** (c) Copyright 1996 Hitachi, Ltd.
- **
- ** Permission is hereby granted, free of charge, to any person obtaining a copy
- ** of this software and associated documentation files (the "Software"), to deal
- ** in the Software without restriction, including without limitation the rights
- ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- ** copies of the Software, and to permit persons to whom the Software is
- ** furnished to do so, subject to the following conditions:
- **
- ** The above copyright notice and this permission notice shall be included in
- ** all copies or substantial portions of the Software.
- **
- ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- ** COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- ** IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- ** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **
- ** Except as contained in this notice, the names of the copyright holders shall
- ** not be used in advertising or otherwise to promote the sale, use or other
- ** dealings in this Software without prior written authorization from said
- ** copyright holders.
- **
- ******************************************************************************
- *****************************************************************************/
-/* $XFree86: xc/lib/Xp/XpNotifyPdm.c,v 1.7tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/extensions/Print.h>
-#include <X11/Xlibint.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <X11/Xauth.h>
-#include <stdlib.h>
-#include <X11/Xos.h>
-
-/*
- * Alternate selection environment variables.
- */
-#define ALT_PDM_SELECTION_ENV_VAR "XPDMSELECTION"
-#define ALT_PMD_DISPLAY_ENV_VAR "XPDMDISPLAY"
-
-/*
- * X-Authority file for authorization tickets.
- */
-#define PDM_XAUTHORITY_ENV_VAR "XPDMXAUTHORITY"
-
-/*
- * str_dup using Xmalloc
- */
-char *_xpstrdup(char * str)
-{
- int len;
- char *newstr;
-
- if (!str)
- return( (char *) NULL );
-
- len = strlen(str) + 1;
- newstr = (char *) Xmalloc( len );
- memcpy( newstr, str, len );
- return( newstr );
-}
-
-/******************************************************************************
- *
- * _XpGetSelectionServer
- *
- * Routine that considers print_display, video_display, and alt
- * environment variables, and figures out the selection_display
- * and selection_atom.
- *
- * selection_display can be one of print_display, video_display,
- * or a brand new display connection that the caller will later
- * have to close.
- */
-static Display *
-_XpGetSelectionServer (
- Display *print_display,
- Display *video_display,
- Atom *sel_atom /* return value */
-)
-{
- char *tstr1, *tstr2, *tstr3, *tstrptr;
- char *sel_displaystr;
- Display *sel_display;
- char *selectionstr;
-
-
- /*
- * Possibly tickle a selection on an alternate display.
- */
- if ( (sel_displaystr = getenv( ALT_PMD_DISPLAY_ENV_VAR )) != NULL ) {
- if ( !strcmp(sel_displaystr, "print") ) {
- /*
- * Explicitly use the Print display.
- */
- sel_display = print_display;
- }
- else if ( !strcmp(sel_displaystr, "video") ) {
- /*
- * Explicitly use the Video display.
- */
- sel_display = video_display;
- }
- else {
- /*
- * Do more work to determine the selection server connection.
- * The following is not clever enough to handle host aliases.
- */
- tstr1 = _xpstrdup( sel_displaystr );
- tstr2 = _xpstrdup( XDisplayString(print_display) );
- tstr3 = _xpstrdup( XDisplayString(video_display) );
-
- /*
- * remove ".scr" portion from "host:disp.scr" strings.
- * Use strrchr to find : separating host from display
- * to allow IPv6 numeric addresses with embedded colons.
- */
- if (( tstrptr = strrchr( tstr1, ':' ) ))
- if (( tstrptr = strchr( tstrptr, '.' ) ))
- *tstrptr = '\0';
-
- if (( tstrptr = strrchr( tstr2, ':' ) ))
- if (( tstrptr = strchr( tstrptr, '.' ) ))
- *tstrptr = '\0';
-
- if (( tstrptr = strrchr( tstr3, ':' ) ))
- if (( tstrptr = strchr( tstrptr, '.' ) ))
- *tstrptr = '\0';
-
- if ( !strcmp( tstr1, tstr2 ) ) {
- /*
- * Explicitly use the Print display.
- */
- sel_display = print_display;
- }
- else if ( !strcmp( tstr1, tstr3 ) ) {
- /*
- * Explicitly use the Print display.
- */
- sel_display = video_display;
- }
- else {
- /*
- * Create a new display connection to a server
- * never previously contacted. The caller will
- * have to realize this is a new display handle
- * (ie, its not equal to print_display or
- * video_display) when done.
- */
- sel_display = XOpenDisplay(sel_displaystr);
- }
-
- XFree( tstr3 );
- XFree( tstr2 );
- XFree( tstr1 );
- }
- }
- else {
- /*
- * If no alt selection server, use the print server.
- */
- sel_display = print_display;
- }
-
- if (sel_display) {
- /*
- * Tickle (possibly alternate) PDM_MANAGER selection
- */
- if ( (selectionstr = getenv( ALT_PDM_SELECTION_ENV_VAR )) == NULL )
- selectionstr = "PDM_MANAGER";
-
- *sel_atom = XInternAtom( sel_display, selectionstr, False );
- }
-
- return( sel_display );
-}
-
-
-
-/******************************************************************************
- *
- * XpGetPdmStartParams
- */
-Status
-XpGetPdmStartParams (
- Display *print_display,
- Window print_window,
- XPContext print_context,
- Display *video_display,
- Window video_window,
- Display **selection_display, /* return value */
- Atom *selection, /* return value */
- Atom *type, /* return value */
- int *format, /* return value */
- unsigned char **data, /* return value */
- int *nelements /* return value */
-)
-{
- XTextProperty text_prop;
- int status;
- char str1[128], str2[128], str3[128];
- char *list[6];
-
-
- *selection_display = _XpGetSelectionServer( print_display, video_display,
- selection );
-
- if (*selection_display == NULL) {
- /*
- * Error - cannot determine or establish a selection_display.
- */
- return( (Status) NULL );
- }
-
- /*
- * Create a property that can be included in the PDM_MANAGER
- * selection to communicate information.
- *
- * video_display host:display[.anyScreen]
- * video_window
- * print_display host:display[.anyScreen]
- * print_window
- * print_context use to derive host:display.properScreen and other
- * locale_hint
- */
- list[0] = XDisplayString( video_display );
- sprintf( str1, "0x%lx", (long)video_window );
- list[1] = str1;
-
- list[2] = XDisplayString( print_display );
- sprintf( str2, "0x%lx", (long)print_window );
- list[3] = str2;
-
- sprintf( str3, "0x%lx", (long)print_context );
- list[4] = str3;
-
- list[5] = XpGetLocaleNetString();
-
- status = XSupportsLocale();
- if ( ! status ) {
- /*
- * Error.
- */
- if ( (*selection_display != print_display) &&
- (*selection_display != video_display) ) {
- XCloseDisplay( *selection_display );
- *selection_display = (Display *) NULL;
- }
- return( (Status) NULL );
- }
-
- status = XmbTextListToTextProperty( *selection_display, list, 6,
- XStdICCTextStyle, &text_prop );
-
- if ( status < 0 ) {
- /*
- * Error.
- */
- if ( (*selection_display != print_display) &&
- (*selection_display != video_display) ) {
- XCloseDisplay( *selection_display );
- *selection_display = (Display *) NULL;
- }
- return( (Status) NULL );
- }
-
- *type = text_prop.encoding;
- *format = text_prop.format;
- *data = text_prop.value;
- *nelements = text_prop.nitems;
-
- XFree(list[5]);
-
- return( (Status) 1 );
-}
-
-/******************************************************************************
- *
- * XpSendOneTicket
- *
- * The ticket transfer protocol is as follows:
- * unsigned short ticket_state;
- * - 0 means NULL ticket, terminating ticket
- * - 1 means non-NULL ticket, terminating ticket
- * - 2 means non-NULL ticket, and more tickets to send
- * unsigned short address_length;
- * unsigned short number_length;
- * unsigned short name_length;
- * unsigned short data_length;
- * unsigned short family;
- *
- * char *address;
- * char *number;
- * char *name;
- * char *data;
- *
- */
-
-Status XpSendOneTicket(
- Display *display,
- Window window,
- Xauth *ticket,
- Bool more )
-{
- XClientMessageEvent ev;
- int bigstrlen, left, gofor;
- char *bigstr, *tptr;
- Status status;
-
- /*
- * Fixed portion of event.
- */
- ev.type = ClientMessage;
- ev.display = display;
- ev.window = window;
- ev.message_type = XInternAtom( display, "PDM_MAIL", False );
-
- /*
- * Special build the first ClientMessage to carry the
- * ticket transfer header.
- */
- ev.format = 16;
-
- if (!ticket) {
- ev.data.s[0] = 0;
- }
- else {
- if (more)
- ev.data.s[0] = 2;
- else
- ev.data.s[0] = 1;
- ev.data.s[1] = (short) ticket->address_length;
- ev.data.s[2] = (short) ticket->number_length;
- ev.data.s[3] = (short) ticket->name_length;
- ev.data.s[4] = (short) ticket->data_length;
- ev.data.s[5] = (short) ticket->family;
- }
-
- status = XSendEvent( display, window, False, 0L, (XEvent *) &ev );
- if (!status)
- return( (Status) 0 );
-
- if (!ticket)
- return( (Status) 1 );;
-
- /*
- * Break down the remaining ticket data and build the
- * second thru N ClientMessages.
- */
- ev.format = 8;
- bigstrlen = (int) ticket->address_length +
- (int) ticket->number_length +
- (int) ticket->name_length +
- (int) ticket->data_length;
-
- bigstr = Xmalloc( bigstrlen );
-
- tptr = bigstr;
- memcpy( tptr, ticket->address, ticket->address_length );
- tptr += ticket->address_length;
- memcpy( tptr, ticket->number, ticket->number_length );
- tptr += ticket->number_length;
- memcpy( tptr, ticket->name, ticket->name_length );
- tptr += ticket->name_length;
- memcpy( tptr, ticket->data, ticket->data_length );
-
- left = bigstrlen;
- tptr = bigstr;
-
- while ( left ) {
- if (left > 20)
- gofor = 20;
- else
- gofor = left;
-
- memcpy( ev.data.b, tptr, gofor );
-
- tptr += gofor;
- left -= gofor;
-
- status = XSendEvent( display, window, False, 0L, (XEvent *) &ev );
- if (!status) {
- Xfree( bigstr );
- return( (Status) 0 );
- }
- }
-
- Xfree( bigstr );
-
- return( (Status) 1 );
-}
-
-Status XpSendAuth( Display *display, Window window )
-{
-
- FILE *auth_file;
- char *auth_name;
- Xauth *entry;
-
- if ( !(auth_name = getenv( PDM_XAUTHORITY_ENV_VAR )) ) {
- return( (Status) 0 );
- /* auth_name = XauFileName (); */
- }
-
- if (access (auth_name, R_OK) != 0) /* checks REAL id */
- return( (Status) 0 );
-
- auth_file = fopen (auth_name, "r");
- if (!auth_file)
- return( (Status) 0 );
-
- for (;;) {
- entry = XauReadAuth (auth_file);
- if (!entry)
- break;
-
- /*
- * NOTE: in and around this area, an optimization can
- * be made. Rather than sending all the tickets in
- * .Xauthority, just pull out the *one* that is needed
- * by the PDM.
- */
- XpSendOneTicket( display, window, entry, True );
-
- XauDisposeAuth (entry);
- }
-
- XpSendOneTicket( display, window, (Xauth *) NULL, False );
-
- (void) fclose (auth_file);
-
- return( (Status) 1 );
-}
-
-/******************************************************************************
- *
- *
- */
-Status
-XpGetAuthParams (
- Display *print_display,
- Display *video_display,
- Display **sel_display, /* return value */
- Atom *sel_atom, /* return value */
- Atom *sel_target_atom /* return value */
-)
-{
- *sel_display = _XpGetSelectionServer( print_display, video_display,
- sel_atom );
-
- if (*sel_display == NULL) {
- /*
- * Error - cannot determine or establish a selection_display.
- */
- return (Status)0;
- }
-
- /*
- * Create property and transfer data to.
- */
- *sel_target_atom = XInternAtom( *sel_display, "PDM_MBOX", False );
- return (Status)1;
-}
-
-
-/******************************************************************************
- ******************************************************************************
- **
- ** UNSUPPORTED ROUTINES used for testing and debugging.
- **
- **/
-
-
-/******************************************************************************
- *
- * Predicate routines to dig out events from the users event queue.
- */
-
-/*
- * client_data structures to use with XIfEvent()
- */
-typedef struct {
- Window requestor;
- Atom selection;
- Atom target;
-} Dosnrec;
-
-typedef struct {
- Window window;
- Atom atom;
-} Dopnrec, Docmrec;
-
-
-/*
- * Dig out a selection notify from the users event
- * queue.
- */
-static Bool digOutSelectionNotify(
- Display *display,
- XEvent *event,
- char *arg
-)
-
-{
- Dosnrec *t;
-
- if (event->type == SelectionNotify) {
- t = (Dosnrec *) arg;
-
- /*
- * Selection complete because of good reply.
- */
- if ( ( t->requestor == event->xselection.requestor ) &&
- ( t->selection == event->xselection.selection ) &&
- ( t->target == event->xselection.target ) ) {
- return( True );
- }
-
- /*
- * Selection complete because of problem, and X-Server
- * had to generate the event.
- */
- if ( ( t->requestor == event->xselection.requestor ) &&
- ( t->selection == event->xselection.selection ) &&
- ( None == event->xselection.property ) ) {
- return( True );
- }
- }
- return( False );
-}
-
-/*
- * Dig out a property notify event for the XpNotifyPdm
- * selection mechanism from the users event queue.
- */
-static Bool digOutPropertyNotify(
- Display *display,
- XEvent *event,
- char *arg
-)
-{
- Dopnrec *t;
-
- if (event->type == PropertyNotify) {
- t = (Dopnrec *) arg;
- if ( ( t->window == event->xproperty.window ) &&
- ( t->atom == event->xproperty.atom ) ) {
- return( True );
- }
- }
- return( False );
-}
-
-#ifdef UNUSED
-/*
- * Dig out a ClientMessage of type PDM_REPLY.
- */
-static Bool digOutClientMessage(
- Display *display,
- XEvent *event,
- char *arg
-)
-{
- Docmrec *t;
-
- if (event->type == ClientMessage) {
- t = (Docmrec *) arg;
- if ( ( t->window == event->xclient.window ) &&
- ( t->atom == event->xclient.message_type ) ) {
- return( True );
- }
- }
- return( False );
-}
-#endif
-
-
-/******************************************************************************
- *
- * XpCookieToPdm
- */
-static char *
-XpCookieToPdm (
- Display *print_display,
- Display *video_display,
- Window sel_window
-)
-{
- Display *sel_display;
- Atom prop_atom, sel_atom, pdm_mbox_atom, ttype;
- Dosnrec dosnrec;
- Dopnrec dopnrec;
- XEvent tevent;
- int tformat;
- unsigned long nitems, bytes_after;
- unsigned char *return_data;
- char *sel_str;
- char cdata[2048];
- Window tmpw;
-
-
- if ( !getenv(PDM_XAUTHORITY_ENV_VAR) ) {
- /*
- * short cut for lack of cookie file.
- */
- return( (char *) NULL );
- }
-
- if (! XpGetAuthParams( print_display, video_display,
- &sel_display, &sel_atom, &pdm_mbox_atom ) ) {
- sprintf(cdata,
- "XpCookieToPdm: XpGetAuthParams failed");
- return( _xpstrdup( cdata ) );
- }
-
- prop_atom = XInternAtom( sel_display, "PDM_MBOX_PROP", False );
-
- XConvertSelection( sel_display, sel_atom, pdm_mbox_atom,
- prop_atom, sel_window, CurrentTime );
-
- /*
- * Hang out waiting for a SelectionNotify. Dig out from
- * event queue when it arrives.
- */
- dosnrec.requestor = sel_window;
- dosnrec.selection = sel_atom;
- dosnrec.target = pdm_mbox_atom;
-
- XIfEvent( sel_display, &tevent, digOutSelectionNotify, (char *) &dosnrec );
-
- /*
- * See if selection was successful.
- */
- if ( tevent.xselection.property == None ) {
- /*
- * The selection failed.
- */
- sel_str = XGetAtomName( sel_display, sel_atom );
- sprintf(cdata,
- "XpCookieToPdm: Unable to make selection on %s", sel_str);
- XFree(sel_str);
-
- XDeleteProperty( sel_display, sel_window, prop_atom );
- if ((sel_display != print_display) && (sel_display != video_display))
- XCloseDisplay( sel_display );
- return( _xpstrdup( cdata ) );
- }
-
- /*
- * Read property content for status.
- */
- XGetWindowProperty( sel_display, sel_window,
- prop_atom, 0, 100000, True, AnyPropertyType,
- &ttype, &tformat, &nitems, &bytes_after,
- &return_data );
-
- /*
- * So that the client won't see how XpCookieToPdm is implemented,
- * run through the event queue, dig out, and destroy all
- * PropertyNotify events related to this call.
- */
- dopnrec.window = sel_window;
- dopnrec.atom = prop_atom;
- while ( XCheckIfEvent( sel_display, &tevent, digOutPropertyNotify,
- (char *) &dopnrec ) );
-
- if ((sel_display != print_display) && (sel_display != video_display))
- XCloseDisplay( sel_display );
-
- if ((ttype != XA_WINDOW) && (tformat != 32) && (nitems != 1)) {
- /*
- * Unable to read SelectionNotify property.
- */
- sprintf(cdata,
- "XpCookieToPdm: Unable to read SelectionNotify property" );
- return( _xpstrdup( cdata ) );
- }
-
- tmpw = *((Window *) return_data);
- Xfree( return_data );
-
- /*
- * Now send cookie information.
- */
- XpSendAuth( sel_display, tmpw );
-
- return( (char *) NULL );
-}
-
-
-/******************************************************************************
- *
- * XpNotifyPdm
- */
-char *
-XpNotifyPdm (
- Display *print_display,
- Window print_window,
- XPContext print_context,
- Display *video_display,
- Window video_window,
- Bool auth_flag
-)
-{
- enum { XA_PDM_CLIENT_PROP, XA_PDM_START, XA_PDM_START_OK,
- XA_PDM_START_VXAUTH, XA_PDM_START_PXAUTH, XA_PDM_START_ERROR,
- NUM_ATOMS };
- static char *atom_names[] = {
- "PDM_CLIENT_PROP", "PDM_START", "PDM_START_OK",
- "PDM_START_VXAUTH", "PDM_START_PXAUTH", "PDM_START_ERROR" };
-
- char cdata[2048];
- char *tptr;
- Dosnrec dosnrec;
- Dopnrec dopnrec;
- XEvent tevent;
-
- Display *sel_display;
- int sel_screen;
- Atom sel_atom;
- char *sel_str;
-
- Window sel_window;
- Atom prop_type;
- int prop_format;
- unsigned char *prop_data;
- int prop_nelements;
-
- Atom ttype;
- int tformat;
- unsigned long nitems, bytes_after;
- unsigned char *return_data;
-
- int tmpi;
- Atom atoms[NUM_ATOMS];
-
-
-
- if ( ! XpGetPdmStartParams( print_display, print_window, print_context,
- video_display, video_window,
- &sel_display,
- &sel_atom,
- &prop_type,
- &prop_format,
- &prop_data,
- &prop_nelements ) ) {
-
- sprintf(cdata, "XpNotifyPdm: XpGetPdmStartParams failed" );
- return( _xpstrdup( cdata ) );
- }
-
-
- sel_screen = DefaultScreen( sel_display );
- sel_window = XCreateSimpleWindow( sel_display,
- DefaultRootWindow( sel_display ),
- 0, 0, 1, 1, 1,
- BlackPixel(sel_display, sel_screen),
- WhitePixel(sel_display, sel_screen) );
-
- /*
- * Possibly send over authorization cookies first.
- */
- if (auth_flag) {
- tptr = XpCookieToPdm ( print_display, video_display, sel_window );
- if (tptr)
- return( tptr );
- }
-
- /*
- * Create property and transfer data to.
- */
- XInternAtoms( sel_display, atom_names, NUM_ATOMS, False, atoms );
-
- XChangeProperty( sel_display,
- sel_window, atoms[XA_PDM_CLIENT_PROP],
- prop_type,
- prop_format,
- PropModeReplace,
- prop_data,
- prop_nelements );
-
- XFree( prop_data );
-
- /*
- * Tickle PDM_MANAGER selection with PDM_START target
- */
- XConvertSelection( sel_display, sel_atom, atoms[XA_PDM_START],
- atoms[XA_PDM_CLIENT_PROP], sel_window, CurrentTime );
-
- /*
- * Hang out waiting for a SelectionNotify. Dig out from
- * event queue when it arrives.
- */
- dosnrec.requestor = sel_window;
- dosnrec.selection = sel_atom;
- dosnrec.target = atoms[XA_PDM_START];
-
- XIfEvent( sel_display, &tevent, digOutSelectionNotify, (char *) &dosnrec );
-
- /*
- * See if selection was successful.
- */
- if ( tevent.xselection.property == None ) {
- /*
- * The selection failed.
- */
- sel_str = XGetAtomName( sel_display, sel_atom );
- sprintf(cdata,
- "XpNotifyPdm: Unable to make selection on %s", sel_str);
- XFree(sel_str);
-
- XDeleteProperty( sel_display, sel_window, atoms[XA_PDM_CLIENT_PROP] );
- XDestroyWindow( sel_display, sel_window );
- if ((sel_display != print_display) && (sel_display != video_display))
- XCloseDisplay( sel_display );
- return( _xpstrdup( cdata ) );
- }
-
- /*
- * Read property content for status.
- */
- XGetWindowProperty( sel_display, sel_window,
- atoms[XA_PDM_CLIENT_PROP],
- 0, 100000, True, AnyPropertyType,
- &ttype, &tformat, &nitems, &bytes_after,
- &return_data );
-
- /*
- * So that the client won't see how XpNotifyPdm is implemented,
- * run through the event queue, dig out, and destroy all
- * PropertyNotify events related to this call.
- */
- dopnrec.window = sel_window;
- dopnrec.atom = atoms[XA_PDM_CLIENT_PROP];
- while ( XCheckIfEvent( sel_display, &tevent, digOutPropertyNotify,
- (char *) &dopnrec ) );
-
- XDestroyWindow( sel_display, sel_window );
- if ((sel_display != print_display) && (sel_display != video_display))
- XCloseDisplay( sel_display );
-
- if ((ttype != XA_ATOM) && (tformat != 32) && (nitems != 1)) {
- /*
- * Unable to read SelectionNotify property.
- */
- sprintf(cdata,
- "XpNotifyPdm: Unable to read SelectionNotify property" );
- return( _xpstrdup( cdata ) );
- }
-
- tmpi = *((Atom *) return_data);
- Xfree( return_data );
-
- if ( tmpi == atoms[XA_PDM_START_OK] ) {
- return( (char *) NULL );
- }
- else if ( tmpi == atoms[XA_PDM_START_VXAUTH] ) {
- sprintf(cdata,
- "XpNotifyPdm: PDM not authorized to connect to video display." );
- return( _xpstrdup( cdata ) );
- }
- else if ( tmpi == atoms[XA_PDM_START_PXAUTH] ) {
- sprintf(cdata,
- "XpNotifyPdm: PDM not authorized to connect to print display." );
- return( _xpstrdup( cdata ) );
- }
- else if ( tmpi == atoms[XA_PDM_START_ERROR] ) {
- sprintf(cdata,
- "XpNotifyPdm: PDM encountered an error. See PDM log file." );
- return( _xpstrdup( cdata ) );
- }
- else {
- sprintf(cdata,
- "XpNotifyPdm: unknown PDM error." );
- return( _xpstrdup( cdata ) );
- }
-}
-