Merge branch 'X11Libre:master' into patch-2
This commit is contained in:
commit
6d6a74f92c
|
@ -0,0 +1,65 @@
|
|||
name: 🐞 Bug report
|
||||
description: Create a report to help us improve
|
||||
|
||||
labels: [bug, needs-triage]
|
||||
#type: bug
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to help everyone identify and fix the bug. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
||||
- type: dropdown
|
||||
id: affected-version
|
||||
attributes:
|
||||
label: Select the version
|
||||
options:
|
||||
- 25.0.0.X
|
||||
- Git master branch
|
||||
- other or don't know
|
||||
default: 1
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe your issue
|
||||
placeholder: When I did X then Y happened.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
placeholder: |
|
||||
1. Start ...
|
||||
2. Do this
|
||||
3. Do that
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: What did you expect?
|
||||
placeholder: I expected this to happen.
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: Additional information you want to provide such as logs, system info, environment, screenshots, etc.
|
||||
placeholder: |
|
||||
Add any other context about the bug here.
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Extra fields
|
||||
options:
|
||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues)
|
||||
required: true
|
||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
||||
required: true
|
||||
- label: I'd like to work on this issue
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for reporting this issue! We will get back to you as soon as possible.
|
|
@ -0,0 +1,49 @@
|
|||
name: ✨ Feature request
|
||||
description: Suggest a feature for this software
|
||||
labels: [enhancement, needs-triage]
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to properly describe the new software feature you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: "Describe the feature"
|
||||
placeholder: A thing in X that allows to do Y.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: rationale
|
||||
attributes:
|
||||
label: "It should be implemented because"
|
||||
placeholder: Doing Y is needed for Z.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: alternative
|
||||
attributes:
|
||||
label: "What are the alternatives?"
|
||||
placeholder: We could do A or B instead.
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Additional information you want to provide such as references to related issues or protocols, the implications on existing use cases, etc.
|
||||
placeholder: |
|
||||
Add any other context about the feature request here.
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Extra fields
|
||||
options:
|
||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues)
|
||||
required: true
|
||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
||||
required: true
|
||||
- label: I'd like to work on this issue
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for your suggestion! Let's see together if it can be implemented.
|
|
@ -0,0 +1,50 @@
|
|||
name: 🔧 Code cleanup
|
||||
description: Level up the source code
|
||||
labels: [code-cleanup, needs-triage]
|
||||
#type: codecleanup
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to properly describe the code cleanup you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: "Describe the cleanup"
|
||||
placeholder: C in X needs to be changed into D.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: rationale
|
||||
attributes:
|
||||
label: "It should be done because"
|
||||
placeholder: Having D is needed for E.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: alternative
|
||||
attributes:
|
||||
label: "What are the alternatives?"
|
||||
placeholder: We could do A or B instead.
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Additional information you want to provide such as implications on existing code, how to ensure API/ABI stability, which tests are needed or to be run, related issues, etc.
|
||||
placeholder: |
|
||||
Add any other context about the cleanup here.
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Extra fields
|
||||
options:
|
||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues)
|
||||
required: true
|
||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
||||
required: true
|
||||
- label: I'd like to work on this issue
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for looking at the source code! Let's see together how it can be improved.
|
|
@ -0,0 +1,39 @@
|
|||
name: 🔖 Documentation update
|
||||
description: Make your mark for better documentation
|
||||
|
||||
labels: [documentation, needs-triage]
|
||||
#type: docchange
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to help others understand our software. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe the update
|
||||
placeholder: These things need to be better documented.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: Additional information you want to provide such as tickets related to changes in the software, affected files, screenshots, etc.
|
||||
placeholder: |
|
||||
Add any other context about the update here.
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Extra fields
|
||||
options:
|
||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues)
|
||||
required: true
|
||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
||||
required: true
|
||||
- label: I'd like to work on this issue
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for requesting this update! We will get back to you as soon as possible.
|
|
@ -0,0 +1,44 @@
|
|||
name: ✅ Organizational task
|
||||
description: Create a task for project organization
|
||||
|
||||
labels: [needs-triage, organization]
|
||||
#type: task
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to get organizational things done. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe the task
|
||||
placeholder: These things need to be done.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: rationale
|
||||
attributes:
|
||||
label: "It should be done because"
|
||||
placeholder: Doing Y is needed for Z.
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: Additional information you want to provide such as the context for bigger tasks, the implicatons on existing workflows, related issues, etc.
|
||||
placeholder: |
|
||||
Add any other context about the task here.
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Extra fields
|
||||
options:
|
||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues)
|
||||
required: true
|
||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
||||
required: true
|
||||
- label: I'd like to work on this issue
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for adding this task! We will get back to you as soon as possible.
|
|
@ -0,0 +1,8 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: XLibre Community Support
|
||||
url: https://github.com/orgs/X11Libre/discussions
|
||||
about: Please ask and answer questions here.
|
||||
- name: Mailing List
|
||||
url: https://www.freelists.org/list/xlibre
|
||||
about: You can join the discussions on our mailing list.
|
|
@ -14,6 +14,7 @@ cd $DRV_BUILD_DIR
|
|||
build_drv_ac xf86-input-elographics $X11L_DRV_GIT/xf86-input-elographics master
|
||||
build_drv_ac xf86-input-evdev $X11L_DRV_GIT/xf86-input-evdev master
|
||||
build_drv_ac xf86-input-libinput $X11L_DRV_GIT/xf86-input-libinput master
|
||||
build_drv_ac xf86-input-mouse $X11L_DRV_GIT/xf86-input-mouse master
|
||||
build_drv_ac xf86-input-synaptics $X11L_DRV_GIT/xf86-input-synaptics master
|
||||
|
||||
build_drv_ac xf86-video-amdgpu $X11L_DRV_GIT/xf86-video-amdgpu xf86-video-amdgpu-23.0.0
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
export X11_PREFIX=/home/runner/x11
|
||||
export X11_OS=`uname -s`
|
||||
|
||||
export X11_PREFIX="${X11_PREFIX:-$HOME/x11}"
|
||||
export X11_BUILD_DIR="${X11_BUILD_DIR:-$HOME/build-deps}"
|
||||
export DRV_BUILD_DIR="${DRV_BUILD_DIR:-$HOME/build-drivers}"
|
||||
|
||||
case "$X11_OS" in
|
||||
Darwin) export FDO_CI_CONCURRENT=`sysctl -n hw.logicalcpu` ;;
|
||||
Linux) export FDO_CI_CONCURRENT=`nproc` ;;
|
||||
esac
|
||||
|
||||
export PATH="$X11_PREFIX/bin:$PATH"
|
||||
export PKG_CONFIG_PATH="$X11_PREFIX/lib/x86_64-linux-gnu/pkgconfig:$X11_PREFIX/lib/pkgconfig:$X11_PREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
|
||||
export FDO_CI_CONCURRENT=`nproc`
|
||||
export X11_BUILD_DIR=/home/runner/build-deps
|
||||
export DRV_BUILD_DIR=/home/runner/build-drivers
|
||||
|
|
|
@ -8,10 +8,13 @@ mkdir -p $X11_BUILD_DIR
|
|||
cd $X11_BUILD_DIR
|
||||
|
||||
build_meson rendercheck https://gitlab.freedesktop.org/xorg/test/rendercheck rendercheck-1.6
|
||||
if [ "$X11_OS" = "Linux" ]; then
|
||||
build_meson drm https://gitlab.freedesktop.org/mesa/drm libdrm-2.4.121 \
|
||||
-Domap=enabled
|
||||
fi
|
||||
build_meson libxcvt https://gitlab.freedesktop.org/xorg/lib/libxcvt libxcvt-0.1.0
|
||||
build_ac xorgproto https://gitlab.freedesktop.org/xorg/proto/xorgproto xorgproto-2024.1
|
||||
if [ "$X11_OS" = "Linux" ]; then
|
||||
build_meson wayland https://gitlab.freedesktop.org/wayland/wayland 1.21.0 \
|
||||
-Dtests=false -Ddocumentation=false -Ddtd_validation=false
|
||||
build_meson wayland-protocols https://gitlab.freedesktop.org/wayland/wayland-protocols 1.38
|
||||
|
@ -19,6 +22,10 @@ build_meson libdecor https://gitlab.freedesktop.org/libdecor/libdecor
|
|||
-D{demo,install_demo}=false
|
||||
build_meson libei https://gitlab.freedesktop.org/libinput/libei 1.0.0 \
|
||||
-Dtests=disabled -Ddocumentation=[] -Dliboeffis=enabled
|
||||
fi
|
||||
if [ "$X11_OS" = "Darwin" ]; then
|
||||
build_ac xset https://gitlab.freedesktop.org/xorg/app/xset xset-1.2.5
|
||||
fi
|
||||
build_ac_xts xts https://gitlab.freedesktop.org/xorg/test/xts master # dbbfa96c036e596346147081cbceda136e7c86c1
|
||||
|
||||
clone_source piglit https://gitlab.freedesktop.org/mesa/piglit main # 265896c86f90cb72e8f218ba6a3617fca8b9a1e3
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
brew update
|
||||
|
||||
brew install \
|
||||
autoconf \
|
||||
automake \
|
||||
bdftopcf \
|
||||
libapplewm \
|
||||
libtool \
|
||||
libx11 \
|
||||
libxau \
|
||||
libxaw \
|
||||
libxcb \
|
||||
libxdmcp \
|
||||
libxext \
|
||||
libxfixes \
|
||||
libxfont2 \
|
||||
libxkbfile \
|
||||
libxi \
|
||||
libxmu \
|
||||
libxrender \
|
||||
libxt \
|
||||
libxtst \
|
||||
meson \
|
||||
mkfontscale \
|
||||
pkgconf \
|
||||
pixman \
|
||||
util-macros \
|
||||
xdpyinfo \
|
||||
xkbcomp \
|
||||
xkeyboard-config \
|
||||
xtrans
|
||||
|
||||
pip3 install --break-system-packages \
|
||||
mako
|
|
@ -82,8 +82,28 @@ build_ac_xts() {
|
|||
clone_source "$pkgname" "$url" "$ref"
|
||||
(
|
||||
cd $pkgname
|
||||
CFLAGS=-fcommon ./autogen.sh --prefix=$X11_PREFIX
|
||||
xvfb-run make -j${FDO_CI_CONCURRENT:-4} install
|
||||
CFLAGS='-fcommon'
|
||||
if [ "$X11_OS" = "Darwin" ]; then
|
||||
# xts5/include/XtTest.h includes <X11/Intrinsic.h> => needs xt
|
||||
# xts5/src/libXtaw/*.c include <X11/Xaw/*.h> and <X11/Xmu/*.h> => need xmu and xaw7
|
||||
sed -E -i~ 's|(\[XTS\], \[)|\1xt xmu xaw7 |' configure.ac
|
||||
# xts5/Xlib14/X{mb,wc}TextListToTextProperty.m define a function accepting `XTextProperty` but call it passing
|
||||
#`XTextProperty*`; since the parameter is seemingly meant for output, accept it as pointer
|
||||
sed -E -i~ -e 's|(XTextProperty)[[:space:]]+(text_prop_good)|\1 *\2|' -e 's|(style_good),[[:space:]]*&(text_prop_good)|\1,\2|' -e 's|text_prop_good\.|text_prop_good->|' xts5/Xlib14/X{mb,wc}TextListToTextProperty.m
|
||||
# xts5/Xlib*/*.m forward-declare `strcpy()` which is incompatible with _FORTIFY_SOURCE > 0 where `strcpy` is
|
||||
# a macro; set _FORTIFY_SOURCE to 0 as we don't care much about security in this test code
|
||||
CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
|
||||
# declarations for `XtAppSetError{,Msg}Handler()` in <X11/Intrinsic.h> (libXt) make it hard to write warning-
|
||||
# free code: they want a noreturn-annotated handler as input but return old handler without noreturn annotation,
|
||||
# so e.g. `XtAppSetErrorHandler(XtAppSetErrorHandler(NULL))` (similar to xts5/Xt13/XtAppSetError*Handler.m)
|
||||
# doesn't compile complaining about incompatible function pointers, at least with Apple Clang 16 (not sure why
|
||||
# it treats this warning as error by default though)
|
||||
if cc -Werror=unknown-warning-option -Wincompatible-function-pointer-types -c -xc -o /dev/null /dev/null 2>/dev/null; then
|
||||
CFLAGS="$CFLAGS -Wno-error=incompatible-function-pointer-types"
|
||||
fi
|
||||
fi
|
||||
./autogen.sh --prefix=$X11_PREFIX CFLAGS="$CFLAGS"
|
||||
make -j${FDO_CI_CONCURRENT:-4} install
|
||||
)
|
||||
touch $X11_PREFIX/$pkgname.DONE
|
||||
fi
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
name: Build X servers
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
MESON_BUILDDIR: "build"
|
||||
X11_PREFIX: /home/runner/x11
|
||||
|
@ -20,7 +23,8 @@ jobs:
|
|||
|
||||
- name: prepare build environment
|
||||
run: |
|
||||
export MACHINE=`gcc -dumpmachine`
|
||||
MACHINE=`gcc -dumpmachine`
|
||||
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
||||
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
||||
sudo chown root /bin/tar && sudo chmod u+s /bin/tar
|
||||
|
||||
|
@ -41,11 +45,11 @@ jobs:
|
|||
${{ env.X11_PREFIX }}
|
||||
${{ env.X11_BUILD_DIR }}/xts
|
||||
${{ env.X11_BUILD_DIR }}/piglit
|
||||
key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
||||
restore-keys: ${{ runner.os }}-x11-deps-
|
||||
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
||||
restore-keys: ${{ runner.name }}-x11-deps-
|
||||
|
||||
- name: generic prereq
|
||||
run: sudo .github/scripts/install-prereq.sh
|
||||
run: .github/scripts/install-prereq.sh
|
||||
|
||||
- name: build
|
||||
run: .gitlab-ci/meson-build.sh
|
||||
|
@ -78,7 +82,8 @@ jobs:
|
|||
|
||||
- name: prepare build environment
|
||||
run: |
|
||||
export MACHINE=`gcc -dumpmachine`
|
||||
MACHINE=`gcc -dumpmachine`
|
||||
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
||||
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
||||
sudo chown root /bin/tar && sudo chmod u+s /bin/tar
|
||||
|
||||
|
@ -99,11 +104,11 @@ jobs:
|
|||
${{ env.X11_PREFIX }}
|
||||
${{ env.X11_BUILD_DIR }}/xts
|
||||
${{ env.X11_BUILD_DIR }}/piglit
|
||||
key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
||||
restore-keys: ${{ runner.os }}-x11-deps-
|
||||
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
||||
restore-keys: ${{ runner.name }}-x11-deps-
|
||||
|
||||
- name: generic prereq
|
||||
run: sudo .github/scripts/install-prereq.sh
|
||||
run: .github/scripts/install-prereq.sh
|
||||
|
||||
- name: build xserver sdk
|
||||
run: |
|
||||
|
@ -117,3 +122,61 @@ jobs:
|
|||
|
||||
- name: compile drivers
|
||||
run: .github/scripts/compile-drivers.sh
|
||||
|
||||
xserver-build-macos:
|
||||
env:
|
||||
MESON_ARGS: -Dprefix=/tmp -Dglx=false -Dxnest=false
|
||||
X11_PREFIX: /Users/runner/x11
|
||||
X11_BUILD_DIR: /Users/runner/build-deps
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: prepare build environment
|
||||
run: |
|
||||
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
||||
|
||||
- name: homebrew cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: /Users/runner/Library/Caches/Homebrew
|
||||
key: ${{ runner.os }}-homebrew-cache-${{ hashFiles('.github/scripts/macos/install-pkg.sh') }}
|
||||
restore-keys: ${{ runner.os }}-homebrew-cache-
|
||||
|
||||
- name: pkg install
|
||||
run: .github/scripts/macos/install-pkg.sh
|
||||
|
||||
- name: X11 prereq cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
${{ env.X11_PREFIX }}
|
||||
${{ env.X11_BUILD_DIR }}/xts
|
||||
${{ env.X11_BUILD_DIR }}/piglit
|
||||
key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
||||
restore-keys: ${{ runner.os }}-x11-deps-
|
||||
|
||||
- name: generic prereq
|
||||
run: .github/scripts/install-prereq.sh
|
||||
|
||||
- name: build
|
||||
run: .gitlab-ci/meson-build.sh
|
||||
|
||||
- name: tests (may fail)
|
||||
continue-on-error: true
|
||||
run: meson test -C "${{ env.MESON_BUILDDIR }}" --print-errorlogs -j1 || true
|
||||
env:
|
||||
XTEST_DIR: ${{ env.X11_BUILD_DIR }}/xts
|
||||
PIGLIT_DIR: ${{ env.X11_BUILD_DIR }}/piglit
|
||||
|
||||
- name: archive build logs
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-logs-macos
|
||||
path: |
|
||||
build/meson-logs/*
|
||||
- name: ddx build check
|
||||
run: .gitlab-ci/check-ddx-build.sh
|
||||
- name: manpage check
|
||||
run: .gitlab-ci/manpages-check
|
||||
|
|
|
@ -19,6 +19,7 @@ fi
|
|||
[[ "$BUILD_XEPHYR" == true ]] && check_executable "hw/kdrive/ephyr/Xephyr"
|
||||
[[ "$BUILD_XNEST" == true ]] && check_executable "hw/xnest/Xnest"
|
||||
[[ "$BUILD_XORG" == true ]] && check_executable "hw/xfree86/Xorg"
|
||||
[[ "$BUILD_XQUARTZ" == true ]] && check_executable "hw/xquartz/mach-startup/Xquartz"
|
||||
[[ "$BUILD_XVFB" == true ]] && check_executable "hw/vfb/Xvfb"
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
find build/ -regex ".*\.[1-9]$" -exec grep -E \
|
||||
find build/ -type f -regex ".*\.[1-9]$" -exec grep -E \
|
||||
@vendorversion@\|\
|
||||
@xorgversion@\|\
|
||||
@xservername@\|\
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
Keep in mind that history is also a piece of documentation.
|
||||
|
||||
3. Once release is out, bugfixes should be submitted separately, against
|
||||
the affected release branch(es) as well as master (so multiple MRs)
|
||||
the affected release branch(es) as well as master (so multiple pull requests)
|
||||
|
||||
4. If new functions or types are introduced, these should be documented
|
||||
in-code, so we can generate docs directly from the code :)
|
||||
|
||||
5. Use MR tags if you can - if we need some more, just ask.
|
||||
5. Use pull request tags if you can - if we need some more, just ask.
|
||||
|
|
119
README.md
119
README.md
|
@ -38,11 +38,17 @@ Upgrade notice
|
|||
When unsure, it's best to be prepared to ssh into your machine from another one
|
||||
or set a timer that's calling `chvt 1` after certain time, so you don't
|
||||
need a cold reboot.
|
||||
Or, make sure that you have magic `SysRq` key enabled (`Alt+PrtSc`)
|
||||
via sysctl (`kernel.sysrq=1`), then press following combination depending on keyboard
|
||||
layout to make kernel regain control over keyboard to make VT switching work:
|
||||
- QWERTY/AZERTY keyboard layout: `SysRq + R`
|
||||
- Dvorak/Colemak keyboard layout: `SysRq + P`
|
||||
|
||||
* Proprietary Nvidia drivers might break: they still haven't managed to do
|
||||
even simple cleanups to catch up with Xorg master for about a year.
|
||||
All attempts to get into direct mail contact have failed. We're trying to
|
||||
work around this, but cannot give any guarantees.
|
||||
work around this, but cannot give any guarantees. But you can make it work
|
||||
by adding `Option "IgnoreABI" "1"` line to `ServerFlags` section in Xorg config.
|
||||
|
||||
* Most Xorg drivers should run as-is (once recompiled!), with some exceptions.
|
||||
See `.gitlab-ci.yml` for the versions/branches built along with Xlibre.
|
||||
|
@ -54,61 +60,62 @@ Driver repositories
|
|||
Since Redhat had deleted and banned all X11Libre repositories from freedesktop.org,
|
||||
the driver repositories are now moved to GitHub:
|
||||
|
||||
| Driver | Git repository |
|
||||
| --- | --- |
|
||||
| xf86-input-elographics: | https://github.com/X11Libre/xf86-input-elographics |
|
||||
| xf86-input-evdev: | https://github.com/X11Libre/xf86-input-evdev |
|
||||
| xf86-input-void: | https://github.com/X11Libre/xf86-input-void |
|
||||
| xf86-input-joystick: | https://github.com/X11Libre/xf86-input-joystick |
|
||||
| xf86-input-keyboard: | https://github.com/X11Libre/xf86-input-keyboard |
|
||||
| xf86-input-libinput: | https://github.com/X11Libre/xf86-input-libinput |
|
||||
| xf86-input-mouse: | https://github.com/X11Libre/xf86-input-mouse |
|
||||
| xf86-input-synaptics: | https://github.com/X11Libre/xf86-input-synaptics |
|
||||
| xf86-input-vmmouse: | https://github.com/X11Libre/xf86-input-vmmouse |
|
||||
| xf86-video-amdgpu: | https://github.com/X11Libre/xf86-video-amdgpu |
|
||||
| xf86-video-apm: | https://github.com/X11Libre/xf86-video-apm |
|
||||
| xf86-video-ark: | https://github.com/X11Libre/xf86-video-ark |
|
||||
| xf86-video-ast: | https://github.com/X11Libre/xf86-video-ast |
|
||||
| xf86-video-ati: | https://github.com/X11Libre/xf86-video-ati |
|
||||
| xf86-video-chips: | https://github.com/X11Libre/xf86-video-chips |
|
||||
| xf86-video-cirrus: | https://github.com/X11Libre/xf86-video-cirrus |
|
||||
| xf86-video-dummy: | https://github.com/X11Libre/xf86-video-dummy |
|
||||
| xf86-video-fbdev: | https://github.com/X11Libre/xf86-video-fbdev |
|
||||
| xf86-video-freedreno: | https://github.com/X11Libre/xf86-video-freedreno |
|
||||
| xf86-video-geode: | https://github.com/X11Libre/xf86-video-geode |
|
||||
| xf86-video-i128: | https://github.com/X11Libre/xf86-video-i128 |
|
||||
| xf86-video-i740: | https://github.com/X11Libre/xf86-video-i740 |
|
||||
| xf86-video-intel: | https://github.com/X11Libre/xf86-video-intel |
|
||||
| xf86-video-mach64: | https://github.com/X11Libre/xf86-video-mach64 |
|
||||
| xf86-video-mga: | https://github.com/X11Libre/xf86-video-mga |
|
||||
| xf86-video-neomagic: | https://github.com/X11Libre/xf86-video-neomagic |
|
||||
| xf86-video-nested: | https://github.com/X11Libre/xf86-video-nested |
|
||||
| xf86-video-nouveau: | https://github.com/X11Libre/xf86-video-nouveau |
|
||||
| xf86-video-nv: | https://github.com/X11Libre/xf86-video-nv |
|
||||
| xf86-video-omap: | https://github.com/X11Libre/xf86-video-omap |
|
||||
| xf86-video-qxl: | https://github.com/X11Libre/xf86-video-qxl |
|
||||
| xf86-video-r128: | https://github.com/X11Libre/xf86-video-r128 |
|
||||
| xf86-video-rendition: | https://github.com/X11Libre/xf86-video-rendition |
|
||||
| xf86-video-s3virge: | https://github.com/X11Libre/xf86-video-s3virge |
|
||||
| xf86-video-savage: | https://github.com/X11Libre/xf86-video-savage |
|
||||
| xf86-video-siliconmotion: | https://github.com/X11Libre/xf86-video-siliconmotion |
|
||||
| xf86-video-sis: | https://github.com/X11Libre/xf86-video-sis |
|
||||
| xf86-video-sisusb: | https://github.com/X11Libre/xf86-video-sisusb |
|
||||
| xf86-video-suncg14: | https://github.com/X11Libre/xf86-video-suncg14 |
|
||||
| xf86-video-suncg3: | https://github.com/X11Libre/xf86-video-suncg3 |
|
||||
| xf86-video-suncg6: | https://github.com/X11Libre/xf86-video-suncg6 |
|
||||
| xf86-video-sunffb: | https://github.com/X11Libre/xf86-video-sunffb |
|
||||
| xf86-video-sunleo: | https://github.com/X11Libre/xf86-video-sunleo |
|
||||
| xf86-video-suntcx: | https://github.com/X11Libre/xf86-video-suntcx |
|
||||
| xf86-video-tdfx: | https://github.com/X11Libre/xf86-video-tdfx |
|
||||
| xf86-video-trident: | https://github.com/X11Libre/xf86-video-trident |
|
||||
| xf86-video-vbox: | https://github.com/X11Libre/xf86-video-vbox |
|
||||
| xf86-video-v4l: | https://github.com/X11Libre/xf86-video-v4l |
|
||||
| xf86-video-vesa: | https://github.com/X11Libre/xf86-video-vesa |
|
||||
| xf86-video-vmware: | https://github.com/X11Libre/xf86-video-vmware |
|
||||
| xf86-video-voodoo: | https://github.com/X11Libre/xf86-video-voodoo |
|
||||
| xf86-video-wsfb: | https://github.com/X11Libre/xf86-video-wsfb |
|
||||
| xf86-video-xgi: | https://github.com/X11Libre/xf86-video-xgi |
|
||||
| Driver | Git repository | Release tag |
|
||||
| --- | --- | --- |
|
||||
| xf86-input-elographics: | https://github.com/X11Libre/xf86-input-elographics | xlibre-xf86-input-elographics-1.4.4.1 |
|
||||
| xf86-input-evdev: | https://github.com/X11Libre/xf86-input-evdev | xlibre-xf86-input-evdev-2.11.0.1 |
|
||||
| xf86-input-void: | https://github.com/X11Libre/xf86-input-void | xlibre-xf86-input-void-1.4.2.1 |
|
||||
| xf86-input-joystick: | https://github.com/X11Libre/xf86-input-joystick | xlibre-xf86-input-joystick-1.6.4.1 |
|
||||
| xf86-input-keyboard: | https://github.com/X11Libre/xf86-input-keyboard | xlibre-xf86-input-keyboard-2.1.0.1 |
|
||||
| xf86-input-libinput: | https://github.com/X11Libre/xf86-input-libinput | xlibre-xf86-input-libinput-1.5.0.1 |
|
||||
| xf86-input-mouse: | https://github.com/X11Libre/xf86-input-mouse | xlibre-xf86-input-mouse-1.9.5.1 |
|
||||
| xf86-input-synaptics: | https://github.com/X11Libre/xf86-input-synaptics | xlibre-xf86-input-synaptics-1.10.0.1 |
|
||||
| xf86-input-vmmouse: | https://github.com/X11Libre/xf86-input-vmmouse | xlibre-xf86-input-vmmouse-13.2.0.1 |
|
||||
| xf86-input-wacom: | https://github.com/X11Libre/xf86-input-wacom | xlibre-xf86-input-wacom-1.2.3.1 |
|
||||
| xf86-video-amdgpu: | https://github.com/X11Libre/xf86-video-amdgpu | xlibre-xf86-video-amdgpu-23.0.0.1 |
|
||||
| xf86-video-apm: | https://github.com/X11Libre/xf86-video-apm | xlibre-xf86-video-apm-1.3.0.1 |
|
||||
| xf86-video-ark: | https://github.com/X11Libre/xf86-video-ark | xfree-xf86-video-ark-0.7.6.1 |
|
||||
| xf86-video-ast: | https://github.com/X11Libre/xf86-video-ast | xlibre-xf86-video-ast-1.2.0 |
|
||||
| xf86-video-ati: | https://github.com/X11Libre/xf86-video-ati | xfree-xf86-video-ati-22.0.0.1 |
|
||||
| xf86-video-chips: | https://github.com/X11Libre/xf86-video-chips | xlibre-xf86-video-chips-1.5.0.1 |
|
||||
| xf86-video-cirrus: | https://github.com/X11Libre/xf86-video-cirrus | xlibre-xf86-video-cirrus-1.6.0.1 |
|
||||
| xf86-video-dummy: | https://github.com/X11Libre/xf86-video-dummy | xlibre-xf86-video-dummy-0.4.1.1 |
|
||||
| xf86-video-fbdev: | https://github.com/X11Libre/xf86-video-fbdev | xlibre-xf86-video-fbdev-0.5.1.1 |
|
||||
| xf86-video-freedreno: | https://github.com/X11Libre/xf86-video-freedreno | xlibre-xf86-video-freedreno-1.4.0.1 |
|
||||
| xf86-video-geode: | https://github.com/X11Libre/xf86-video-geode | xlibre-xf86-video-geode-2.18.1.1 |
|
||||
| xf86-video-i128: | https://github.com/X11Libre/xf86-video-i128 | xlibre-xf86-video-i128-1.4.1.1 |
|
||||
| xf86-video-i740: | https://github.com/X11Libre/xf86-video-i740 | xlibre-xf86-video-i740-1.4.0.1 |
|
||||
| xf86-video-intel: | https://github.com/X11Libre/xf86-video-intel | xlibre-xf86-video-intel-3.0.0.1 |
|
||||
| xf86-video-mach64: | https://github.com/X11Libre/xf86-video-mach64 | xlibre-xf86-video-mach64-6.10.0.1 |
|
||||
| xf86-video-mga: | https://github.com/X11Libre/xf86-video-mga | xlibre-xf86-video-mga-2.1.0.1 |
|
||||
| xf86-video-neomagic: | https://github.com/X11Libre/xf86-video-neomagic | xlibre-xf86-video-neomagic-1.3.1.1 |
|
||||
| xf86-video-nested: | https://github.com/X11Libre/xf86-video-nested | xlibre-xf86-video-nested-1.0.0.1 |
|
||||
| xf86-video-nouveau: | https://github.com/X11Libre/xf86-video-nouveau | xlibre-xf86-video-nouveau-1.0.18.1 |
|
||||
| xf86-video-nv: | https://github.com/X11Libre/xf86-video-nv | xlibre-xf86-video-nv-2.1.23.1 |
|
||||
| xf86-video-omap: | https://github.com/X11Libre/xf86-video-omap | xlibre-xf86-video-omap-0.4.5.1 |
|
||||
| xf86-video-qxl: | https://github.com/X11Libre/xf86-video-qxl | xlibre-xf86-video-qxl-0.1.6.1 |
|
||||
| xf86-video-r128: | https://github.com/X11Libre/xf86-video-r128 | xlibre-xf86-video-r128-6.13.0.1 |
|
||||
| xf86-video-rendition: | https://github.com/X11Libre/xf86-video-rendition | xlibre-xf86-video-rendition-4.2.7.1 |
|
||||
| xf86-video-s3virge: | https://github.com/X11Libre/xf86-video-s3virge | xlibre-xf86-video-s3virge-1.11.1.1 |
|
||||
| xf86-video-savage: | https://github.com/X11Libre/xf86-video-savage | xlibre-xf86-video-savage-2.4.1.1 |
|
||||
| xf86-video-siliconmotion: | https://github.com/X11Libre/xf86-video-siliconmotion | xlibre-xf86-video-siliconmotion-1.7.10.1 |
|
||||
| xf86-video-sis: | https://github.com/X11Libre/xf86-video-sis | xlibre-xf86-video-sis-0.12.0.1 |
|
||||
| xf86-video-sisusb: | https://github.com/X11Libre/xf86-video-sisusb | xlibre-xf86-video-sisusb-0.9.7.1 |
|
||||
| xf86-video-suncg14: | https://github.com/X11Libre/xf86-video-suncg14 | xlibre-xf86-video-suncg14-1.2.0 |
|
||||
| xf86-video-suncg3: | https://github.com/X11Libre/xf86-video-suncg3 | xlibre-xf86-video-suncg3-1.1.3.0 |
|
||||
| xf86-video-suncg6: | https://github.com/X11Libre/xf86-video-suncg6 | xlibre-xf86-video-suncg6-1.1.3.1 |
|
||||
| xf86-video-sunffb: | https://github.com/X11Libre/xf86-video-sunffb | xlibre-xf86-video-sunffb-1.2.3.1 |
|
||||
| xf86-video-sunleo: | https://github.com/X11Libre/xf86-video-sunleo | xlibre-xf86-video-sunleo-1.2.3.1 |
|
||||
| xf86-video-suntcx: | https://github.com/X11Libre/xf86-video-suntcx | xlibre-xf86-video-suntcx-1.1.3.1 |
|
||||
| xf86-video-tdfx: | https://github.com/X11Libre/xf86-video-tdfx | xlibre-xf86-video-tdfx-1.5.0.1 |
|
||||
| xf86-video-trident: | https://github.com/X11Libre/xf86-video-trident | xlibre-xf86-video-trident-1.4.0.1 |
|
||||
| xf86-video-vbox: | https://github.com/X11Libre/xf86-video-vbox | xlibre-xf86-video-vbox-1.0.1.1 |
|
||||
| xf86-video-v4l: | https://github.com/X11Libre/xf86-video-v4l | xlibre-xf86-video-v4l-0.3.0.1 |
|
||||
| xf86-video-vesa: | https://github.com/X11Libre/xf86-video-vesa | xlibre-xf86-video-vesa-2.6.0.1 |
|
||||
| xf86-video-vmware: | https://github.com/X11Libre/xf86-video-vmware | xlibre-xf86-video-vmware-13.4.0.1 |
|
||||
| xf86-video-voodoo: | https://github.com/X11Libre/xf86-video-voodoo | xlibre-xf86-video-voodoo-1.2.6.1 |
|
||||
| xf86-video-wsfb: | https://github.com/X11Libre/xf86-video-wsfb | xlibre-xf86-video-wsfb-0.4.1.1 |
|
||||
| xf86-video-xgi: | https://github.com/X11Libre/xf86-video-xgi | xlibre-xf86-video-xgi-1.6.1.1 |
|
||||
|
||||
|
||||
Contact
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
*
|
||||
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
*/
|
||||
|
||||
#ifndef _XORG_GEEXT_PRIV_H
|
||||
#define _XORG_GEEXT_PRIV_H
|
||||
|
||||
#include <X11/Xproto.h>
|
||||
|
||||
|
|
|
@ -58,13 +58,13 @@ if build_xv
|
|||
hdrs_xext += ['xvdix.h', 'xvmcext.h']
|
||||
endif
|
||||
|
||||
libxserver_xext = static_library('libxserver_xext',
|
||||
libxserver_xext = static_library('xserver_xext',
|
||||
srcs_xext,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
)
|
||||
|
||||
libxserver_xext_vidmode = static_library('libxserver_xext_vidmode',
|
||||
libxserver_xext_vidmode = static_library('xserver_xext_vidmode',
|
||||
'vidmode.c',
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -11,14 +11,6 @@
|
|||
#include "namespace.h"
|
||||
#include "hooks.h"
|
||||
|
||||
static inline Bool winIsRoot(WindowPtr pWin) {
|
||||
if (!pWin)
|
||||
return FALSE;
|
||||
if (pWin->drawable.pScreen->root == pWin)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void hookWindowProperty(CallbackListPtr *pcbl, void *unused, void *calldata)
|
||||
{
|
||||
XNS_HOOK_HEAD(PropertyFilterParam);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
libxserver_namespace = static_library(
|
||||
'libxserver_namespace',
|
||||
'xserver_namespace',
|
||||
[
|
||||
'config.c',
|
||||
'hook-client.c',
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
|
||||
/*
|
||||
* Server dispatcher function replacements
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_PANORAMIXH_H
|
||||
#define XSERVER_PANORAMIXH_H
|
||||
|
||||
extern int PanoramiXCreateWindow(ClientPtr client);
|
||||
extern int PanoramiXChangeWindowAttributes(ClientPtr client);
|
||||
extern int PanoramiXDestroyWindow(ClientPtr client);
|
||||
|
@ -71,3 +73,5 @@ extern int connBlockScreenStart;
|
|||
extern xConnSetupPrefix connSetupPrefix;
|
||||
|
||||
extern int (*SavedProcVector[256]) (ClientPtr client);
|
||||
|
||||
#endif /* XSERVER_PANORAMIXH_H */
|
||||
|
|
|
@ -1280,7 +1280,7 @@ ProcVidModeGetMonitor(ClientPtr client)
|
|||
+ nHsync + nVrefresh + nVendorItems + nModelItems
|
||||
};
|
||||
|
||||
const int buflen = nHsync * nVrefresh + nVendorItems + nModelItems;
|
||||
const int buflen = nHsync + nVrefresh + nVendorItems + nModelItems;
|
||||
|
||||
CARD32 *sendbuf = calloc(buflen, sizeof(CARD32));
|
||||
if (!sendbuf)
|
||||
|
@ -1302,22 +1302,22 @@ ProcVidModeGetMonitor(ClientPtr client)
|
|||
bufwalk++;
|
||||
}
|
||||
|
||||
memcpy(sendbuf,
|
||||
memcpy(bufwalk,
|
||||
pVidMode->GetMonitorValue(pScreen, VIDMODE_MON_VENDOR, 0).ptr,
|
||||
vendorLength);
|
||||
sendbuf += nVendorItems;
|
||||
bufwalk += nVendorItems;
|
||||
|
||||
memcpy(sendbuf,
|
||||
memcpy(bufwalk,
|
||||
pVidMode->GetMonitorValue(pScreen, VIDMODE_MON_MODEL, 0).ptr,
|
||||
modelLength);
|
||||
sendbuf += nModelItems;
|
||||
bufwalk += nModelItems;
|
||||
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequenceNumber);
|
||||
swapl(&rep.length);
|
||||
}
|
||||
|
||||
WriteToClient(client, SIZEOF(xXF86VidModeGetMonitorReply), &rep);
|
||||
WriteToClient(client, sizeof(xXF86VidModeGetMonitorReply), &rep);
|
||||
WriteToClient(client, buflen * sizeof(CARD32), sendbuf);
|
||||
|
||||
free(sendbuf);
|
||||
|
|
|
@ -78,7 +78,7 @@ int XaceHookPropertyAccess(ClientPtr ptr, WindowPtr pWin, PropertyPtr *ppProp,
|
|||
Mask access_mode);
|
||||
int XaceHookSelectionAccess(ClientPtr ptr, Selection ** ppSel, Mask access_mode);
|
||||
|
||||
/* needs to be exported for in-tree modsetting, but not part of public API */
|
||||
/* needs to be exported for in-tree modesetting, but not part of public API */
|
||||
_X_EXPORT int XaceHookResourceAccess(ClientPtr client, XID id, RESTYPE rtype, void *res,
|
||||
RESTYPE ptype, void *parent, Mask access_mode);
|
||||
|
||||
|
|
|
@ -647,7 +647,6 @@ ProcXF86BigfontDispatch(ClientPtr client)
|
|||
static int _X_COLD
|
||||
SProcXF86BigfontQueryVersion(ClientPtr client)
|
||||
{
|
||||
REQUEST(xXF86BigfontQueryVersionReq);
|
||||
return ProcXF86BigfontQueryVersion(client);
|
||||
}
|
||||
|
||||
|
|
|
@ -516,7 +516,7 @@ ConstructClientIds(ClientPtr client,
|
|||
for (c = 0; c < currentMaxClients; ++c) {
|
||||
if (clients[c] &&
|
||||
(XaceHookClientAccess(client, clients[c], DixReadAccess)
|
||||
!= Success)) {
|
||||
== Success)) {
|
||||
if (!ConstructClientIdValue(client, clients[c],
|
||||
specs[specIdx].mask, ctx)) {
|
||||
return BadAlloc;
|
||||
|
@ -527,7 +527,7 @@ ConstructClientIds(ClientPtr client,
|
|||
ClientPtr owner = dixClientForXID(specs[specIdx].client);
|
||||
if (owner &&
|
||||
(XaceHookClientAccess(client, owner, DixReadAccess)
|
||||
!= Success)) {
|
||||
== Success)) {
|
||||
if (!ConstructClientIdValue(client, owner,
|
||||
specs[specIdx].mask, ctx)) {
|
||||
return BadAlloc;
|
||||
|
|
|
@ -1,2 +1,7 @@
|
|||
#ifndef XSERVER_XVDISP_H
|
||||
#define XSERVER_XVDISP_H
|
||||
|
||||
extern void XineramifyXv(void);
|
||||
extern int xvUseXinerama;
|
||||
|
||||
#endif /* XSERVER_XVDISP_H */
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
*
|
||||
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
*/
|
||||
|
||||
#ifndef _XORG_XVDIX_PRIV_H
|
||||
#define _XORG_XVDIX_PRIV_H
|
||||
|
||||
#include <X11/Xdefs.h>
|
||||
|
||||
|
|
|
@ -53,14 +53,14 @@ srcs_xi = [
|
|||
'xiwarppointer.c',
|
||||
]
|
||||
|
||||
libxserver_xi = static_library('libxserver_xi',
|
||||
libxserver_xi = static_library('xserver_xi',
|
||||
srcs_xi,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
)
|
||||
|
||||
srcs_xi_stubs = ['stubs.c']
|
||||
libxserver_xi_stubs = static_library('libxserver_xi_stubs',
|
||||
libxserver_xi_stubs = static_library('xserver_xi_stubs',
|
||||
srcs_xi_stubs,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -10,7 +10,7 @@ hdrs_composite = [
|
|||
'compositeext.h',
|
||||
]
|
||||
|
||||
libxserver_composite = static_library('libxserver_composite',
|
||||
libxserver_composite = static_library('xserver_composite',
|
||||
srcs_composite,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
* Author: Daniel Stone <daniel@fooishbar.org>
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_CONFIG_BACKENDS_H
|
||||
#define XSERVER_CONFIG_BACKENDS_H
|
||||
|
||||
#ifdef HAVE_DIX_CONFIG_H
|
||||
#include <dix-config.h>
|
||||
#endif
|
||||
|
@ -44,3 +47,5 @@ void config_hal_fini(void);
|
|||
int config_wscons_init(void);
|
||||
void config_wscons_fini(void);
|
||||
#endif
|
||||
|
||||
#endif /* XSERVER_CONFIG_BACKENDS_H */
|
||||
|
|
|
@ -28,7 +28,7 @@ if build_xorg
|
|||
install_dir: join_paths(get_option('datadir'), 'X11/xorg.conf.d'))
|
||||
endif
|
||||
|
||||
libxserver_config = static_library('libxserver_config',
|
||||
libxserver_config = static_library('xserver_config',
|
||||
srcs_config,
|
||||
include_directories: inc,
|
||||
dependencies: config_dep,
|
||||
|
|
|
@ -2,7 +2,7 @@ srcs_damageext = [
|
|||
'damageext.c',
|
||||
]
|
||||
|
||||
libxserver_damageext = static_library('libxserver_damageext',
|
||||
libxserver_damageext = static_library('xserver_damageext',
|
||||
srcs_damageext,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -3,7 +3,7 @@ srcs_dbe = [
|
|||
'midbe.c',
|
||||
]
|
||||
|
||||
libxserver_dbe = static_library('libxserver_dbe',
|
||||
libxserver_dbe = static_library('xserver_dbe',
|
||||
srcs_dbe,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: MIT OR X11
|
||||
#
|
||||
# Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
|
@ -7,10 +7,10 @@ INPUT="$1"
|
|||
OUTPUT="$2"
|
||||
|
||||
do_line() {
|
||||
local name="$1"
|
||||
name="$1"
|
||||
[ "$2" != "@" ] && return 0
|
||||
echo " if (MakeAtom(\"$name\", ${#name}, 1) != XA_$name)"
|
||||
echo " FatalError(\"adding builtin atom\");"
|
||||
echo " FatalError(\"Adding builtin atom\");"
|
||||
}
|
||||
|
||||
cat > "$OUTPUT" << __END__
|
||||
|
@ -35,6 +35,6 @@ MakePredeclaredAtoms(void)
|
|||
{
|
||||
__END__
|
||||
|
||||
( grep '@' < "$INPUT" ) | ( while read l ; do do_line $l ; done ) >> "$OUTPUT"
|
||||
( grep '@' < "$INPUT" ) | ( while IFS= read -r l ; do do_line $l ; done ) >> "$OUTPUT"
|
||||
|
||||
echo "}" >> "$OUTPUT"
|
||||
|
|
|
@ -57,13 +57,13 @@ endif
|
|||
|
||||
dtrace_dep = declare_dependency(sources: [dtrace_src, dtrace_hdr])
|
||||
|
||||
libxserver_dix = static_library('libxserver_dix',
|
||||
libxserver_dix = static_library('xserver_dix',
|
||||
[ srcs_dix, builtinatoms_src ],
|
||||
include_directories: inc,
|
||||
dependencies: [ dtrace_dep, common_dep, ]
|
||||
)
|
||||
|
||||
libxserver_main = static_library('libxserver_main',
|
||||
libxserver_main = static_library('xserver_main',
|
||||
'stubmain.c',
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -157,11 +157,6 @@ static void
|
|||
deliverPropertyNotifyEvent(WindowPtr pWin, int state, PropertyPtr pProp)
|
||||
{
|
||||
xEvent event;
|
||||
PropertyStateRec rec = {
|
||||
.win = pWin,
|
||||
.prop = pProp,
|
||||
.state = state
|
||||
};
|
||||
UpdateCurrentTimeIf();
|
||||
event = (xEvent) {
|
||||
.u.property.window = pWin->drawable.id,
|
||||
|
|
|
@ -23,6 +23,7 @@ void dixFreeScreen(ScreenPtr pScreen)
|
|||
DeleteCallbackList(&pScreen->hookWindowDestroy);
|
||||
DeleteCallbackList(&pScreen->hookWindowPosition);
|
||||
DeleteCallbackList(&pScreen->hookClose);
|
||||
DeleteCallbackList(&pScreen->hookPostClose);
|
||||
DeleteCallbackList(&pScreen->hookPixmapDestroy);
|
||||
free(pScreen);
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
DECLARE_HOOK_PROC(WindowDestroy, hookWindowDestroy, XorgScreenWindowDestroyProcPtr);
|
||||
DECLARE_HOOK_PROC(WindowPosition, hookWindowPosition, XorgScreenWindowPositionProcPtr);
|
||||
DECLARE_HOOK_PROC(Close, hookClose, XorgScreenCloseProcPtr);
|
||||
DECLARE_HOOK_PROC(PostClose, hookPostClose, XorgScreenCloseProcPtr);
|
||||
DECLARE_HOOK_PROC(PixmapDestroy, hookPixmapDestroy, XorgScreenPixmapDestroyProcPtr);
|
||||
DECLARE_HOOK_PROC(PostCreateResources, hookPostCreateResources,
|
||||
XorgScreenPostCreateResourcesProcPtr);
|
||||
|
@ -71,6 +72,8 @@ void dixScreenRaiseClose(ScreenPtr pScreen) {
|
|||
|
||||
if (pScreen->CloseScreen)
|
||||
pScreen->CloseScreen(pScreen);
|
||||
|
||||
CallCallbacks(&pScreen->hookPostClose, NULL);
|
||||
}
|
||||
|
||||
void dixScreenRaisePixmapDestroy(PixmapPtr pPixmap)
|
||||
|
|
|
@ -147,6 +147,37 @@ _X_EXPORT
|
|||
void dixScreenUnhookClose(ScreenPtr pScreen,
|
||||
XorgScreenCloseProcPtr func);
|
||||
|
||||
/**
|
||||
* @brief register a screen post close notify hook on the given screen
|
||||
*
|
||||
* @param pScreen pointer to the screen to register the notify hook into
|
||||
* @param func pointer to the hook function
|
||||
*
|
||||
* In contrast to Close hook, it's called *after* the driver's CloseScreen()
|
||||
* proc had been called.
|
||||
*
|
||||
* When registration fails, the server aborts.
|
||||
**/
|
||||
void dixScreenHookPostClose(ScreenPtr pScreen,
|
||||
XorgScreenCloseProcPtr func);
|
||||
|
||||
/**
|
||||
* @brief unregister a screen close notify hook on the given screen
|
||||
*
|
||||
* @param pScreen pointer to the screen to unregister the hook from
|
||||
* @param func pointer to the hook function
|
||||
* @param arg opaque pointer passed to the destructor
|
||||
*
|
||||
* @see dixScreenHookPostClose
|
||||
*
|
||||
* Unregister a screen close notify hook registered via @ref dixScreenHookPostClose
|
||||
*
|
||||
* In contrast to Close hook, it's called *after* the driver's CloseScreen()
|
||||
* proc had been called.
|
||||
**/
|
||||
void dixScreenUnhookPostClose(ScreenPtr pScreen,
|
||||
XorgScreenCloseProcPtr func);
|
||||
|
||||
/* prototype of pixmap destroy notification handler */
|
||||
typedef void (*XorgScreenPixmapDestroyProcPtr)(CallbackListPtr *pcbl,
|
||||
ScreenPtr pScreen,
|
||||
|
|
|
@ -10,7 +10,7 @@ hdrs_dri3 = [
|
|||
|
||||
libxserver_dri3 = []
|
||||
if build_dri3
|
||||
libxserver_dri3 = static_library('libxserver_dri3',
|
||||
libxserver_dri3 = static_library('xserver_dri3',
|
||||
srcs_dri3,
|
||||
include_directories: inc,
|
||||
dependencies: [ common_dep, libdrm_dep ],
|
||||
|
|
|
@ -12,7 +12,7 @@ srcs_exa = [
|
|||
'exa_unaccel.c',
|
||||
]
|
||||
|
||||
libxserver_exa = static_library('libxserver_exa',
|
||||
libxserver_exa = static_library('xserver_exa',
|
||||
srcs_exa,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
|
|
@ -37,7 +37,7 @@ hdrs_fb = [
|
|||
'wfbrename.h'
|
||||
]
|
||||
|
||||
libxserver_fb = static_library('libxserver_fb',
|
||||
libxserver_fb = static_library('xserver_fb',
|
||||
srcs_fb,
|
||||
include_directories: inc,
|
||||
dependencies: common_dep,
|
||||
|
@ -46,7 +46,7 @@ libxserver_fb = static_library('libxserver_fb',
|
|||
|
||||
wfb_args = '-DFB_ACCESS_WRAPPER'
|
||||
|
||||
libxserver_wfb = static_library('libxserver_wfb',
|
||||
libxserver_wfb = static_library('xserver_wfb',
|
||||
srcs_fb,
|
||||
c_args: wfb_args,
|
||||
include_directories: inc,
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
#ifndef XSERVER_WFBRENAME_H
|
||||
#define XSERVER_WFBRENAME_H
|
||||
|
||||
#define fbAddTraps wfbAddTraps
|
||||
#define fbAddTriangles wfbAddTriangles
|
||||
#define fbAllocatePrivates wfbAllocatePrivates
|
||||
|
@ -118,3 +121,5 @@
|
|||
#define fbWinPrivateKeyRec wfbWinPrivateKeyRec
|
||||
#define free_pixman_pict wfb_free_pixman_pict
|
||||
#define image_from_pict wfb_image_from_pict
|
||||
|
||||
#endif /* XSERVER_WFBRENAME_H */
|
||||
|
|
|
@ -185,6 +185,24 @@ glamor_glyph_add(struct glamor_glyph_atlas *atlas, DrawablePtr glyph_draw)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static const glamor_facet glamor_facet_composite_glyphs_es300 = {
|
||||
.name = "composite_glyphs",
|
||||
.version = 130,
|
||||
.fs_extensions = ("#extension GL_EXT_blend_func_extended : enable\n"),
|
||||
.vs_vars = ("in vec4 primitive;\n"
|
||||
"in vec2 source;\n"
|
||||
"out vec2 glyph_pos;\n"),
|
||||
.vs_exec = (" vec2 pos = primitive.zw * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
|
||||
GLAMOR_POS(gl_Position, (primitive.xy + pos))
|
||||
" glyph_pos = (source + pos) * ATLAS_DIM_INV;\n"),
|
||||
.fs_vars = ("in vec2 glyph_pos;\n"
|
||||
"out vec4 color0;\n"
|
||||
"out vec4 color1;\n"),
|
||||
.fs_exec = (" vec4 mask = texture(atlas, glyph_pos);\n"),
|
||||
.source_name = "source",
|
||||
.locations = glamor_program_location_atlas,
|
||||
};
|
||||
|
||||
static const glamor_facet glamor_facet_composite_glyphs_130 = {
|
||||
.name = "composite_glyphs",
|
||||
.version = 130,
|
||||
|
@ -464,7 +482,9 @@ glamor_composite_glyphs(CARD8 op,
|
|||
if (glamor_glsl_has_ints(glamor_priv))
|
||||
prog = glamor_setup_program_render(op, src, glyph_pict, dst,
|
||||
glyphs_program,
|
||||
&glamor_facet_composite_glyphs_130,
|
||||
glamor_priv->is_gles ?
|
||||
&glamor_facet_composite_glyphs_es300 :
|
||||
&glamor_facet_composite_glyphs_130,
|
||||
glamor_priv->glyph_defines);
|
||||
else
|
||||
prog = glamor_setup_program_render(op, src, glyph_pict, dst,
|
||||
|
|
|
@ -1192,6 +1192,8 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd)
|
|||
"dmabuf_capable");
|
||||
else if (strstr((const char *)renderer, "Intel"))
|
||||
glamor_egl->dmabuf_capable = TRUE;
|
||||
else if (strstr((const char *)renderer, "zink"))
|
||||
glamor_egl->dmabuf_capable = TRUE;
|
||||
else
|
||||
glamor_egl->dmabuf_capable = FALSE;
|
||||
}
|
||||
|
|
|
@ -128,13 +128,10 @@ __glXSendReply(ClientPtr client, const void *data, size_t elements,
|
|||
.retval = retval,
|
||||
};
|
||||
|
||||
/* It is faster on almost always every architecture to just copy the 8
|
||||
* bytes, even when not necessary, than check to see of the value of
|
||||
* elements requires it. Copying the data when not needed will do no
|
||||
* harm.
|
||||
*/
|
||||
|
||||
(void) memcpy(&reply.pad3, data, 8);
|
||||
/* Single element goes in reply padding; don't leak uninitialized data. */
|
||||
if (elements == 1) {
|
||||
(void) memcpy(&reply.pad3, data, element_size);
|
||||
}
|
||||
WriteToClient(client, sizeof(xGLXSingleReply), &reply);
|
||||
|
||||
if (reply_ints != 0) {
|
||||
|
@ -176,13 +173,10 @@ __glXSendReplySwap(ClientPtr client, const void *data, size_t elements,
|
|||
.retval = bswap_32(retval),
|
||||
};
|
||||
|
||||
/* It is faster on almost always every architecture to just copy the 8
|
||||
* bytes, even when not necessary, than check to see of the value of
|
||||
* elements requires it. Copying the data when not needed will do no
|
||||
* harm.
|
||||
*/
|
||||
|
||||
(void) memcpy(&reply.pad3, data, 8);
|
||||
/* Single element goes in reply padding; don't leak uninitialized data. */
|
||||
if (elements == 1) {
|
||||
(void) memcpy(&reply.pad3, data, element_size);
|
||||
}
|
||||
WriteToClient(client, sizeof(xGLXSingleReply), &reply);
|
||||
|
||||
if (reply_ints != 0) {
|
||||
|
|
|
@ -32,7 +32,7 @@ srcs_glx = [
|
|||
|
||||
libxserver_glx = []
|
||||
if build_glx
|
||||
libxserver_glx = static_library('libxserver_glx',
|
||||
libxserver_glx = static_library('xserver_glx',
|
||||
srcs_glx,
|
||||
include_directories: inc,
|
||||
dependencies: [
|
||||
|
@ -68,7 +68,7 @@ hdrs_vnd = [
|
|||
|
||||
libglxvnd = []
|
||||
if build_glx
|
||||
libglxvnd = static_library('libglxvnd',
|
||||
libglxvnd = static_library('glxvnd',
|
||||
srcs_vnd,
|
||||
include_directories: inc,
|
||||
dependencies: [
|
||||
|
|
|
@ -347,7 +347,7 @@ __glXTypeSize(GLenum enm)
|
|||
case GL_INT:
|
||||
return sizeof(GLint);
|
||||
case GL_UNSIGNED_INT:
|
||||
return sizeof(GLint);
|
||||
return sizeof(GLuint);
|
||||
case GL_FLOAT:
|
||||
return sizeof(GLfloat);
|
||||
case GL_DOUBLE:
|
||||
|
|
|
@ -105,7 +105,7 @@ __glGetMap_size(GLenum target, GLenum query)
|
|||
}
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
GLint
|
||||
|
@ -164,7 +164,7 @@ __glGetPixelMap_size(GLenum map)
|
|||
query = GL_PIXEL_MAP_A_TO_A_SIZE;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
glGetIntegerv(query, &size);
|
||||
return size;
|
||||
|
|
|
@ -61,7 +61,12 @@ typedef struct _EphyrInputPrivate {
|
|||
|
||||
Bool EphyrWantGrayScale = 0;
|
||||
Bool EphyrWantResize = 0;
|
||||
Bool EphyrWantNoHostGrab = 0;
|
||||
|
||||
static xcb_mod_mask_t EphyrKeybindToggleHostGrabModMask;
|
||||
static uint32_t EphyrKeybindToggleHostGrabKey;
|
||||
static char const* EphyrTitleHostGrabKeyComboHint;
|
||||
static uint8_t EphyrTitleHostGrabKeyComboHintLen;
|
||||
static Bool EphyrHostGrabSet = FALSE;
|
||||
|
||||
Bool
|
||||
ephyrInitialize(KdCardInfo * card, EphyrPriv * priv)
|
||||
|
@ -649,6 +654,114 @@ ephyrCreateColormap(ColormapPtr pmap)
|
|||
return fbInitializeColormap(pmap);
|
||||
}
|
||||
|
||||
Bool
|
||||
ephyrSetGrabShortcut(char const* const desc)
|
||||
{
|
||||
if (desc == NULL || !strcmp(desc, "NULL")) {
|
||||
EphyrKeybindToggleHostGrabModMask = 0;
|
||||
EphyrKeybindToggleHostGrabKey = 0;
|
||||
EphyrTitleHostGrabKeyComboHint = NULL;
|
||||
EphyrTitleHostGrabKeyComboHintLen = 0;
|
||||
}
|
||||
else {
|
||||
const uint8_t fixed_bound = 255;
|
||||
char buf[16];
|
||||
uint8_t j = 0;
|
||||
for (uint8_t i = 0;; ++i) {
|
||||
assert(i < fixed_bound);
|
||||
char const c = desc[i];
|
||||
if (c == 0 || (j != 0 && c == '+')) {
|
||||
buf[j] = 0;
|
||||
if (j == 1) {
|
||||
EphyrKeybindToggleHostGrabKey = buf[0];
|
||||
}
|
||||
else if (!strcmp(buf, "ctrl")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_CONTROL;
|
||||
}
|
||||
else if (!strcmp(buf, "shift")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_SHIFT;
|
||||
}
|
||||
else if (!strcmp(buf, "lock")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_LOCK;
|
||||
}
|
||||
else if (!strcmp(buf, "mod1")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_1;
|
||||
}
|
||||
else if (!strcmp(buf, "mod2")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_2;
|
||||
}
|
||||
else if (!strcmp(buf, "mod3")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_3;
|
||||
}
|
||||
else if (!strcmp(buf, "mod4")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_4;
|
||||
}
|
||||
else if (!strcmp(buf, "mod5")) {
|
||||
EphyrKeybindToggleHostGrabModMask |= XCB_MOD_MASK_5;
|
||||
}
|
||||
else {
|
||||
ErrorF("ephyr: -host-grab: "
|
||||
"Unrecognized key: '%s'\n", buf);
|
||||
return FALSE;
|
||||
}
|
||||
if (c == 0) break;
|
||||
j = 0;
|
||||
}
|
||||
else {
|
||||
buf[j] = c;
|
||||
++j;
|
||||
assert(j < sizeof(buf));
|
||||
}
|
||||
}
|
||||
|
||||
EphyrTitleHostGrabKeyComboHint = desc;
|
||||
EphyrTitleHostGrabKeyComboHintLen = strlen(desc);
|
||||
}
|
||||
|
||||
EphyrHostGrabSet = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
ephyrPrintGrabShortcut(char* const out, size_t const out_size,
|
||||
Bool const currently_grabbed)
|
||||
{
|
||||
if (
|
||||
(
|
||||
EphyrKeybindToggleHostGrabModMask == 0 &&
|
||||
EphyrKeybindToggleHostGrabKey == 0
|
||||
) || (
|
||||
EphyrTitleHostGrabKeyComboHint == 0 ||
|
||||
EphyrTitleHostGrabKeyComboHintLen == 0
|
||||
)
|
||||
) {
|
||||
/* grabbing disabled */
|
||||
out[0] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
char const* const suffix = currently_grabbed
|
||||
? " releases mouse and keyboard)"
|
||||
: " grabs mouse and keyboard)";
|
||||
size_t const suffix_len = strlen(suffix);
|
||||
|
||||
assert(out_size > 1 + EphyrTitleHostGrabKeyComboHintLen + suffix_len + 1);
|
||||
assert(out != NULL);
|
||||
|
||||
out[0] = '(';
|
||||
memcpy(out + 1, EphyrTitleHostGrabKeyComboHint, EphyrTitleHostGrabKeyComboHintLen);
|
||||
|
||||
memcpy(out + EphyrTitleHostGrabKeyComboHintLen + 1, suffix, suffix_len + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
ephyrUpdateWindowTitle(KdScreenInfo* const screen, Bool const currently_grabbed)
|
||||
{
|
||||
char title_buf[128];
|
||||
ephyrPrintGrabShortcut(title_buf, sizeof(title_buf), currently_grabbed);
|
||||
hostx_set_win_title(screen, title_buf);
|
||||
}
|
||||
|
||||
Bool
|
||||
ephyrInitScreen(ScreenPtr pScreen)
|
||||
{
|
||||
|
@ -657,11 +770,10 @@ ephyrInitScreen(ScreenPtr pScreen)
|
|||
|
||||
EPHYR_LOG("pScreen->myNum:%d\n", pScreen->myNum);
|
||||
hostx_set_screen_number(screen, pScreen->myNum);
|
||||
if (EphyrWantNoHostGrab) {
|
||||
hostx_set_win_title(screen, "xephyr");
|
||||
} else {
|
||||
hostx_set_win_title(screen, "(ctrl+shift grabs mouse and keyboard)");
|
||||
if (!EphyrHostGrabSet) {
|
||||
ephyrSetGrabShortcut("ctrl+shift");
|
||||
}
|
||||
ephyrUpdateWindowTitle(screen, FALSE);
|
||||
pScreen->CreateColormap = ephyrCreateColormap;
|
||||
|
||||
#ifdef XV
|
||||
|
@ -1019,71 +1131,78 @@ ephyrProcessKeyPress(xcb_generic_event_t *xev)
|
|||
static void
|
||||
ephyrProcessKeyRelease(xcb_generic_event_t *xev)
|
||||
{
|
||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||
xcb_key_release_event_t *key = (xcb_key_release_event_t *)xev;
|
||||
static xcb_key_symbols_t *keysyms;
|
||||
static int grabbed_screen = -1;
|
||||
int mod1_down = ephyrUpdateGrabModifierState(key->state);
|
||||
if (EphyrKeybindToggleHostGrabModMask != 0 ||
|
||||
EphyrKeybindToggleHostGrabKey != 0) {
|
||||
|
||||
if (!keysyms)
|
||||
keysyms = xcb_key_symbols_alloc(conn);
|
||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||
static xcb_key_symbols_t *keysyms;
|
||||
static int grabbed_screen = -1;
|
||||
|
||||
if (!EphyrWantNoHostGrab &&
|
||||
(((xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Shift_L
|
||||
|| xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Shift_R)
|
||||
&& (key->state & XCB_MOD_MASK_CONTROL)) ||
|
||||
((xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Control_L
|
||||
|| xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Control_R)
|
||||
&& (key->state & XCB_MOD_MASK_SHIFT)))) {
|
||||
KdScreenInfo *screen = screen_from_window(key->event);
|
||||
assert(screen);
|
||||
EphyrScrPriv *scrpriv = screen->driver;
|
||||
if (!keysyms)
|
||||
keysyms = xcb_key_symbols_alloc(conn);
|
||||
|
||||
if (grabbed_screen != -1) {
|
||||
xcb_ungrab_keyboard(conn, XCB_TIME_CURRENT_TIME);
|
||||
xcb_ungrab_pointer(conn, XCB_TIME_CURRENT_TIME);
|
||||
grabbed_screen = -1;
|
||||
hostx_set_win_title(screen,
|
||||
"(ctrl+shift grabs mouse and keyboard)");
|
||||
}
|
||||
else if (!mod1_down) {
|
||||
/* Attempt grab */
|
||||
xcb_grab_keyboard_cookie_t kbgrabc =
|
||||
xcb_grab_keyboard(conn,
|
||||
TRUE,
|
||||
scrpriv->win,
|
||||
XCB_TIME_CURRENT_TIME,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
XCB_GRAB_MODE_ASYNC);
|
||||
xcb_grab_keyboard_reply_t *kbgrabr;
|
||||
xcb_grab_pointer_cookie_t pgrabc =
|
||||
xcb_grab_pointer(conn,
|
||||
TRUE,
|
||||
scrpriv->win,
|
||||
0,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
scrpriv->win,
|
||||
XCB_NONE,
|
||||
XCB_TIME_CURRENT_TIME);
|
||||
xcb_grab_pointer_reply_t *pgrabr;
|
||||
kbgrabr = xcb_grab_keyboard_reply(conn, kbgrabc, NULL);
|
||||
if (!kbgrabr || kbgrabr->status != XCB_GRAB_STATUS_SUCCESS) {
|
||||
xcb_discard_reply(conn, pgrabc.sequence);
|
||||
int const keysym =
|
||||
xcb_key_symbols_get_keysym(keysyms, key->detail, 0);
|
||||
|
||||
if (
|
||||
(
|
||||
(key->state & EphyrKeybindToggleHostGrabModMask) ==
|
||||
EphyrKeybindToggleHostGrabModMask
|
||||
) && (
|
||||
/* NOTE: mod-key keysyms are > 0xfe00. We do this so when the
|
||||
shortcut is only mod-keys (e.g. ctrl+shift) and the user
|
||||
releases any other key, input doesn't get grabbed */
|
||||
(EphyrKeybindToggleHostGrabKey == 0 && keysym > 0xfe00) ||
|
||||
keysym == EphyrKeybindToggleHostGrabKey
|
||||
)
|
||||
) {
|
||||
KdScreenInfo *screen = screen_from_window(key->event);
|
||||
assert(screen);
|
||||
EphyrScrPriv *scrpriv = screen->driver;
|
||||
|
||||
if (grabbed_screen != -1) {
|
||||
xcb_ungrab_keyboard(conn, XCB_TIME_CURRENT_TIME);
|
||||
xcb_ungrab_pointer(conn, XCB_TIME_CURRENT_TIME);
|
||||
} else {
|
||||
pgrabr = xcb_grab_pointer_reply(conn, pgrabc, NULL);
|
||||
if (!pgrabr || pgrabr->status != XCB_GRAB_STATUS_SUCCESS)
|
||||
{
|
||||
xcb_ungrab_keyboard(conn,
|
||||
XCB_TIME_CURRENT_TIME);
|
||||
} else {
|
||||
grabbed_screen = scrpriv->mynum;
|
||||
hostx_set_win_title
|
||||
(screen,
|
||||
"(ctrl+shift releases mouse and keyboard)");
|
||||
grabbed_screen = -1;
|
||||
}
|
||||
else {
|
||||
/* Attempt grab */
|
||||
xcb_grab_keyboard_cookie_t kbgrabc =
|
||||
xcb_grab_keyboard(conn,
|
||||
TRUE,
|
||||
scrpriv->win,
|
||||
XCB_TIME_CURRENT_TIME,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
XCB_GRAB_MODE_ASYNC);
|
||||
xcb_grab_keyboard_reply_t *kbgrabr;
|
||||
xcb_grab_pointer_cookie_t pgrabc =
|
||||
xcb_grab_pointer(conn,
|
||||
TRUE,
|
||||
scrpriv->win,
|
||||
0,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
XCB_GRAB_MODE_ASYNC,
|
||||
scrpriv->win,
|
||||
XCB_NONE,
|
||||
XCB_TIME_CURRENT_TIME);
|
||||
xcb_grab_pointer_reply_t *pgrabr;
|
||||
kbgrabr = xcb_grab_keyboard_reply(conn, kbgrabc, NULL);
|
||||
if (!kbgrabr || kbgrabr->status != XCB_GRAB_STATUS_SUCCESS) {
|
||||
xcb_discard_reply(conn, pgrabc.sequence);
|
||||
xcb_ungrab_pointer(conn, XCB_TIME_CURRENT_TIME);
|
||||
} else {
|
||||
pgrabr = xcb_grab_pointer_reply(conn, pgrabc, NULL);
|
||||
if (!pgrabr || pgrabr->status != XCB_GRAB_STATUS_SUCCESS)
|
||||
{
|
||||
xcb_ungrab_keyboard(conn,
|
||||
XCB_TIME_CURRENT_TIME);
|
||||
} else {
|
||||
grabbed_screen = scrpriv->mynum;
|
||||
}
|
||||
}
|
||||
}
|
||||
ephyrUpdateWindowTitle(screen, grabbed_screen != -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1316,12 +1435,11 @@ MouseFini(KdPointerInfo * pi)
|
|||
}
|
||||
|
||||
KdPointerDriver EphyrMouseDriver = {
|
||||
"ephyr",
|
||||
MouseInit,
|
||||
MouseEnable,
|
||||
MouseDisable,
|
||||
MouseFini,
|
||||
NULL,
|
||||
.name = "ephyr",
|
||||
.Init = MouseInit,
|
||||
.Enable = MouseEnable,
|
||||
.Disable = MouseDisable,
|
||||
.Fini = MouseFini,
|
||||
};
|
||||
|
||||
/* Keyboard */
|
||||
|
@ -1390,12 +1508,11 @@ EphyrKeyboardBell(KdKeyboardInfo * ki, int volume, int frequency, int duration)
|
|||
}
|
||||
|
||||
KdKeyboardDriver EphyrKeyboardDriver = {
|
||||
"ephyr",
|
||||
EphyrKeyboardInit,
|
||||
EphyrKeyboardEnable,
|
||||
EphyrKeyboardLeds,
|
||||
EphyrKeyboardBell,
|
||||
EphyrKeyboardDisable,
|
||||
EphyrKeyboardFini,
|
||||
NULL,
|
||||
.name = "ephyr",
|
||||
.Init = EphyrKeyboardInit,
|
||||
.Enable = EphyrKeyboardEnable,
|
||||
.Leds = EphyrKeyboardLeds,
|
||||
.Bell = EphyrKeyboardBell,
|
||||
.Disable = EphyrKeyboardDisable,
|
||||
.Fini = EphyrKeyboardFini,
|
||||
};
|
||||
|
|
|
@ -167,6 +167,14 @@ Bool
|
|||
Bool
|
||||
ephyrCreateColormap(ColormapPtr pmap);
|
||||
|
||||
/**
|
||||
* @param desc examples: "ctrl+shift", "ctrl+mod1+a", "a",
|
||||
* NULL (disables host grab)
|
||||
* @return TRUE if success, otherwise FALSE
|
||||
*/
|
||||
Bool
|
||||
ephyrSetGrabShortcut(char const* const desc);
|
||||
|
||||
#ifdef RANDR
|
||||
Bool
|
||||
ephyrRandRGetInfo(ScreenPtr pScreen, Rotation * rotations);
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_KDRIVE_EPHYR_GLAMOR_H
|
||||
#define XSERVER_KDRIVE_EPHYR_GLAMOR_H
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
#include "dix-config.h"
|
||||
|
||||
|
@ -63,3 +66,5 @@ ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor,
|
|||
}
|
||||
|
||||
#endif /* !GLAMOR */
|
||||
|
||||
#endif /* XSERVER_KDRIVE_EPHYR_GLAMOR_H */
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
extern Window EphyrPreExistingHostWin;
|
||||
extern Bool EphyrWantGrayScale;
|
||||
extern Bool EphyrWantResize;
|
||||
extern Bool EphyrWantNoHostGrab;
|
||||
extern Bool kdHasPointer;
|
||||
extern Bool kdHasKbd;
|
||||
extern Bool ephyr_glamor, ephyr_glamor_gles2, ephyr_glamor_skip_present;
|
||||
|
@ -144,6 +143,8 @@ ddxUseMsg(void)
|
|||
ErrorF
|
||||
("-title [title] set the window title in the WM_NAME property\n");
|
||||
ErrorF("-no-host-grab Disable grabbing the keyboard and mouse.\n");
|
||||
ErrorF
|
||||
("-host-grab [keys] set shortcut to grab the keyboard and mouse (default: ctrl+shift)\n");
|
||||
ErrorF("\n");
|
||||
}
|
||||
|
||||
|
@ -343,9 +344,21 @@ ddxProcessArgument(int argc, char **argv, int i)
|
|||
}
|
||||
/* end Xnest compat */
|
||||
else if (!strcmp(argv[i], "-no-host-grab")) {
|
||||
EphyrWantNoHostGrab = 1;
|
||||
ephyrSetGrabShortcut(NULL);
|
||||
return 1;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-host-grab")) {
|
||||
if (i + 1 >= argc) {
|
||||
ErrorF(
|
||||
"ephyr: -host-grab requires an argument e.g. ctrl+shift+x\n");
|
||||
exit(1);
|
||||
}
|
||||
else if (!ephyrSetGrabShortcut(argv[i + 1])) {
|
||||
/* specific error message is printed in ephyrSetGrabShortcut */
|
||||
exit(1);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-sharevts") ||
|
||||
!strcmp(argv[i], "-novtswitch")) {
|
||||
return 1;
|
||||
|
@ -357,6 +370,23 @@ ddxProcessArgument(int argc, char **argv, int i)
|
|||
return KdProcessArgument(argc, argv, i);
|
||||
}
|
||||
|
||||
static int
|
||||
EphyrInit(void)
|
||||
{
|
||||
/*
|
||||
* make sure at least one screen
|
||||
* has been added to the system.
|
||||
*/
|
||||
if (!KdCardInfoLast()) {
|
||||
processScreenArg("640x480", NULL);
|
||||
}
|
||||
return hostx_init();
|
||||
}
|
||||
|
||||
KdOsFuncs EphyrOsFuncs = {
|
||||
.Init = EphyrInit,
|
||||
};
|
||||
|
||||
void
|
||||
OsVendorInit(void)
|
||||
{
|
||||
|
@ -368,32 +398,23 @@ OsVendorInit(void)
|
|||
if (hostx_want_host_cursor())
|
||||
ephyrFuncs.initCursor = &ephyrCursorInit;
|
||||
|
||||
if (serverGeneration == 1) {
|
||||
if (!KdCardInfoLast()) {
|
||||
processScreenArg("640x480", NULL);
|
||||
}
|
||||
hostx_init();
|
||||
}
|
||||
KdOsInit(&EphyrOsFuncs);
|
||||
}
|
||||
|
||||
KdCardFuncs ephyrFuncs = {
|
||||
ephyrCardInit, /* cardinit */
|
||||
ephyrScreenInitialize, /* scrinit */
|
||||
ephyrInitScreen, /* initScreen */
|
||||
ephyrFinishInitScreen, /* finishInitScreen */
|
||||
ephyrCreateResources, /* createRes */
|
||||
ephyrScreenFini, /* scrfini */
|
||||
ephyrCardFini, /* cardfini */
|
||||
.cardinit = ephyrCardInit,
|
||||
.scrinit = ephyrScreenInitialize,
|
||||
.initScreen = ephyrInitScreen,
|
||||
.finishInitScreen = ephyrFinishInitScreen,
|
||||
.createRes = ephyrCreateResources,
|
||||
|
||||
0, /* initCursor */
|
||||
.scrfini = ephyrScreenFini,
|
||||
.cardfini = ephyrCardFini,
|
||||
|
||||
0, /* initAccel */
|
||||
0, /* enableAccel */
|
||||
0, /* disableAccel */
|
||||
0, /* finiAccel */
|
||||
/* no cursor or accel funcs here */
|
||||
|
||||
ephyrGetColors, /* getColors */
|
||||
ephyrPutColors, /* putColors */
|
||||
.getColors = ephyrGetColors,
|
||||
.putColors = ephyrPutColors,
|
||||
|
||||
ephyrCloseScreen, /* closeScreen */
|
||||
.closeScreen = ephyrCloseScreen,
|
||||
};
|
||||
|
|
|
@ -67,6 +67,31 @@ window. By default, the Xephyr window has a fixed size.
|
|||
.TP 8
|
||||
.B \-no\-host\-grab
|
||||
Disable grabbing the keyboard and mouse.
|
||||
.TP 8
|
||||
.BI \-host\-grab " keys"
|
||||
Set the keyboard shortcut for Xephyr to grab keyboard and mouse
|
||||
input. Possible values for mod-keys are: ctrl, shift, lock,
|
||||
mod1, mod2, mod3, mod4, mod5. Up to one ascii character (lower-case) can
|
||||
be used by itself or in conjunction with mod-keys. Keys are concatenated
|
||||
with
|
||||
.I +\fP. If omitted, defaults to
|
||||
.I ctrl+shift\fP.
|
||||
|
||||
Examples:
|
||||
.RS
|
||||
.IP \[bu] 2
|
||||
.I ctrl+mod1
|
||||
.IP \[bu] 2
|
||||
.I ctrl+shift++
|
||||
(note that the
|
||||
.I +
|
||||
at the end is interpreted as the ascii character '+')
|
||||
.IP \[bu] 2
|
||||
.I a
|
||||
(mod-keys are optional, this will grab/release whenever the
|
||||
.I a
|
||||
key is pressed)
|
||||
.RE
|
||||
.SH "SIGNALS"
|
||||
Send a SIGUSR1 to the server (e.g. pkill \-USR1 Xephyr) to
|
||||
toggle the debugging mode.
|
||||
|
|
|
@ -91,6 +91,14 @@ const char *kdGlobalXkbLayout = NULL;
|
|||
const char *kdGlobalXkbVariant = NULL;
|
||||
const char *kdGlobalXkbOptions = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* Carry arguments from InitOutput through driver initialization
|
||||
* to KdScreenInit
|
||||
*/
|
||||
|
||||
KdOsFuncs *kdOsFuncs = NULL;
|
||||
|
||||
void
|
||||
KdDisableScreen(ScreenPtr pScreen)
|
||||
{
|
||||
|
@ -517,6 +525,19 @@ KdProcessArgument(int argc, char **argv, int i)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
KdOsInit(KdOsFuncs * pOsFuncs)
|
||||
{
|
||||
kdOsFuncs = pOsFuncs;
|
||||
if (pOsFuncs) {
|
||||
if (serverGeneration == 1) {
|
||||
KdDoSwitchCmd("start");
|
||||
if (pOsFuncs->Init)
|
||||
(*pOsFuncs->Init) ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Bool
|
||||
KdAllocatePrivates(ScreenPtr pScreen)
|
||||
{
|
||||
|
|
|
@ -278,6 +278,16 @@ int KdAddConfigKeyboard(char *pointer);
|
|||
int KdAddKeyboard(KdKeyboardInfo * ki);
|
||||
void KdRemoveKeyboard(KdKeyboardInfo * ki);
|
||||
|
||||
typedef struct _KdOsFuncs {
|
||||
int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */
|
||||
void (*Enable) (void);
|
||||
Bool (*SpecialKey) (KeySym);
|
||||
void (*Disable) (void);
|
||||
void (*Fini) (void);
|
||||
void (*pollEvents) (void);
|
||||
void (*Bell) (int, int, int);
|
||||
} KdOsFuncs;
|
||||
|
||||
typedef struct _KdPointerMatrix {
|
||||
int matrix[2][3];
|
||||
} KdPointerMatrix;
|
||||
|
@ -289,6 +299,8 @@ extern DevPrivateKeyRec kdScreenPrivateKeyRec;
|
|||
extern Bool kdEmulateMiddleButton;
|
||||
extern Bool kdDisableZaphod;
|
||||
|
||||
extern KdOsFuncs *kdOsFuncs;
|
||||
|
||||
#define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \
|
||||
dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey))
|
||||
#define KdSetScreenPriv(pScreen,v) \
|
||||
|
@ -345,6 +357,9 @@ void
|
|||
int
|
||||
KdProcessArgument(int argc, char **argv, int i);
|
||||
|
||||
void
|
||||
KdOsInit(KdOsFuncs * pOsFuncs);
|
||||
|
||||
void
|
||||
KdOsAddInputDrivers(void);
|
||||
|
||||
|
|
|
@ -259,13 +259,6 @@ ddxGiveUp(enum ExitCode error)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
void
|
||||
DarwinHandleGUI(int argc, char *argv[])
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
OsVendorInit(void)
|
||||
{
|
||||
|
|
|
@ -75,7 +75,11 @@ extern int pciSlotClaimed;
|
|||
Bool xf86ComparePciBusString(const char *busID, int bus, int device, int func);
|
||||
Bool xf86DriverHasEntities(DriverPtr drvp);
|
||||
void xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn, int entityIndex);
|
||||
|
||||
_X_EXPORT /* only for internal int10 module - not supposed to be used by OOT drivers */
|
||||
Bool xf86IsEntityPrimary(int entityIndex);
|
||||
|
||||
_X_EXPORT /* only for internal int10 module - not supposed to be used by OOT drivers */
|
||||
ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
|
||||
|
||||
Bool xf86BusConfig(void);
|
||||
|
|
|
@ -342,8 +342,31 @@ xf86UpdateHasVTProperty(Bool hasVT)
|
|||
|
||||
static void xf86DisableInputHandler(void *handler);
|
||||
static void xf86EnableInputHandler(void *handler);
|
||||
static void xf86DisableGeneralHandler(void *handler);
|
||||
static void xf86EnableGeneralHandler(void *handler);
|
||||
|
||||
static void _xf86EnableGeneralHandler(void *handler);
|
||||
static void _xf86DisableGeneralHandler(void *handler);
|
||||
|
||||
_X_EXPORT /* needs to be exported for Nvidia legacy (470.256.02) */
|
||||
void xf86EnableGeneralHandler(void *handler);
|
||||
|
||||
_X_EXPORT /* needs to be exported for Nvidia legacy (470.256.02) */
|
||||
void xf86DisableGeneralHandler(void *handler);
|
||||
|
||||
void xf86EnableGeneralHandler(void *handler) {
|
||||
LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86EnableGeneralHandler() !\n");
|
||||
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "https://forums.developer.nvidia.com/c/gpu-graphics/linux/148\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
_xf86EnableGeneralHandler(handler);
|
||||
}
|
||||
|
||||
void xf86DisableGeneralHandler(void *handler) {
|
||||
LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86DisableGeneralHandler() !\n");
|
||||
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "https://forums.developer.nvidia.com/c/gpu-graphics/linux/148\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
_xf86DisableGeneralHandler(handler);
|
||||
}
|
||||
|
||||
static void
|
||||
xf86VTLeave(void)
|
||||
|
@ -372,7 +395,7 @@ xf86VTLeave(void)
|
|||
if (ih->is_input)
|
||||
xf86DisableInputHandler(ih);
|
||||
else
|
||||
xf86DisableGeneralHandler(ih);
|
||||
_xf86DisableGeneralHandler(ih);
|
||||
}
|
||||
for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next)
|
||||
xf86DisableInputDeviceForVTSwitch(pInfo);
|
||||
|
@ -432,7 +455,7 @@ switch_failed:
|
|||
if (ih->is_input)
|
||||
xf86EnableInputHandler(ih);
|
||||
else
|
||||
xf86EnableGeneralHandler(ih);
|
||||
_xf86EnableGeneralHandler(ih);
|
||||
}
|
||||
input_unlock();
|
||||
}
|
||||
|
@ -480,7 +503,7 @@ xf86VTEnter(void)
|
|||
if (ih->is_input)
|
||||
xf86EnableInputHandler(ih);
|
||||
else
|
||||
xf86EnableGeneralHandler(ih);
|
||||
_xf86EnableGeneralHandler(ih);
|
||||
}
|
||||
#ifdef XSERVER_PLATFORM_BUS
|
||||
/* check for any new output devices */
|
||||
|
@ -638,7 +661,7 @@ static void xf86DisableInputHandler(void *handler)
|
|||
RemoveNotifyFd(ih->fd);
|
||||
}
|
||||
|
||||
static void xf86DisableGeneralHandler(void *handler)
|
||||
static void _xf86DisableGeneralHandler(void *handler)
|
||||
{
|
||||
IHPtr ih;
|
||||
|
||||
|
@ -664,7 +687,7 @@ static void xf86EnableInputHandler(void *handler)
|
|||
SetNotifyFd(ih->fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih);
|
||||
}
|
||||
|
||||
static void xf86EnableGeneralHandler(void *handler)
|
||||
static void _xf86EnableGeneralHandler(void *handler)
|
||||
{
|
||||
IHPtr ih;
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XFREE86_XF86VGAARBITERPRIV_H
|
||||
#define XSERVER_XFREE86_XF86VGAARBITERPRIV_H
|
||||
|
||||
#ifdef HAVE_XORG_CONFIG_H
|
||||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
@ -273,3 +276,5 @@ static void VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
|||
static void VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst,
|
||||
xRenderColor * color, int nRect,
|
||||
xRectangle *rects);
|
||||
|
||||
#endif /* XSERVER_XFREE86_XF86VGAARBITERPRIV_H */
|
||||
|
|
|
@ -33,7 +33,10 @@ extern char *xf86PointerName;
|
|||
extern char *xf86KeyboardName;
|
||||
|
||||
extern rgb xf86Weight;
|
||||
|
||||
_X_EXPORT /* only for in-tree vgahw module, not supposed to be used by OOT modules */
|
||||
extern Bool xf86FlipPixels;
|
||||
|
||||
extern Gamma xf86Gamma;
|
||||
|
||||
extern const char *xf86ModulePath;
|
||||
|
@ -79,7 +82,9 @@ Bool xf86LoadModules(const char **list, void **optlist);
|
|||
Bool xf86HasTTYs(void);
|
||||
|
||||
/* xf86Mode.c */
|
||||
_X_EXPORT /* only for int10 module, not supposed to be used by OOT modules */
|
||||
const char * xf86ModeStatusToString(ModeStatus status);
|
||||
|
||||
ModeStatus xf86CheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, int flags);
|
||||
|
||||
/* xf86DefaultModes (auto-generated) */
|
||||
|
|
|
@ -1 +1,5 @@
|
|||
special compat code for legacy drivers, namely Nvidia proprietary
|
||||
|
||||
NVidia is lacking behind for at least a year and don't actually clean up
|
||||
their spaghetti code. That's why we need to keep several special compat
|
||||
functions to emulate prehistoric behaviour.
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include "dix/dix_priv.h"
|
||||
|
||||
#include "xf86_compat.h"
|
||||
|
||||
/*
|
||||
* this is specifically for NVidia proprietary driver: they're again lagging
|
||||
* behind a year, doing at least some minimal cleanup of their code base.
|
||||
|
@ -13,12 +15,7 @@ _X_EXPORT void MarkClientException(ClientPtr pClient);
|
|||
|
||||
void MarkClientException(ClientPtr pClient)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "Bogus driver calling DIX-internal function MarkClientException() !\n");
|
||||
LogMessageVerb(X_WARNING, 0, "External drivers really should never ever call this function.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Nor should they ever DIX-internal fields like ClientRec->noClientException\n");
|
||||
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "And just don't buy Nvidia hardware, ever.\n");
|
||||
xf86NVidiaBugInternalFunc("MarkClientException()");
|
||||
|
||||
dixMarkClientException(pClient);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include "include/os.h"
|
||||
|
||||
#include "xf86_compat.h"
|
||||
|
||||
#undef xf86Msg
|
||||
#undef xf86MsgVerb
|
||||
|
||||
|
@ -17,9 +19,7 @@ _X_EXPORT void xf86Msg(MessageType type, const char *format, ...)
|
|||
|
||||
void xf86Msg(MessageType type, const char *format, ...)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86Msg() !\n");
|
||||
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
xf86NVidiaBugInternalFunc("xf86Msg()");
|
||||
|
||||
va_list ap;
|
||||
|
||||
|
@ -39,9 +39,12 @@ _X_EXPORT void xf86MsgVerb(MessageType type, int verb, const char *format, ...)
|
|||
void
|
||||
xf86MsgVerb(MessageType type, int verb, const char *format, ...)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86MsgVerb() !\n");
|
||||
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
static char reportxf86MsgVerb = 1;
|
||||
|
||||
if (reportxf86MsgVerb) {
|
||||
xf86NVidiaBugInternalFunc("xf86MsgVerb()");
|
||||
reportxf86MsgVerb = 0;
|
||||
}
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
srcs_xorg_compat = [
|
||||
'clientexception.c',
|
||||
'log.c',
|
||||
'nvidiabug.c',
|
||||
'ones.c',
|
||||
'xf86Helper.c',
|
||||
]
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/* SPDX-License-Identifier: MIT OR X11
|
||||
*
|
||||
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
*/
|
||||
#include <dix-config.h>
|
||||
|
||||
#include "include/os.h"
|
||||
|
||||
#include "xf86_compat.h"
|
||||
|
||||
void xf86NVidiaBug(void)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] file a bug report to driver vendor or use a free Xlibre driver.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] Proprietary drivers are inherently unstable, they just can't be done right.\n");
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] For NVidia report here: https://forums.developer.nvidia.com/c/gpu-graphics/linux/148\n");
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] And better don't buy NVidia HW until they've fixed their mess.\n");
|
||||
}
|
||||
|
||||
void xf86NVidiaBugInternalFunc(const char* name)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] calling internal function: %s\n", name);
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] this function is not supposed to be by drivers ever\n");
|
||||
xf86NVidiaBug();
|
||||
}
|
||||
|
||||
void xf86NVidiaBugObsoleteFunc(const char* name)
|
||||
{
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] calling obsolete function: %s\n", name);
|
||||
LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] this function is not supposed to be by drivers ever\n");
|
||||
xf86NVidiaBug();
|
||||
}
|
|
@ -27,7 +27,6 @@ Ones(unsigned long mask)
|
|||
|
||||
y = (mask >> 1) & 033333333333;
|
||||
y = mask - y - ((y >> 1) & 033333333333);
|
||||
/* x & 077 == x % 077 */
|
||||
return (((y + (y >> 3)) & 030707070707) & 077);
|
||||
return (((y + (y >> 3)) & 030707070707) % 077);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* SPDX-License-Identifier: MIT OR X11
|
||||
*
|
||||
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
*/
|
||||
#ifndef __XFREE86_COMPAT_XF86_COMPAT_H
|
||||
#define __XFREE86_COMPAT_XF86_COMPAT_H
|
||||
|
||||
void xf86NVidiaBug(void);
|
||||
void xf86NVidiaBugInternalFunc(const char* name);
|
||||
void xf86NVidiaBugObsoleteFunc(const char* name);
|
||||
|
||||
#endif /* __XFREE86_COMPAT_XF86_COMPAT_H */
|
|
@ -23,4 +23,9 @@
|
|||
* Author: Daniel Stone <daniel@fooishbar.org>
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XFREE86_DRI2INT_H
|
||||
#define XSERVER_XFREE86_DRI2INT_H
|
||||
|
||||
extern Bool DRI2ModuleSetup(void);
|
||||
|
||||
#endif /* XSERVER_XFREE86_DRI2INT_H */
|
||||
|
|
|
@ -1306,7 +1306,7 @@ PreInit(ScrnInfoPtr pScrn, int flags)
|
|||
ms->atomic_modeset_capable = (ret == 0);
|
||||
|
||||
if (xf86ReturnOptValBool(ms->drmmode.Options, OPTION_ATOMIC, FALSE)) {
|
||||
ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1);
|
||||
ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 2);
|
||||
ms->atomic_modeset = (ret == 0);
|
||||
if (!ms->atomic_modeset)
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Atomic modesetting not supported\n");
|
||||
|
@ -1631,7 +1631,7 @@ msStopFlippingPixmapTracking(DrawablePtr src,
|
|||
}
|
||||
|
||||
static Bool
|
||||
modsetCreateScreenResources(ScreenPtr pScreen)
|
||||
modesetCreateScreenResources(ScreenPtr pScreen)
|
||||
{
|
||||
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
|
||||
modesettingPtr ms = modesettingPTR(pScrn);
|
||||
|
@ -1941,7 +1941,7 @@ ScreenInit(ScreenPtr pScreen, int argc, char **argv)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
pScreen->CreateScreenResources = modsetCreateScreenResources;
|
||||
pScreen->CreateScreenResources = modesetCreateScreenResources;
|
||||
|
||||
xf86SetBlackWhitePixels(pScreen);
|
||||
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
* Aaron Plattner <aplattner@nvidia.com>
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XFREE86_DRIVER_H
|
||||
#define XSERVER_XFREE86_DRIVER_H
|
||||
|
||||
#include <errno.h>
|
||||
#include <drm.h>
|
||||
#include <xf86drm.h>
|
||||
|
@ -261,3 +264,5 @@ void ms_drain_drm_events(ScreenPtr screen);
|
|||
Bool ms_window_has_variable_refresh(modesettingPtr ms, WindowPtr win);
|
||||
void ms_present_set_screen_vrr(ScrnInfoPtr scrn, Bool vrr_enabled);
|
||||
Bool ms_tearfree_is_active_on_crtc(xf86CrtcPtr crtc);
|
||||
|
||||
#endif /* XSERVER_XFREE86_DRIVER_H */
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
*/
|
||||
|
||||
#ifndef _VBE_MODES_H
|
||||
#define _VBE_MODES_H
|
||||
|
||||
/*
|
||||
* This is intended to be stored in the DisplayModeRec's private area.
|
||||
|
|
|
@ -417,7 +417,6 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data,
|
|||
{
|
||||
int vercode[4];
|
||||
long ver = data->xf86version;
|
||||
MessageType errtype;
|
||||
|
||||
LogMessage(X_INFO, "Module %s: vendor=\"%s\"\n",
|
||||
data->modname ? data->modname : "UNKNOWN!",
|
||||
|
@ -458,6 +457,7 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data,
|
|||
vermaj = GET_ABI_MAJOR(ver);
|
||||
vermin = GET_ABI_MINOR(ver);
|
||||
if (abimaj != vermaj) {
|
||||
MessageType errtype;
|
||||
if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
|
||||
errtype = X_WARNING;
|
||||
else
|
||||
|
@ -469,6 +469,7 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data,
|
|||
return FALSE;
|
||||
}
|
||||
else if (abimin > vermin) {
|
||||
MessageType errtype;
|
||||
if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
|
||||
errtype = X_WARNING;
|
||||
else
|
||||
|
|
|
@ -656,11 +656,7 @@ Orest Zborowski \fIorestz@eskimo.com\fP
|
|||
.fi
|
||||
.RE
|
||||
.PP
|
||||
Xorg source is available from the FTP server
|
||||
\fI<ftp://ftp.x.org/>\fP, and from the X.Org
|
||||
server \fI<https://gitlab.freedesktop.org/xorg/>\fP. Documentation and other
|
||||
information can be found from the X.Org web site
|
||||
\fI<https://www.x.org/>\fP.
|
||||
Xlibre source is available via git \fI<https://github.com/X11Libre/xserver.git/>\fP.
|
||||
|
||||
.SH LEGAL
|
||||
.B Xorg
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
|
||||
/* exported functions are/were used by the X Server */
|
||||
|
||||
#ifndef XSERVER_XFREE86_CONFIGPROCS_H
|
||||
#define XSERVER_XFREE86_CONFIGPROCS_H
|
||||
|
||||
#include <X11/Xfuncproto.h>
|
||||
|
||||
/* Device.c */
|
||||
|
@ -146,3 +149,5 @@ xf86freeExtensions(XF86ConfExtensionsPtr ptr);
|
|||
void
|
||||
ErrorF(const char *f, ...);
|
||||
#endif
|
||||
|
||||
#endif /* XSERVER_XFREE86_CONFIGPROCS_H */
|
||||
|
|
|
@ -154,13 +154,6 @@ ddxGiveUp(enum ExitCode error)
|
|||
xnestCloseDisplay();
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
void
|
||||
DarwinHandleGUI(int argc, char *argv[])
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
OsVendorInit(void)
|
||||
{
|
||||
|
|
|
@ -164,7 +164,7 @@ Bool
|
|||
xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
|
||||
{
|
||||
unsigned long valuemask;
|
||||
VisualID defaultVisual;
|
||||
VisualID defaultVisual = 0;
|
||||
int rootDepth;
|
||||
miPointerScreenPtr PointPriv;
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
// Copyright (c) 2021 Apple Inc. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H
|
||||
#define XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
extern NSString * const XQuartzPrefKeyAppsMenu;
|
||||
|
@ -47,3 +50,5 @@ extern NSString * const XQuartzPrefKeySyncPrimaryOnSelect;
|
|||
+ (NSUserDefaults *)xquartzDefaults;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H */
|
||||
|
|
|
@ -690,7 +690,6 @@ SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to)
|
|||
static int
|
||||
SProcAppleWMQueryVersion(register ClientPtr client)
|
||||
{
|
||||
REQUEST(xAppleWMQueryVersionReq);
|
||||
return ProcAppleWMQueryVersion(client);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "os/ddx_priv.h"
|
||||
#include "os/log_priv.h"
|
||||
#include "os/osdep.h"
|
||||
#include "xkb/xkbsrv_priv.h"
|
||||
|
||||
#include "os.h"
|
||||
#include "servermd.h"
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
* needs and simply execs the startup script which then execs the main binary.
|
||||
*/
|
||||
|
||||
static char *executable_path() {
|
||||
static char *executable_path(void) {
|
||||
uint32_t bufsize = PATH_MAX;
|
||||
char *buf = calloc(1, bufsize);
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ x11_bin = executable('X11.bin',
|
|||
mach_startup[3], # mach_startupUser.c
|
||||
],
|
||||
link_with: x11_bin_libs,
|
||||
dependencies: [xproto_dep, x11_bin_deps, mach_startup_dep],
|
||||
dependencies: [xproto_dep, x11_dep, x11_bin_deps, mach_startup_dep],
|
||||
include_directories: [inc, '..', top_dir_inc],
|
||||
c_args: xquartz_defs,
|
||||
link_args: ['-Objc'],
|
||||
|
|
|
@ -76,7 +76,7 @@ libXquartz = static_library('Xquartz',
|
|||
c_args: libxquartz_defs,
|
||||
objc_args: libxquartz_defs,
|
||||
include_directories: [inc, '../../pseudoramiX', '../../miext/rootless', top_dir_inc],
|
||||
dependencies: [xproto_dep, pixman_dep],
|
||||
dependencies: [xproto_dep, xdmcp_dep, pixman_dep],
|
||||
link_with: [libxserver_pseudoramix, libxserver_miext_rootless],
|
||||
)
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
#include <dix-config.h>
|
||||
|
||||
#include "dix/dix_priv.h"
|
||||
|
||||
#include "quartzRandR.h"
|
||||
#include "inputstr.h"
|
||||
#include "quartz.h"
|
||||
|
|
|
@ -394,7 +394,6 @@ SNotifyEvent(xAppleDRINotifyEvent *from,
|
|||
static int
|
||||
SProcAppleDRIQueryVersion(register ClientPtr client)
|
||||
{
|
||||
REQUEST(xAppleDRIQueryVersionReq);
|
||||
return ProcAppleDRIQueryVersion(client);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
*/
|
||||
|
||||
#ifndef DRIWRAP_H
|
||||
#define DRIWRAP_H
|
||||
|
||||
#include "scrnintstr.h"
|
||||
|
||||
Bool
|
||||
|
|
|
@ -4,9 +4,14 @@
|
|||
* Authors: Alexander Gottwald
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XWIN_WINPRIV_H
|
||||
#define XSERVER_XWIN_WINPRIV_H
|
||||
|
||||
#include <X11/Xwindows.h>
|
||||
#include <windowstr.h>
|
||||
|
||||
HWND winGetWindowInfo(WindowPtr pWin);
|
||||
Bool winCheckScreenAiglxIsSupported(ScreenPtr pScreen);
|
||||
void winSetScreenAiglxIsActive(ScreenPtr pScreen);
|
||||
|
||||
#endif /* XSERVER_XWIN_WINPRIV_H */
|
||||
|
|
|
@ -19,8 +19,13 @@
|
|||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XWIN_WINAUTH_H
|
||||
#define XSERVER_XWIN_WINAUTH_H
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
#include <X11/Xmd.h> // for BOOL
|
||||
|
||||
BOOL winGenerateAuthorization(void);
|
||||
xcb_auth_info_t * winGetXcbAuthInfo(void);
|
||||
|
||||
#endif /* XSERVER_XWIN_WINAUTH_H */
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
* XKB settings.
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XWIN_WINLAYOUTS_H
|
||||
#define XSERVER_XWIN_WINLAYOUTS_H
|
||||
|
||||
typedef struct {
|
||||
unsigned int winlayout;
|
||||
int winkbtype;
|
||||
|
@ -98,3 +101,5 @@ WinKBLayoutRec winKBLayouts[] = {
|
|||
See http://technet.microsoft.com/en-us/library/cc766503%28WS.10%29.aspx
|
||||
for a listing of input locale (keyboard layout) codes
|
||||
*/
|
||||
|
||||
#endif /* XSERVER_XWIN_WINLAYOUTS_H */
|
||||
|
|
|
@ -27,6 +27,9 @@ from The Open Group.
|
|||
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XWIN_WINMONITORS_H
|
||||
#define XSERVER_XWIN_WINMONITORS_H
|
||||
|
||||
/* data returned for monitor information */
|
||||
struct GetMonitorInfoData {
|
||||
int requestedMonitor;
|
||||
|
@ -41,3 +44,5 @@ struct GetMonitorInfoData {
|
|||
};
|
||||
|
||||
Bool QueryMonitor(int i, struct GetMonitorInfoData *data);
|
||||
|
||||
#endif /* XSERVER_XWIN_WINMONITORS_H */
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
/* Do not include this file directly. It is included at the end of <dix-config.h> */
|
||||
|
||||
#ifndef XSERVER_CONFIG_APPLE_VERBATIM_H
|
||||
#define XSERVER_CONFIG_APPLE_VERBATIM_H
|
||||
|
||||
/* Correctly set _XSERVER64 for OSX fat binaries */
|
||||
#if defined(__LP64__) && !defined(_XSERVER64)
|
||||
#define _XSERVER64 1
|
||||
#elif !defined(__LP64__) && defined(_XSERVER64)
|
||||
#undef _XSERVER64
|
||||
#endif
|
||||
|
||||
#endif /* XSERVER_CONFIG_APPLE_VERBATIM_H */
|
||||
|
|
|
@ -204,6 +204,9 @@ conf_data.set('TCPCONN', '1')
|
|||
conf_data.set('UNIXCONN', host_machine.system() != 'windows' ? '1' : false)
|
||||
conf_data.set('IPv6', build_ipv6 ? '1' : false)
|
||||
|
||||
# some drivers (eg. xf86-video-intel) still relying on this symbol being set
|
||||
conf_data.set('COMPOSITE', '1')
|
||||
|
||||
conf_data.set('DAMAGE', '1')
|
||||
conf_data.set('DBE', '1')
|
||||
conf_data.set('DGA', build_dga ? '1' : false)
|
||||
|
|
|
@ -696,6 +696,10 @@ typedef struct _Screen {
|
|||
CallbackListPtr hookPostCreateResources;
|
||||
|
||||
SetWindowVRRModeProcPtr SetWindowVRRMode;
|
||||
|
||||
/* additional screen post-close notify hooks (replaces wrapping CloseScreen)
|
||||
should NOT be touched outside of DIX core */
|
||||
CallbackListPtr hookPostClose;
|
||||
} ScreenRec;
|
||||
|
||||
static inline RegionPtr
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
/* Default font path */
|
||||
#mesondefine COMPILEDDEFAULTFONTPATH
|
||||
|
||||
/* Support Composite Extension */
|
||||
#mesondefine COMPOSITE
|
||||
|
||||
/* Build DPMS extension */
|
||||
#mesondefine DPMSExtension
|
||||
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
* This file has all defines used in the xwin ddx
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef XSERVER_XWIN_CONFIG_H
|
||||
#define XSERVER_XWIN_CONFIG_H
|
||||
|
||||
#include <dix-config.h>
|
||||
|
||||
/* Winsock networking */
|
||||
|
@ -17,3 +21,5 @@
|
|||
|
||||
/* Whether we should re-locate the root to where the executable lives */
|
||||
#mesondefine RELOCATE_PROJECTROOT
|
||||
|
||||
#endif /* XSERVER_XWIN_CONFIG_H */
|
||||
|
|
|
@ -3,10 +3,10 @@ project('xserver', 'c',
|
|||
'buildtype=debugoptimized',
|
||||
'c_std=gnu99',
|
||||
],
|
||||
version: '21.1.99.1',
|
||||
version: '25.0.0.4',
|
||||
meson_version: '>= 0.58.0',
|
||||
)
|
||||
release_date = '2021-07-05'
|
||||
release_date = '2025-07-04'
|
||||
|
||||
add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc'])
|
||||
cc = meson.get_compiler('c')
|
||||
|
@ -777,7 +777,8 @@ endif
|
|||
|
||||
subdir('hw')
|
||||
|
||||
if host_machine.system() != 'windows'
|
||||
build_tests = get_option('tests') and host_machine.system() != 'windows'
|
||||
if build_tests
|
||||
subdir('test')
|
||||
endif
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ option('xquartz', type: 'combo', choices: ['true', 'false', 'auto'], value: 'aut
|
|||
description: 'Enable Xquartz X server')
|
||||
|
||||
|
||||
option('builder_addr', type: 'string', description: 'Builder address', value: 'xorg@lists.freedesktop.org')
|
||||
option('builder_addr', type: 'string', description: 'Builder address', value: 'xlibre@freelists.org')
|
||||
option('builder_string', type: 'string', description: 'Additional builder string')
|
||||
|
||||
option('log_dir', type: 'string')
|
||||
|
@ -110,6 +110,8 @@ option('sha1', type: 'combo', choices: ['libc', 'CommonCrypto', 'CryptoAPI', 'li
|
|||
description: 'SHA1 implementation')
|
||||
option('xf86-input-inputtest', type: 'boolean', value: true,
|
||||
description: 'Test input driver support on Xorg')
|
||||
option('tests', type: 'boolean', value: true,
|
||||
description: 'Build tests for the X server on platforms that support it')
|
||||
|
||||
option('dri1', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto', description: 'Build DRI1 extension (default: auto)')
|
||||
option('dri2', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto', description: 'Build DRI2 extension (default: auto)')
|
||||
|
|
|
@ -40,7 +40,7 @@ hdrs_mi = [
|
|||
'mizerarc.h',
|
||||
]
|
||||
|
||||
libxserver_mi = static_library('libxserver_mi',
|
||||
libxserver_mi = static_library('xserver_mi',
|
||||
srcs_mi,
|
||||
include_directories: inc,
|
||||
dependencies: [
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
/*
|
||||
|
||||
Copyright 1994, 1998 The Open Group
|
||||
|
@ -26,6 +25,7 @@ in this Software without prior written authorization from The Open Group.
|
|||
*/
|
||||
|
||||
#ifndef MILINE_H
|
||||
#define MILINE_H
|
||||
|
||||
#include "screenint.h"
|
||||
#include "privates.h"
|
||||
|
|
|
@ -141,7 +141,7 @@ miPointerInitialize(ScreenPtr pScreen,
|
|||
pScreenPriv->screenFuncs = screenFuncs;
|
||||
pScreenPriv->waitForUpdate = waitForUpdate;
|
||||
pScreenPriv->showTransparent = FALSE;
|
||||
dixScreenHookClose(pScreen, miPointerCloseScreen);
|
||||
dixScreenHookPostClose(pScreen, miPointerCloseScreen);
|
||||
dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, pScreenPriv);
|
||||
/*
|
||||
* set up screen cursor method table
|
||||
|
@ -169,7 +169,7 @@ static void miPointerCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void
|
|||
{
|
||||
SetupScreen(pScreen);
|
||||
|
||||
dixScreenUnhookClose(pScreen, miPointerCloseScreen);
|
||||
dixScreenUnhookPostClose(pScreen, miPointerCloseScreen);
|
||||
free((void *) pScreenPriv);
|
||||
dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, NULL);
|
||||
FreeEventList(mipointermove_events, GetMaximumEventsNum());
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue