Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ryanneph/xserver
  • wjp/xserver
  • DemiMarie/xserver
  • alanc/xserver
  • uvas/xserver
  • cl91/xserver
  • heymiaoO/xserver
  • oreaus/xserver
  • miztake/xserver
  • stapelberg/xserver
  • PaulKocialkowski/xserver
  • CendioOssman/xserver
  • wiz/xserver
  • maos20008/xserver
  • dougvj/xserver
  • gldrk/xserver
  • TMR5454/xserver
  • cubanismo/xserver
  • agoins/xserver
  • kleinerm/xserver
  • zagursky/xserver
  • Kyawswat/xserver
  • hexiaodong/xserver
  • gilvbp/xserver
  • vliaskov/xserver
  • aarondill/xserver
  • zzyiwei/xserver
  • arichardson/xserver
  • jcherry/xserver
  • erwinou/xserver
  • nathankidd/xserver
  • jexposit/xserver
  • refi_64/xserver
  • kupper.pa/xserver
  • kbrenneman/xserver
  • thesamesam/xserver
  • LickmeDown/xserver
  • meMuszr/xserver
  • Julia/xserver
  • twaik/xserver
  • fvalasiad/xserver
  • zzxyb/xserver
  • HermannSW/xserver
  • ekurzinger/xserver
  • NSUTanghaixiang/xserver
  • huxd1532/xserver
  • vinilokorlok/xserver
  • bbeckett/xserver
  • dslater38/xserver
  • emersion/xserver
  • zzag/xserver
  • ccullumbine2018/xserver
  • daniels/xserver
  • doraskayo/xserver
  • llandwerlin/xserver
  • XDXTHX/xserver
  • zboszor/xserver
  • jadahl/xserver
  • shadeslayer/xserver
  • ecurtin/xserver
  • pekdon/xserver
  • tomty89/xserver
  • russellcnv/xserver
  • orbea/xserver
  • lyudess/xserver
  • lucmann/xserver
  • tmlind/xserver
  • tholin/xserver
  • chema/xserver
  • J-Bu/xserver
  • chenhuacai/xserver
  • E5ten/xserver
  • haagch/xserver
  • whot/xserver
  • nacho.resa/xserver
  • strassek/xserver
  • tzimmermann/xserver
  • liyi42/xserver
  • YusufKhan-gamedev/xserver
  • mgorse1/xserver
  • iv-m/xserver
  • vanvugt/xserver
  • keithp/xserver
  • Rui511/xserver
  • catap/xserver
  • tjbp/xserver
  • webi123/xserver
  • djlucas/xserver
  • noblock/xserver
  • freemangordon/xserver
  • xdandys/xserver
  • afett/xserver
  • xexaxo/xserver
  • jbeich/xserver
  • zeising/xserver
  • romangg/xserver
  • mbiebl/xserver
  • pq/xserver
  • azhadchenko/xserver
  • manu/xserver
  • vsyrjala/xserver
  • Emantor/xserver
  • lostgoat/xserver
  • carlosg/xserver
  • yarivb/xserver
  • kwg/xserver
  • pichika/xserver
  • marv/xserver
  • jcristau/xserver
  • mntmn/xserver
  • klniu/xserver
  • TAAPArthur/xserver
  • sjoerd/xserver
  • Sjecai2/xserver
  • 3v1n0/xserver
  • awilfox/xserver
  • pkubaj/xserver
  • os369510/xserver
  • Gorg/xserver
  • Zamundaaa/xserver
  • lkundrak/xserver
  • niveditharau/xserver
  • ForTheReallys/xserver
  • jmonteiro/xserver
  • jocelyn/xserver
  • ThatMG393/xserver
  • fweimer/xserver
  • mlankhorst/xserver
  • dbn/xserver
  • jturney/xserver
  • mattrope/xserver
  • coypoop/xserver
  • schreibemirhalt/xserver
  • frog/xserver
  • metux/xserver
  • mherrb/xserver
  • rarbab/xserver
  • yshui/xserver
  • muesli4/xserver
  • jannau/xserver
  • mikeroyal/xserver
  • andrebsguedes/xserver
  • JeffyCN/xserver
  • ipominov/xserver
  • gtrentalancia/xserver
  • lucyllewy/xserver
  • qarmin/xserver
  • tagr/xserver
  • zwenna/xserver
  • bkylerussell/xserver
  • mupuf/xserver
  • zubzub/xserver
  • galaxytgtabiday/xserver
  • OlCe/xserver
  • ashafer/xserver
  • dengbo/xserver
  • valpackett/xserver
  • andreyknyazev077/xserver
  • antonovitch/xserver
  • xorg/xserver
  • contactshashanksharma/xserver-fork-shashank
  • gsittyz/xserver
  • akihiko.odaki/xserver
  • sknsean/xserver
  • rnpnr/xserver
  • hitong602/xserver
  • halfline/xserver
  • ismailsiege/xserver
  • dongwonk/xserver
  • GermanAizek/xserver
  • FeepingCreature/xserver
  • Acidburn0zzz/xserver
  • mvlad/xserver
  • puleglot/xserver
  • smelenius/xserver
  • sewn/xserver
  • kaichuan.hsieh/xserver
  • Fatton1/xserver
  • aditj/xserver
  • SimonPilkington/xserver
  • adamdruppe/xserver
  • floppym/xserver
  • trevdave/xserver
  • headrush/xserver
  • luke-jr/xserver
  • davidriley/xserver
  • heitbaum/xserver
  • goosen78/xserver
  • Ma/xserver
  • gmbr3/xserver
  • tsutsui/xserver
  • sherrodejjohnson/xserver
  • ydc-dadada/xserver
  • wengxt/xserver
  • icenowy/xserver
  • denisfa/xserver
  • StarsGreen/xserver
  • adamjrichter/xserver
  • bigon/xserver
  • djacewicz/xserver
  • davidre/xserver
  • kylin0061/xserver
  • arrowd/xserver
  • p12tic/xserver
  • karlosrangel337/xserver
  • bbrezillon/xserver
  • penguin42/xserver
  • anarsoul/xserver
  • marvinjr35/xserver
  • gerddie/xserver
  • knisht/xserver
  • xry111/xserver
  • psyruss85/xserver
  • volkanorhan/xserver
  • luporl/xserver
  • cbur201592/xserver
  • bphaslett/xserver
  • guillem/xserver
  • haihao/xserver
  • zaps166/xserver
  • bentiss/xserver
  • rilian-la-te/xserver
  • wujiangGitHub/xserver
  • mrisaacb/xserver
  • ross/xserver
  • davidedmundson/xserver
  • topimiettinen/xserver
  • MisterDA/xserver
  • DPA/xserver
  • dkorkmazturk/xserver
  • karamjameelmoore/xserver
  • sthibaul/xserver
  • ydirson/xserver
  • lihongtao/xserver
  • RyzenDew/xserver
  • christian-rauch/xserver
  • Vivek/xserver
  • peigongdsd/xserver
  • peng.jin/xserver
  • dixler/xserver
  • mehdigh419/xserver
  • BBaoVanC/xserver
  • Drakulix/xserver
  • bafanahub/xserver
  • jengelh/xserver
  • yangxiaojuan-loongson/xserver
  • pepp/xserver
  • cgzones/xserver
  • luyn/xserver
  • ids1024/xserver
  • svalaskevicius/xserver
  • eschwartz/xserver
  • jayantpranjal0/xserver
  • hmazlan/xserver
  • kerneltoast/xserver
  • Michaelypk/xserver
  • dottedmag/xserver
  • hassoon1986/xserver
  • aplattner/xserver
  • sergiomb/xserver
  • looi/xserver
  • robclark/xserver
  • vitoux.pascal/xserver
  • kennylevinsen/xserver
  • Kishore409/xserver
  • msizanoen1/xserver
  • Daasin/xserver
  • xinbowang/xserver
  • mwei/xserver
  • SpikyCaterpillar1/xserver
  • devin11911191/xserver
  • alex-tu-cc/xserver
  • kaniini/xserver
  • alagner/xserver
  • jcourreges/xserver
  • n3rdopolis/xserver
  • cooperch/xserver
  • peterh/xserver
  • anholt/xserver
  • themaister/xserver
  • josch/xserver
  • jrtc27/xserver
  • JoseExposito/xserver
  • lanodan/xserver
  • Hi-Angel/xserver
  • City-busz/xserver
  • karolherbst/xserver
  • daenzer/xserver
  • dawnhan/xserver
  • avolkov/xserver
  • Tuetuopay/xserver
  • gabifalk/xserver
  • jeremyhu/xserver
  • road2react/xserver
  • 1480c1/xserver
  • Spintzyk/xserver
  • abono/xserver
  • ajax/xserver
  • dougg3/xserver
  • chenx_dust/xserver
  • ernstp/xserver
  • EXtremeExploit/xserver
  • starnight/xserver
  • dirbaio/xserver
  • jwrdegoede/xserver
  • vfjpl/xserver
  • acelan/xserver
  • airlied/xserver
  • justazarsky/xserver
  • sri-ka1ki/xserver
  • benpicco/xserver
  • kaocher82/xserver
  • rgfernandes/xserver
  • lynxeye/xserver
  • tintou/xserver
  • rmader/xserver
  • linkmauve/xserver
  • mattst88/xserver
  • kamarul6401/xserver
  • andy-zetier/xserver
  • bernhardu/xserver
  • causztic/xserver
  • cpmichael/modesetting
  • mwyraz/xserver
  • zhangyaning/xserver
  • olv/xserver
  • hongaoo/xserver
  • LiChenG-P/xserver
  • jsg/xserver
  • Ivaniku/x-taylan
  • dk/xserver
  • manuelcrack642/xserver
  • dkg/xserver
  • ofourdan/xserver
  • mahkoh/xserver
  • AkiSakurai/xserver
  • 1740301466jxz/xserver
  • ZhiJie.Zhang/xserver
  • chengbo7135/xserver
339 results
Show changes
Commits on Source (48)
# DEBIAN_TAG is the tag of the docker image used for the build jobs. If the
# image doesn't exist yet, the docker-image stage generates it.
# FDO_DISTRIBUTION_TAG is the tag of the docker image used for the build jobs.
# If the image doesn't exist yet, the docker-image stage generates it.
#
# In order to generate a new image, one should generally change the tag.
# While removing the image from the registry would also work, that's not
......@@ -7,23 +7,15 @@
# image after a significant amount of time might pull in newer versions of
# gcc/clang or other packages, which might break the build with older commits
# using the same tag.
#
# After merging a change resulting in generating a new image to the main
# repository, it's recommended to remove the image from the source repository's
# container registry, so that the image from the main repository's registry
# will be used there as well. You can manage your images on your fork of:
# https://gitlab.freedesktop.org/xorg/xserver/container_registry
variables:
UPSTREAM_REPO: xorg/xserver
DEBIAN_VERSION: testing-slim
DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh'
DEBIAN_TAG: "2020-04-21"
IMAGE_LOCAL: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG"
FDO_DISTRIBUTION_VERSION: buster-slim
FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/debian-install.sh'
FDO_DISTRIBUTION_TAG: "2020-11-16"
include:
- project: 'freedesktop/ci-templates'
ref: b7030c2cd0d6ccc5f6d4f8299bafa4daa9240d71
ref: 4f06663cd1507136a0f8440925a2521098adb298
file: '/templates/debian.yml'
stages:
......@@ -39,16 +31,19 @@ stages:
# Cancel CI run if a newer commit is pushed to the same branch
interruptible: true
debian-testing:
debian-buster:
extends:
- .debian@container-ifnot-exists
- .fdo.container-build@debian
- .ci-run-policy
stage: docker-image
variables:
GIT_STRATEGY: none
.common-build-and-test:
extends: .ci-run-policy
extends:
- .fdo.distribution-image@debian
- .ci-run-policy
stage: build-and-test
image: $IMAGE_LOCAL
artifacts:
when: on_failure
paths:
......@@ -70,8 +65,8 @@ autotools:
- mkdir build/
- cd build/
- ../autogen.sh --prefix=/usr CFLAGS="-fno-common"
- make -j4 distcheck
- PIGLIT_DIR=/root/piglit XTEST_DIR=/root/xts make -j4 check
- make -j${FDO_CI_CONCURRENT:-4} distcheck
- PIGLIT_DIR=/root/piglit XTEST_DIR=/root/xts make -j${FDO_CI_CONCURRENT:-4} check
- cd ..
- .gitlab-ci/manpages-check
......@@ -82,8 +77,8 @@ meson:
XTEST_DIR: /root/xts
script:
- meson -Dc_args="-fno-common" -Dprefix=/usr -Dxephyr=true -Dwerror=true $MESON_EXTRA_OPTIONS build/
- ninja -j4 -C build/ install
- ninja -j4 -C build/ test
- ninja -j${FDO_CI_CONCURRENT:-4} -C build/ install
- ninja -j${FDO_CI_CONCURRENT:-4} -C build/ test
- .gitlab-ci/manpages-check
meson-noglamor:
......
......@@ -3,47 +3,149 @@
set -e
set -o xtrace
echo 'deb-src https://deb.debian.org/debian testing main' > /etc/apt/sources.list.d/deb-src.list
apt-get update
# Packages which are needed by this script, but not for the xserver build
EPHEMERAL="
git
libcairo2-dev
libevdev-dev
libexpat-dev
libgles2-mesa-dev
libinput-dev
libxkbcommon-dev
x11-utils
x11-xserver-utils
xauth
xvfb
"
apt-get install -y \
$EPHEMERAL \
autoconf \
automake \
bison \
build-essential \
ca-certificates \
ccache \
git \
libgl1 \
flex \
libaudit-dev \
libbsd-dev \
libcairo2 \
libdbus-1-dev \
libdmx-dev \
libdrm-dev \
libegl1-mesa-dev \
libepoxy-dev \
libevdev2 \
libexpat1 \
libffi-dev \
libgbm-dev \
libgcrypt-dev \
libgl1-mesa-dev \
libgles2 \
libglx-mesa0 \
libinput10 \
libnvidia-egl-wayland-dev \
libpciaccess-dev \
libpixman-1-dev \
libselinux1-dev \
libsystemd-dev \
libtool \
libxkbcommon-dev \
libudev-dev \
libunwind-dev \
libx11-dev \
libx11-xcb-dev \
libxau-dev \
libxaw7-dev \
libxcb-glx0-dev \
libxcb-icccm4-dev \
libxcb-image0-dev \
libxcb-keysyms1-dev \
libxcb-randr0-dev \
libxcb-render-util0-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-shm0-dev \
libxcb-util0-dev \
libxcb-xf86dri0-dev \
libxcb-xkb-dev \
libxcb-xv0-dev \
libxcb1-dev \
libxdmcp-dev \
libxext-dev \
libxfixes-dev \
libxfont-dev \
libxi-dev \
libxinerama-dev \
libxkbcommon0 \
libxkbfile-dev \
libxmu-dev \
libxmuu-dev \
libxpm-dev \
libxrender-dev \
libxres-dev \
libxshmfence-dev \
libxt-dev \
libxtst-dev \
libxv-dev \
mesa-common-dev \
meson \
nettle-dev \
pkg-config \
python3-mako \
python3-numpy \
python3-six \
x11-utils \
x11-xserver-utils \
xauth \
xvfb \
apt-get build-dep -y xorg-server
x11-xkb-utils \
x11proto-dev \
xfonts-utils \
xkb-data \
xtrans-dev \
xutils-dev
cd /root
# weston 9.0 requires libwayland >= 1.18
git clone https://gitlab.freedesktop.org/wayland/wayland.git --depth 1 --branch=1.18.0
cd wayland
meson _build -D{documentation,dtd_validation}=false
ninja -C _build -j${FDO_CI_CONCURRENT:-4} install
cd ..
rm -rf wayland
# Xwayland requires wayland-protocols >= 1.18, but Debian buster has 1.17 only
git clone https://gitlab.freedesktop.org/wayland/wayland-protocols.git --depth 1 --branch=1.18
cd wayland-protocols
./autogen.sh
make -j${FDO_CI_CONCURRENT:-4} install
cd ..
rm -rf wayland-protocols
# Xwayland requires weston > 5.0, but Debian buster has 5.0 only
git clone https://gitlab.freedesktop.org/wayland/weston.git --depth 1 --branch=9.0
cd weston
meson _build -Dbackend-{drm,drm-screencast-vaapi,fbdev,rdp,wayland,x11}=false \
-Dbackend-default=headless -Dcolor-management-{colord,lcms}=false \
-Ddemo-clients=false -Dimage-{jpeg,webp}=false \
-D{pipewire,remoting,screenshare,test-junit-xml,wcap-decode,weston-launch,xwayland}=false \
-Dshell-{fullscreen,ivi,kiosk}=false -Dsimple-clients=
ninja -C _build -j${FDO_CI_CONCURRENT:-4} install
cd ..
rm -rf weston
git clone https://gitlab.freedesktop.org/mesa/piglit.git --depth 1
git clone https://gitlab.freedesktop.org/xorg/test/xts --depth 1
cd xts
./autogen.sh
xvfb-run make -j4
xvfb-run make -j${FDO_CI_CONCURRENT:-4}
cd ..
git clone https://gitlab.freedesktop.org/xorg/test/rendercheck --depth 1
cd rendercheck
meson build
ninja -j4 -C build install
ninja -j${FDO_CI_CONCURRENT:-4} -C build install
cd ..
rm -rf piglit/.git xts/.git piglit/tests/spec/
rm -rf piglit/.git xts/.git piglit/tests/spec/ rendercheck/
echo '[xts]' > piglit/piglit.conf
echo 'path=/root/xts' >> piglit/piglit.conf
......@@ -52,11 +154,6 @@ find -name \*.a -o -name \*.o -o -name \*.c -o -name \*.h -o -name \*.la\* | xar
strip xts/xts5/*/.libs/*
apt-get purge -y \
git \
libxkbcommon-dev \
x11-utils \
x11-xserver-utils \
xauth \
xvfb \
$EPHEMERAL
apt-get autoremove -y --purge
noinst_LTLIBRARIES = libXext.la libXvidmode.la
noinst_LTLIBRARIES = libXext.la libXvidmode.la libhashtable.la
AM_CFLAGS = $(DIX_CFLAGS)
......@@ -35,7 +35,7 @@ BUILTIN_SRCS += $(XV_SRCS)
endif
# XResource extension: lets clients get data about per-client resource usage
RES_SRCS = hashtable.c hashtable.h xres.c
RES_SRCS = xres.c
if RES
BUILTIN_SRCS += $(RES_SRCS)
endif
......@@ -95,10 +95,16 @@ endif
libXext_la_SOURCES = $(BUILTIN_SRCS)
libXext_la_LIBADD = $(BUILTIN_LIBS)
if RES
libXext_la_LIBADD += libhashtable.la
endif
# XVidMode extension
libXvidmode_la_SOURCES = vidmode.c
#Hashtable
libhashtable_la_SOURCES = hashtable.c hashtable.h
EXTRA_DIST = \
$(MITSHM_SRCS) \
$(XV_SRCS) \
......
......@@ -1043,8 +1043,8 @@ ActivateEarlyAccept(DeviceIntPtr dev, TouchPointInfoPtr ti)
XID error;
GrabPtr grab = ti->listeners[0].grab;
BUG_RETURN(ti->listeners[0].type != LISTENER_GRAB &&
ti->listeners[0].type != LISTENER_POINTER_GRAB);
BUG_RETURN(ti->listeners[0].type != TOUCH_LISTENER_GRAB &&
ti->listeners[0].type != TOUCH_LISTENER_POINTER_GRAB);
BUG_RETURN(!grab);
client = rClient(grab);
......@@ -1077,8 +1077,8 @@ FindOldestPointerEmulatedTouch(DeviceIntPtr dev)
continue;
for (j = 0; j < ti->num_listeners; j++) {
if (ti->listeners[j].type == LISTENER_POINTER_GRAB ||
ti->listeners[j].type == LISTENER_POINTER_REGULAR)
if (ti->listeners[j].type == TOUCH_LISTENER_POINTER_GRAB ||
ti->listeners[j].type == TOUCH_LISTENER_POINTER_REGULAR)
break;
}
if (j == ti->num_listeners)
......@@ -1105,17 +1105,17 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchOwnershipEvent *ev)
{
TouchListener *listener = &ti->listeners[0]; /* new owner */
int accepted_early = listener->state == LISTENER_EARLY_ACCEPT;
int accepted_early = listener->state == TOUCH_LISTENER_EARLY_ACCEPT;
/* Deliver the ownership */
if (listener->state == LISTENER_AWAITING_OWNER || accepted_early)
if (listener->state == TOUCH_LISTENER_AWAITING_OWNER || accepted_early)
DeliverTouchEvents(dev, ti, (InternalEvent *) ev,
listener->listener);
else if (listener->state == LISTENER_AWAITING_BEGIN) {
else if (listener->state == TOUCH_LISTENER_AWAITING_BEGIN) {
/* We can't punt to a pointer listener unless all older pointer
* emulated touches have been seen already. */
if ((listener->type == LISTENER_POINTER_GRAB ||
listener->type == LISTENER_POINTER_REGULAR) &&
if ((listener->type == TOUCH_LISTENER_POINTER_GRAB ||
listener->type == TOUCH_LISTENER_POINTER_REGULAR) &&
ti != FindOldestPointerEmulatedTouch(dev))
return;
......@@ -1158,7 +1158,7 @@ CheckOldestTouch(DeviceIntPtr dev)
{
TouchPointInfoPtr oldest = FindOldestPointerEmulatedTouch(dev);
if (oldest && oldest->listeners[0].state == LISTENER_AWAITING_BEGIN)
if (oldest && oldest->listeners[0].state == TOUCH_LISTENER_AWAITING_BEGIN)
TouchPuntToNextOwner(dev, oldest, NULL);
}
......@@ -1182,7 +1182,7 @@ TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
* haven't received one yet already */
for (i = 0; i < ti->num_listeners; i++) {
if (ti->listeners[i].listener == resource) {
if (ti->listeners[i].state != LISTENER_HAS_END)
if (ti->listeners[i].state != TOUCH_LISTENER_HAS_END)
TouchEmitTouchEnd(sourcedev, ti, TOUCH_REJECT, resource);
break;
}
......@@ -1228,12 +1228,12 @@ ProcessTouchOwnershipEvent(TouchOwnershipEvent *ev,
/* For pointer-emulated listeners that ungrabbed the active grab,
* the state was forced to LISTENER_HAS_END. Still go
* the state was forced to TOUCH_LISTENER_HAS_END. Still go
* through the motions of ending the touch if the listener has
* already seen the end. This ensures that the touch record is ended in
* the server.
*/
if (ti->listeners[0].state == LISTENER_HAS_END)
if (ti->listeners[0].state == TOUCH_LISTENER_HAS_END)
TouchEmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[0].listener);
/* The touch owner has accepted the touch. Send TouchEnd events to
......@@ -1244,10 +1244,10 @@ ProcessTouchOwnershipEvent(TouchOwnershipEvent *ev,
while (ti->num_listeners > 1)
TouchRemoveListener(ti, ti->listeners[1].listener);
/* Owner accepted after receiving end */
if (ti->listeners[0].state == LISTENER_HAS_END)
if (ti->listeners[0].state == TOUCH_LISTENER_HAS_END)
TouchEndTouch(dev, ti);
else
ti->listeners[0].state = LISTENER_HAS_ACCEPTED;
ti->listeners[0].state = TOUCH_LISTENER_HAS_ACCEPTED;
}
else { /* this is the very first ownership event for a grab */
DeliverTouchEvents(dev, ti, (InternalEvent *) ev, ev->resource);
......@@ -1294,8 +1294,8 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
*mask = NULL;
*grab = NULL;
if (listener->type == LISTENER_GRAB ||
listener->type == LISTENER_POINTER_GRAB) {
if (listener->type == TOUCH_LISTENER_GRAB ||
listener->type == TOUCH_LISTENER_POINTER_GRAB) {
*grab = listener->grab;
BUG_RETURN_VAL(!*grab, FALSE);
......@@ -1322,7 +1322,7 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
int evtype;
if (ti->emulate_pointer &&
listener->type == LISTENER_POINTER_REGULAR)
listener->type == TOUCH_LISTENER_POINTER_REGULAR)
evtype = GetXI2Type(TouchGetPointerEventType(ev));
else
evtype = GetXI2Type(ev->any.type);
......@@ -1451,7 +1451,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
g = AllocGrab(devgrab);
BUG_WARN(!g);
*dev->deviceGrab.sync.event = ev->device_event;
*dev->deviceGrab.sync.event = *ev;
/* The listener array has a sequence of grabs and then one event
* selection. Implicit grab activation occurs through delivering an
......@@ -1463,16 +1463,16 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
//l->resource_type = RT_NONE;
if (devgrab->grabtype != XI2 || devgrab->type != XI_TouchBegin)
l->type = LISTENER_POINTER_GRAB;
l->type = TOUCH_LISTENER_POINTER_GRAB;
else
l->type = LISTENER_GRAB;
l->type = TOUCH_LISTENER_GRAB;
}
}
if (ev->any.type == ET_TouchBegin)
listener->state = LISTENER_IS_OWNER;
listener->state = TOUCH_LISTENER_IS_OWNER;
else if (ev->any.type == ET_TouchEnd)
listener->state = LISTENER_HAS_END;
listener->state = TOUCH_LISTENER_HAS_END;
return Success;
}
......@@ -1489,8 +1489,8 @@ DeliverEmulatedMotionEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
GrabPtr grab;
XI2Mask *mask;
if (ti->listeners[0].type != LISTENER_POINTER_REGULAR &&
ti->listeners[0].type != LISTENER_POINTER_GRAB)
if (ti->listeners[0].type != TOUCH_LISTENER_POINTER_REGULAR &&
ti->listeners[0].type != TOUCH_LISTENER_POINTER_GRAB)
return;
motion = ev->device_event;
......@@ -1879,14 +1879,14 @@ DeliverTouchBeginEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
int rc = Success;
Bool has_ownershipmask;
if (listener->type == LISTENER_POINTER_REGULAR ||
listener->type == LISTENER_POINTER_GRAB) {
if (listener->type == TOUCH_LISTENER_POINTER_REGULAR ||
listener->type == TOUCH_LISTENER_POINTER_GRAB) {
rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
grab, xi2mask);
if (rc == Success) {
listener->state = LISTENER_IS_OWNER;
listener->state = TOUCH_LISTENER_IS_OWNER;
/* async grabs cannot replay, so automatically accept this touch */
if (listener->type == LISTENER_POINTER_GRAB &&
if (listener->type == TOUCH_LISTENER_POINTER_GRAB &&
dev->deviceGrab.grab &&
dev->deviceGrab.fromPassiveGrab &&
dev->deviceGrab.grab->pointerMode == GrabModeAsync)
......@@ -1901,18 +1901,18 @@ DeliverTouchBeginEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
if (!TouchResourceIsOwner(ti, listener->listener)) {
if (has_ownershipmask)
state = LISTENER_AWAITING_OWNER;
state = TOUCH_LISTENER_AWAITING_OWNER;
else
state = LISTENER_AWAITING_BEGIN;
state = TOUCH_LISTENER_AWAITING_BEGIN;
}
else {
if (has_ownershipmask)
TouchSendOwnershipEvent(dev, ti, 0, listener->listener);
if (listener->type == LISTENER_REGULAR)
state = LISTENER_HAS_ACCEPTED;
if (listener->type == TOUCH_LISTENER_REGULAR)
state = TOUCH_LISTENER_HAS_ACCEPTED;
else
state = LISTENER_IS_OWNER;
state = TOUCH_LISTENER_IS_OWNER;
}
listener->state = state;
......@@ -1927,14 +1927,14 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
{
int rc = Success;
if (listener->type == LISTENER_POINTER_REGULAR ||
listener->type == LISTENER_POINTER_GRAB) {
if (listener->type == TOUCH_LISTENER_POINTER_REGULAR ||
listener->type == TOUCH_LISTENER_POINTER_GRAB) {
/* Note: If the active grab was ungrabbed, we already changed the
* state to LISTENER_HAS_END but still get here. So we mustn't
* state to TOUCH_LISTENER_HAS_END but still get here. So we mustn't
* actually send the event.
* This is part two of the hack in DeactivatePointerGrab
*/
if (listener->state != LISTENER_HAS_END) {
if (listener->state != TOUCH_LISTENER_HAS_END) {
rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
grab, xi2mask);
......@@ -1944,14 +1944,14 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
* and we can continue.
*/
if (rc == Success)
listener->state = LISTENER_HAS_END;
listener->state = TOUCH_LISTENER_HAS_END;
}
goto out;
}
/* A client is waiting for the begin, don't give it a TouchEnd */
if (listener->state == LISTENER_AWAITING_BEGIN) {
listener->state = LISTENER_HAS_END;
if (listener->state == TOUCH_LISTENER_AWAITING_BEGIN) {
listener->state = TOUCH_LISTENER_HAS_END;
goto out;
}
......@@ -1959,19 +1959,19 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
if (ev->device_event.flags & TOUCH_REJECT ||
(ev->device_event.flags & TOUCH_ACCEPT && !TouchResourceIsOwner(ti, listener->listener))) {
/* Touch has been rejected, or accepted by its owner which is not this listener */
if (listener->state != LISTENER_HAS_END)
if (listener->state != TOUCH_LISTENER_HAS_END)
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
listener->state = LISTENER_HAS_END;
listener->state = TOUCH_LISTENER_HAS_END;
}
else if (TouchResourceIsOwner(ti, listener->listener)) {
Bool normal_end = !(ev->device_event.flags & TOUCH_ACCEPT);
/* FIXME: what about early acceptance */
if (normal_end && listener->state != LISTENER_HAS_END)
if (normal_end && listener->state != TOUCH_LISTENER_HAS_END)
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
if ((ti->num_listeners > 1 ||
(ti->num_grabs > 0 && listener->state != LISTENER_HAS_ACCEPTED)) &&
(ti->num_grabs > 0 && listener->state != TOUCH_LISTENER_HAS_ACCEPTED)) &&
(ev->device_event.flags & (TOUCH_ACCEPT | TOUCH_REJECT)) == 0) {
ev->any.type = ET_TouchUpdate;
ev->device_event.flags |= TOUCH_PENDING_END;
......@@ -1979,7 +1979,7 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
}
if (normal_end)
listener->state = LISTENER_HAS_END;
listener->state = TOUCH_LISTENER_HAS_END;
}
out:
......@@ -2002,7 +2002,7 @@ DeliverTouchEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
if (!TouchResourceIsOwner(ti, listener->listener))
goto out;
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
listener->state = LISTENER_IS_OWNER;
listener->state = TOUCH_LISTENER_IS_OWNER;
}
else
ev->device_event.deviceid = dev->id;
......@@ -2012,8 +2012,8 @@ DeliverTouchEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
xi2mask);
}
else if (ev->any.type == ET_TouchUpdate) {
if (listener->type == LISTENER_POINTER_REGULAR ||
listener->type == LISTENER_POINTER_GRAB)
if (listener->type == TOUCH_LISTENER_POINTER_REGULAR ||
listener->type == TOUCH_LISTENER_POINTER_GRAB)
DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win, grab,
xi2mask);
else if (TouchResourceIsOwner(ti, listener->listener) ||
......
......@@ -44,7 +44,9 @@
* - If A has XIAllMasterDevices, B may select on XIAllDevices
* - if A has device X, B may select on XIAllDevices/XIAllMasterDevices
*/
static int check_for_touch_selection_conflicts(ClientPtr B, WindowPtr win, int deviceid)
static int
check_for_touch_selection_conflicts(ClientPtr B, WindowPtr win, int deviceid,
int evtype)
{
OtherInputMasks *inputMasks = wOtherInputMasks(win);
InputClients *A = NULL;
......@@ -67,19 +69,19 @@ static int check_for_touch_selection_conflicts(ClientPtr B, WindowPtr win, int d
return BadImplementation; /* this shouldn't happen */
/* A has XIAllDevices */
if (xi2mask_isset_for_device(A->xi2mask, inputInfo.all_devices, XI_TouchBegin)) {
if (xi2mask_isset_for_device(A->xi2mask, inputInfo.all_devices, evtype)) {
if (deviceid == XIAllDevices)
return BadAccess;
}
/* A has XIAllMasterDevices */
if (xi2mask_isset_for_device(A->xi2mask, inputInfo.all_master_devices, XI_TouchBegin)) {
if (xi2mask_isset_for_device(A->xi2mask, inputInfo.all_master_devices, evtype)) {
if (deviceid == XIAllMasterDevices)
return BadAccess;
}
/* A has this device */
if (xi2mask_isset_for_device(A->xi2mask, tmp, XI_TouchBegin))
if (xi2mask_isset_for_device(A->xi2mask, tmp, evtype))
return BadAccess;
}
......@@ -230,7 +232,8 @@ ProcXISelectEvents(ClientPtr client)
if (BitIsOn(bits, XI_TouchBegin)) {
rc = check_for_touch_selection_conflicts(client,
win,
evmask->deviceid);
evmask->deviceid,
XI_TouchBegin);
if (rc != Success)
return rc;
}
......
......@@ -517,7 +517,12 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
value = udev_device_get_property_value(udev_device, "ID_PATH");
if (value && (str = strrstr(value, "pci-"))) {
attribs->busid = XNFstrdup(str);
value = str;
if ((str = strstr(value, "usb-")))
value = str;
attribs->busid = XNFstrdup(value);
attribs->busid[3] = ':';
}
......
......@@ -1056,9 +1056,11 @@ if test "x$SCREENSAVER" = xyes; then
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $SCRNSAVERPROTO"
fi
HASHTABLE=no
AM_CONDITIONAL(RES, [test "x$RES" = xyes])
if test "x$RES" = xyes; then
AC_DEFINE(RES, 1, [Support X resource extension])
HASHTABLE=yes
REQUIRED_MODULES="$REQUIRED_MODULES $RESOURCEPROTO"
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $RESOURCEPROTO"
fi
......@@ -1242,6 +1244,7 @@ if test "x$GLX" = xyes; then
PKG_CHECK_MODULES([GL], $GLPROTO $LIBGL)
AC_SUBST(XLIB_CFLAGS)
AC_DEFINE(GLXEXT, 1, [Build GLX extension])
HASHTABLE=yes
GLX_LIBS='$(top_builddir)/glx/libglx.la $(top_builddir)/glx/libglxvnd.la'
GLX_SYS_LIBS="$GLX_SYS_LIBS $GL_LIBS"
else
......@@ -1249,6 +1252,8 @@ else
fi
AM_CONDITIONAL(GLX, test "x$GLX" = xyes)
AM_CONDITIONAL(HASHTABLE, test "x$HASHTABLE" = xyes)
AC_SUBST([GLX_DEFINES])
AC_SUBST([GLX_SYS_LIBS])
......@@ -1942,7 +1947,7 @@ if test "x$XORG" = xyes; then
XORG_SYS_LIBS="$XORG_SYS_LIBS $XORG_MODULES_LIBS"
fi
if test "x$DRM" = xyes; then
if test "x$DRM" = xyes -a "x$DRI2" = xyes; then
XORG_DRIVER_MODESETTING=yes
fi
......@@ -2513,6 +2518,7 @@ hw/kdrive/ephyr/Makefile
hw/kdrive/ephyr/man/Makefile
hw/kdrive/src/Makefile
hw/xwayland/Makefile
hw/xwayland/man/Makefile
hw/xwayland/xwayland.pc
test/Makefile
xserver.ent
......
......@@ -267,9 +267,6 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
return NULL;
}
if (!dev)
return (DeviceIntPtr) NULL;
dev->last.scroll = NULL;
dev->last.touches = NULL;
dev->id = devid;
......@@ -284,7 +281,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
dev->deviceGrab.grabTime = currentTime;
dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab;
dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab;
dev->deviceGrab.sync.event = calloc(1, sizeof(DeviceEvent));
dev->deviceGrab.sync.event = calloc(1, sizeof(InternalEvent));
XkbSetExtension(dev, ProcessKeyboardEvent);
......@@ -2814,3 +2811,26 @@ valuator_set_mode(DeviceIntPtr dev, int axis, int mode)
dev->valuator->axes[i].mode = mode;
}
}
void
DeliverDeviceClassesChangedEvent(int sourceid, Time time)
{
DeviceIntPtr dev;
int num_events = 0;
InternalEvent dcce;
dixLookupDevice(&dev, sourceid, serverClient, DixWriteAccess);
if (!dev)
return;
/* UpdateFromMaster generates at most one event */
UpdateFromMaster(&dcce, dev, DEVCHANGE_POINTER_EVENT, &num_events);
BUG_WARN(num_events > 1);
if (num_events) {
dcce.any.time = time;
/* FIXME: This doesn't do anything */
dev->public.processInputProc(&dcce, dev);
}
}
......@@ -1304,7 +1304,6 @@ static void
ComputeFreezes(void)
{
DeviceIntPtr replayDev = syncEvents.replayDev;
WindowPtr w;
GrabPtr grab;
DeviceIntPtr dev;
......@@ -1316,26 +1315,29 @@ ComputeFreezes(void)
return;
syncEvents.playingEvents = TRUE;
if (replayDev) {
DeviceEvent *event = replayDev->deviceGrab.sync.event;
InternalEvent *event = replayDev->deviceGrab.sync.event;
syncEvents.replayDev = (DeviceIntPtr) NULL;
w = XYToWindow(replayDev->spriteInfo->sprite,
event->root_x, event->root_y);
if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin)) {
if (IsTouchEvent((InternalEvent *) event)) {
if (!CheckDeviceGrabs(replayDev, &event->device_event,
syncEvents.replayWin)) {
if (IsTouchEvent(event)) {
TouchPointInfoPtr ti =
TouchFindByClientID(replayDev, event->touchid);
TouchFindByClientID(replayDev, event->device_event.touchid);
BUG_WARN(!ti);
TouchListenerAcceptReject(replayDev, ti, 0, XIRejectTouch);
}
else if (replayDev->focus &&
!IsPointerEvent((InternalEvent *) event))
DeliverFocusedEvent(replayDev, (InternalEvent *) event, w);
else
DeliverDeviceEvents(w, (InternalEvent *) event, NullGrab,
NullWindow, replayDev);
else {
WindowPtr w = XYToWindow(replayDev->spriteInfo->sprite,
event->device_event.root_x,
event->device_event.root_y);
if (replayDev->focus && !IsPointerEvent(event))
DeliverFocusedEvent(replayDev, event, w);
else
DeliverDeviceEvents(w, event, NullGrab,
NullWindow, replayDev);
}
}
}
for (dev = inputInfo.devices; dev; dev = dev->next) {
......@@ -1480,14 +1482,14 @@ UpdateTouchesForGrab(DeviceIntPtr mouse)
CLIENT_BITS(listener->listener) == grab->resource) {
listener->listener = grab->resource;
listener->level = grab->grabtype;
listener->state = LISTENER_IS_OWNER;
listener->state = TOUCH_LISTENER_IS_OWNER;
listener->window = grab->window;
if (grab->grabtype == CORE || grab->grabtype == XI ||
!xi2mask_isset(grab->xi2mask, mouse, XI_TouchBegin))
listener->type = LISTENER_POINTER_GRAB;
listener->type = TOUCH_LISTENER_POINTER_GRAB;
else
listener->type = LISTENER_GRAB;
listener->type = TOUCH_LISTENER_GRAB;
if (listener->grab)
FreeGrab(listener->grab);
listener->grab = AllocGrab(grab);
......@@ -1583,7 +1585,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
* ProcessTouchOwnershipEvent() will still call
* TouchEmitTouchEnd for this listener. The other half of
* this hack is in DeliverTouchEndEvent */
ti->listeners[0].state = LISTENER_HAS_END;
ti->listeners[0].state = TOUCH_LISTENER_HAS_END;
}
TouchListenerAcceptReject(mouse, ti, 0, mode);
}
......@@ -1813,8 +1815,8 @@ AllowSome(ClientPtr client, TimeStamp time, DeviceIntPtr thisDev, int newState)
* anything else is accept.
*/
if (newState != NOT_GRABBED /* Replay */ &&
IsTouchEvent((InternalEvent*)grabinfo->sync.event)) {
TouchAcceptAndEnd(thisDev, grabinfo->sync.event->touchid);
IsTouchEvent(grabinfo->sync.event)) {
TouchAcceptAndEnd(thisDev, grabinfo->sync.event->device_event.touchid);
}
}
......@@ -2502,6 +2504,35 @@ FindChildForEvent(SpritePtr pSprite, WindowPtr event)
return child;
}
static void
FixUpXI2DeviceEventFromWindow(SpritePtr pSprite, int evtype,
xXIDeviceEvent *event, WindowPtr pWin, Window child)
{
event->root = RootWindow(pSprite)->drawable.id;
event->event = pWin->drawable.id;
if (evtype == XI_TouchOwnership) {
event->child = child;
return;
}
if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
event->child = child;
}
else {
event->event_x = 0;
event->event_y = 0;
event->child = None;
}
if (event->evtype == XI_Enter || event->evtype == XI_Leave ||
event->evtype == XI_FocusIn || event->evtype == XI_FocusOut)
((xXIEnterEvent *) event)->same_screen =
(pSprite->hot.pScreen == pWin->drawable.pScreen);
}
/**
* Adjust event fields to comply with the window properties.
*
......@@ -2520,8 +2551,6 @@ FixUpEventFromWindow(SpritePtr pSprite,
child = FindChildForEvent(pSprite, pWin);
if ((evtype = xi2_get_type(xE))) {
xXIDeviceEvent *event = (xXIDeviceEvent *) xE;
switch (evtype) {
case XI_RawKeyPress:
case XI_RawKeyRelease:
......@@ -2538,33 +2567,10 @@ FixUpEventFromWindow(SpritePtr pSprite,
case XI_BarrierLeave:
return;
default:
FixUpXI2DeviceEventFromWindow(pSprite, evtype,
(xXIDeviceEvent*) xE, pWin, child);
break;
}
event->root = RootWindow(pSprite)->drawable.id;
event->event = pWin->drawable.id;
if (evtype == XI_TouchOwnership) {
event->child = child;
return;
}
if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
event->child = child;
}
else {
event->event_x = 0;
event->event_y = 0;
event->child = None;
}
if (event->evtype == XI_Enter || event->evtype == XI_Leave ||
event->evtype == XI_FocusIn || event->evtype == XI_FocusOut)
((xXIEnterEvent *) event)->same_screen =
(pSprite->hot.pScreen == pWin->drawable.pScreen);
}
else {
XE_KBPTR.root = RootWindow(pSprite)->drawable.id;
......@@ -3663,7 +3669,6 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
InternalEvent *real_event)
{
SpritePtr pSprite = device->spriteInfo->sprite;
GrabInfoPtr grabinfo = &device->deviceGrab;
xEvent *xE = NULL;
int count;
int rc;
......@@ -3713,8 +3718,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
}
}
(*grabinfo->ActivateGrab) (device, grab,
ClientTimeToServerTime(event->any.time), TRUE);
ActivateGrabNoDelivery(device, grab, event, real_event);
if (xE) {
FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE);
......@@ -3725,14 +3729,31 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
GetEventFilter(device, xE), grab);
}
if (grabinfo->sync.state == FROZEN_NO_EVENT)
grabinfo->sync.state = FROZEN_WITH_EVENT;
*grabinfo->sync.event = real_event->device_event;
free(xE);
return TRUE;
}
/**
* Activates a grab without event delivery.
*
* @param device The device of the event to check.
* @param grab The grab to check.
* @param event The current device event.
* @param real_event The original event, in case of touch emulation. The
* real event is the one stored in the sync queue.
*/
void ActivateGrabNoDelivery(DeviceIntPtr dev, GrabPtr grab,
InternalEvent *event, InternalEvent *real_event)
{
GrabInfoPtr grabinfo = &dev->deviceGrab;
(*grabinfo->ActivateGrab) (dev, grab,
ClientTimeToServerTime(event->any.time), TRUE);
if (grabinfo->sync.state == FROZEN_NO_EVENT)
grabinfo->sync.state = FROZEN_WITH_EVENT;
*grabinfo->sync.event = *real_event;
}
static BOOL
CoreGrabInterferes(DeviceIntPtr device, GrabPtr grab)
{
......@@ -4235,7 +4256,6 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
GrabPtr grab;
GrabInfoPtr grabinfo;
int deliveries = 0;
DeviceIntPtr dev;
SpritePtr pSprite = thisDev->spriteInfo->sprite;
BOOL sendCore = FALSE;
......@@ -4283,30 +4303,40 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
event->any.type == ET_KeyRelease ||
event->any.type == ET_ButtonPress ||
event->any.type == ET_ButtonRelease)) {
switch (grabinfo->sync.state) {
case FREEZE_BOTH_NEXT_EVENT:
dev = GetPairedDevice(thisDev);
if (dev) {
FreezeThaw(dev, TRUE);
if ((dev->deviceGrab.sync.state == FREEZE_BOTH_NEXT_EVENT) &&
(CLIENT_BITS(grab->resource) ==
CLIENT_BITS(dev->deviceGrab.grab->resource)))
dev->deviceGrab.sync.state = FROZEN_NO_EVENT;
else
dev->deviceGrab.sync.other = grab;
}
/* fall through */
case FREEZE_NEXT_EVENT:
grabinfo->sync.state = FROZEN_WITH_EVENT;
FreezeThaw(thisDev, TRUE);
*grabinfo->sync.event = event->device_event;
break;
}
FreezeThisEventIfNeededForSyncGrab(thisDev, event);
}
return deliveries;
}
void
FreezeThisEventIfNeededForSyncGrab(DeviceIntPtr thisDev, InternalEvent *event)
{
GrabInfoPtr grabinfo = &thisDev->deviceGrab;
GrabPtr grab = grabinfo->grab;
DeviceIntPtr dev;
switch (grabinfo->sync.state) {
case FREEZE_BOTH_NEXT_EVENT:
dev = GetPairedDevice(thisDev);
if (dev) {
FreezeThaw(dev, TRUE);
if ((dev->deviceGrab.sync.state == FREEZE_BOTH_NEXT_EVENT) &&
(CLIENT_BITS(grab->resource) ==
CLIENT_BITS(dev->deviceGrab.grab->resource)))
dev->deviceGrab.sync.state = FROZEN_NO_EVENT;
else
dev->deviceGrab.sync.other = grab;
}
/* fall through */
case FREEZE_NEXT_EVENT:
grabinfo->sync.state = FROZEN_WITH_EVENT;
FreezeThaw(thisDev, TRUE);
*grabinfo->sync.event = *event;
break;
}
}
/* This function is used to set the key pressed or key released state -
this is only used when the pressing of keys does not cause
the device's processInputProc to be called, as in for example Mouse Keys.
......
......@@ -1220,3 +1220,28 @@ xi2mask_get_one_mask(const XI2Mask *mask, int deviceid)
return mask->masks[deviceid];
}
/**
* Copies a sprite data from src to dst sprites.
*
* Returns FALSE on error.
*/
Bool
CopySprite(SpritePtr src, SpritePtr dst)
{
WindowPtr *trace;
if (src->spriteTraceGood > dst->spriteTraceSize) {
trace = reallocarray(dst->spriteTrace,
src->spriteTraceSize, sizeof(*trace));
if (!trace) {
dst->spriteTraceGood = 0;
return FALSE;
}
dst->spriteTrace = trace;
dst->spriteTraceSize = src->spriteTraceGood;
}
memcpy(dst->spriteTrace, src->spriteTrace,
src->spriteTraceGood * sizeof(*trace));
dst->spriteTraceGood = src->spriteTraceGood;
return TRUE;
}
......@@ -447,7 +447,7 @@ TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
if (!ti->history)
return;
TouchDeliverDeviceClassesChangedEvent(ti, ti->history[0].time, resource);
DeliverDeviceClassesChangedEvent(ti->sourceid, ti->history[0].time);
for (i = 0; i < ti->history_elements; i++) {
DeviceEvent *ev = &ti->history[i];
......@@ -471,36 +471,11 @@ TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
}
}
void
TouchDeliverDeviceClassesChangedEvent(TouchPointInfoPtr ti, Time time,
XID resource)
{
DeviceIntPtr dev;
int num_events = 0;
InternalEvent dcce;
dixLookupDevice(&dev, ti->sourceid, serverClient, DixWriteAccess);
if (!dev)
return;
/* UpdateFromMaster generates at most one event */
UpdateFromMaster(&dcce, dev, DEVCHANGE_POINTER_EVENT, &num_events);
BUG_WARN(num_events > 1);
if (num_events) {
dcce.any.time = time;
/* FIXME: This doesn't do anything */
dev->public.processInputProc(&dcce, dev);
}
}
Bool
TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
{
int i;
TouchClassPtr t = dev->touch;
WindowPtr *trace;
SpritePtr srcsprite;
/* All touches should have the same sprite trace, so find and reuse an
......@@ -516,21 +491,7 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
else
return FALSE;
if (srcsprite->spriteTraceGood > sprite->spriteTraceSize) {
trace = reallocarray(sprite->spriteTrace,
srcsprite->spriteTraceSize, sizeof(*trace));
if (!trace) {
sprite->spriteTraceGood = 0;
return FALSE;
}
sprite->spriteTrace = trace;
sprite->spriteTraceSize = srcsprite->spriteTraceGood;
}
memcpy(sprite->spriteTrace, srcsprite->spriteTrace,
srcsprite->spriteTraceGood * sizeof(*trace));
sprite->spriteTraceGood = srcsprite->spriteTraceGood;
return TRUE;
return CopySprite(srcsprite, sprite);
}
/**
......@@ -721,7 +682,7 @@ TouchRemoveListener(TouchPointInfoPtr ti, XID resource)
ti->listeners[j] = ti->listeners[j + 1];
ti->num_listeners--;
ti->listeners[ti->num_listeners].listener = 0;
ti->listeners[ti->num_listeners].state = LISTENER_AWAITING_BEGIN;
ti->listeners[ti->num_listeners].state = TOUCH_LISTENER_AWAITING_BEGIN;
return TRUE;
}
......@@ -732,7 +693,7 @@ static void
TouchAddGrabListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
InternalEvent *ev, GrabPtr grab)
{
enum TouchListenerType type = LISTENER_GRAB;
enum TouchListenerType type = TOUCH_LISTENER_GRAB;
/* FIXME: owner_events */
......@@ -740,16 +701,16 @@ TouchAddGrabListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
if (!xi2mask_isset(grab->xi2mask, dev, XI_TouchOwnership))
TouchEventHistoryAllocate(ti);
if (!xi2mask_isset(grab->xi2mask, dev, XI_TouchBegin))
type = LISTENER_POINTER_GRAB;
type = TOUCH_LISTENER_POINTER_GRAB;
}
else if (grab->grabtype == XI || grab->grabtype == CORE) {
TouchEventHistoryAllocate(ti);
type = LISTENER_POINTER_GRAB;
type = TOUCH_LISTENER_POINTER_GRAB;
}
/* grab listeners are always RT_NONE since we keep the grab pointer */
TouchAddListener(ti, grab->resource, RT_NONE, grab->grabtype,
type, LISTENER_AWAITING_BEGIN, grab->window, grab);
type, TOUCH_LISTENER_AWAITING_BEGIN, grab->window, grab);
}
/**
......@@ -777,7 +738,7 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
InputClients *iclients = NULL;
OtherInputMasks *inputMasks = NULL;
uint16_t evtype = 0; /* may be event type or emulated event type */
enum TouchListenerType type = LISTENER_REGULAR;
enum TouchListenerType type = TOUCH_LISTENER_REGULAR;
int mask;
evtype = GetXI2Type(ev->any.type);
......@@ -788,7 +749,7 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
mask = EventIsDeliverable(dev, TouchGetPointerEventType(ev), win);
if (mask) {
evtype = GetXI2Type(TouchGetPointerEventType(ev));
type = LISTENER_POINTER_REGULAR;
type = TOUCH_LISTENER_POINTER_REGULAR;
}
}
if (!mask)
......@@ -805,7 +766,7 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchEventHistoryAllocate(ti);
TouchAddListener(ti, iclients->resource, RT_INPUTCLIENT, XI2,
type, LISTENER_AWAITING_BEGIN, win, NULL);
type, TOUCH_LISTENER_AWAITING_BEGIN, win, NULL);
return TRUE;
}
}
......@@ -820,7 +781,8 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchEventHistoryAllocate(ti);
TouchAddListener(ti, iclients->resource, RT_INPUTCLIENT, XI,
LISTENER_POINTER_REGULAR, LISTENER_AWAITING_BEGIN,
TOUCH_LISTENER_POINTER_REGULAR,
TOUCH_LISTENER_AWAITING_BEGIN,
win, NULL);
return TRUE;
}
......@@ -835,7 +797,8 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
if (IsMaster(dev) && (win->eventMask & core_filter)) {
TouchEventHistoryAllocate(ti);
TouchAddListener(ti, win->drawable.id, RT_WINDOW, CORE,
LISTENER_POINTER_REGULAR, LISTENER_AWAITING_BEGIN,
TOUCH_LISTENER_POINTER_REGULAR,
TOUCH_LISTENER_AWAITING_BEGIN,
win, NULL);
return TRUE;
}
......@@ -847,7 +810,7 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchEventHistoryAllocate(ti);
TouchAddListener(ti, oclients->resource, RT_OTHERCLIENT, CORE,
type, LISTENER_AWAITING_BEGIN, win, NULL);
type, TOUCH_LISTENER_AWAITING_BEGIN, win, NULL);
return TRUE;
}
}
......@@ -914,7 +877,7 @@ TouchRemovePointerGrab(DeviceIntPtr dev)
{
TouchPointInfoPtr ti;
GrabPtr grab;
DeviceEvent *ev;
InternalEvent *ev;
if (!dev->touch)
return;
......@@ -924,10 +887,10 @@ TouchRemovePointerGrab(DeviceIntPtr dev)
return;
ev = dev->deviceGrab.sync.event;
if (!IsTouchEvent((InternalEvent *) ev))
if (!IsTouchEvent(ev))
return;
ti = TouchFindByClientID(dev, ev->touchid);
ti = TouchFindByClientID(dev, ev->device_event.touchid);
if (!ti)
return;
......@@ -989,7 +952,7 @@ TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti, int listener,
if (mode == XIRejectTouch)
TouchRejected(dev, ti, ti->listeners[listener].listener, NULL);
else
ti->listeners[listener].state = LISTENER_EARLY_ACCEPT;
ti->listeners[listener].state = TOUCH_LISTENER_EARLY_ACCEPT;
return Success;
}
......@@ -1088,7 +1051,7 @@ TouchEmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resourc
flags |= TOUCH_CLIENT_ID;
if (ti->emulate_pointer)
flags |= TOUCH_POINTER_EMULATED;
TouchDeliverDeviceClassesChangedEvent(ti, GetTimeInMillis(), resource);
DeliverDeviceClassesChangedEvent(ti->sourceid, GetTimeInMillis());
GetDixTouchEnd(&event, dev, ti, flags);
DeliverTouchEvents(dev, ti, &event, resource);
if (ti->num_grabs == 0)
......
......@@ -362,6 +362,9 @@ glamor_make_pixmap_exportable(PixmapPtr pixmap, Bool modifiers_ok)
*/
glamor_egl_exchange_buffers(pixmap, exported);
/* Swap the devKind into the original pixmap, reflecting the bo's stride */
screen->ModifyPixmapHeader(pixmap, 0, 0, 0, 0, exported->devKind, NULL);
screen->DestroyPixmap(exported);
return TRUE;
......
......@@ -81,7 +81,7 @@ libglx_la_SOURCES = \
unpack.h \
xfont.c
libglx_la_LIBADD = $(DLOPEN_LIBS)
libglx_la_LIBADD = $(DLOPEN_LIBS) $(top_builddir)/Xext/libhashtable.la
libglxvnd_la_SOURCES = \
vndcmds.c \
......@@ -90,4 +90,6 @@ libglxvnd_la_SOURCES = \
vndservervendor.h \
vndservervendor.c
libglxvnd_la_LIBADD = $(top_builddir)/Xext/libhashtable.la
EXTRA_DIST = vnd_dispatch_stubs.c
......@@ -130,12 +130,16 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
* On the client, the screen comes from the FBConfig, so GLXBadFBConfig
* should be issued if the screen is nonsense.
*/
if (!validGlxScreen(client, req->screen, &glxScreen, &err))
if (!validGlxScreen(client, req->screen, &glxScreen, &err)) {
client->errorValue = req->fbconfig;
return __glXError(GLXBadFBConfig);
}
if (req->fbconfig) {
if (!validGlxFBConfig(client, glxScreen, req->fbconfig, &config, &err))
if (!validGlxFBConfig(client, glxScreen, req->fbconfig, &config, &err)) {
client->errorValue = req->fbconfig;
return __glXError(GLXBadFBConfig);
}
}
/* Validate the context with which the new context should share resources.
......@@ -307,6 +311,7 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
*/
if (!req->isDirect && (major_version > 1 || minor_version > 4
|| profile == GLX_CONTEXT_ES2_PROFILE_BIT_EXT)) {
client->errorValue = req->fbconfig;
return __glXError(GLXBadFBConfig);
}
......@@ -345,6 +350,7 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
ctx->renderMode = GL_RENDER;
ctx->resetNotificationStrategy = reset;
ctx->releaseBehavior = flush;
ctx->renderType = render_type;
/* Add the new context to the various global tables of GLX contexts.
*/
......
......@@ -241,7 +241,8 @@ __glXdirectContextCreate(__GLXscreen * screen,
static int
DoCreateContext(__GLXclientState * cl, GLXContextID gcId,
GLXContextID shareList, __GLXconfig * config,
__GLXscreen * pGlxScreen, GLboolean isDirect)
__GLXscreen * pGlxScreen, GLboolean isDirect,
int renderType)
{
ClientPtr client = cl->client;
__GLXcontext *glxc, *shareglxc;
......@@ -332,6 +333,7 @@ DoCreateContext(__GLXclientState * cl, GLXContextID gcId,
glxc->idExists = GL_TRUE;
glxc->isDirect = isDirect;
glxc->renderMode = GL_RENDER;
glxc->renderType = renderType;
/* The GLX_ARB_create_context_robustness spec says:
*
......@@ -381,7 +383,8 @@ __glXDisp_CreateContext(__GLXclientState * cl, GLbyte * pc)
return err;
return DoCreateContext(cl, req->context, req->shareList,
config, pGlxScreen, req->isDirect);
config, pGlxScreen, req->isDirect,
GLX_RGBA_TYPE);
}
int
......@@ -398,7 +401,8 @@ __glXDisp_CreateNewContext(__GLXclientState * cl, GLbyte * pc)
return err;
return DoCreateContext(cl, req->context, req->shareList,
config, pGlxScreen, req->isDirect);
config, pGlxScreen, req->isDirect,
req->renderType);
}
int
......@@ -419,7 +423,8 @@ __glXDisp_CreateContextWithConfigSGIX(__GLXclientState * cl, GLbyte * pc)
return err;
return DoCreateContext(cl, req->context, req->shareList,
config, pGlxScreen, req->isDirect);
config, pGlxScreen, req->isDirect,
req->renderType);
}
int
......@@ -1668,7 +1673,7 @@ DoQueryContext(__GLXclientState * cl, GLXContextID gcId)
sendBuf[6] = GLX_FBCONFIG_ID;
sendBuf[7] = (int) (ctx->config ? ctx->config->fbconfigID : 0);
sendBuf[8] = GLX_RENDER_TYPE;
sendBuf[9] = (int) (ctx->config ? ctx->config->renderType : GLX_DONT_CARE);
sendBuf[9] = (int) (ctx->renderType);
if (client->swapped) {
int length = reply.length;
......
......@@ -104,6 +104,11 @@ struct __GLXcontext {
*/
GLenum releaseBehavior;
/**
* Context render type
*/
int renderType;
/*
** Buffers for feedback and selection.
*/
......
......@@ -81,18 +81,6 @@ bswap_ENUM(const void *src)
return x.ret;
}
static GLsync
bswap_CARD64(const void *src)
{
union {
uint64_t dst;
GLsync ret;
} x;
x.dst = bswap_64(*(uint64_t *) src);
return x.ret;
}
static GLdouble
bswap_FLOAT64(const void *src)
{
......
......@@ -70,7 +70,7 @@ pks(XKeyboardState * ks)
int
main(int argc, char **argv)
{
Display *display = XOpenDisplay(NULL);
Display *display;
XKeyboardControl kc;
XKeyboardState ks;
unsigned long vm;
......@@ -86,6 +86,13 @@ main(int argc, char **argv)
kc.bell_pitch = atoi(argv[3]);
kc.bell_duration = atoi(argv[4]);
display = XOpenDisplay(NULL);
if (display == NULL) {
fprintf (stderr, "%s: unable to open display \"%s\".\n",
argv[0], XDisplayName (NULL));
exit(1);
}
printf("Setting:\n");
pkc(&kc, vm);
XChangeKeyboardControl(display, vm, &kc);
......
......@@ -268,6 +268,8 @@ StringToBusType(const char *busID, const char **retID)
ret = BUS_SBUS;
if (!xf86NameCmp(p, "platform"))
ret = BUS_PLATFORM;
if (!xf86NameCmp(p, "usb"))
ret = BUS_USB;
if (ret != BUS_NONE)
if (retID)
*retID = busID + strlen(p) + 1;
......
......@@ -254,6 +254,7 @@ typedef struct _DriverRec {
#undef BUS_PCI
#undef BUS_SBUS
#undef BUS_PLATFORM
#undef BUS_USB
#undef BUS_last
#endif
......@@ -262,6 +263,7 @@ typedef enum {
BUS_PCI,
BUS_SBUS,
BUS_PLATFORM,
BUS_USB,
BUS_last /* Keep last */
} BusType;
......