mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-22 11:10:33 +01:00
Merged branch lg3d-event into branch lg3d-dev-0-6-1. Assorted bug fixes and
clean up for lg3d-x11-dev-0.6.1.8.
This commit is contained in:
parent
0787972b64
commit
eec7424278
13 changed files with 1353 additions and 187 deletions
26
Xext/shm.c
26
Xext/shm.c
|
|
@ -69,6 +69,10 @@ in this Software without prior written authorization from The Open Group.
|
|||
|
||||
#include "modinit.h"
|
||||
|
||||
#ifdef LG3D
|
||||
#include "lgeint.h"
|
||||
#endif /* LG3D */
|
||||
|
||||
typedef struct _ShmDesc {
|
||||
struct _ShmDesc *next;
|
||||
int shmid;
|
||||
|
|
@ -447,11 +451,22 @@ ProcShmAttach(client)
|
|||
* do manual checking of access rights for the credentials
|
||||
* of the client */
|
||||
|
||||
if (shm_access(client, &(buf.shm_perm), stuff->readOnly) == -1) {
|
||||
shmdt(shmdesc->addr);
|
||||
xfree(shmdesc);
|
||||
return BadAccess;
|
||||
#ifdef LG3D
|
||||
/*
|
||||
** Skip this access check when talking to the display server.
|
||||
** TODO: POSSIBLE SECURITY HOLE: make sure that only the
|
||||
** actual LG Display Server can ever set this.
|
||||
*/
|
||||
if (!lgeDisplayServerIsAlive) {
|
||||
#endif /* LG3D */
|
||||
if (shm_access(client, &(buf.shm_perm), stuff->readOnly) == -1) {
|
||||
shmdt(shmdesc->addr);
|
||||
xfree(shmdesc);
|
||||
return BadAccess;
|
||||
}
|
||||
#ifdef LG3D
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
shmdesc->shmid = stuff->shmid;
|
||||
shmdesc->refcnt = 1;
|
||||
|
|
@ -1229,6 +1244,9 @@ SProcShmCreatePixmap(client)
|
|||
REQUEST(xShmCreatePixmapReq);
|
||||
swaps(&stuff->length, n);
|
||||
REQUEST_SIZE_MATCH(xShmCreatePixmapReq);
|
||||
#ifdef LG3D
|
||||
swapl(&stuff->pid, n);
|
||||
#endif /* LG3D */
|
||||
swapl(&stuff->drawable, n);
|
||||
swaps(&stuff->width, n);
|
||||
swaps(&stuff->height, n);
|
||||
|
|
|
|||
26
Xext/xevie.c
26
Xext/xevie.c
|
|
@ -127,6 +127,11 @@ int ProcQueryVersion (client)
|
|||
rep.sequence_number = client->sequence;
|
||||
rep.server_major_version = XEVIE_MAJOR_VERSION;
|
||||
rep.server_minor_version = XEVIE_MINOR_VERSION;
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequence_number, n);
|
||||
swapl(&rep.server_major_version, n);
|
||||
swapl(&rep.server_minor_version, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xXevieQueryVersionReply), (char *)&rep);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
|
@ -153,7 +158,11 @@ int ProcStart (client)
|
|||
return BadAccess;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequence_number = client->sequence;
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequence_number, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
|
@ -163,11 +172,16 @@ int ProcEnd (client)
|
|||
register ClientPtr client;
|
||||
{
|
||||
xXevieEndReply rep;
|
||||
register int n;
|
||||
|
||||
XevieEnd(xevieClientIndex);
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequence_number = client->sequence;
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequence_number, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
|
@ -181,10 +195,15 @@ int ProcSend (client)
|
|||
xEvent *xE;
|
||||
OsCommPtr oc;
|
||||
static unsigned char lastDetail = 0, lastType = 0;
|
||||
register int n;
|
||||
|
||||
xE = (xEvent *)&stuff->event;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequence_number = client->sequence;
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequence_number, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
|
||||
|
||||
switch(xE->u.u.type) {
|
||||
|
|
@ -216,10 +235,15 @@ int ProcSelectInput (client)
|
|||
{
|
||||
REQUEST (xXevieSelectInputReq);
|
||||
xXevieSelectInputReply rep;
|
||||
register int n;
|
||||
|
||||
xevieMask = (long)stuff->event_mask;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequence_number = client->sequence;
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequence_number, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
|
@ -308,7 +332,7 @@ int SProcSelectInput (client)
|
|||
|
||||
REQUEST (xXevieSelectInputReq);
|
||||
swaps (&stuff->length, n);
|
||||
REQUEST_AT_LEAST_SIZE (xXevieSendReq);
|
||||
REQUEST_AT_LEAST_SIZE (xXevieSelectInputReq);
|
||||
swapl(&stuff->event_mask, n);
|
||||
return ProcSelectInput (client);
|
||||
}
|
||||
|
|
|
|||
115
Xprint/doc/Xprt.html
Normal file
115
Xprint/doc/Xprt.html
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Xprt</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="Xprt"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>Xprt — Print server for X Version 11</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">Xprt</tt> [<tt class="option">-ac</tt>] [<tt class="option">-audit <i class="replaceable"><tt>level</tt></i></tt>] [<tt class="option">-pn</tt>] [<tt class="option">-fp <i class="replaceable"><tt>fontpath</tt></i></tt>] [<tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt>] [<tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt>] [<tt class="option">:<i class="replaceable"><tt>display</tt></i></tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2804962"></a><h2>DESCRIPTION</h2><p><span><b class="command">Xprt</b></span> is the Xprint print server
|
||||
for version 11 of the X Window system for non display devices
|
||||
such as printers and fax machines.</p><p>Xprint is an advanced printing system which enables X11
|
||||
applications to use devices like printers, FAX or create
|
||||
documents in formats like PostScript, PCL or PDF. It may be used by
|
||||
clients such as <span class="application">mozilla</span>.
|
||||
</p><p>Xprint is a very flexible, extensible, scaleable, client/server
|
||||
print system based on ISO 10175 (and some other specs) and the X11
|
||||
rendering protocol.
|
||||
Using Xprint an application can search, query and use devices like
|
||||
printers, FAX machines or create documents in formats like PDF.
|
||||
In particular, an application can seek a printer, query supported
|
||||
attributes (like paper size, trays, fonts etc.), configure the printer
|
||||
device to match it's needs and print on it like on any other X device
|
||||
reusing parts of the code which is used for the video card Xserver.
|
||||
</p></div><div xmlns:ns1="" class="refsect1" lang="en"><a name="id2805117"></a><h2>USAGE</h2><p>
|
||||
Although Xprt may be invoked from the command line, it is
|
||||
preferable to run it as a daemon via the init script
|
||||
<tt class="filename">/etc/init.d/xprint</tt> (where this script exists).
|
||||
</p><p>Client programs such as mozilla will require environment
|
||||
variable <tt class="envar">${XPSERVERLIST}</tt> to be set, identifying the
|
||||
"display" on which Xprt is running. This variable may be set
|
||||
for all users via <tt class="filename">/etc/profile</tt> (or similar), using
|
||||
<b class="userinput"><tt>/etc/init.d/xprint get_xpserverlist</tt></b>:
|
||||
</p><div class="informalexample"><pre class="programlisting">export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`</pre></div></div><div class="refsect1" lang="en"><a name="id2805150"></a><h2>OPTIONS</h2><p>Many of Xprt's command line options are shared in common
|
||||
with the usual X servers (see <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>).
|
||||
Commonly used options include:</p><div class="variablelist"><dl><dt><span class="term"><tt class="option">:<i class="replaceable"><tt>display</tt></i></tt></span></dt><dd><p> The X server runs on the given display. If multiple X
|
||||
servers are to run simultaneously on a host, each must
|
||||
have a unique display number. Note that the standard X
|
||||
server (for video displays) typically runs on display
|
||||
:0. If <tt class="filename">/etc/init.d/xprint</tt> is used
|
||||
to invoke Xprt, it may be configured to automatically assign an available
|
||||
display number.</p></dd><dt><span class="term"><tt class="option">-ac</tt></span></dt><dd><p>disables host-based access control mechanisms. Enables access
|
||||
by any host, and permits any host to modify the access control
|
||||
list. Use with extreme caution. This option exists primarily
|
||||
for running test suites remotely.</p></dd><dt><span class="term"><tt class="option">-audit <i class="replaceable"><tt>level</tt></i></tt></span></dt><dd><p>sets the audit trail level. The default level is 1, meaning
|
||||
only connection rejections are reported. Level 2 additionally
|
||||
reports all successful connections and disconnects. Level 4
|
||||
enables messages from the SECURITY extension, if present,
|
||||
including generation and revocation of authorizations and
|
||||
violations of the security policy. Level 0 turns off the audit
|
||||
trail. Audit lines are sent as standard error output.</p></dd><dt><span class="term"><tt class="option">-fp <i class="replaceable"><tt>fontpath</tt></i></tt></span></dt><dd><p>sets the search path for fonts. This path is a comma
|
||||
separated list of directories which Xprt searches for
|
||||
font databases.</p></dd><dt><span class="term"><tt class="option">-pn</tt></span></dt><dd><p>permits the server to continue running if it fails to
|
||||
establish all of its well-known sockets (connection
|
||||
points for clients), but establishes at least
|
||||
one.</p></dd><dt><span class="term"><tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt></span></dt><dd><p>Sets an altername Xprinters file (see section FILES).</p></dd><dt><span class="term"><tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt></span></dt><dd xmlns:ns2=""><p>
|
||||
Defines the spooler system to be used for print job spooling.
|
||||
Supported values in xprint.mozdev.org release 009 are:
|
||||
</p><table class="simplelist" border="0" summary="Simple list"><tr><td>aix</td></tr><tr><td>aix4</td></tr><tr><td>bsd</td></tr><tr><td>osf</td></tr><tr><td>solaris</td></tr><tr><td>sysv</td></tr><tr><td>uxp</td></tr><tr><td>cups</td></tr><tr><td>lprng</td></tr><tr><td>other</td></tr><tr><td>none</td></tr></table><p>
|
||||
(multiple values can be specified, seperated by ':', the first active spooler will be chosen).
|
||||
The default value is platform-specific and can be obtained via
|
||||
</p><pre class="programlisting">Xprt -h</pre><p>.
|
||||
</p></dd></dl></div></div><div xmlns:ns3="" class="refsect1" lang="en"><a name="id2805336"></a><h2>ENVIRONMENT</h2><p>
|
||||
The following environment variables are recognized by the X print server
|
||||
(environment variables recognized by Xprint clients are described in
|
||||
<span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>):
|
||||
|
||||
</p><div class="variablelist"><dl><dt><span class="term"><tt class="envar">${XPCONFIGDIR}</tt></span></dt><dd><p> This environment variable points to the root
|
||||
of the Xprint server configuration directory hierarchy.
|
||||
If the variable is not defined, the default
|
||||
path is be assumed. The default path may be
|
||||
<tt class="filename">/usr/X11R6/lib/X11/xserver/</tt>,
|
||||
<tt class="filename">/usr/lib/X11/xserver/</tt>,
|
||||
<tt class="filename">/usr/share/Xprint/xserver/</tt> or
|
||||
<tt class="filename">/usr/openwin/server/etc/XpConfig</tt>, depending on the
|
||||
system, and may be configured in <tt class="filename">/etc/init.d/xprint</tt>.</p></dd><dt><span class="term"><tt class="envar">${LANG}</tt></span></dt><dd><p>
|
||||
This environment variable selects the locale settings used by the Xprint server.
|
||||
Xprt allows language-specific settings (stored in <tt class="filename">${XPCONFIGDIR}/${LANG}/print/</tt>)
|
||||
which will override the default settings (stored in <tt class="filename">${XPCONFIGDIR}/C/print/</tt>).
|
||||
If <tt class="envar">${LANG}</tt> is not set "C" is assumed.
|
||||
</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805421"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/Xprinters</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt></span></dt><dd><p>
|
||||
`Xprinters' is the top most configuration file. It tells
|
||||
Xprt which specific printer names (e.g. mylaser) should
|
||||
be supported, and whether <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> or other commands
|
||||
should be used to automatically supplement the list of
|
||||
printers.
|
||||
</p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/printer</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/printer</tt></span></dt><dd><p>
|
||||
The `printer' file maps printer names to model
|
||||
configurations (see `model-config' below). For example,
|
||||
"mylaser" could be mapped to a "HPDJ1600C", and all other
|
||||
arbitrary printers could be mapped to a default, such as
|
||||
"HPLJ4SI". When depending on <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> in the Xprinters
|
||||
file, setting up defaults in `printer' becomes all the
|
||||
more important.
|
||||
</p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/document</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/document</tt></span></dt><dd><p>
|
||||
The `document' file specifies the initial document values
|
||||
for any print jobs. For example, which paper tray to
|
||||
use, what default resolution, etc.
|
||||
</p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/job</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/job</tt></span></dt><dd><p>
|
||||
The `job' file specifies the initial job values for any
|
||||
print jobs. For example, "notification-profile" can be
|
||||
set so that when a print job is successfully sent to a
|
||||
printer, e-mail is sent to the user.
|
||||
</p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/model-config</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</tt></span></dt><dd><p>
|
||||
The `model-config' file has attributes that describe the
|
||||
printer model's capabilities and default settings.
|
||||
Printer model fonts may also be present. The model-config
|
||||
file also identifies the print ddx driver to be used.
|
||||
|
||||
For each printer model supported, a complete hierarchy of
|
||||
files should exist. In most cases, these files do not
|
||||
need to be modified.
|
||||
</p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</tt></span></dt><dd><p>
|
||||
The print ddx drivers can have highly specific
|
||||
configuration files to control their behavior. In most
|
||||
cases, these files do not need to be modified.
|
||||
</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805584"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div><div class="refsect1" lang="en"><a name="id2805757"></a><h2>AUTHORS</h2><p>
|
||||
This manual page was written by
|
||||
Drew Parsons <tt class="email"><<a href="mailto:dparsons@debian.org">dparsons@debian.org</a>></tt> and
|
||||
Roland Mainz <tt class="email"><<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>></tt>,
|
||||
with some help from the man page at
|
||||
<a href="http://www.sins.com.au/unix/manpages/Xprt.html" target="_top">http://www.sins.com.au/unix/manpages/Xprt.html</a> and the XFree86
|
||||
man page for <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1)</span>.
|
||||
</p></div></div></body></html>
|
||||
196
Xprint/doc/Xprt.man.pre
Normal file
196
Xprint/doc/Xprt.man.pre
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
.\" -*- coding: us-ascii -*-
|
||||
.TH Xprt __appmansuffix__ "25 November 2004"
|
||||
.SH NAME
|
||||
Xprt \- Print server for X Version 11
|
||||
.SH SYNOPSIS
|
||||
.ad l
|
||||
\fBXprt\fR \kx
|
||||
.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
|
||||
'in \n(.iu+\nxu
|
||||
[\fB\-ac\fR] [\fB\-audit \fBlevel\fR\fR] [\fB\-pn\fR] [\fB\-fp \fBfontpath\fR\fR] [\fB\-XpFile \fBfile\fR\fR] [\fB\-XpSpoolerType \fBspoolername\fR\fR] [\fB:\fBdisplay\fR\fR]
|
||||
'in \n(.iu-\nxu
|
||||
.ad b
|
||||
.SH DESCRIPTION
|
||||
Xprt is the Xprint print server
|
||||
for version 11 of the X Window system for non display devices
|
||||
such as printers and fax machines.
|
||||
.PP
|
||||
Xprint is an advanced printing system which enables X11
|
||||
applications to use devices like printers, FAX or create
|
||||
documents in formats like PostScript, PCL or PDF. It may be used by
|
||||
clients such as mozilla.
|
||||
.PP
|
||||
Xprint is a very flexible, extensible, scaleable, client/server
|
||||
print system based on ISO 10175 (and some other specs) and the X11
|
||||
rendering protocol.
|
||||
Using Xprint an application can search, query and use devices like
|
||||
printers, FAX machines or create documents in formats like PDF.
|
||||
In particular, an application can seek a printer, query supported
|
||||
attributes (like paper size, trays, fonts etc.), configure the printer
|
||||
device to match it's needs and print on it like on any other X device
|
||||
reusing parts of the code which is used for the video card Xserver.
|
||||
.SH USAGE
|
||||
Although Xprt may be invoked from the command line, it is
|
||||
preferable to run it as a daemon via the init script
|
||||
\fB/etc/init.d/xprint\fR (where this script exists).
|
||||
.PP
|
||||
Client programs such as mozilla will require environment
|
||||
variable \fB${XPSERVERLIST}\fR to be set, identifying the
|
||||
"display" on which Xprt is running. This variable may be set
|
||||
for all users via \fB/etc/profile\fR (or similar), using
|
||||
\fB/etc/init.d/xprint get_xpserverlist\fR:
|
||||
|
||||
.nf
|
||||
export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`
|
||||
.fi
|
||||
|
||||
.SH OPTIONS
|
||||
Many of Xprt's command line options are shared in common
|
||||
with the usual X servers (see \fBXserver\fR(__appmansuffix__)).
|
||||
Commonly used options include:
|
||||
.TP
|
||||
\fB:\fIdisplay\fB\fR
|
||||
The X server runs on the given display. If multiple X
|
||||
servers are to run simultaneously on a host, each must
|
||||
have a unique display number. Note that the standard X
|
||||
server (for video displays) typically runs on display
|
||||
:0. If \fB/etc/init.d/xprint\fR is used
|
||||
to invoke Xprt, it may be configured to automatically assign an available
|
||||
display number.
|
||||
.TP
|
||||
\fB\-ac\fR
|
||||
disables host-based access control mechanisms. Enables access
|
||||
by any host, and permits any host to modify the access control
|
||||
list. Use with extreme caution. This option exists primarily
|
||||
for running test suites remotely.
|
||||
.TP
|
||||
\fB\-audit \fIlevel\fB\fR
|
||||
sets the audit trail level. The default level is 1, meaning
|
||||
only connection rejections are reported. Level 2 additionally
|
||||
reports all successful connections and disconnects. Level 4
|
||||
enables messages from the SECURITY extension, if present,
|
||||
including generation and revocation of authorizations and
|
||||
violations of the security policy. Level 0 turns off the audit
|
||||
trail. Audit lines are sent as standard error output.
|
||||
.TP
|
||||
\fB\-fp \fIfontpath\fB\fR
|
||||
sets the search path for fonts. This path is a comma
|
||||
separated list of directories which Xprt searches for
|
||||
font databases.
|
||||
.TP
|
||||
\fB\-pn\fR
|
||||
permits the server to continue running if it fails to
|
||||
establish all of its well-known sockets (connection
|
||||
points for clients), but establishes at least
|
||||
one.
|
||||
.TP
|
||||
\fB\-XpFile \fIfile\fB\fR
|
||||
Sets an altername Xprinters file (see section FILES).
|
||||
.TP
|
||||
\fB\-XpSpoolerType \fIspoolername\fB\fR
|
||||
Defines the spooler system to be used for print job spooling.
|
||||
Supported values in xprint.mozdev.org release 009 are:
|
||||
|
||||
aix
|
||||
|
||||
aix4
|
||||
|
||||
bsd
|
||||
|
||||
osf
|
||||
|
||||
solaris
|
||||
|
||||
sysv
|
||||
|
||||
uxp
|
||||
|
||||
cups
|
||||
|
||||
lprng
|
||||
|
||||
other
|
||||
|
||||
none
|
||||
|
||||
(multiple values can be specified, seperated by ':', the first active spooler will be chosen).
|
||||
The default value is platform-specific and can be obtained via
|
||||
|
||||
.nf
|
||||
Xprt \-h
|
||||
.fi
|
||||
|
||||
\&.
|
||||
.SH ENVIRONMENT
|
||||
The following environment variables are recognized by the X print server
|
||||
(environment variables recognized by Xprint clients are described in
|
||||
\fBXprint\fR(__miscmansuffix__)):
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}\fR
|
||||
This environment variable points to the root
|
||||
of the Xprint server configuration directory hierarchy.
|
||||
If the variable is not defined, the default
|
||||
path is be assumed. The default path may be
|
||||
\fB/usr/X11R6/lib/X11/xserver/\fR,
|
||||
\fB/usr/lib/X11/xserver/\fR,
|
||||
\fB/usr/share/Xprint/xserver/\fR or
|
||||
\fB/usr/openwin/server/etc/XpConfig\fR, depending on the
|
||||
system, and may be configured in \fB/etc/init.d/xprint\fR.
|
||||
.TP
|
||||
\fB${LANG}\fR
|
||||
This environment variable selects the locale settings used by the Xprint server.
|
||||
Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR)
|
||||
which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR).
|
||||
If \fB${LANG}\fR is not set "C" is assumed.
|
||||
.PP
|
||||
.SH FILES
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/${LANG}/print/Xprinters\fR, \fB${XPCONFIGDIR}/C/print/Xprinters\fR
|
||||
`Xprinters' is the top most configuration file. It tells
|
||||
Xprt which specific printer names (e.g. mylaser) should
|
||||
be supported, and whether \fBlpstat\fR(1) or other commands
|
||||
should be used to automatically supplement the list of
|
||||
printers.
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/${LANG}/print/attributes/printer\fR, \fB${XPCONFIGDIR}/C/print/attributes/printer\fR
|
||||
The `printer' file maps printer names to model
|
||||
configurations (see `model-config' below). For example,
|
||||
"mylaser" could be mapped to a "HPDJ1600C", and all other
|
||||
arbitrary printers could be mapped to a default, such as
|
||||
"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters
|
||||
file, setting up defaults in `printer' becomes all the
|
||||
more important.
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/${LANG}/print/attributes/document\fR, \fB${XPCONFIGDIR}/C/print/attributes/document\fR
|
||||
The `document' file specifies the initial document values
|
||||
for any print jobs. For example, which paper tray to
|
||||
use, what default resolution, etc.
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/${LANG}/print/attributes/job\fR, \fB${XPCONFIGDIR}/C/print/attributes/job\fR
|
||||
The `job' file specifies the initial job values for any
|
||||
print jobs. For example, "notification-profile" can be
|
||||
set so that when a print job is successfully sent to a
|
||||
printer, e-mail is sent to the user.
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR
|
||||
The `model-config' file has attributes that describe the
|
||||
printer model's capabilities and default settings.
|
||||
Printer model fonts may also be present. The model-config
|
||||
file also identifies the print ddx driver to be used.
|
||||
For each printer model supported, a complete hierarchy of
|
||||
files should exist. In most cases, these files do not
|
||||
need to be modified.
|
||||
.TP
|
||||
\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR
|
||||
The print ddx drivers can have highly specific
|
||||
configuration files to control their behavior. In most
|
||||
cases, these files do not need to be modified.
|
||||
.SH "SEE ALSO"
|
||||
\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
|
||||
.SH AUTHORS
|
||||
This manual page was written by
|
||||
Drew Parsons <dparsons@debian.org> and
|
||||
Roland Mainz <roland.mainz@nrubsig.org>,
|
||||
with some help from the man page at
|
||||
http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86
|
||||
man page for \fBXserver\fR(1).
|
||||
371
Xprint/doc/Xprt.sgml
Normal file
371
Xprint/doc/Xprt.sgml
Normal file
|
|
@ -0,0 +1,371 @@
|
|||
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
|
||||
|
||||
<!-- Process this file with docbook-to-man to generate an nroff manual
|
||||
page: 'docbook-to-man manpage.sgml > manpage.1'. You may view
|
||||
the manual page with: 'docbook-to-man manpage.sgml | nroff -man | less'.
|
||||
A typical entry in a Makefile or Makefile.am is:
|
||||
|
||||
manpage.1: manpage.sgml
|
||||
docbook-to-man $< > $@
|
||||
|
||||
HTML generation can be done like this:
|
||||
% xsltproc ==docbook /usr/share/sgml/docbook/docbook-xsl-stylesheets-1.60.1/html/docbook.xsl Xprint.sgml >Xprint.html
|
||||
-->
|
||||
|
||||
<refentry id="Xprt">
|
||||
<refmeta>
|
||||
<refentrytitle>Xprt</refentrytitle>
|
||||
<manvolnum>__appmansuffix__</manvolnum>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>Xprt</refname>
|
||||
|
||||
<refpurpose>Print server for X Version 11</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>Xprt</command>
|
||||
|
||||
<arg><option>-ac</option></arg>
|
||||
|
||||
<arg><option>-audit <replaceable>level</replaceable></option></arg>
|
||||
|
||||
<arg><option>-pn</option></arg>
|
||||
|
||||
<arg><option>-fp <replaceable>fontpath</replaceable></option></arg>
|
||||
|
||||
<arg><option>-XpFile <replaceable>file</replaceable></option></arg>
|
||||
|
||||
<arg><option>-XpSpoolerType <replaceable>spoolername</replaceable></option></arg>
|
||||
|
||||
<arg><option>:<replaceable>display</replaceable></option></arg>
|
||||
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
<refsect1>
|
||||
<title>DESCRIPTION</title>
|
||||
|
||||
<para><command>Xprt</command> is the Xprint print server
|
||||
for version 11 of the X Window system for non display devices
|
||||
such as printers and fax machines.</para>
|
||||
|
||||
<para>Xprint is an advanced printing system which enables X11
|
||||
applications to use devices like printers, FAX or create
|
||||
documents in formats like PostScript, PCL or PDF. It may be used by
|
||||
clients such as <application>mozilla</application>.
|
||||
</para>
|
||||
|
||||
<para>Xprint is a very flexible, extensible, scaleable, client/server
|
||||
print system based on ISO 10175 (and some other specs) and the X11
|
||||
rendering protocol.
|
||||
Using Xprint an application can search, query and use devices like
|
||||
printers, FAX machines or create documents in formats like PDF.
|
||||
In particular, an application can seek a printer, query supported
|
||||
attributes (like paper size, trays, fonts etc.), configure the printer
|
||||
device to match it's needs and print on it like on any other X device
|
||||
reusing parts of the code which is used for the video card Xserver.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>USAGE</title>
|
||||
|
||||
<para>
|
||||
Although Xprt may be invoked from the command line, it is
|
||||
preferable to run it as a daemon via the init script
|
||||
<filename>/etc/init.d/xprint</filename> (where this script exists).
|
||||
</para>
|
||||
|
||||
<para>Client programs such as mozilla will require environment
|
||||
variable <envar>${XPSERVERLIST}</envar> to be set, identifying the
|
||||
"display" on which Xprt is running. This variable may be set
|
||||
for all users via <filename>/etc/profile</filename> (or similar), using
|
||||
<userinput>/etc/init.d/xprint get_xpserverlist</userinput>:
|
||||
<informalexample>
|
||||
<programlisting>export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>OPTIONS</title>
|
||||
|
||||
<para>Many of Xprt's command line options are shared in common
|
||||
with the usual X servers (see <citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry>).
|
||||
Commonly used options include:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>:<replaceable>display</replaceable></option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para> The X server runs on the given display. If multiple X
|
||||
servers are to run simultaneously on a host, each must
|
||||
have a unique display number. Note that the standard X
|
||||
server (for video displays) typically runs on display
|
||||
:0. If <filename>/etc/init.d/xprint</filename> is used
|
||||
to invoke Xprt, it may be configured to automatically assign an available
|
||||
display number.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-ac</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>disables host-based access control mechanisms. Enables access
|
||||
by any host, and permits any host to modify the access control
|
||||
list. Use with extreme caution. This option exists primarily
|
||||
for running test suites remotely.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-audit <replaceable>level</replaceable></option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>sets the audit trail level. The default level is 1, meaning
|
||||
only connection rejections are reported. Level 2 additionally
|
||||
reports all successful connections and disconnects. Level 4
|
||||
enables messages from the SECURITY extension, if present,
|
||||
including generation and revocation of authorizations and
|
||||
violations of the security policy. Level 0 turns off the audit
|
||||
trail. Audit lines are sent as standard error output.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-fp <replaceable>fontpath</replaceable></option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>sets the search path for fonts. This path is a comma
|
||||
separated list of directories which Xprt searches for
|
||||
font databases.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-pn</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>permits the server to continue running if it fails to
|
||||
establish all of its well-known sockets (connection
|
||||
points for clients), but establishes at least
|
||||
one.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-XpFile <replaceable>file</replaceable></option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>Sets an altername Xprinters file (see section FILES).</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-XpSpoolerType <replaceable>spoolername</replaceable></option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Defines the spooler system to be used for print job spooling.
|
||||
Supported values in xprint.mozdev.org release 009 are:
|
||||
<simplelist type="vert">
|
||||
<member>aix</member>
|
||||
<member>aix4</member>
|
||||
<member>bsd</member>
|
||||
<member>osf</member>
|
||||
<member>solaris</member>
|
||||
<member>sysv</member>
|
||||
<member>uxp</member>
|
||||
<member>cups</member>
|
||||
<member>lprng</member>
|
||||
<member>other</member>
|
||||
<member>none</member>
|
||||
</simplelist>
|
||||
(multiple values can be specified, seperated by ':', the first active spooler will be chosen).
|
||||
The default value is platform-specific and can be obtained via
|
||||
<programlisting>Xprt -h</programlisting>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>ENVIRONMENT</title>
|
||||
<para>
|
||||
The following environment variables are recognized by the X print server
|
||||
(environment variables recognized by Xprint clients are described in
|
||||
<citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry>):
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><envar>${XPCONFIGDIR}</envar></term>
|
||||
<listitem>
|
||||
<para> This environment variable points to the root
|
||||
of the Xprint server configuration directory hierarchy.
|
||||
If the variable is not defined, the default
|
||||
path is be assumed. The default path may be
|
||||
<filename>/usr/X11R6/lib/X11/xserver/</filename>,
|
||||
<filename>/usr/lib/X11/xserver/</filename>,
|
||||
<filename>/usr/share/Xprint/xserver/</filename> or
|
||||
<filename>/usr/openwin/server/etc/XpConfig</filename>, depending on the
|
||||
system, and may be configured in <filename>/etc/init.d/xprint</filename>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><envar>${LANG}</envar></term>
|
||||
<listitem>
|
||||
<para>
|
||||
This environment variable selects the locale settings used by the Xprint server.
|
||||
Xprt allows language-specific settings (stored in <filename>${XPCONFIGDIR}/${LANG}/print/</filename>)
|
||||
which will override the default settings (stored in <filename>${XPCONFIGDIR}/C/print/</filename>).
|
||||
If <envar>${LANG}</envar> is not set "C" is assumed.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>FILES</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/${LANG}/print/Xprinters</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/Xprinters</filename></term>
|
||||
<listitem>
|
||||
<para>
|
||||
`Xprinters' is the top most configuration file. It tells
|
||||
Xprt which specific printer names (e.g. mylaser) should
|
||||
be supported, and whether <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> or other commands
|
||||
should be used to automatically supplement the list of
|
||||
printers.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/printer</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/attributes/printer</filename></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The `printer' file maps printer names to model
|
||||
configurations (see `model-config' below). For example,
|
||||
"mylaser" could be mapped to a "HPDJ1600C", and all other
|
||||
arbitrary printers could be mapped to a default, such as
|
||||
"HPLJ4SI". When depending on <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> in the Xprinters
|
||||
file, setting up defaults in `printer' becomes all the
|
||||
more important.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/document</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/attributes/document</filename></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The `document' file specifies the initial document values
|
||||
for any print jobs. For example, which paper tray to
|
||||
use, what default resolution, etc.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/job</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/attributes/job</filename></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The `job' file specifies the initial job values for any
|
||||
print jobs. For example, "notification-profile" can be
|
||||
set so that when a print job is successfully sent to a
|
||||
printer, e-mail is sent to the user.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/model-config</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</filename></term>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The `model-config' file has attributes that describe the
|
||||
printer model's capabilities and default settings.
|
||||
Printer model fonts may also be present. The model-config
|
||||
file also identifies the print ddx driver to be used.
|
||||
|
||||
For each printer model supported, a complete hierarchy of
|
||||
files should exist. In most cases, these files do not
|
||||
need to be modified.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</filename></term>
|
||||
<term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</filename></term>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The print ddx drivers can have highly specific
|
||||
configuration files to control their behavior. In most
|
||||
cases, these files do not need to be modified.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>SEE ALSO</title>
|
||||
<para>
|
||||
<simplelist type="inline">
|
||||
<!-- specific references -->
|
||||
<!-- none -->
|
||||
|
||||
<!-- Xprint general references -->
|
||||
<member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
<!--
|
||||
<member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
|
||||
-->
|
||||
<!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
|
||||
<member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>libXprintAppUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>XmPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
|
||||
<member><citerefentry><refentrytitle>XawPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
|
||||
<member>Xprint FAQ (<ulink url="http://xprint.mozdev.org/docs/Xprint_FAQ.html">http://xprint.mozdev.org/docs/Xprint_FAQ.html</ulink>)</member>
|
||||
<member>Xprint main site (<ulink url="http://xprint.mozdev.org/">http://xprint.mozdev.org/</ulink>)</member>
|
||||
</simplelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>AUTHORS</title>
|
||||
<para>
|
||||
This manual page was written by
|
||||
Drew Parsons <email>dparsons@debian.org</email> and
|
||||
Roland Mainz <email>roland.mainz@nrubsig.org</email>,
|
||||
with some help from the man page at
|
||||
<ulink url="http://www.sins.com.au/unix/manpages/Xprt.html">http://www.sins.com.au/unix/manpages/Xprt.html</ulink> and the XFree86
|
||||
man page for <citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
||||
|
||||
|
|
@ -507,7 +507,7 @@ compAllocPixmap (WindowPtr pWin)
|
|||
cw->damageRegistered = TRUE;
|
||||
}
|
||||
|
||||
#ifdef LG3D
|
||||
#ifdef xLG3D
|
||||
/*
|
||||
** Applications which use shaped windows (e.g. xeyes) don't
|
||||
** always clear the entire backing pixmap. We should clear the
|
||||
|
|
|
|||
|
|
@ -67,6 +67,10 @@ lgeTryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
|
|||
Mask filter, GrabPtr grab);
|
||||
#endif /* LG3D */
|
||||
|
||||
/*
|
||||
int numevent = 0;
|
||||
*/
|
||||
|
||||
static void
|
||||
DamageExtNotify (DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes)
|
||||
{
|
||||
|
|
@ -76,6 +80,17 @@ DamageExtNotify (DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes)
|
|||
xDamageNotifyEvent ev;
|
||||
int i;
|
||||
|
||||
#ifdef LG3D
|
||||
/*
|
||||
** Force damage events to go to the damage grabbing client rather
|
||||
** than the client who created the damage record.
|
||||
*/
|
||||
if (lgeDisplayServerIsAlive && lgeGrabDamageEventsClient != NULL) {
|
||||
pClient = lgeGrabDamageEventsClient;
|
||||
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
UpdateCurrentTimeIf ();
|
||||
ev.type = DamageEventBase + XDamageNotify;
|
||||
ev.level = pDamageExt->level;
|
||||
|
|
@ -98,10 +113,14 @@ DamageExtNotify (DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes)
|
|||
ev.area.y = pBoxes[i].y1;
|
||||
ev.area.width = pBoxes[i].x2 - pBoxes[i].x1;
|
||||
ev.area.height = pBoxes[i].y2 - pBoxes[i].y1;
|
||||
/*
|
||||
ErrorF("Construct DamageNotify event %d: xywh = %d, %d, %d, %d\n",
|
||||
++numevent, ev.area.x, ev.area.y, ev.area.width, ev.area.height);
|
||||
*/
|
||||
if (!pClient->clientGone) {
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
if (lgeTryClientEvents (NULL, (xEvent *) &ev, 1, 0, 0, NULL) == 0) {
|
||||
if (lgeTryClientEvents (pClient, (xEvent *) &ev, 1, 0, 0, NULL) == 0) {
|
||||
ErrorF("DamageExtNotify: warning: call to lgeTryWriteEventsToClients failed.\n");
|
||||
ErrorF("Couldn't deliver DamageNotify event.\n");
|
||||
}
|
||||
|
|
@ -120,10 +139,14 @@ DamageExtNotify (DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes)
|
|||
ev.area.y = 0;
|
||||
ev.area.width = pDrawable->width;
|
||||
ev.area.height = pDrawable->height;
|
||||
/*
|
||||
ErrorF("Construct DamageNotify event %d: xywh = %d, %d, %d, %d\n",
|
||||
++numevent, ev.area.x, ev.area.y, ev.area.width, ev.area.height);
|
||||
*/
|
||||
if (!pClient->clientGone) {
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
if (lgeTryClientEvents (NULL, (xEvent *) &ev, 1, 0, 0, NULL) == 0) {
|
||||
if (lgeTryClientEvents (pClient, (xEvent *) &ev, 1, 0, 0, NULL) == 0) {
|
||||
ErrorF("DamageExtNotify: warning: call to lgeTryWriteEventsToClients failed.\n");
|
||||
ErrorF("Couldn't deliver DamageNotify event.\n");
|
||||
}
|
||||
|
|
|
|||
148
dix/dispatch.c
148
dix/dispatch.c
|
|
@ -1,4 +1,4 @@
|
|||
/* $XdotOrg: xc/programs/Xserver/dix/dispatch.c,v 1.4 2004/07/29 18:43:58 stukreit Exp $ */
|
||||
/* $XdotOrg: xc/programs/Xserver/dix/dispatch.c,v 1.5.8.1 2004/12/09 18:59:51 deronj Exp $ */
|
||||
/* $Xorg: dispatch.c,v 1.5 2001/02/09 02:04:40 xorgcvs Exp $ */
|
||||
/************************************************************
|
||||
|
||||
|
|
@ -78,6 +78,138 @@ Equipment Corporation.
|
|||
|
||||
/* $XFree86: xc/programs/Xserver/dix/dispatch.c,v 3.32 2003/11/10 18:21:45 tsi Exp $ */
|
||||
|
||||
#if defined(LG3D) && defined(DISPATCH_DEBUG)
|
||||
int printprocs = 0;
|
||||
int proc_num = 0;
|
||||
|
||||
typedef char *ProcNameString;
|
||||
|
||||
static ProcNameString procNames[] = {
|
||||
"",
|
||||
"CreateWindow",
|
||||
"ChangeWindowAttributes",
|
||||
"GetWindowAttributes",
|
||||
"DestroyWindow",
|
||||
"DestroySubwindows",
|
||||
"ChangeSaveSet",
|
||||
"ReparentWindow",
|
||||
"MapWindow",
|
||||
"MapSubwindows",
|
||||
"UnmapWindow",
|
||||
"UnmapSubwindows",
|
||||
"ConfigureWindow",
|
||||
"CirculateWindow",
|
||||
"GetGeometry",
|
||||
"QueryTree",
|
||||
"InternAtom",
|
||||
"GetAtomName",
|
||||
"ChangeProperty",
|
||||
"DeleteProperty",
|
||||
"GetProperty",
|
||||
"ListProperties",
|
||||
"SetSelectionOwner",
|
||||
"GetSelectionOwner",
|
||||
"ConvertSelection",
|
||||
"SendEvent",
|
||||
"GrabPointer",
|
||||
"UngrabPointer",
|
||||
"GrabButton",
|
||||
"UngrabButton",
|
||||
"ChangeActivePointerGrab",
|
||||
"GrabKeyboard",
|
||||
"UngrabKeyboard",
|
||||
"GrabKey",
|
||||
"UngrabKey",
|
||||
"AllowEvents",
|
||||
"GrabServer",
|
||||
"UngrabServer",
|
||||
"QueryPointer",
|
||||
"GetMotionEvents",
|
||||
"TranslateCoords",
|
||||
"WarpPointer",
|
||||
"SetInputFocus",
|
||||
"GetInputFocus",
|
||||
"QueryKeymap",
|
||||
"OpenFont",
|
||||
"CloseFont",
|
||||
"QueryFont",
|
||||
"QueryTextExtents",
|
||||
"ListFonts",
|
||||
"ListFontsWithInfo",
|
||||
"SetFontPath",
|
||||
"GetFontPath",
|
||||
"CreatePixmap",
|
||||
"FreePixmap",
|
||||
"CreateGC",
|
||||
"ChangeGC",
|
||||
"CopyGC",
|
||||
"SetDashes",
|
||||
"SetClipRectangles",
|
||||
"FreeGC",
|
||||
"ClearArea",
|
||||
"CopyArea",
|
||||
"CopyPlane",
|
||||
"PolyPoint",
|
||||
"PolyLine",
|
||||
"PolySegment",
|
||||
"PolyRectangle",
|
||||
"PolyArc",
|
||||
"FillPoly",
|
||||
"PolyFillRectangle",
|
||||
"PolyFillArc",
|
||||
"PutImage",
|
||||
"GetImage",
|
||||
"PolyText8",
|
||||
"PolyText16",
|
||||
"ImageText8",
|
||||
"ImageText16",
|
||||
"CreateColormap",
|
||||
"FreeColormap",
|
||||
"CopyColormapAndFree",
|
||||
"InstallColormap",
|
||||
"UninstallColormap",
|
||||
"ListInstalledColormaps",
|
||||
"AllocColor",
|
||||
"AllocNamedColor",
|
||||
"AllocColorCells",
|
||||
"AllocColorPlanes",
|
||||
"FreeColors",
|
||||
"StoreColors",
|
||||
"StoreNamedColor",
|
||||
"QueryColors",
|
||||
"LookupColor",
|
||||
"CreateCursor",
|
||||
"CreateGlyphCursor",
|
||||
"FreeCursor",
|
||||
"RecolorCursor",
|
||||
"QueryBestSize",
|
||||
"QueryExtension",
|
||||
"ListExtensions",
|
||||
"ChangeKeyboardMapping",
|
||||
"GetKeyboardMapping",
|
||||
"ChangeKeyboardControl",
|
||||
"GetKeyboardControl",
|
||||
"Bell",
|
||||
"ChangePointerControl",
|
||||
"GetPointerControl",
|
||||
"SetScreenSaver",
|
||||
"GetScreenSaver",
|
||||
"ChangeHosts",
|
||||
"ListHosts",
|
||||
"SetAccessControl",
|
||||
"SetCloseDownMode",
|
||||
"KillClient",
|
||||
"RotateProperties",
|
||||
"ForceScreenSaver",
|
||||
"SetPointerMapping",
|
||||
"GetPointerMapping",
|
||||
"SetModifierMapping",
|
||||
"GetModifierMapping"
|
||||
};
|
||||
|
||||
#define NUM_PROC_NAMES (sizeof(procNames)/sizeof(char*))
|
||||
#endif /* LG3D && DISPATCH_DEBUG */
|
||||
|
||||
#ifdef PANORAMIX_DEBUG
|
||||
#include <stdio.h>
|
||||
int ProcInitialConnection();
|
||||
|
|
@ -449,6 +581,20 @@ Dispatch(void)
|
|||
client->requestLog[client->requestLogIndex] = MAJOROP;
|
||||
client->requestLogIndex++;
|
||||
#endif
|
||||
|
||||
#if defined(LG3D) && defined(DISPATCH_DEBUG)
|
||||
if (printprocs) {
|
||||
char *procName;
|
||||
if (MAJOROP >= NUM_PROC_NAMES) {
|
||||
|
||||
procName = "Unknown";
|
||||
} else {
|
||||
procName = procNames[MAJOROP];
|
||||
}
|
||||
ErrorF("dispatcher: %d, client = %d, op = %d (%s)\n", ++proc_num, client->index, MAJOROP, procName);
|
||||
}
|
||||
#endif /* LG3D && DISPATCH_DEBUG */
|
||||
|
||||
if (result > (maxBigRequestSize << 2))
|
||||
result = BadLength;
|
||||
else
|
||||
|
|
|
|||
508
dix/events.c
508
dix/events.c
|
|
@ -1,4 +1,4 @@
|
|||
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.6.4.1 2004/09/16 23:37:22 deronj Exp $ */
|
||||
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.6.4.1.4.1 2004/12/09 18:59:51 deronj Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/dix/events.c,v 3.51 2004/01/12 17:04:52 tsi Exp $ */
|
||||
/************************************************************
|
||||
|
||||
|
|
@ -151,11 +151,21 @@ xEvent *xeviexE;
|
|||
#include "dispatch.h"
|
||||
|
||||
#ifdef LG3D
|
||||
|
||||
/* Enable one or the other, but not both */
|
||||
#undef LG3D_EVENT_TEST_LATENCY
|
||||
#undef LG3D_EVENT_TEST_THROUGHPUT
|
||||
|
||||
#include "damagewire.h"
|
||||
#include "../Xext/lgeint.h"
|
||||
|
||||
extern int lgeTryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
|
||||
Mask filter, GrabPtr grab);
|
||||
extern WindowPtr XYToSubWindow (WindowPtr pWin, int x, int y,
|
||||
int *xWinRel, int *yWinRel);
|
||||
|
||||
extern Bool PointInBorderSize(WindowPtr pWin, int x, int y);
|
||||
|
||||
#endif /* LG3D */
|
||||
|
||||
#define EXTENSION_EVENT_BASE 64
|
||||
|
|
@ -331,33 +341,6 @@ static CARD8 criticalEvents[32] =
|
|||
0x7c /* key and button events */
|
||||
};
|
||||
|
||||
#ifdef LG3D
|
||||
|
||||
#define LG3D_DECLARE_WINDOW() \
|
||||
WindowPtr pEventWin = NULL
|
||||
|
||||
#define LG3D_GET_WINDOW(e) \
|
||||
if ((e) != NULL) { \
|
||||
pEventWin = (WindowPtr) LookupIDByType((e)->u.keyButtonPointer.event, RT_WINDOW); \
|
||||
}
|
||||
|
||||
/*
|
||||
** In LG Event Mode the sprite hotspot is calculated by taking the
|
||||
** event window local coordinates and converting them to screen
|
||||
** absolute.
|
||||
**
|
||||
*/
|
||||
#define LG3D_CALC_SPRITE_HOTXY(e) \
|
||||
sprite.hot.x = (e)->u.keyButtonPointer.rootX; \
|
||||
sprite.hot.y = (e)->u.keyButtonPointer.rootY;
|
||||
|
||||
extern WindowPtr XYToSubWindow (WindowPtr pWin, int x, int y,
|
||||
int *xWinRel, int *yWinRel);
|
||||
|
||||
extern Bool PointInBorderSize(WindowPtr pWin, int x, int y);
|
||||
|
||||
#endif /* LG3D */
|
||||
|
||||
#ifdef PANORAMIX
|
||||
|
||||
static void ConfineToShape(RegionPtr shape, int *px, int *py);
|
||||
|
|
@ -498,19 +481,8 @@ XineramaCheckVirtualMotion(
|
|||
if (qe)
|
||||
{
|
||||
sprite.hot.pScreen = qe->pScreen; /* should always be Screen 0 */
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
LG3D_DECLARE_WINDOW();
|
||||
LG3D_GET_WINDOW(qe->event);
|
||||
LG3D_CALC_SPRITE_HOTXY(qe->event);
|
||||
} else {
|
||||
sprite.hot.x = qe->event->u.keyButtonPointer.rootX;
|
||||
sprite.hot.y = qe->event->u.keyButtonPointer.rootY;
|
||||
}
|
||||
#else
|
||||
sprite.hot.x = qe->event->u.keyButtonPointer.rootX;
|
||||
sprite.hot.y = qe->event->u.keyButtonPointer.rootY;
|
||||
#endif /* LG3D */
|
||||
pWin = inputInfo.pointer->grab ? inputInfo.pointer->grab->confineTo :
|
||||
NullWindow;
|
||||
}
|
||||
|
|
@ -678,14 +650,18 @@ XineramaConfineCursorToWindow(WindowPtr pWin, Bool generateEvents)
|
|||
static void
|
||||
XineramaChangeToCursor(CursorPtr cursor)
|
||||
{
|
||||
#ifndef LG3D
|
||||
if (cursor != sprite.current)
|
||||
{
|
||||
#endif /* ! LG3D */
|
||||
if ((sprite.current->bits->xhot != cursor->bits->xhot) ||
|
||||
(sprite.current->bits->yhot != cursor->bits->yhot))
|
||||
XineramaCheckPhysLimits(cursor, FALSE);
|
||||
(*sprite.screen->DisplayCursor)(sprite.screen, cursor);
|
||||
sprite.current = cursor;
|
||||
#ifndef LG3D
|
||||
}
|
||||
#endif /* ! LG3D */
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -913,8 +889,10 @@ ChangeToCursor(CursorPtr cursor)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifndef LG3D
|
||||
if (cursor != sprite.current)
|
||||
{
|
||||
#endif /* ! LG3D */
|
||||
if ((sprite.current->bits->xhot != cursor->bits->xhot) ||
|
||||
(sprite.current->bits->yhot != cursor->bits->yhot))
|
||||
CheckPhysLimits(cursor, FALSE, sprite.confined,
|
||||
|
|
@ -922,7 +900,9 @@ ChangeToCursor(CursorPtr cursor)
|
|||
(*sprite.hotPhys.pScreen->DisplayCursor) (sprite.hotPhys.pScreen,
|
||||
cursor);
|
||||
sprite.current = cursor;
|
||||
#ifndef LG3D
|
||||
}
|
||||
#endif /* ! LG3D */
|
||||
}
|
||||
|
||||
/* returns true if b is a descendent of a */
|
||||
|
|
@ -957,6 +937,7 @@ PostNewCursor(void)
|
|||
}
|
||||
else
|
||||
win = sprite.win;
|
||||
|
||||
for (; win; win = win->parent)
|
||||
if (win->optional && win->optional->cursor != NullCursor)
|
||||
{
|
||||
|
|
@ -1123,8 +1104,7 @@ lgeTryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
|
|||
|
||||
destination = lgeDSCaresAboutEvent (pEvents, &win);
|
||||
|
||||
if (client == NULL /* For XDamageNotify */ ||
|
||||
(destination != SEND_TO_NORMAL_CLIENT && win == lgeGrabAllWindowEvents.window)) {
|
||||
if (destination != SEND_TO_NORMAL_CLIENT && win == lgeGrabAllWindowEvents.window) {
|
||||
/*
|
||||
** Send events to grabbing client client. Use a null grab pointer
|
||||
** in order to sure that the event isn't eaten by any grabs; we want
|
||||
|
|
@ -1637,6 +1617,7 @@ ProcAllowEvents(client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xAllowEventsReq);
|
||||
time = ClientTimeToServerTime(stuff->time);
|
||||
|
||||
switch (stuff->mode)
|
||||
{
|
||||
case ReplayPointer:
|
||||
|
|
@ -1965,6 +1946,131 @@ MaybeDeliverEventsToClient(pWin, pEvents, count, filter, dontClient)
|
|||
return 2;
|
||||
}
|
||||
|
||||
#ifdef LG3D
|
||||
|
||||
/* Returns True if the event occurred above a 3D object rather than a native window */
|
||||
#define EVENT_IS_3D(e) \
|
||||
((e)->u.keyButtonPointer.event == lgeDisplayServerPRW)
|
||||
|
||||
/*
|
||||
TODO: it's not clear whether this routine deals with grabs properly.
|
||||
Must handle the following cases:
|
||||
2D event grabbed and forced to go to 2D win
|
||||
2D event grabbed and forced to go to 3D win
|
||||
3D event grabbed and forced to go to 2D win
|
||||
3D event grabbed and forced to go to 3D win
|
||||
*/
|
||||
|
||||
static void
|
||||
lgeFixUpEventFromWindow(
|
||||
xEvent *xE,
|
||||
WindowPtr pWin,
|
||||
Window child,
|
||||
Bool calcChild)
|
||||
{
|
||||
Window eventWindowOld;
|
||||
|
||||
/*
|
||||
ErrorF("Enter FixUpEventFromWindow, event type = %d\n", xE->u.u.type);
|
||||
if (EVENT_IS_3D(xE)) {
|
||||
ErrorF("Event is 3D\n");
|
||||
} else {
|
||||
ErrorF("Event is 2D\n");
|
||||
}
|
||||
ErrorF("old event window = %d\n", XE_KBPTR.event);
|
||||
ErrorF("old child window = %d\n", XE_KBPTR.child);
|
||||
ErrorF("old eventxy = %d, %d\n", XE_KBPTR.eventX, XE_KBPTR.eventY);
|
||||
*/
|
||||
|
||||
/* TODO: This is merely an optimization; it is no longer functionally necessary */
|
||||
if (EVENT_IS_3D(xE)) {
|
||||
calcChild = False;
|
||||
}
|
||||
|
||||
if (calcChild)
|
||||
{
|
||||
/*ErrorF("Calculating child\n");*/
|
||||
WindowPtr w=spriteTrace[spriteTraceGood-1];
|
||||
/* If the search ends up past the root should the child field be
|
||||
set to none or should the value in the argument be passed
|
||||
through. It probably doesn't matter since everyone calls
|
||||
this function with child == None anyway. */
|
||||
|
||||
while (w)
|
||||
{
|
||||
/* If the source window is same as event window, child should be
|
||||
none. Don't bother going all all the way back to the root. */
|
||||
|
||||
if (w == pWin)
|
||||
{
|
||||
child = None;
|
||||
break;
|
||||
}
|
||||
|
||||
if (w->parent == pWin)
|
||||
{
|
||||
child = w->drawable.id;
|
||||
break;
|
||||
}
|
||||
w = w->parent;
|
||||
}
|
||||
}
|
||||
XE_KBPTR.root = ROOT->drawable.id;
|
||||
|
||||
/* Set event field (only for non-3D events) */
|
||||
if (!EVENT_IS_3D(xE)) {
|
||||
eventWindowOld = XE_KBPTR.event;
|
||||
XE_KBPTR.event = pWin->drawable.id;
|
||||
/*ErrorF("new event window = %d\n", XE_KBPTR.event);*/
|
||||
}
|
||||
|
||||
if (sprite.hot.pScreen != pWin->drawable.pScreen)
|
||||
{
|
||||
XE_KBPTR.sameScreen = xFalse;
|
||||
XE_KBPTR.child = None;
|
||||
XE_KBPTR.eventX = 0;
|
||||
XE_KBPTR.eventY = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
XE_KBPTR.sameScreen = xTrue;
|
||||
|
||||
/* Set various fields (only for non-3D events) */
|
||||
if (!EVENT_IS_3D(xE)) {
|
||||
|
||||
XE_KBPTR.child = child;
|
||||
/*ErrorF("new child window = %d\n", XE_KBPTR.child);*/
|
||||
|
||||
/*
|
||||
** The only events needing fixup at this point are mouse events
|
||||
** where the event window has been changed.
|
||||
*/
|
||||
if ((xE->u.u.type == ButtonPress ||
|
||||
xE->u.u.type == ButtonRelease ||
|
||||
xE->u.u.type == MotionNotify) &&
|
||||
eventWindowOld != XE_KBPTR.event) {
|
||||
|
||||
/* TODO: it would be good to avoid a resource lookup here. Some sort of
|
||||
caching might optimize this */
|
||||
WindowPtr pOuterWin = (WindowPtr) LookupIDByType(eventWindowOld, RT_WINDOW);
|
||||
if (pOuterWin == NULL) {
|
||||
ErrorF("Error: FixupEventFromWindow: outer window %d, not found. No XY fix up occuring.\n",
|
||||
eventWindowOld);
|
||||
} else {
|
||||
/*
|
||||
** Make the event coords relative to the destination window
|
||||
** instead of relative to the outer window.
|
||||
*/
|
||||
XE_KBPTR.eventX -= pWin->drawable.x - pOuterWin->drawable.x;
|
||||
XE_KBPTR.eventY -= pWin->drawable.y - pOuterWin->drawable.y;
|
||||
/*ErrorF("new eventxy = %d, %d", XE_KBPTR.eventX, XE_KBPTR.eventY);*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* LG3D */
|
||||
|
||||
static void
|
||||
FixUpEventFromWindow(
|
||||
xEvent *xE,
|
||||
|
|
@ -1973,8 +2079,10 @@ FixUpEventFromWindow(
|
|||
Bool calcChild)
|
||||
{
|
||||
#ifdef LG3D
|
||||
Bool isMouseEvent = FALSE;
|
||||
Window mouseEventWinPrev = 0;
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
lgeFixUpEventFromWindow(xE, pWin, child, calcChild);
|
||||
return;
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
if (calcChild)
|
||||
|
|
@ -2005,93 +2113,15 @@ FixUpEventFromWindow(
|
|||
}
|
||||
}
|
||||
XE_KBPTR.root = ROOT->drawable.id;
|
||||
#ifdef LG3D
|
||||
if (xE->u.u.type == ButtonPress ||
|
||||
xE->u.u.type == ButtonRelease ||
|
||||
xE->u.u.type == MotionNotify) {
|
||||
isMouseEvent = TRUE;
|
||||
mouseEventWinPrev = XE_KBPTR.event;
|
||||
}
|
||||
|
||||
if (lgeDisplayServerIsAlive &&
|
||||
XE_KBPTR.event == lgeDisplayServerPRW) {
|
||||
|
||||
/*
|
||||
** Event is going to the PRW.
|
||||
** Button and motion events already have the event
|
||||
** window field set.
|
||||
*/
|
||||
if (!isMouseEvent) {
|
||||
XE_KBPTR.event = pWin->drawable.id;
|
||||
}
|
||||
|
||||
} else {
|
||||
/*
|
||||
** Non-LG event mode or the event is going to an
|
||||
** X application window. Need to set the event window
|
||||
** field to the destination window.
|
||||
*/
|
||||
XE_KBPTR.event = pWin->drawable.id;
|
||||
}
|
||||
#else
|
||||
XE_KBPTR.event = pWin->drawable.id;
|
||||
#endif /* LG3D */
|
||||
if (sprite.hot.pScreen == pWin->drawable.pScreen)
|
||||
{
|
||||
XE_KBPTR.sameScreen = xTrue;
|
||||
XE_KBPTR.child = child;
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
if (XE_KBPTR.event == lgeDisplayServerPRW) {
|
||||
/*
|
||||
** Event is going to the PRW.
|
||||
** Button and motion events already have the event
|
||||
** XY fields set.
|
||||
*/
|
||||
if (!isMouseEvent) {
|
||||
XE_KBPTR.eventX = XE_KBPTR.rootX;
|
||||
XE_KBPTR.eventY = XE_KBPTR.rootY;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
** Event is going to an X application
|
||||
** window. Need to set the window relative event XY for
|
||||
** ALL event types.
|
||||
**
|
||||
** TODO: I don't think this code deals very well with grab cases,
|
||||
*/
|
||||
if (!isMouseEvent || mouseEventWinPrev == pWin->drawable.id) {
|
||||
/*
|
||||
** A non-button/motion event (e.g. keypress or enter/leave)
|
||||
** or the event occurred in a top-level window.
|
||||
** Do nothing. The event coords are already correct.
|
||||
*/
|
||||
} else {
|
||||
/* TODO: it would be good to avoid a resource lookup here */
|
||||
WindowPtr pOuterWin = (WindowPtr) LookupIDByType(mouseEventWinPrev, RT_WINDOW);
|
||||
if (pOuterWin == NULL) {
|
||||
ErrorF("Error: FixupEventFromWindow: outer window %d, not found. No XY fix up occuring.\n", mouseEventWinPrev);
|
||||
} else {
|
||||
/*
|
||||
** Make the event coords relative to the destination window
|
||||
** instead of relative to the outer window.
|
||||
*/
|
||||
XE_KBPTR.eventX -= pWin->drawable.x - pOuterWin->drawable.x;
|
||||
XE_KBPTR.eventY -= pWin->drawable.y - pOuterWin->drawable.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Non-LG event mode */
|
||||
XE_KBPTR.eventX = XE_KBPTR.rootX - pWin->drawable.x;
|
||||
XE_KBPTR.eventY = XE_KBPTR.rootY - pWin->drawable.y;
|
||||
}
|
||||
#else
|
||||
XE_KBPTR.eventX =
|
||||
XE_KBPTR.rootX - pWin->drawable.x;
|
||||
XE_KBPTR.eventY =
|
||||
XE_KBPTR.rootY - pWin->drawable.y;
|
||||
#endif /* LG3D */
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2304,12 +2334,6 @@ static Bool
|
|||
CheckMotion(xEvent *xE)
|
||||
{
|
||||
WindowPtr prevSpriteWin = sprite.win;
|
||||
#ifdef LG3D
|
||||
LG3D_DECLARE_WINDOW();
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
LG3D_GET_WINDOW(xE);
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
#ifdef PANORAMIX
|
||||
if(!noPanoramiXExtension)
|
||||
|
|
@ -2323,17 +2347,8 @@ CheckMotion(xEvent *xE)
|
|||
sprite.hot.pScreen = sprite.hotPhys.pScreen;
|
||||
ROOT = WindowTable[sprite.hot.pScreen->myNum];
|
||||
}
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
LG3D_CALC_SPRITE_HOTXY(xE);
|
||||
} else {
|
||||
sprite.hot.x = XE_KBPTR.rootX;
|
||||
sprite.hot.y = XE_KBPTR.rootY;
|
||||
}
|
||||
#else
|
||||
sprite.hot.x = XE_KBPTR.rootX;
|
||||
sprite.hot.y = XE_KBPTR.rootY;
|
||||
#endif /* LG3D */
|
||||
if (sprite.hot.x < sprite.physLimits.x1)
|
||||
sprite.hot.x = sprite.physLimits.x1;
|
||||
else if (sprite.hot.x >= sprite.physLimits.x2)
|
||||
|
|
@ -2359,34 +2374,38 @@ CheckMotion(xEvent *xE)
|
|||
}
|
||||
|
||||
#ifdef LG3D
|
||||
if (pEventWin == NULL) {
|
||||
sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
|
||||
virtualSprite.hot.x = sprite.hot.x - sprite.win->drawable.x;
|
||||
virtualSprite.hot.y = sprite.hot.y - sprite.win->drawable.y;
|
||||
} else {
|
||||
WindowPtr pSpriteWin;
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
|
||||
/*
|
||||
** This is needed to decouple the virtual sprite position from
|
||||
** the physical sprite position.
|
||||
*/
|
||||
if (pEventWin->drawable.id == lgeDisplayServerPRW) {
|
||||
pSpriteWin = pEventWin;
|
||||
if (xE == NULL) {
|
||||
/* WindowsRestructured case */
|
||||
/* TODO: this may change */
|
||||
sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
|
||||
virtualSprite.hot.x = sprite.hot.x - sprite.win->drawable.x;
|
||||
virtualSprite.hot.y = sprite.hot.y - sprite.win->drawable.y;
|
||||
} else if (XE_KBPTR.event == lgeDisplayServerPRW) {
|
||||
/* 3D Event */
|
||||
sprite.win = pLgeDisplayServerPRWWin;
|
||||
virtualSprite.hot.x = sprite.hot.x;
|
||||
virtualSprite.hot.y = sprite.hot.y;
|
||||
} else {
|
||||
pSpriteWin = XYToSubWindow(pEventWin,
|
||||
xE->u.keyButtonPointer.eventX,
|
||||
xE->u.keyButtonPointer.eventY,
|
||||
&virtualSprite.hot.x,
|
||||
&virtualSprite.hot.y);
|
||||
/* Normal X Event */
|
||||
WindowPtr pEventWin = (WindowPtr) LookupIDByType(XE_KBPTR.event, RT_WINDOW);
|
||||
if (pEventWin == NULL) {
|
||||
/* This might happen if the window has been destroyed */
|
||||
sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
|
||||
virtualSprite.hot.x = sprite.hot.x - sprite.win->drawable.x;
|
||||
virtualSprite.hot.y = sprite.hot.y - sprite.win->drawable.y;
|
||||
return TRUE;
|
||||
}
|
||||
sprite.win = XYToSubWindow(pEventWin,
|
||||
XE_KBPTR.eventX, XE_KBPTR.eventY,
|
||||
&virtualSprite.hot.x, &virtualSprite.hot.y);
|
||||
}
|
||||
virtualSprite.win = sprite.win;
|
||||
|
||||
sprite.win = pSpriteWin;
|
||||
} else {
|
||||
sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
|
||||
}
|
||||
|
||||
virtualSprite.win = sprite.win;
|
||||
|
||||
#else
|
||||
sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
|
||||
#endif /* LG3D */
|
||||
|
|
@ -2416,6 +2435,33 @@ void
|
|||
WindowsRestructured()
|
||||
{
|
||||
(void) CheckMotion((xEvent *)NULL);
|
||||
#ifdef xLG3D
|
||||
/*
|
||||
**
|
||||
** Bug: this code doesn't currently work. It messes up the sprite window.
|
||||
** Test case: freecell: click New button. Cursor jumps to upper left hand
|
||||
** corner because the button ends up getting sent to the DS!
|
||||
*/
|
||||
/*
|
||||
** In addition, we need to send a synthetic motion event with the
|
||||
** last physical sprite position to the Display Server so that it
|
||||
** will notice that something has changed and recompute the current
|
||||
** pointer window.
|
||||
**
|
||||
** Note: we cannot just skip the above call to CheckMotion and
|
||||
** send this synthetic event alone. We must call CheckMotion(NULL)
|
||||
** in order to the current sprite window to a valid window. Otherwise
|
||||
** when the synthetic event comes back to us the prevSpriteWindow
|
||||
** may still point to an invalid window and this will crash the server!
|
||||
*/
|
||||
xEvent xE;
|
||||
xE.u.u.type = MotionNotify;
|
||||
xE.u.keyButtonPointer.event = lgeDisplayServerPRW;
|
||||
xE.u.keyButtonPointer.rootX = sprite.hot.x;
|
||||
xE.u.keyButtonPointer.rootY = sprite.hot.y;
|
||||
xE.u.keyButtonPointer.time = GetTimeInMillis();
|
||||
(*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
|
||||
#endif /* LG3D */
|
||||
}
|
||||
|
||||
#ifdef PANORAMIX
|
||||
|
|
@ -2955,6 +3001,7 @@ DeliverFocusedEvent(keybd, xE, window, count)
|
|||
if (DeliverDeviceEvents(window, xE, NullGrab, focus, keybd, count))
|
||||
return;
|
||||
}
|
||||
|
||||
/* just deliver it to the focus window */
|
||||
FixUpEventFromWindow(xE, focus, None, FALSE);
|
||||
if (xE->u.u.type & EXTENSION_EVENT_BASE)
|
||||
|
|
@ -3091,7 +3138,16 @@ ProcessKeyboardEvent (xE, keybd, count)
|
|||
{
|
||||
xeviekb = keybd;
|
||||
if(!rootWin) {
|
||||
#ifdef LG3D
|
||||
/* TEMP Workaround */
|
||||
WindowPtr pWin;
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
xeviewin = pLgeDisplayServerPRWWin;
|
||||
}
|
||||
pWin = xeviewin->parent;
|
||||
#else
|
||||
WindowPtr pWin = xeviewin->parent;
|
||||
#endif /* LG3D */
|
||||
while(pWin) {
|
||||
if(!pWin->parent) {
|
||||
rootWin = pWin->drawable.id;
|
||||
|
|
@ -3247,6 +3303,22 @@ FixKeyState (xE, keybd)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(LG3D_EVENT_TEST_LATENCY) || defined(LG3D_EVENT_TEST_THROUGHPUT)
|
||||
#include <sys/time.h>
|
||||
static int lg3dEventTestActive = 0;
|
||||
static struct timeval lg3dEventTestStartTV;
|
||||
#endif /* LG3D_EVENT_TEST_LATENCY || LG3D_EVENT_TEST_THROUGHPUT */
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_LATENCY
|
||||
#include "statbuf.h"
|
||||
static StatBuf *lg3dEventTestSb = NULL;
|
||||
#endif /* LG3D_EVENT_TEST_LATENCY */
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_THROUGHPUT
|
||||
static int lg3dEventTestReceived = 0;
|
||||
static int lg3dEventTestCount = 10000;
|
||||
#endif /* LG3D_EVENT_TEST_THROUGHPUT */
|
||||
|
||||
void
|
||||
#ifdef XKB
|
||||
CoreProcessPointerEvent (xE, mouse, count)
|
||||
|
|
@ -3270,12 +3342,110 @@ ProcessPointerEvent (xE, mouse, count)
|
|||
xevieEventSent = 0;
|
||||
else {
|
||||
xeviemouse = mouse;
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_LATENCY
|
||||
/* For latency timing: send */
|
||||
if (xE->u.u.type == ButtonPress) {
|
||||
|
||||
ErrorF("Start Test\n");
|
||||
if (lg3dEventTestSb == NULL) {
|
||||
lg3dEventTestSb = statBufCreate();
|
||||
if (lg3dEventTestSb == NULL) {
|
||||
FatalError("LG3D Event Test: cannot create integer statistics buffer\n");
|
||||
}
|
||||
}
|
||||
lg3dEventTestActive = 1;
|
||||
gettimeofday(&lg3dEventTestStartTV, 0);
|
||||
/*ErrorF("Start: sec = %d, usec = %d\n", lg3dEventTestStartTV.tv_sec,
|
||||
lg3dEventTestStartTV.tv_usec);*/
|
||||
}
|
||||
if (lg3dEventTestActive) {
|
||||
struct timeval tv;
|
||||
int deltaSecs;
|
||||
gettimeofday(&tv, 0);
|
||||
deltaSecs = tv.tv_sec - lg3dEventTestStartTV.tv_sec;
|
||||
/*ErrorF("Send: deltaSecs = %d, usec = %d\n", deltaSecs, tv.tv_usec);*/
|
||||
xE->u.keyButtonPointer.time = deltaSecs;
|
||||
xE->u.keyButtonPointer.child = tv.tv_usec;
|
||||
}
|
||||
#endif /* LG3D_EVENT_TEST_LATENCY */
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_THROUGHPUT
|
||||
/* For throughput timing */
|
||||
if (xE->u.u.type == ButtonPress) {
|
||||
int i;
|
||||
ErrorF("Start Test\n");
|
||||
lg3dEventTestActive = 1;
|
||||
lg3dEventTestReceived = 0;
|
||||
gettimeofday(&lg3dEventTestStartTV, 0);
|
||||
for (i = 1; i <= lg3dEventTestCount; i++) {
|
||||
/*ErrorF("Sending event %d\n", i);*/
|
||||
WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
|
||||
}
|
||||
} else
|
||||
#endif /* LG3D_EVENT_TEST_THROUGHPUT */
|
||||
|
||||
WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_LATENCY
|
||||
/* For latency timing: receive */
|
||||
if (lg3dEventTestActive) {
|
||||
struct timeval tv;
|
||||
int deltaSecs, deltaUsecs;
|
||||
float msecs;
|
||||
|
||||
gettimeofday(&tv, 0);
|
||||
/*ErrorF("Receive: sec = %d, usec = %d\n", tv.tv_sec, tv.tv_usec);*/
|
||||
|
||||
tv.tv_sec -= lg3dEventTestStartTV.tv_sec;
|
||||
/*
|
||||
ErrorF("Receive: deltaSecs = %d, usec = %d\n", tv.tv_sec, tv.tv_usec);
|
||||
ErrorF("Receive: ev->time = %d, ev->child = %d\n",
|
||||
xE->u.keyButtonPointer.time, xE->u.keyButtonPointer.child);
|
||||
*/
|
||||
|
||||
deltaSecs = tv.tv_sec - xE->u.keyButtonPointer.time;
|
||||
deltaUsecs = tv.tv_usec - xE->u.keyButtonPointer.child;
|
||||
|
||||
/*
|
||||
ErrorF("Interval: deltaSecs = %d, deltaUsec = %d\n",
|
||||
deltaSecs, deltaUsecs);
|
||||
*/
|
||||
|
||||
msecs = 1000.0f * deltaSecs + deltaUsecs / 1000.0f;
|
||||
/*ErrorF("Interval: msecs = %f\n", msecs);*/
|
||||
|
||||
statBufAdd(lg3dEventTestSb, msecs);
|
||||
|
||||
/* Discard event to avoid the additional computational load of
|
||||
further processing */
|
||||
return;
|
||||
}
|
||||
|
||||
#endif /* LG3D_EVENT_TEST_LATENCY */
|
||||
|
||||
#ifdef LG3D_EVENT_TEST_THROUGHPUT
|
||||
if (lg3dEventTestActive) {
|
||||
lg3dEventTestReceived++;
|
||||
/*ErrorF("Received event %d\n", lg3dEventTestReceived);*/
|
||||
if (lg3dEventTestReceived == lg3dEventTestCount) {
|
||||
struct timeval stopTV;
|
||||
gettimeofday(&stopTV, 0);
|
||||
int deltaSecs = stopTV.tv_sec - lg3dEventTestStartTV.tv_sec;
|
||||
int deltaUsecs = stopTV.tv_usec - lg3dEventTestStartTV.tv_usec;
|
||||
float msecs = deltaSecs * 1000.0f + deltaUsecs / 1000.0f;
|
||||
float msecsPerEvent = msecs / (float)lg3dEventTestCount;
|
||||
ErrorF("LG3D Event Test: %d events in %f ms (%f ms/event)\n",
|
||||
lg3dEventTestCount, msecs, msecsPerEvent);
|
||||
lg3dEventTestActive = 0;
|
||||
}
|
||||
}
|
||||
#endif /* LG3D_EVENT_TEST_THROUGHPUT */
|
||||
|
||||
if (!syncEvents.playingEvents)
|
||||
NoticeTime(xE)
|
||||
XE_KBPTR.state = (butc->state | (
|
||||
|
|
@ -4955,11 +5125,17 @@ ProcRecolorCursor(client)
|
|||
return (Success);
|
||||
}
|
||||
|
||||
/*#define DEBUG*/
|
||||
#if defined(LG3D) && defined (DEBUG)
|
||||
int print_events_all = 0;
|
||||
int print_events_to_ds = 0;
|
||||
int print_events_to_wm = 0;
|
||||
int print_events_to_app = 0;
|
||||
int damageEventsOnly = 0;
|
||||
int numDamageEvents = 0;
|
||||
/* TODO: for damage event debug only */
|
||||
#include "damageproto.h"
|
||||
|
||||
#endif /* LG3D && DEBUG */
|
||||
|
||||
void
|
||||
|
|
@ -5023,7 +5199,9 @@ WriteEventsToClient(pClient, count, events)
|
|||
}
|
||||
|
||||
#if defined(LG3D) && defined (DEBUG)
|
||||
|
||||
if (print_events_all ||
|
||||
/* TODO: these indices are now out of date; update them */
|
||||
(print_events_to_ds && pClient->index == 4) ||
|
||||
(print_events_to_wm && pClient->index == 5) ||
|
||||
(print_events_to_app && pClient->index == 6)) {
|
||||
|
|
@ -5031,10 +5209,18 @@ WriteEventsToClient(pClient, count, events)
|
|||
|
||||
for(i = 0; i < count; i++) {
|
||||
ev = &events[i];
|
||||
ErrorF("Send event %d to client %d, xy = %d, %d, event win = %d\n",
|
||||
ev->u.u.type, pClient->index,
|
||||
ev->u.keyButtonPointer.eventX, ev->u.keyButtonPointer.eventY,
|
||||
ev->u.keyButtonPointer.event);
|
||||
if (ev->u.u.type == 118) {
|
||||
xDamageNotifyEvent *damev = (xDamageNotifyEvent *) ev;
|
||||
ErrorF("Send damage event %d, to client %d, xywh = %d, %d, %d, %d\n",
|
||||
++numDamageEvents, pClient->index,
|
||||
damev->area.x, damev->area.y,
|
||||
damev->area.width, damev->area.height);
|
||||
} else if (!damageEventsOnly) {
|
||||
ErrorF("Send event %d to client %d, xy = %d, %d, event win = %d\n",
|
||||
ev->u.u.type, pClient->index,
|
||||
ev->u.keyButtonPointer.eventX, ev->u.keyButtonPointer.eventY,
|
||||
ev->u.keyButtonPointer.event);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* LG3D && DEBUG */
|
||||
|
|
|
|||
|
|
@ -112,8 +112,7 @@
|
|||
#include "xf86_OSproc.h" /* sigio stuff */
|
||||
|
||||
#ifdef LG3D
|
||||
# include "../../../dix/ds.h"
|
||||
# include "../../../Xext/lgeint.h"
|
||||
#include "../../../Xext/lgeint.h"
|
||||
#endif /* LG3D */
|
||||
|
||||
/******************************************************************************
|
||||
|
|
@ -699,7 +698,9 @@ xf86eqEnqueue (xEvent *e)
|
|||
#ifdef XINPUT
|
||||
int count;
|
||||
|
||||
#ifndef LG3D
|
||||
xf86AssertBlockedSIGIO ("xf86eqEnqueue");
|
||||
#endif /* !LG3D */
|
||||
switch (e->u.u.type) {
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
|
|
@ -735,9 +736,18 @@ xf86eqEnqueue (xEvent *e)
|
|||
#endif
|
||||
|
||||
#ifdef LG3D
|
||||
/* If Display Server is not yet alive, do nothing to the event */
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
dsProcessEvent(e);
|
||||
if (lgeDisplayServerIsAlive &&
|
||||
!lgeDisplayServerClient->clientGone &&
|
||||
!lgeEventComesFromDS) {
|
||||
|
||||
/*
|
||||
ErrorF("Send event XS->DS, type = %d xy = %d, %d\n",
|
||||
e->u.u.type, e->u.keyButtonPointer.rootX,
|
||||
e->u.keyButtonPointer.rootY);
|
||||
*/
|
||||
|
||||
WriteToClient(lgeDisplayServerClient, sizeof(xEvent), (char *)e);
|
||||
return;
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
|
|
@ -1382,6 +1392,7 @@ xf86PostKeyboardEvent(DeviceIntPtr device,
|
|||
#ifdef XFreeXDGA
|
||||
/* if(!DGAStealKeyEvent(xf86EventQueue.pEnqueueScreen->myNum, xE)) */
|
||||
#endif
|
||||
|
||||
ENQUEUE(xE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,17 @@ SOFTWARE.
|
|||
#include "pixmapstr.h"
|
||||
#include "mivalidate.h"
|
||||
|
||||
#ifdef LG3D
|
||||
#include "../Xext/lgeint.h"
|
||||
|
||||
extern void lg3dMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pNextSib,
|
||||
VTKind kind);
|
||||
|
||||
extern void lg3dSlideAndSizeWindow (WindowPtr pWin, int x, int y,
|
||||
unsigned int w, unsigned int h, WindowPtr pSib);
|
||||
|
||||
#endif /* LG3D */
|
||||
|
||||
void
|
||||
miClearToBackground(pWin, x, y, w, h, generateExposures)
|
||||
WindowPtr pWin;
|
||||
|
|
@ -503,6 +514,18 @@ miMoveWindow(pWin, x, y, pNextSib, kind)
|
|||
#endif
|
||||
WindowPtr pLayerWin;
|
||||
|
||||
#ifdef LG3D
|
||||
/*
|
||||
** TODO: I tried to do this with wrappers but it didn't work.
|
||||
** Is there a better way to override this function other than
|
||||
** just directly modifying it?
|
||||
*/
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
lg3dMoveWindow(pWin, x, y, pNextSib, kind);
|
||||
return;
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
/* if this is a root window, can't be moved */
|
||||
if (!(pParent = pWin->parent))
|
||||
return ;
|
||||
|
|
@ -637,6 +660,18 @@ miSlideAndSizeWindow(pWin, x, y, w, h, pSib)
|
|||
#endif
|
||||
WindowPtr pLayerWin;
|
||||
|
||||
#ifdef LG3D
|
||||
/*
|
||||
** TODO: I tried to do this with wrappers but it didn't work.
|
||||
** Is there a better way to override this function other than
|
||||
** just directly modifying it?
|
||||
*/
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
lg3dSlideAndSizeWindow(pWin, x, y, w, h, pSib);
|
||||
return;
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
/* if this is a root window, can't be resized */
|
||||
if (!(pParent = pWin->parent))
|
||||
return ;
|
||||
|
|
|
|||
|
|
@ -659,14 +659,26 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
|
|||
cwInitializeRender(pScreen);
|
||||
#endif
|
||||
|
||||
#ifdef LG3D
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
SCREEN_EPILOGUE(pScreen, MoveWindow, lg3dMoveWindow);
|
||||
SCREEN_EPILOGUE(pScreen, ResizeWindow, lg3dSlideAndSizeWindow);
|
||||
}
|
||||
#endif /* LG3D */
|
||||
}
|
||||
|
||||
#ifdef LG3D
|
||||
/*
|
||||
** This is called when the LG Display Server first notifies
|
||||
** the X server that it is alive. Note that we cannot initialize
|
||||
** these screen functions earlier than this because the composite
|
||||
** wrapper is initialized when the X server starts up and at that
|
||||
** time it is not known whether the LG Display Server will be
|
||||
** running.
|
||||
*/
|
||||
|
||||
void
|
||||
miInitializeCompositeWrapperForLG(ScreenPtr pScreen)
|
||||
{
|
||||
SCREEN_EPILOGUE(pScreen, MoveWindow, lg3dMoveWindow);
|
||||
SCREEN_EPILOGUE(pScreen, ResizeWindow, lg3dSlideAndSizeWindow);
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
static Bool
|
||||
cwCloseScreen (int i, ScreenPtr pScreen)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -32,15 +32,15 @@
|
|||
#include "servermd.h"
|
||||
#include "inputstr.h"
|
||||
#include "windowstr.h"
|
||||
#ifdef LG3D
|
||||
#include "../Xext/lgeint.h"
|
||||
#endif /* LG3D */
|
||||
|
||||
static RESTYPE CursorClientType;
|
||||
static RESTYPE CursorWindowType;
|
||||
static int CursorScreenPrivateIndex = -1;
|
||||
static int CursorGeneration;
|
||||
static CursorPtr CursorCurrent;
|
||||
#ifdef LG3D
|
||||
extern CursorPtr plgeDisplayServerForceThisCursor;
|
||||
#endif /* LG3D */
|
||||
|
||||
#define VERIFY_CURSOR(pCursor, cursor, client, access) { \
|
||||
pCursor = (CursorPtr)SecurityLookupIDByType((client), (cursor), \
|
||||
|
|
@ -91,12 +91,38 @@ CursorDisplayCursor (ScreenPtr pScreen,
|
|||
|
||||
Unwrap (cs, pScreen, DisplayCursor);
|
||||
#ifdef LG3D
|
||||
if (plgeDisplayServerForceThisCursor != NULL) {
|
||||
ret = (*pScreen->DisplayCursor) (pScreen,
|
||||
plgeDisplayServerForceThisCursor);
|
||||
if (lgeDisplayServerIsAlive) {
|
||||
ret = (*pScreen->DisplayCursor) (pScreen, pInvisibleCursor);
|
||||
} else
|
||||
#endif
|
||||
ret = (*pScreen->DisplayCursor) (pScreen, pCursor);
|
||||
|
||||
#ifdef LG3D
|
||||
{
|
||||
CursorEventPtr e;
|
||||
|
||||
CursorCurrent = pCursor;
|
||||
|
||||
/* Always send events, except when cursor is null */
|
||||
if (pCursor != NULL) {
|
||||
for (e = cursorEvents; e; e = e->next)
|
||||
{
|
||||
if (e->eventMask & XFixesDisplayCursorNotifyMask)
|
||||
{
|
||||
xXFixesCursorNotifyEvent ev;
|
||||
ev.type = XFixesEventBase + XFixesCursorNotify;
|
||||
ev.subtype = XFixesDisplayCursorNotify;
|
||||
ev.sequenceNumber = e->pClient->sequence;
|
||||
ev.window = e->pWindow->drawable.id;
|
||||
ev.cursorSerial = pCursor->serialNumber;
|
||||
ev.timestamp = currentTime.milliseconds;
|
||||
ev.name = pCursor->name;
|
||||
WriteEventsToClient (e->pClient, 1, (xEvent *) &ev);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (pCursor != CursorCurrent)
|
||||
{
|
||||
CursorEventPtr e;
|
||||
|
|
@ -118,6 +144,8 @@ CursorDisplayCursor (ScreenPtr pScreen,
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif /* LG3D */
|
||||
|
||||
Wrap (cs, pScreen, DisplayCursor, CursorDisplayCursor);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -312,6 +340,7 @@ ProcXFixesGetCursorImage (ClientPtr client)
|
|||
int x, y;
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesGetCursorImageReq);
|
||||
|
||||
pCursor = CursorCurrent;
|
||||
if (!pCursor)
|
||||
return BadCursor;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue