Initial commit
commit
6e0636c8cf
|
@ -0,0 +1,31 @@
|
|||
# Running Jolla AppSupport/aliendalvik on regular linux distros
|
||||
|
||||
This is a small repo documenting the reverse enginieering of Jolla's Android AppSupport (aka Aliendalvik), including steps on how to run it on other linux distros than Sailfish OS.
|
||||
|
||||
## Note for everyone attempting this
|
||||
|
||||
Aliendalvik is a complex piece of software and requires lots of setup to run. This is a very rough set of steps, it *won't* work on the first try, be prepared to solve problems.
|
||||
|
||||
## Steps to run outside of Sailfish OS
|
||||
|
||||
1. Get a supported phone with Sailfish OS and Android AppSupport (see https://shop.jolla.com/) and grab the necessary binaries
|
||||
- Start the phone, go through setup of Sailfish OS and setup Android AppSupport
|
||||
- Get all the necessary files from the phone via SSH, see files.txt
|
||||
|
||||
2. Set up dependencies on the target device
|
||||
- Install dependencies from the Arch ARM repos: lxc packagekit-qt5 mlite qt5-sensors qt5-location python-pywayland
|
||||
- Build necessary libraries that aren't in the Arch ARM repos: libglibutil libgbinder
|
||||
- Build custom libraries from forks: [libQtContacts](https://github.com/jonas2515/qtpim/tree/alien-everwhere), [libqtcontacts_folks](https://github.com/jonas2515/qtfolks), [libqtposition_geoclue2](https://github.com/jonas2515/qtpositioning/tree/alien-everwhere), [libqtsensors_iio-sensor-proxy](https://github.com/jonas2515/qtsensors/tree/alien-everywhere)
|
||||
- Install shimming services on the target device, see shimming/
|
||||
- Build and install patched mobile-mutter and libwayland, see patches/
|
||||
- Get the vanilla (not GApps) android system.img and vendor.img from Waydroid
|
||||
|
||||
3. Copy all the aliendalvik config, binaries and libraries to the target device, see files.txt
|
||||
|
||||
4. Create necessary users, groups, and configure a few more things on the device, see setup-environment.txt
|
||||
|
||||
5. Edit the aliendalvik configuration on the device, see configure.txt
|
||||
|
||||
6. Do a manual test-run of aliendalvik to check if everything works, see running.txt
|
||||
|
||||
7. If you managed to run everything, there's some systemd services and scripts to automate startup of aliendalvik in the automation/ folder
|
|
@ -0,0 +1,66 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
active_wayland_user=
|
||||
|
||||
for session in $(loginctl list-sessions --no-legend | awk '{ print $1 }'); do
|
||||
if [ "$(loginctl show-session --value -p Type ${session})" != "wayland" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Class ${session})" != "user" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Remote ${session})" != "no" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p State ${session})" != "active" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
active_wayland_user="$(loginctl show-session --value -p Name ${session})"
|
||||
break
|
||||
done
|
||||
|
||||
if [ "${active_wayland_user}" == "" ]; then
|
||||
echo "No active wayland session found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
data_dir="/home/${active_wayland_user}/.local/share/appsupport/data/"
|
||||
|
||||
rm -f ${data_dir}/alien_boot_completed
|
||||
|
||||
(
|
||||
while [ ! -f ${data_dir}/alien_boot_completed ]; do
|
||||
sleep 1;
|
||||
done
|
||||
|
||||
if [ "$(cat ${data_dir}/alien_boot_completed)" = "1" ]; then
|
||||
echo "alien bootup finished, running post startup"
|
||||
|
||||
# use the commands from alien-post-startup.sh script here
|
||||
lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/sh -c ""
|
||||
|
||||
lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/sh -c "source /etc/mkshrc;
|
||||
# enable gesture navigation
|
||||
cmd overlay disable com.android.internal.systemui.navbar.gestural
|
||||
cmd overlay enable com.android.internal.systemui.navbar.gestural"
|
||||
|
||||
systemd-notify --ready
|
||||
fi
|
||||
) &
|
||||
|
||||
lxc-start --rcfile=/tmp/appsupport/aliendalvik/config --lxcpath=/tmp/appsupport -n aliendalvik -F
|
||||
|
||||
if [ "$(cat ${data_dir}/alien_boot_completed)" = "2" ]; then
|
||||
echo "alien crashed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "alien graceful shutdown"
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
active_wayland_user=
|
||||
active_wayland_uid=
|
||||
|
||||
while true; do
|
||||
for session in $(loginctl list-sessions --no-legend | awk '{ print $1 }'); do
|
||||
if [ "$(loginctl show-session --value -p Type ${session})" != "wayland" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Class ${session})" != "user" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Remote ${session})" != "no" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p State ${session})" != "active" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
active_wayland_user="$(loginctl show-session --value -p Name ${session})"
|
||||
active_wayland_uid="$(loginctl show-session --value -p User ${session})"
|
||||
break
|
||||
done
|
||||
|
||||
if [ "${active_wayland_user}" == "" ]; then
|
||||
echo "No active wayland session found, waiting for one"
|
||||
sleep 5
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ ! -S "/run/user/${active_wayland_uid}/wayland-0" ]; then
|
||||
echo "No wayland socket for user ${active_wayland_user} found, waiting a bit longer"
|
||||
sleep 2
|
||||
continue
|
||||
fi
|
||||
|
||||
break
|
||||
done
|
||||
|
||||
chown ${active_wayland_user}:appsupport-wayland /run/user/${active_wayland_uid}/wayland-0
|
||||
chmod 775 /run/user/${active_wayland_uid}/wayland-0
|
||||
|
||||
rm -f /tmp/appsupport/aliendalvik/*
|
||||
mkdir -p /tmp/appsupport/aliendalvik/
|
||||
cp -r /opt/alien/config/* /tmp/appsupport/aliendalvik/
|
||||
|
||||
sed -i "s/__UID__/${active_wayland_uid}/g" /tmp/appsupport/aliendalvik/10-bsp_config
|
||||
sed -i "s/__UID__/${active_wayland_uid}/g" /tmp/appsupport/aliendalvik/20-privilege_config
|
||||
|
||||
mkdir -p /home/${active_wayland_user}/.local/share/appsupport/data/
|
||||
chown ${active_wayland_user}:${active_wayland_user} /home/${active_wayland_user}/.local/share/appsupport/
|
||||
|
||||
data_dir="/home/${active_wayland_user}/.local/share/appsupport/data/"
|
||||
chown appsupport-root:appsupport-root ${data_dir}
|
||||
|
||||
sed -i "s|__DATA_DIR__|${data_dir}|g" /tmp/appsupport/aliendalvik/10-bsp_config
|
|
@ -0,0 +1,30 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
mkdir /tmp/from
|
||||
mkdir /tmp/to
|
||||
mkdir /tmp/work
|
||||
mount /opt/alien/system.img /tmp/from
|
||||
mount -t overlay -o lowerdir=/tmp/from,upperdir=/tmp/to,workdir=/tmp/work overlay /opt/alien/rootfs
|
||||
|
||||
sed -i 's/setprop sys.use_memfd false/#setprop sys.use_memfd false/g' /opt/alien/rootfs/system/etc/init/hw/init.rc
|
||||
|
||||
chmod 777 /dev/binder
|
||||
chmod 777 /dev/hwbinder
|
||||
chmod 777 /dev/vndbinder
|
||||
chmod 777 /dev/dri/card0
|
||||
|
||||
mkdir /tmp/from2
|
||||
mkdir /tmp/to2
|
||||
mkdir /tmp/work2
|
||||
mkdir /tmp/waydroid-vendor
|
||||
mount /var/lib/waydroid/images/vendor.img /tmp/from2
|
||||
mount -t overlay -o lowerdir=/tmp/from2,upperdir=/tmp/to2,workdir=/tmp/work2 overlay /tmp/waydroid-vendor
|
||||
rm /tmp/waydroid-vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl.so
|
||||
rm /tmp/waydroid-vendor/lib/hw/android.hardware.gatekeeper@1.0-impl.so
|
||||
|
||||
mkdir /tmp/waydroid-system
|
||||
mount /var/lib/waydroid/images/system.img /tmp/waydroid-system
|
||||
cp /tmp/waydroid-system/system/product/app/webview/webview.apk /opt/alien/rootfs/system/app/webview/webview.apk
|
||||
cp -r /tmp/waydroid-system/system/product/overlay /opt/alien/rootfs/product/
|
|
@ -0,0 +1,57 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
USER_SERVICES="alienaudio.service alienkeyboard.service apkd-bridge.service apkd-bridge-user.service"
|
||||
|
||||
active_wayland_user=
|
||||
|
||||
for session in $(loginctl list-sessions --no-legend | awk '{ print $1 }'); do
|
||||
if [ "$(loginctl show-session --value -p Type ${session})" != "wayland" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Class ${session})" != "user" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p Remote ${session})" != "no" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$(loginctl show-session --value -p State ${session})" != "active" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
active_wayland_user="$(loginctl show-session --value -p Name ${session})"
|
||||
break
|
||||
done
|
||||
|
||||
if [ "${active_wayland_user}" == "" ]; then
|
||||
echo "No active wayland session found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" == "start" ]; then
|
||||
# User services behave buggy if they're kept running while container is down
|
||||
# or started without hwservicemanager running in the container.
|
||||
# So start the services right after hwservicemanager is started in the container.
|
||||
#
|
||||
# systemd should ensure that we're always started and stopped in sync with
|
||||
# aliendalvik.service (because of BindsTo= dependency)
|
||||
while [ "$(lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/getprop hwservicemanager.ready)" != "true" ]; do
|
||||
echo "User services startup waiting for hwservicemanager in container"
|
||||
sleep 1
|
||||
done
|
||||
|
||||
for SERVICE in $USER_SERVICES; do
|
||||
echo "Starting $SERVICE"
|
||||
systemctl --user -M ${active_wayland_user}@ start ${SERVICE}
|
||||
done
|
||||
elif [ "$1" == "stop" ]; then
|
||||
for SERVICE in $USER_SERVICES; do
|
||||
echo "Stopping $SERVICE"
|
||||
systemctl --user -M ${active_wayland_user}@ stop ${SERVICE}
|
||||
done
|
||||
fi
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik config generator
|
||||
Requires=systemd-user-sessions.service aliendalvik-setup.service
|
||||
After=systemd-user-sessions.service aliendalvik-setup.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/aliendalvik-config
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik setup
|
||||
After=multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/aliendalvik-setup
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
|
@ -0,0 +1,12 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik user dependencies starter
|
||||
Requires=systemd-user-sessions.service aliendalvik-config.service
|
||||
BindsTo=aliendalvik.service
|
||||
After=systemd-user-sessions.service aliendalvik-config.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/aliendalvik-user-dependencies start
|
||||
# ExecStopPost because we also want to run on failure of aliendalvik.service
|
||||
ExecStopPost=/usr/bin/aliendalvik-user-dependencies stop
|
|
@ -0,0 +1,13 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik container
|
||||
Requires=systemd-user-sessions.service network.target lxc-net.service aliendalvik-config.service
|
||||
BindsTo=aliendalvik-user-dependencies.service
|
||||
After=systemd-user-sessions.service network.target lxc-net.service aliendalvik-config.service
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/usr/bin/aliendalvik
|
||||
ExecStop=/usr/bin/lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/reboot -p
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik main bridge connman DBus shim
|
||||
After=dbus.socket
|
||||
Requires=dbus.socket
|
||||
|
||||
[Service]
|
||||
Type=dbus
|
||||
BusName=net.connman
|
||||
Restart=always
|
||||
ExecStart=/usr/bin/apkd-bridge-user-connman-shim
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik audio bridge
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
ExecStart=/usr/bin/alienaudioservice -d /dev/binder -n /dev/vndbinder -w /dev/hwbinder -p pulseaudio
|
||||
#ExecStartPost=false
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik keyboard maliit DBus shim
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
ExecStart=/usr/bin/alienkeyboard-maliit-shim/alienkeyboard-maliit-shim
|
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik keyboard bridge
|
||||
After=dbus.socket graphical-session.target alienkeyboard-maliit-shim.service
|
||||
Requires=dbus.socket graphical-session.target alienkeyboard-maliit-shim.service
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
ExecStart=/usr/bin/alienkeyboardservice
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik main bridge
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
ExecStart=/usr/bin/apkd-bridge-user
|
||||
|
||||
# looks like it doesn't clean up after itself
|
||||
ExecStopPost=/usr/bin/rm -f /tmp/apkd/
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik control bridge
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=dbus
|
||||
BusName=com.jolla.apkd
|
||||
Restart=always
|
||||
Environment="QTCONTACTS_MANAGER_OVERRIDE=folks"
|
||||
ExecStart=/usr/bin/apkd-bridge
|
|
@ -0,0 +1,65 @@
|
|||
- remove the android settings app from blocklisted apps so it shows up in your apps for testing
|
||||
remove "com.android.settings" entry from /etc/apkd/app-blacklist
|
||||
|
||||
- edit central aliendalvik configuration in /etc/appsupport.conf.d/00-defaults.conf
|
||||
comment out "RequiredDevNodes=ashmem"
|
||||
comment out "DevNodes=ion"
|
||||
|
||||
- edit central aliendalvik configuration in /etc/appsupport.conf.d/10-hybris.conf
|
||||
comment out the 3 "Proxies=" entries (we don't have any libhybris android HALs running underneath that we can proxy into the container)
|
||||
comment out all the entries in "[Features]" block
|
||||
|
||||
- edit central aliendalvik configuration in /etc/appsupport.conf.d/80-aas-config.conf
|
||||
set "DataRoot=/opt/alien/"
|
||||
set "StoragePath=/opt/alien/data/media/0"
|
||||
set "WaylandSocketPath=/run/user/100000/wayland-0"
|
||||
set "BinderDev=binder"
|
||||
set "HwBinderDev=hwbinder"
|
||||
set "VndBinderDev=vndbinder"
|
||||
set "PackageBlacklistFiles=/etc/apkd/app-blacklist"
|
||||
set "NotifBlacklistFiles=/etc/apkd/notif-blacklist"
|
||||
|
||||
- edit LXC configuration in /tmp/appsupport/aliendalvik/10-bsp_config
|
||||
replace "/dev/puddlejumper" with "/dev/binder"
|
||||
replace "/dev/hwpuddlejumper" with "/dev/hwbinder"
|
||||
replace "/dev/vndpuddlejumper" with "/dev/vndbinder"
|
||||
comment out the /dev/ashmem, /dev/ion, /dev/uhid and /dev/kgsl-3d0 mounts
|
||||
replace "/home/.android/data" with "__DATA_DIR__"
|
||||
replace "/run/display" mount with "/run/user/__UID__/wayland-0 run/display/wayland-0 none bind,nodev,nosuid,create=file 0 0"
|
||||
replace "/vendor" with "/tmp/waydroid-vendor"
|
||||
comment out /odm/lib, /odm/lib64, /system/etc/apns-conf.xml, /dev/alien_video32, /dev/alien_video33 and /dev/video mounts
|
||||
comment out /home/defaultuser, /home/defaultuser/android_storage and /run/media/defaultuser mounts
|
||||
|
||||
- edit LXC configuration in /tmp/appsupport/aliendalvik/20-privilege_config
|
||||
# add a line to start properly on apparmor devices
|
||||
lxc.apparmor.profile = unconfined
|
||||
|
||||
# replace "lxc.idmap = u 100000 100000 1" line with
|
||||
lxc.idmap = u 100000 __UID__ 1
|
||||
|
||||
# replace "lxc.idmap = g 100000 100000 1" line with
|
||||
lxc.idmap = g 100000 __UID__ 1
|
||||
|
||||
- edit LXC configuration in /tmp/appsupport/aliendalvik/30-net_config
|
||||
comment out tmpfs mount to "sys/fs/selinux"
|
||||
|
||||
- edit android props in /tmp/appsupport/aliendalvik/generated_props
|
||||
comment out these props: ro.vendor.extension_library, ro.hardware.vulkan, ro.board.platform
|
||||
update these props "ro.alien.no_camera=1", "ro.alien.no_soundtrigger=1", "ro.com.android.mobiledata=false"
|
||||
when you're on a pinephone pro, set "ro.opengles.version=196609"
|
||||
add these props at the end:
|
||||
ro.alien.qti.c2.service=0
|
||||
ro.alien.qti.allocator.service=0
|
||||
debug.stagefright.ccodec=0
|
||||
ro.hardware.gralloc=gbm
|
||||
ro.hardware.egl=mesa
|
||||
sys.use_memfd=true
|
||||
ro.alien.logcatdump=1
|
||||
|
||||
update DPI and display size values for your device
|
||||
ro.sf.lcd_density=DPI
|
||||
ro.alien.host.display_width=WIDTH
|
||||
ro.alien.host.display_height=HEIGHT
|
||||
ro.alien.host.dpi_x=DPI
|
||||
ro.alien.host.dpi_y=DPI
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
note: a lot of these files are just symlinks, just copy the symlink in that case (in case of folders also copy the symlink, no need to copy what's inside)
|
||||
|
||||
binaries:
|
||||
|
||||
/usr/bin/alienaudioservice
|
||||
/usr/bin/alienkeyboardservice
|
||||
/usr/bin/apkd-bridge
|
||||
/usr/bin/apkd-bridge-user
|
||||
/usr/bin/apkd-harbour-rpm-post
|
||||
/usr/bin/apkd-harbour-rpm-preun
|
||||
/usr/bin/apkd-install
|
||||
/usr/bin/apkd-install-preload
|
||||
/usr/bin/apkd-launcher
|
||||
/usr/bin/apkd-uninstall
|
||||
|
||||
|
||||
libraries (some of those are open source, we can probably build them ourselves):
|
||||
|
||||
/usr/lib/libalienaudioservice.so.1
|
||||
/usr/lib/libalienaudioservice.so.1.12
|
||||
/usr/lib/libalienaudioservice.so.1.12.0
|
||||
/usr/lib/libambermpris.so.1
|
||||
/usr/lib/libambermpris.so.1.1
|
||||
/usr/lib/libambermpris.so.1.1.10
|
||||
/usr/lib/libapkd.so.1
|
||||
/usr/lib/libapkd.so.1.0
|
||||
/usr/lib/libapkd.so.1.0.0
|
||||
/usr/lib/libconnman-qt5.so.1
|
||||
/usr/lib/libconnman-qt5.so.1.3
|
||||
/usr/lib/libconnman-qt5.so.1.3.0
|
||||
/usr/lib/libdbusaccess.so.1
|
||||
/usr/lib/libdbusaccess.so.1.0
|
||||
/usr/lib/libdbusaccess.so.1.0.18
|
||||
/usr/lib/libiphb.so.0
|
||||
/usr/lib/libiphb.so.0.0.0
|
||||
/usr/lib/libkeepalive.so.1
|
||||
/usr/lib/libkeepalive.so.1.8
|
||||
/usr/lib/libkeepalive.so.1.8.9
|
||||
/usr/lib/libkeepalive-glib.so.1
|
||||
/usr/lib/libkeepalive-glib.so.1.0.0
|
||||
/usr/lib/libnemonotifications-qt5.so.1
|
||||
/usr/lib/libnemonotifications-qt5.so.1.2
|
||||
/usr/lib/libnemonotifications-qt5.so.1.2.18
|
||||
/usr/lib/libngf0-0.24.so.0
|
||||
/usr/lib/libngf0-0.24.so.0.1.1
|
||||
/usr/lib/libprofile.so.0
|
||||
/usr/lib/libresource.so.0
|
||||
/usr/lib/libresource.so.0.0.18
|
||||
/usr/lib/libresource-glib.so.0
|
||||
/usr/lib/libresource-glib.so.0.0.18
|
||||
/usr/lib/libsailfishpolicy.so.0
|
||||
/usr/lib/libsailfishpolicy.so.0.4
|
||||
/usr/lib/libsailfishpolicy.so.0.4.17
|
||||
/usr/lib/qt5/qml/Sailfish/Policy/libsailfishpolicyplugin.so
|
||||
/usr/lib/alienaudioservice/pulseaudio.so
|
||||
/usr/lib/alienaudioservice/sailfish.so
|
||||
/usr/lib/apkd-bridge-user/available/libgeo-qtpositioning.so
|
||||
/usr/lib/apkd-bridge-user/libgeo-qtpositioning.so
|
||||
|
||||
|
||||
config:
|
||||
|
||||
/etc/aas-seccomp-profile
|
||||
/etc/apkd/app-blacklist
|
||||
/etc/apkd/notif-blacklist
|
||||
/etc/appsupport.conf.d/00-defaults.conf
|
||||
/etc/appsupport.conf.d/10-hybris.conf
|
||||
/etc/appsupport.conf.d/80-aas-config.conf
|
||||
/etc/appsupport.conf.d/mount-hooks/10-mount-rootfs.sh
|
||||
/etc/appsupport.conf.d/property-post-hooks/50-config-properties.sh
|
||||
/etc/appsupport.conf.d/property-post-hooks/80-create-container-nodes.sh
|
||||
/etc/appsupport.conf.d/property-post-hooks/90-create-storage-directory.sh
|
||||
/etc/appsupport.conf.d/property-pre-hooks/10-codecs.sh
|
||||
/etc/appsupport.conf.d/property-pre-hooks/20-vulkan.sh
|
||||
/etc/appsupport.conf.d/property-pre-hooks/50-networking.sh
|
||||
/etc/appsupport.conf.d/property-pre-hooks/50-wait-lipstick.sh
|
||||
/etc/gbinder.conf
|
||||
/etc/gbinder.d/alien.conf
|
||||
|
||||
|
||||
aliendalvik build props + system and vendor image:
|
||||
|
||||
/opt/alien/build.prop
|
||||
/opt/alien/system.img
|
||||
/opt/alien/vendor/etc/media_codecs.xml
|
||||
/opt/alien/vendor/etc/media_codecs_google_audio.xml
|
||||
/opt/alien/vendor/etc/media_codecs_google_telephony.xml
|
||||
/opt/alien/vendor/etc/media_codecs_google_video.xml
|
||||
/opt/alien/vendor/etc/media_codecs_vendor_audio.xml
|
||||
/opt/alien/vendor/etc/media_profiles_V1_0.xml
|
||||
/opt/alien/vendor/etc/video_system_specs.json
|
||||
/opt/alien/vendor/etc/vintf/manifest.xml
|
||||
/opt/alien/vendor/firmware
|
||||
/opt/alien/vendor/lib
|
||||
/opt/alien/vendor/lib64
|
||||
|
||||
|
||||
runtime generated LXC config:
|
||||
|
||||
/tmp/appsupport/aliendalvik/10-bsp_config
|
||||
/tmp/appsupport/aliendalvik/20-privilege_config
|
||||
/tmp/appsupport/aliendalvik/30-net_config
|
||||
/tmp/appsupport/aliendalvik/40-rootfs_config
|
||||
/tmp/appsupport/aliendalvik/alien.user
|
||||
/tmp/appsupport/aliendalvik/config
|
||||
/tmp/appsupport/aliendalvik/generated_props
|
||||
|
||||
|
||||
optional script with some commands to run inside android container after startup:
|
||||
|
||||
/usr/libexec/appsupport/alien-post-startup.sh
|
|
@ -0,0 +1,582 @@
|
|||
general stuff
|
||||
- we can't use ashmem (sailfish has it) because that was dropped from mainline kernels
|
||||
- android supports memfd these days, but that has to be enabled via prop sys.use_memfd
|
||||
- this is overwritten by android init system though
|
||||
- need to comment the override out it system/etc/init/hw/init.rc (can use overlayfs for that)
|
||||
|
||||
- for graphics, we mostly need these props just like waydroid
|
||||
ro.hardware.gralloc=gbm
|
||||
ro.hardware.egl=mesa
|
||||
|
||||
apkd:
|
||||
- providing some kind of host integration
|
||||
- probably for startup and management of the container
|
||||
- daemon running as root listening to com.jolla.apkd.control on dbus
|
||||
- user daemon apkd-bridge
|
||||
- install dbus configs not into /etc/ but into /usr/share/dbus-1/system.d/
|
||||
- appears to want to talk to systemd about aliendalvik.service
|
||||
- that service needs to be installed
|
||||
|
||||
apkd-bridge:
|
||||
- deps:
|
||||
- libnemonotifications compiled from jolla
|
||||
- libqt5contacts.so
|
||||
- sailfish-policy package (for library) from phone
|
||||
- (maybe not necessary) group privileged needs to exist, otherwise error
|
||||
- package packagekit-qt5 for libraries
|
||||
- forwards notifications and app launch requests to host
|
||||
- runs as user on host
|
||||
- only registers it's launcher thing on the binder if it sees that aliendalvik.service is running
|
||||
- can check with binder-list -d /dev/binder for alien.notification and alien.launcher
|
||||
- still doesn't seem to launch apps successfully though
|
||||
- ahaa, it seems like it only works when all HALs sucessfully load or something?
|
||||
|
||||
alienaudioservice
|
||||
- needs libalienaudioservice
|
||||
- needs symlink from /usr/lib64 to /usr/lib :(
|
||||
- appears to need /etc/gbinder.conf and /etc/gbinder.d/alien.conf
|
||||
- alienaudioservice -d /dev/binder -n /dev/vndbinder -w /dev/hwbinder --verbose
|
||||
- ugh, the thing doesn't read configuration in /etc/appsupport.d/, so need to set binder devices via argument
|
||||
- now wants to connect to default_alien and AlienAudioService: fails there
|
||||
- ooof this one is tricky
|
||||
- it appears to be something on /dev/vndbinder
|
||||
- oh wow, it appears to work when starting android shortly before
|
||||
- probably it needs a service manager to be running to register the services
|
||||
|
||||
- ERROR: service: Cannot connect to alien.audio.control/android.media.IAlienAudioControlService
|
||||
- seems to not be a problem/blocking at this stage, this service starts up fairly late in android
|
||||
- nothing to worry about as long as early startup isn't through
|
||||
|
||||
- what is the problem is that this enumeration of audio devices doesn't happen
|
||||
- that's what it looks like on stdout with --verbose
|
||||
[AlienAudioService] service: Shared buffer fd 31 (0x7dd32d1000) size 7680
|
||||
[AlienAudioService] service: Output standby (0/125)
|
||||
[AlienAudioService] service: Set parameters 125: "routing=2"
|
||||
[AlienAudioService] service: Open output (0) io_handle(133) devices(2) flags(0x00000008) sample_rate(48000) channel_mask(3) format(1) -> 0
|
||||
|
||||
- ugh.. the problem is the UID mapping in lxc container config.. the whole thing has to run as the UID mapped there
|
||||
|
||||
- alright this thing works pretty well now
|
||||
- seems that with pipewire-pulse, sound output stops after a while
|
||||
- lets just use pulseaudio on the host for the time being
|
||||
|
||||
apkd-bridge-user:
|
||||
- not needed to finish bootup
|
||||
- fairly independent from other things it seems.
|
||||
- what it does is bridge the HALs in #Proxies=android.hardware.graphics.allocator@4.0 et al into the container
|
||||
- when Proxies are set in config, Service 'package_native' will wait and block boot for these
|
||||
- install libQt5Sensors.so.5 from pacman (don't copy from dev, must match installed QT version)
|
||||
- for gps stuff it needs (somewhat optional, also starts without it) /usr/lib64/apkd-bridge-user/libgeo-qtpositioning.so (jolla pkg apkd-plugin-geo-qtpositioning)
|
||||
- that pulls in libQt5Positioning.so (arch pkg qt5-location)
|
||||
|
||||
|
||||
- aha, actually this thing somehow provides HALs on hwbinder for gnss, sensors, wifi.supplicant, wifi
|
||||
- it does a ton more stuff when looking at strings on the binary...
|
||||
- it also does the mpris indicator
|
||||
- yup, it also adds service on the normal binder: alien.NativeCall, alien.mediabrowsercontrol.bridge, alien.mce, wifinl80211
|
||||
|
||||
- arghhhh, I've spent 6 hours or something looking into why it doesn't install services on the hwbinder
|
||||
- and it ended up being another damn UID thing: ro.alien.privileged_host_uid needs to be set to the one that's mapped to 1 apparently
|
||||
|
||||
system/vendor:
|
||||
- general strategy: use aliendalvik vendor blob and put waydroid vendor blob on top (alien doesn't ship mesa drivers that work with mainline)
|
||||
- symlinks of /etc/media_* must be removed and also replaced with waydroid ones
|
||||
- otherwise signal won't start?
|
||||
|
||||
- graphics.allocator HAL? seems it's fine to comment that out
|
||||
- apparently it's also possible to make it work by installing the waydroid vendor/bin stuff
|
||||
|
||||
- we can't *quite* reuse the normal aliendalvik vendor blob
|
||||
- in alien vendor lib(64)/hw points to /host_vendor/lib(64)/hw
|
||||
- we need lib(64) pointing to /host_vendor/lib(64)
|
||||
- why? because /host_vendor is waydroid vendor, and we need to access egl drivers in there (and also various libs these drivers need)
|
||||
|
||||
- also in etc/vintf/manifest.xml, android.hardware.power and android.hardware.graphics.allocator need to be commented out
|
||||
- there's no power HAL nor graphics allocator HAL available
|
||||
- both are forwarded from hybris on sailfish
|
||||
- graphics allocator we could provide via waydroid vendor, but doesn't seem to get us any benefits
|
||||
|
||||
video codecs:
|
||||
- with libhybris we could forward the HW decoder directly it seems
|
||||
|
||||
- looks like we fail to decode h264/h265, but not in MKV container (test-videos.co.uk/bigbuckbunny is very helpful)
|
||||
- hmm with the mediaextractor minijail thing we did for Signal this seems to work, just super slow
|
||||
- so debug.stagefright.ccodec=0 makes stagefright try to use sw codecs
|
||||
- ccodec appears to the abstraction for hw codecs, going through libcodec2_client into libcodec2_vndk.so or libcodec2_hidl_client.so
|
||||
- it tries to use libcodec2_vndk.so by default, that tries to access /dev/ion and crashes
|
||||
- looks like ro.alien.hwservicemanager and ro.alien.host_has_hwservicemanager12 play a role here, they are used in all these libs
|
||||
[tester@suagaze system-img]$ grep -r ro.alien.hwservicemanager
|
||||
grep: system/lib64/libhidlbase.so: binary file matches
|
||||
grep: system/lib64/libcodec2_client.so: binary file matches
|
||||
grep: system/lib/libhidlbase.so: binary file matches
|
||||
grep: system/lib/libcodec2_client.so: binary file matches
|
||||
grep: system/apex/com.android.media.swcodec/lib64/libhidlbase.so: binary file matches
|
||||
grep: system/apex/com.android.media/lib64/extractors/libmpeg2extractor.so: binary file matches
|
||||
grep: system/apex/com.android.neuralnetworks/lib64/libneuralnetworks.so: binary file matches
|
||||
grep: system/apex/com.android.neuralnetworks/lib/libneuralnetworks.so: binary file matches
|
||||
- when unsetting ro.alien.hwservicemanager, android.hardware.media.omx fails to start and we hang when starting video
|
||||
- appears to crash in libminijail due to: blocked syscall: recvfrom
|
||||
- there should be policy for that in /vendor/etc/seccomp_policy/mediaswcodec.policy, but that file doesn't exist
|
||||
- now it's complaining about /host_vendor/etc/seccomp_policy/mediacodec.policy, give him that too
|
||||
- looks a lot like ro.alien.hwservicemanager=0 and debug.stagefright.ccodec=0 do the same thing
|
||||
|
||||
- hmm couldn't figure that out, I feel like this debug message plays a role
|
||||
Unsupported profile 4 for video/mp4v-es
|
||||
|
||||
- oh there's also a few properties that can be set by appsupport-generate-config tool:
|
||||
- ro.media.xml_variant.codecs, ro.media.xml_variant.codecs_performance, ro.media.xml_variant.profiles
|
||||
- also CodecXmlSuffix in config
|
||||
|
||||
- playing videos in telegram doesn't work
|
||||
|
||||
- in Signal, getting called gives us a mediaextractor crash
|
||||
- problem seems to be minijail blocking syscalls
|
||||
- works by adding /opt/alien/vendor/etc/seccomp_policy/mediaextractor.policy with this content
|
||||
- https://github.com/waydroid/android_external_stagefright-plugins/blob/da49cdba7b938ec9d973b9a74c9aac210b55bc8e/codec2/seccomp_policy/android.hardware.media.c2%401.1-ffmpeg-arm64.policy
|
||||
- but remove all the fancy comparisons and make it always 1, otherwise filter won't compile
|
||||
|
||||
- outgoing call on whatsapp to iphone, voip connection takes super long
|
||||
08-09 10:41:27.164 140 272 I WindowManager: Input event dispatching timed out sending to com.whatsapp/com.whatsapp.voipcalling.VoipActivityV2. Reason: ad09381 com.whatsapp/com.whatsapp.voipcalling.VoipActivityV2 (server) is not responding. Waited 5005ms for FocusEvent(hasFocus=true)
|
||||
|
||||
|
||||
input/OSK:
|
||||
- normal zwp_text_input through wayland appears to actually work
|
||||
- but it's buggy and crashes on preedit_string(null)
|
||||
- this is explicitly legal according to protocol
|
||||
- hack might be to not send preedit_string with NIL string??
|
||||
- it's actually *very* messy
|
||||
- set_surrounding_text() only returns the text that's before the cursor, nothing behind it
|
||||
- it also doesn't handle selected text at all
|
||||
- preedit_string() doesn't appear to be handled at all
|
||||
- commit_string() is only handled when cursor is at 0 (maybe this is connected to an empty set_surrounded_text() coming in before)
|
||||
- or when doing commit_string() twice, but that might be the set_surrounded_text() reason
|
||||
- either way, any commit_string() causes it to disable() and re-enable() the input panel
|
||||
- this causes it to never disable() it anymore later.
|
||||
- oh wow even better the damn thing seems to append "\n" to any string
|
||||
- actually emulating normal wl_keyboard events might be our best bet
|
||||
- then the auto-hide should keep working, and we're left with the auto-hide bug only for the emoji panel
|
||||
|
||||
- sailfish uses maliit and a custom keyboard on top of it
|
||||
- maliit itself just spawns a fullscreens wayland surface to show the OSK
|
||||
- yay, it's using qt_extended_surface protocol extension to implement always-on-top (https://github.com/qt/qtwayland/blob/dev/src/extensions/surface-extension.xml)
|
||||
- actually that protocol doesn't seem too bad
|
||||
- small dump of init of the OSK surface
|
||||
[3342860.994] -> wl_compositor@4.create_surface(new id wl_surface@20)
|
||||
[3342861.309] -> wl_registry@2.bind(11, "wl_shell", 1, new id [unknown]@21)
|
||||
[3342861.565] -> wl_shell@21.get_shell_surface(new id wl_shell_surface@22, wl_surface@20)
|
||||
[3342861.684] -> qt_surface_extension@9.get_extended_surface(new id qt_extended_surface@23, wl_surface@20)
|
||||
[3342861.806] -> wl_shell_surface@22.set_title("")
|
||||
[3342861.866] -> wl_shell_surface@22.set_class("maliit-server")
|
||||
[3342861.907] -> wl_shell_surface@22.set_toplevel()
|
||||
[3342861.947] -> wl_surface@20.set_buffer_scale(1)
|
||||
[3342861.997] -> qt_extended_surface@23.set_content_orientation_mask(0)
|
||||
[3342862.040] -> qt_extended_surface@23.set_window_flags(2)
|
||||
[3342862.128] -> wl_shell_surface@22.set_fullscreen(0, 0, nil)
|
||||
[3342862.208] -> wl_surface@20.set_buffer_transform(0)
|
||||
[3342862.248] -> wl_surface@20.commit()
|
||||
[3342863.572] -> wl_compositor@4.create_region(new id wl_region@24)
|
||||
[3342863.686] -> wl_region@24.add(0, 2520, 1080, 0)
|
||||
[3342863.796] -> wl_surface@20.set_opaque_region(wl_region@24)
|
||||
[3342863.839] -> wl_region@24.destroy()
|
||||
[3342863.989] -> qt_extended_surface@23.update_generic_property("CATEGORY", array)
|
||||
[3342864.076] -> qt_extended_surface@23.update_generic_property("MOUSE_REGION", array)
|
||||
[3342910.604] -> wl_compositor@4.create_surface(new id wl_surface@25)
|
||||
|
||||
- maybe zwp_input_panel_surface_v1 is what we want for that actually
|
||||
|
||||
- it seems that on sailfish, all IM/text input communication with OSK goes through peer-to-peer dbus socket, zero wayland involved
|
||||
- /run/user/uid/maliit-server/dbus-socket
|
||||
- could sniff that with advanced and very fancy eBPF stuff: https://bulimov.me/post/2021/12/02/unix-socket-snoop/, https://github.com/mechpen/sockdump
|
||||
- qt apps talk directly on that private dbus (in qt it proabably works via IM plugin, set using global QT_IM_MODULE=Maliit)
|
||||
- maliit also appears to support zwp_input_method_context_v1
|
||||
- if we implement that in mutter, we could make communication Gtk<->maliit go through that
|
||||
- that'd be what we want for OSK's in the future either way
|
||||
- alienkeyboardservice talks directly to that socket just as qt
|
||||
- oh hey we can snoop that using QDBUS_DEBUG=1 alienkeyboardservice
|
||||
- uhh okay this is not too bad
|
||||
- maybe we could shim a few things and keep using wl_text_input_v3
|
||||
|
||||
- shifting up input fields on android works via maliit
|
||||
- <method name="updateInputMethodArea">
|
||||
- could try to shim that?
|
||||
- or we just run a full blown maliit as our keyboard
|
||||
- possibly supporting zwp_input_method_context_v1 is "all" we need for that in mutter
|
||||
- apparently there's also input_method_v2 from purism (https://lists.freedesktop.org/archives/wayland-devel/2018-August/039255.html)
|
||||
- seems not really worth it to implement v1 when it will get replaced anyway
|
||||
|
||||
- clipboard sharing works on sailfish from container to host, not other way round
|
||||
- seems that sends proper wl_data_source.offer() via surfaceflinger, neat....
|
||||
|
||||
- alienkeyboardservice:
|
||||
- yayy, this thing has a -d argument for the binder dev, but it doesn't actually use it
|
||||
- can just use hex editor and change the binder dev in the binary, it's a NUL-terminated string, easy
|
||||
- talks to the inputmethod jolla inside android
|
||||
- talks to maliit-server over dbus p2p socket
|
||||
- still not sure how to enable debugging there, strings suggests it has a verbose mode, no idea how it works
|
||||
- we might want to shim maliit for the text-input shifting behavior inside android
|
||||
|
||||
- oh well, shimming maliit was nicely possible with some fancy python things
|
||||
- buuut the damn thing crashes when wl_text_input is enabled at same time as alienkeyboard thingy
|
||||
- only solution for us is to kill wl_text_input (their implementation is super duper buggy anyway)
|
||||
- add a WAYLAND_DISABLE_PROTOCOL env var to wayland
|
||||
- and make our shim a small wayland client for zwp_text_input
|
||||
- pip3 install --user --break-system-packages pywayland
|
||||
- python3 -m pywayland.scanner --with-protocols -o protocols
|
||||
|
||||
- oof, this is getting more and more tricky
|
||||
- had to go the whole route and disable wl_text_input_v3 for alien
|
||||
- now it does work, but the damn python dbus+wayland thing I wrote is pretty weird
|
||||
|
||||
- so getting a working keyboard now needs
|
||||
- python fake-server.py
|
||||
- python test.py
|
||||
- alienkeyboardservice
|
||||
|
||||
compositor things:
|
||||
- wayland socket is located at /run/display and is world-read+writeable on sailfish
|
||||
- this is to allow surfaceflinger in the android container (with different user) to access it
|
||||
- seems a bit dangerous that it's also accessible to random android processes?
|
||||
- looks like we can create a separate user+group for SurfaceFlinger (it runs with UID 501000)
|
||||
- then chown wayland socket for that group and make it 775
|
||||
|
||||
- okay fun, lipstick also implements a surface role for wayland: alien_manager / alien_surface
|
||||
- looks like that is actually just a way of working around that lipstick doesn't do xdg-toplevel/xdg-wm
|
||||
- seems like because of that we get to see the bugs now
|
||||
- tried implementing the protocol in mutter, but doing two surface roles at the same time is a bad idea (and surfaceflinger really wants to)
|
||||
|
||||
- surfaceflinger crashes in wl_log() when enabling wayland debugging via debug.sf.wayland
|
||||
|
||||
- so surfaceflinger crashes on closing the last open window, then opening a new one, then touching it
|
||||
- we send xdg_wm_base pings on input to windows to make sure they're alive
|
||||
- it seems that when it sees a ping in some cases, it crashes when handling the event
|
||||
- disabling pinging in mutter seems to do the trick
|
||||
|
||||
- also surfaceflinger sometimes accesses xdg_surfaces that have implicitly been freed after it requested wl_surface.destroy()
|
||||
- causes client error from libwayland, tearing down the connection
|
||||
- these can be worked around by making those client errors non-fatal in wayland
|
||||
- another workaround seems to be waiting a bit longer with freeing the wl_resource on surface destroy in mutter
|
||||
- REPRODUCER: open netflix, error appears and click "learn more", app crashes and surfaceflinger fucks up
|
||||
- REPRODUCER: or open other apps and click the back button to leave them
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197137.171] -> xdg_surface#42.configure(93)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197137.201] -> wl_keyboard#12.leave(301, wl_surface#41)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197137.214] -> zwp_text_input_v3#3.leave(wl_surface#41)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197141.457] wl_surface#41.destroy()
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.465] -> wl_display#1.delete_id(33)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.501] -> wl_display#1.delete_id(42)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.538] -> wl_display#1.delete_id(41)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.549] wl_display#1.sync(new id wl_callback#46)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.557] -> wl_callback#46.done(301)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.563] -> wl_display#1.delete_id(46)
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: [4197167.780] -> wl_display#1.error(wl_display#1, 0, "invalid object 42")
|
||||
Jul 12 15:36:19 oneplus6 gnome-shell[448812]: WL: error in client communication (pid 456513)
|
||||
- another occurence
|
||||
Jul 12 14:52:47 oneplus6 gnome-shell[425720]: [1585117.972] -> wl_display@1.error(wl_display@1, 1, "invalid arguments for wl_surface@55.attach")
|
||||
Jul 12 14:52:47 oneplus6 gnome-shell[425720]: WL: unknown object (2117946272), message attach(?oii)
|
||||
Jul 12 14:52:47 oneplus6 gnome-shell[425720]: WL: error in client communication (pid 439093)
|
||||
|
||||
- when starting apps, they often only start drawing on touch input
|
||||
- could have something to do with us only focusing the app on input?
|
||||
- maybe it's the configure() event we send them when focusing
|
||||
|
||||
- scaling is borked, on hidpi alien windows are blurry
|
||||
- lipstick supports wl_output, but does wl_output.scale(1), apparently scaling is done via env variable or smth
|
||||
- can fix that by reading the wm_class and then special-casing alien windows in mutter
|
||||
|
||||
- it seems they're leaking their wl_region's, lovely...
|
||||
- sailfish sets opaque regions too, good thing their phones have so much ram :D
|
||||
|
||||
- we also get our fair share of bugs :)
|
||||
- looks like we sometimes send zwp_text_input.leave event after wl_surface.destroy()
|
||||
- REPRODUCER: sometimes this works: open netflix, error appears and click "learn more", now app crashes
|
||||
Jul 12 14:46:10 oneplus6 gnome-shell[425720]: [1187342.350] wl_surface@34.destroy()
|
||||
Jul 12 14:46:10 oneplus6 gnome-shell[425720]: [1187342.532] -> zwp_text_input_v3@3.leave(wl_surface@34)
|
||||
Jul 12 14:46:10 oneplus6 gnome-shell[425720]: WL: error marshalling arguments for leave (signature uo): null value passed for arg 1
|
||||
|
||||
- on the pinephone pro, we crash after a while in the gallium driver
|
||||
- fixed by setting different openglES version: ro.opengles.version=196609
|
||||
|
||||
network access/fake wifi:
|
||||
- there's two props that exclude each other: ro.alien.sailfish_networking ro.alien.default_networking
|
||||
- sailfish uses the former by default, controlled by /etc/appsupport.conf.d/property-pre-hooks/50-networking.sh
|
||||
- ah damn, it's also provided somehow by apkd-bridge-user
|
||||
|
||||
- waydroid uses lxc networking spawning an eth0 inside the container
|
||||
- sets up manually a waydroid0 interface on host with firwall and masquerading (https://github.com/waydroid/waydroid/blob/822598850d0c16a968fb8ea4b5768d4ba323f0e5/data/scripts/waydroid-net.sh)
|
||||
- see for lxc config https://github.com/waydroid/waydroid/blob/822598850d0c16a968fb8ea4b5768d4ba323f0e5/data/configs/config_1
|
||||
- probably due to being eth0, this requires fake wifi stuff
|
||||
- waydroid has a fake wifi thing controlled by persist.waydroid.fake_wifi (https://github.com/waydroid/android_vendor_waydroid/commit/629b76f254d07d373092f7c18efcbefbc0f9ad94)
|
||||
- seems to be per app (https://github.com/waydroid/docs/blob/9b5be41b9233aecf201471596fc6e84f7423ab85/usage/waydroid-prop-options.md?plain=1#L22)
|
||||
- not used by default?
|
||||
|
||||
- alright, alien also uses lxc to install a bridge into the container
|
||||
- but at the same time it implements a wifi HAL to pretend to be connected to wifi
|
||||
- it asks connman for connected wifi and then returns that SSID, interesting
|
||||
- need to copy lxc-net from device, seems that arch lxc no longer ships that script
|
||||
- need to shim connman dbus
|
||||
- what we're looking for from the contianer is starting the scanner, then notifying the net
|
||||
com.jolla.apkd.wifi: apkd: android.net.wifi.nl80211.IWifiScannerImpl 10
|
||||
|
||||
com.jolla.apkd.wifi: apkd - supplicant - notifyWifiNetwork 0xaaaae832fac0 "iPhone von Jonas"
|
||||
|
||||
- connman installed on system is still needed (probably only for the dbus interface definition)
|
||||
|
||||
- alright took me like another hour to get the shim working for android to pick up the network
|
||||
- but then android said "no internet", I thought I'm missing something else in the shim
|
||||
- after two more hours of randomly shimming other apis and trying whatever finally figured it out
|
||||
- android can't resolve dns, and its not because of the shim
|
||||
- it'S because it uses the dns cache of the host and sets its dns 127.0.0.1
|
||||
- connman provided a resolver on localhost:53, and the systemd-resolved NM uses apparently doesn't answer those queries
|
||||
- can test with "dig heise.de @127.0.0.1"
|
||||
- resolved listens on 127.0.0.53 by default
|
||||
- setting DNSStubListenerExtra=127.0.0.1 makes it work, arghhhhh.
|
||||
|
||||
cellular network
|
||||
- android is always looking for iRadio HAL, need to check if that one's exposed by apkd-bridge on jolla
|
||||
- things work just fine with the wifi shim for now
|
||||
- looks like exposing cellular info via connman shim doesn't work :/
|
||||
- actually iRadio HAL is not exposed by any apkd-* tools, instead it's exposed by ofono it seems
|
||||
- that's unfortunate, it's probably bound to ofono making use of hybris radio HALs somehow
|
||||
- yup, there's /usr/lib64/ofono/plugins/alienbinderplugin.so
|
||||
|
||||
gps
|
||||
- good news, appears to go via geoclue
|
||||
- kinda works OOTB, but location is not as accurate as on host it seems
|
||||
- apkd-bridge-user has debug output for it
|
||||
- there's a nice gtk app for debugging: Satellite on flathub (it talks to ModemManager directly)
|
||||
- turns out modemManager doesn't do gps without a sim card
|
||||
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/183
|
||||
|
||||
- okay, so there's the geoclue2 API backend for qtpositioning, that's good
|
||||
- sadly it doesn't have a satellites API anymore like Geoclue dbus api had
|
||||
- alright, let's build qtLocation 5.0 ourselves
|
||||
- looks like it really wants to use the old Geoclue1 api, the plugin has a higher prio
|
||||
- can run geoclue with debug using sudo G_MESSAGES_DEBUG=Geoclue /usr/lib/geoclue
|
||||
- aha, here's our problem: the thing only requests shit accuracy from geoclue
|
||||
- seems it relies on a thing that both the android and geoclue1 plugin do: set default accuracy to ALL in plugin constructor
|
||||
- if we do that too, things work!!
|
||||
|
||||
sensors
|
||||
- qtsensors has a fairly minimal iio-sensor-proxy backend
|
||||
- no support for proximity
|
||||
- fairly easy, can wire that up quickly
|
||||
- no accellerometer (iio-sensor-proxy doesn't expose)
|
||||
- https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/193
|
||||
- first need to allow querying iio-sensor-proxy as user by changing polkit
|
||||
/usr/share/polkit-1/actions/net.hadess.SensorProxy.policy
|
||||
- for compass access also need to change dbus policy
|
||||
/usr/share/dbus-1/system.d/net.hadess.SensorProxy.conf
|
||||
- compass doesn't have a backend that works on most phones yet, see
|
||||
https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/316
|
||||
- rotation/gyro sensor is not really wanted in iio-sensor-proxy without a use-case
|
||||
https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/issues/221
|
||||
- seems that messengers use proximity sensor for audio route during voice messages actually
|
||||
- looool telegram combines it with accelerometer readings it seems, how insane
|
||||
- seems like also android makes use of orientation sensor and rotates apps, we probably don't want that
|
||||
|
||||
|
||||
app rotation
|
||||
- android does it itself based on orientation sensor readings
|
||||
- looks weird and interferes with mutter, rotating, also doesn't adhere to "allow autorotation" gsetting
|
||||
- can disable with "settings put system accelerometer_rotation 0;" in container
|
||||
|
||||
vibration
|
||||
- can debug feedbackd with G_MESSAGES_DEBUG=all /usr/lib/feedbackd
|
||||
- doesn't work by default
|
||||
- seems to be provided by alienaudioservice actually
|
||||
- more specifically by the sailfish plugin, interesting
|
||||
- let's try loading the plugin
|
||||
- fails without these libs: libprofile, libresource, libresource-glib, libngf0
|
||||
- now it hangs up looking for org.maemo.resource.manager on dbus it seems
|
||||
- is exposed by ohmd (open hardware manager)
|
||||
- more specifically by this plugin it seems https://github.com/sailfishos/ohm-plugins-misc/blob/master/plugins/resource/
|
||||
- trace of system dbus on initialization here: dbus-trace-alienaudio-sailfish-plugin.txt
|
||||
- let's shim it, ah neat preexisting stuff to shim the policy manager
|
||||
https://github.com/sailfishos/libresource/blob/master/tests/dbus/dummy-policy-manager.py
|
||||
|
||||
|
||||
audio routing:
|
||||
- goes through alienaudioservice sailfish plugin
|
||||
https://github.com/sailfishos/ohm-plugins-misc/blob/master/plugins/route/org.nemomobile.Route.Manager.xml
|
||||
https://github.com/sailfishos/ohm-plugins-misc/blob/master/plugins/route/ohm-ext/route.h
|
||||
|
||||
- routing to earpiece during voice messages that goes a bit differently
|
||||
- sailfish doesn't re-route here
|
||||
- app reads sensors and sets media role:
|
||||
[AlienAudioService] sailfish: Stream 29 set 'media.role'='phone'
|
||||
[AlienAudioService] sailfish: Stream 29 set 'module-stream-restore.id'='sink-input-by-media-role:voip'
|
||||
|
||||
- maybe this is how it works on android and we're supposed to route to earpiece now?
|
||||
|
||||
lockscreen calls:
|
||||
- seems sailfish doesn't do fullscreen intents for incoming calls
|
||||
- we can possibly hack that and put app into lockscreen overlay by looking at notification
|
||||
- resident == true && category == call
|
||||
- activate default action and show surface as lockscreen overlay
|
||||
- tricky: telegram behaves differently depending on screen was off or on
|
||||
- when off, it shows swipy thing to not accidentlly click, when on, it shows clicky thing
|
||||
|
||||
- what about ongoing calls on lockscreen
|
||||
- there's again a notification, maybe can use that still
|
||||
|
||||
ringtone silencing
|
||||
- on sailfish, ngfd just enforces the silent profile by killing haptics
|
||||
https://github.com/sailfishos/ngfd/blob/master/src/ngf/haptic.c#L187
|
||||
- seems like same goes for ringtone, the stream is created, but appears to be killed by pulse based on media.role=ringing
|
||||
- what do we do?
|
||||
- in the future, call ringtone and vibration will be played by notification server anyway
|
||||
- we know when an alien call is ringing, so can probably kill vibration and mute the alien stream in our audio shim to allow notification server taking over
|
||||
- kills custom ringtones on android, oh well
|
||||
- won't work for alarm clocks, there we don't know about ringing state
|
||||
|
||||
- or we just let things through normally and enforce silent profile in the shim for both haptics and audio on incoming call
|
||||
- maybe that's the best way for now
|
||||
|
||||
contacts sync:
|
||||
- another tricky one, they replace system contacts UI and database with host one
|
||||
- breaks things for us of course
|
||||
- we might have to shim com.jolla.contacts.ui dbus
|
||||
- we can see createContact() being called from android
|
||||
- handled by apkd-bridge
|
||||
- according to changelogs, bridge "Sync all contacts to alien on service connect"
|
||||
- to ensure it works, on startup of container, look for this
|
||||
com.jolla.apkd.binder: Connected to Alien Service alien.contacts
|
||||
com.jolla.apkd.contacts: Checking if Alien contacts service is ready for synchronisation
|
||||
com.jolla.apkd.contacts: Alien contacts service is available, performing initial sync
|
||||
Successfully notified Alien contacts service of current contacts.
|
||||
|
||||
- also contact modification should be detected
|
||||
"Notifying Alien contacts service of contact addition:"
|
||||
|
||||
- okayy, so this talks to libQtContacts and a custom sqlite backend on sailfish
|
||||
- wowwww, we're lucky, there's a libfolks backend from ~2010 for QtCOntacts available
|
||||
- https://wiki.gnome.org/Projects/Folks/QtFolks
|
||||
- https://blog.barisione.org/2010/11/17/folks-and-qtcontacts/
|
||||
- https://launchpad.net/~m-gehre/+archive/ubuntu/ppa/+packages
|
||||
- damn was finding those sources hard
|
||||
- okay with a few adjustments it builds and the demo confirms it works, yaaaaay!
|
||||
- now still have to make sure it gets loaded and used by apkd-bridge
|
||||
- ah wow that was super tricky, because strings didn't find any references to the plugin name (org.nemomobile.contacts.sqlite) in any binaries
|
||||
- turns out apkd-bridge still demands that plugin, it probably puts the string together in an un-greppable way, damn....
|
||||
- okay so we're gonna have to force our own plugin then via custom build of libQt5Contacts
|
||||
- ugh, it's still not working, but at least now apkd-bridge spews a log on contact changes in folks, let's try removing data dir
|
||||
- damn, another few hours later, managed to get some debug output from contacts sync on sailfish now
|
||||
- apkd-bridge can only read contacts db when run with invoker, but then we don't get debug output
|
||||
- so instead run it as root to read new contacts db, and create contacts with jolla-contacts run as root
|
||||
- okay now we know that successful initial sync looks like this
|
||||
[D] unknown:0 - Alien contacts service is available, performing initial sync
|
||||
[D] unknown:0 - Notifying Alien contacts service of all current contacts: 1
|
||||
[D] unknown:0 - Successfully notified Alien contacts service of contact change.
|
||||
[W] unknown:0 - Successfully notified Alien contacts service of current contacts.
|
||||
- turns out there's also a race involved
|
||||
- apkd-bridge gets the contacts via ManagerEngine::contacts() before we got our invidiuals-changed from folks
|
||||
- this means it doesn't sync any contacts initially, but doesn't explain why it also won't pick up changes to contacts
|
||||
- oh woooow
|
||||
- adding and modifying contact changes seems to go via dbus (all with variant (au))
|
||||
- org.nemomobile.contacts.sqlite.contactsAdded
|
||||
- org.nemomobile.contacts.sqlite.contactsChanged
|
||||
- deleting can go via both QtCOntacts API signal or dbus signal
|
||||
- org.nemomobile.contacts.sqlite.contactsRemoved
|
||||
- it seems that sailfish creates two contacts for everyone, possibly one system one and one android one
|
||||
- the IDs on their dbus output are QContactId.toString()
|
||||
- the IDs passed on their dbus signals are the QContactId without prefix 73716c2d3 (QByteArrayLiteral("sql-"))
|
||||
- so these dbus signals are emitted from the sqlite backend actually, no idea why that would be done in addition to the normal cpp-signals
|
||||
- after another two days, got it to pick up dbus emissions too by setting the QCollectionId (QByteArrayLiteral("col-")) and QContactType on individual contacts now, yaayyy
|
||||
|
||||
desktop files for apps
|
||||
- mostly appears to work
|
||||
- jolla style of icons is a bit annoying
|
||||
- handled by apkd-bridge
|
||||
|
||||
file sharing between host and container
|
||||
- looks like some xdg-folders are synced into container as sdcard
|
||||
- home directory is synced into android as sdcard via config MountHome
|
||||
- it's just mounted by lxc, neat
|
||||
|
||||
other things
|
||||
- after startup bluetooth crashes all the time
|
||||
- seems to be an "upstream" bug, jolla solves this using alien-post-startup.sh by disabling bluetooth daemon (see comment in there)
|
||||
|
||||
- video decoding for some videos doesn't work (see video codecs section)
|
||||
|
||||
- the media control service can crash sometimes (playing around with switching between apps during playing spotify music)
|
||||
- see media-control-service-while-starting-spotify crash file
|
||||
|
||||
- system webview is crashing
|
||||
- it appears to try using ashmem and then fails because
|
||||
07-13 16:57:45.257 8198 8198 E chromium: [ERROR:platform_shared_memory_region_android.cc(189)] Ashmem region has a wrong protection mask: it is not read-only but it should be
|
||||
- it's a memfd instead of ashmem specific issue, there's a patch that fixes it in waydroid
|
||||
https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/ashmem/patches/0004-Fixup-ashmem_get_prot_region-for-memfd.patch
|
||||
- can work around by replacing webview with the one from waydroid
|
||||
|
||||
- camera will only work when running on top libhybris and forwarding the HAL
|
||||
|
||||
what's needed to be done:
|
||||
- lots of dbus shimming (sorted by importance)
|
||||
- launching of system apps from within android (just a single dbus call invoking the thing)
|
||||
- browser
|
||||
- contacts
|
||||
- more...
|
||||
|
||||
- send configure() wayland events so that clients start drawing immediately
|
||||
|
||||
incomplete list of deps and files:
|
||||
apdk-bridge deps
|
||||
- libnemonotifications-qt5.so.1 (get from phone)
|
||||
- libpackagekitqt5.so.1 (arch pkg packagekit-qt5)
|
||||
- libQt5Contacts.so.5 (no arch pkg, build it ourselves)
|
||||
|
||||
alienaudioservice
|
||||
- libalienaudioservice (get from phone)
|
||||
- libglibutil.so.1 (arch pkg libglibutil)
|
||||
- libgbinder.so.1 (arch pkg libgbinder)
|
||||
|
||||
apkd-bridge-user
|
||||
- libmlite5.so.0 (arch pkg mlite)
|
||||
- libkeepalive.so.1 and libkeepalive-glib.so.1 (get from phone)
|
||||
- libambermpris (get from phone)
|
||||
- libapkd (get from phone)
|
||||
- libqt5sensors (arch pkg qt5-sensors)
|
||||
- libiphb.so.0 (get from phone)
|
||||
- libdbusaccess.so.1 (get from phone)
|
||||
- libconnman-qt5.so.1 (get from phone)
|
||||
- apkd-plugin-geo-qtpositioning
|
||||
- installs /usr/lib64/apkd-bridge-user/libgeo-qtpositioning.so
|
||||
- libQt5Positioning.so (arch pkg qt5-location)
|
||||
|
||||
config files
|
||||
/etc/aas-seccomp-profile
|
||||
/etc/apkd/app-blacklist (here we removed settings app)
|
||||
/etc/apkd/notif-blacklist
|
||||
/etc/gbinder.conf
|
||||
/etc/gbinder.d/alien.conf
|
||||
/etc/appsupport.conf.d/*
|
||||
/usr/lib/systemd/system/aliendalvik.service
|
||||
|
||||
aliendalvik system img + vendor img + build.prop:
|
||||
/opt/alien/vendor/*
|
||||
/opt/alien/system.img
|
||||
/opt/alien/build.prop
|
||||
|
||||
|
||||
useful stuff:
|
||||
all tools are using Qt debugging tools, debug using QT_LOGGING_RULES="*.debug=true"
|
||||
shell inside container: lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/sh
|
||||
trace files that get opened: strace -f -t -e trace=file binary
|
||||
debugging wayland because debug.sf.wayland causes crash: put WAYLAND_DEBUG into /etc/environment of host to use mutter debugging
|
||||
starting app inside android: am start com.android.settings
|
||||
installing app inside android: pm install -t -f /data/local/tmp/app.apk (needs right permissions)
|
||||
|
||||
|
||||
starting things automatically
|
||||
- it's kinda bound to be a mess :(
|
||||
- alien it depends on stuff running in the user session, and can only start when the user session is up
|
||||
- alien itself needs to be run by root though
|
||||
- and that's not enough, most things in the user session need to be started at a specific pointer after container is up
|
||||
- so what do we do?
|
||||
- really nice would be starting and stopping the whole thing from a user service
|
||||
- could talk to a root helper via dbus which then does configuration and starts/stops the container
|
||||
- would have to fiddle with user services as root again though
|
||||
|
||||
- for data isolation between users
|
||||
- let's have the data dirs inside user dirs so they can be encrypted
|
||||
- maybe make it an img file that can be owned fully by the user and is mounted into lxc
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,80 @@
|
|||
================================================================
|
||||
SAILFISH OS
|
||||
Changelog from 4.3.0.12 to 4.3.0.15
|
||||
2022-02-07
|
||||
================================================================
|
||||
Packages modified
|
||||
polkit
|
||||
Updated : 0.105+git5-1.5.3.jolla -- 0.105+git8-1.6.1.jolla
|
||||
- [polkit] Fix for CVE-2021-4034 (PwnKit).
|
||||
- [polkit] Drop unneeded Debian patches.
|
||||
- [packaging] Separate Debian patches from the rest
|
||||
- [packaging] Use pkgconfig symbols for -devel requires
|
||||
- [polkit] Update Debian patches, drop patches already included.
|
||||
ruby
|
||||
Updated : 2.7.1+git1 -- 2.7.1+git2
|
||||
- [ruby] Fix build with newer bison.
|
||||
sdk-setup
|
||||
Updated : 1.4.11-1.5.1.jolla -- 1.4.42-1.6.1.jolla
|
||||
- [mb2] Refresh git index before creating a stash.
|
||||
- [mb2] Sync as needed when closing maintenance shell.
|
||||
- [oomadvice] Do not check journal where it is not available.
|
||||
- [sdk-manage] Allow to explicitly operate on snapshots.
|
||||
- [sdk-manage] Fix reseting snapshot forcefully.
|
||||
- [mb2] Do not fail to create git-stash.
|
||||
- [sdk-chroot] Add support for usernames with a dot.
|
||||
- [mb2] Deal with git worktree without commits.
|
||||
- [mb2] Allow to diff build environment changes.
|
||||
- [sdk-assistant] Allow to clone build tools.
|
||||
- [mb2] Cache packages installed as build deps under snapshots.
|
||||
- [sdk-manage] Allow to prune package caches
|
||||
- [sdk-manage] Fix checking for package removal in original target.
|
||||
- [sdk-manage] Fix checking for RPM DB changes in original target.
|
||||
- [mb2] Only reset snapshot if pulling build requires.
|
||||
- [sdk-manage] Do not clean package cache when updating.
|
||||
- [sdk-manage] Fix reseting snapshots after SSU changes
|
||||
- [mb2] Fix buildroot timestamp check under VBox.
|
||||
- [sdk-setup] Do not rely on ConnMan for proxy configuration.
|
||||
- [sdk-setup] Do not use systemd under Docker.
|
||||
- [mb2] Print progress during zypper based deployment.
|
||||
- [sdk-chroot] Export SAILFISH_SDK.
|
||||
- [sdk-chroot] Rename mer-sdk-chroot to sdk-chroot.
|
||||
- [mb2] Fix false error on talking to SSH agent.
|
||||
- [sdk-init] Support ApplicationName.
|
||||
- [mb2] Allow deployment with password-protected SSH keys.
|
||||
- [mb2] Allow running builds concurently.
|
||||
- [mb2] Do not pollute random CWDs with state files.
|
||||
- [mb2] Do not purge default output dir.
|
||||
- [mb2] Fix applying patches with CRLF on Unix.
|
||||
- [mb2] Fix explicit pull with --no-pull-build-requires
|
||||
- [mb2] Fix use with .spec with local includes.
|
||||
- [mb2] Prune older RPMs by default.
|
||||
- [sdk-assistant] Do not leak true command name in messages.
|
||||
- [sdk-vm] Do not automatically refresh RPM repos.
|
||||
- [sdk-make-qmltypes] Allow in-place use without deployment.
|
||||
- [sdk-manage] Do not fail to sync targets with broken symlinks.
|
||||
- [mb2] Do not switch to snapshot for 'run' command
|
||||
- [sdk-make-qmltypes] Automatically determine source revision.
|
||||
- [sdk-make-qmltypes] Continue batch after job failure
|
||||
- [sdk-make-qmltypes] Use per-user media path.
|
||||
- [mb2] Exit if applying patch fails.
|
||||
- [sdk-manage] Use rpmdb directly.
|
||||
- [sdk-setup] Use correct Short Name for the license.
|
||||
- [sdk-setup] Use correct Short Names for the license.
|
||||
- [sdk-assistant] Be more clear about (not) proceeding with target update
|
||||
- [sdk-assistant] Do not always suppress zypper interactivity.
|
||||
- [sdk-assistant] Supplying a password is a confirmation.
|
||||
- [sdk-manage] Do not leak zypper processes when interrupted.
|
||||
- [sdk-manage] Handle more info-level zypper exit codes
|
||||
- [sdk-assistant] Make package-search alias of package-list.
|
||||
- [sdk-assistant] Rename package-list to package-search.
|
||||
- [mb2] Allow more control over sb2 invocation.
|
||||
- [packaging] BuildRequire systemd via pkgconfig.
|
||||
- [sdk-manage] Don't add trailing slash to tooling path.
|
||||
- [mb2] Fix error handling in build and package commands.
|
||||
ssu
|
||||
Updated : 1.0.14-1.5.1.jolla -- 1.0.14.1-1.6.1.jolla
|
||||
- [ssu] Make sure the ssu cache is up-to-date.
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,202 @@
|
|||
============================================================================
|
||||
SAILFISH OS
|
||||
Changelog from 4.4.0.58 to 4.4.0.64
|
||||
2022-05-11
|
||||
============================================================================
|
||||
|
||||
# PACKAGES MODIFIED
|
||||
|
||||
### apkd-l10n
|
||||
- Updated : 1.145.2-1.6.1.jolla -- 1.145.3-1.7.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 38 of 38 strings translated (0 need review).
|
||||
### commhistory-daemon-l10n
|
||||
- Updated : 1.90.2-1.6.1.jolla -- 1.90.3-1.7.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 43 of 43 strings translated (0 need review).
|
||||
### droid-config-xqbt52
|
||||
- Updated : 1.8.2.5-1.10.1.jolla -- 1.8.2.10-1.13.1.jolla
|
||||
- [dconf] Add key to show reboot dialog when inserting sim cards.
|
||||
- [patterns] Add VoLTE enablers to adaptation pattern.
|
||||
- [configs] Set default data profile id.
|
||||
- [configs] Add workaround for camera service crash.
|
||||
- [configs] Add possibility to define specific VOIP sink.
|
||||
- [sparse] Add a service for memory reclaim.
|
||||
- [sparse] Disable update_verifier for ports starting from Android 10.
|
||||
- [sparse] Move sysctl files to /usr/lib.
|
||||
### droid-hal-pdx213
|
||||
- Updated : 1.8.4-1.6.1.jolla -- 1.9.0-1.7.4.jolla
|
||||
- [kernel] Fix display brightness control.
|
||||
- [dhd] Immediately fail Android builds on OBS if a command fails.
|
||||
- [helpers] Build pulseaudio-modules-droid-jb2q for Android versions up to 10.
|
||||
- [kernel] Fix defconfig symbol wrongfully changed.
|
||||
- [kernel] Fix port lowmemorykiller driver from 4.14.
|
||||
- [helpers] Refactor utils to use mb2 --package-timeline. Contributes to
|
||||
- [kernel] Port lowmemorykiller driver from 4.14 and enable android lmk.
|
||||
- [kernel] Replace or remove invalid config symbols in hybris defconfig.
|
||||
- [localbuild] Make all build script changes persistent.
|
||||
- [localbuild] Pass local repo to zypper ahead of `ssu ar` removal.
|
||||
- [localbuild] Remove leftovers manually for now.
|
||||
- [localbuild] Switch local repo to flat dir structure.
|
||||
- [localbuild] Use mb2 --output-dir instead to deploy RPMs.
|
||||
- [localbuild] Use sdk-assistant maintain instead of sb2.
|
||||
### droid-src-sony-lena
|
||||
- Updated : 1.8.4-1.5.3.jolla -- 1.9.1-1.7.1.jolla
|
||||
- [hybris] mixer_paths: Use handset mic for speaker mode workaround.
|
||||
- [camera] QCamera2: mm-interface: Change media entity enumeration logic for k4.19.
|
||||
- [droid-src] frameworks: av: Fix browser crash after playing videos.
|
||||
- [hybris] device: sony: common: Proper SIM detection fix is now upstream.
|
||||
- [sony-common] Revert "init: qcrild.rc : Add vendor prefix to ril-daemon".
|
||||
### droid-system-pdx213
|
||||
- Updated : 1.9.1-1.7.1.jolla -- 1.9.6-1.10.1.jolla
|
||||
- [system] Enable loudspeaker echo cancellation.
|
||||
- [hybris] mixer_paths: Use handset mic for speaker mode workaround.
|
||||
- [camera] QCamera2: mm-interface: Change media entity enumeration logic for k4.19.
|
||||
- [droid-src] frameworks: av: Fix browser crash after playing videos.
|
||||
- [hybris] device: sony: common: Proper SIM detection fix is now upstream.
|
||||
- [sony-common] Revert "init: qcrild.rc : Add vendor prefix to ril-daemon".
|
||||
- [hybris] device: sony: lena: Disable sensors of tele and uwide lenses for now.
|
||||
- [hybris] init: Enable low memory killer.
|
||||
### droid-system-pdx213-xqbt52
|
||||
- Updated : 1.9.1-1.7.1.jolla -- 1.9.6-1.10.1.jolla
|
||||
- [system] Enable loudspeaker echo cancellation.
|
||||
- [hybris] mixer_paths: Use handset mic for speaker mode workaround.
|
||||
- [camera] QCamera2: mm-interface: Change media entity enumeration logic for k4.19.
|
||||
- [droid-src] frameworks: av: Fix browser crash after playing videos.
|
||||
- [hybris] device: sony: common: Proper SIM detection fix is now upstream.
|
||||
- [sony-common] Revert "init: qcrild.rc : Add vendor prefix to ril-daemon".
|
||||
- [hybris] device: sony: lena: Disable sensors of tele and uwide lenses for now.
|
||||
- [hybris] init: Enable low memory killer.
|
||||
### jolla-alarm-ui-l10n
|
||||
- Updated : 1.98.2-1.7.1.jolla -- 1.98.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 31 of 33 strings translated (2 need review).
|
||||
### jolla-calendar-l10n
|
||||
- Updated : 1.249.2-1.8.1.jolla -- 1.249.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 139 of 139 strings translated (0 need review).
|
||||
### jolla-camera
|
||||
- Updated : 1.2.16.2-1.8.1.jolla -- 1.2.16.3-1.9.1.jolla
|
||||
- [jolla-camera] Restart camera upon error (xperia 10 III).
|
||||
### jolla-camera-l10n
|
||||
- Updated : 1.218.2-1.8.1.jolla -- 1.218.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 73 of 73 strings translated (0 need review).
|
||||
### jolla-clock-l10n
|
||||
- Updated : 1.162.2-1.6.1.jolla -- 1.162.3-1.7.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 47 of 48 strings translated (0 need review).
|
||||
### jolla-contacts-l10n
|
||||
- Updated : 1.187.2-1.7.1.jolla -- 1.187.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 60 of 60 strings translated (0 need review).
|
||||
### jolla-devicelock-l10n
|
||||
- Updated : 1.48.2-1.5.1.jolla -- 1.48.3-1.6.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 7 of 7 strings translated (0 need review).
|
||||
### jolla-email-l10n
|
||||
- Updated : 1.293.2-1.7.1.jolla -- 1.293.5-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 233 of 233 strings translated (0 need review).
|
||||
### jolla-gallery-facebook-l10n
|
||||
- Updated : 1.74.3-1.5.1.jolla -- 1.74.4-1.6.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 14 of 14 strings translated (0 need review).
|
||||
### jolla-gallery-l10n
|
||||
- Updated : 1.172.2-1.8.1.jolla -- 1.172.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 17 of 17 strings translated (0 need review).
|
||||
### jolla-messages-l10n
|
||||
- Updated : 1.199.2-1.8.1.jolla -- 1.199.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 88 of 88 strings translated (0 need review).
|
||||
### jolla-settings-l10n
|
||||
- Updated : 1.145.2-1.7.1.jolla -- 1.145.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 22 of 22 strings translated (0 need review).
|
||||
### jolla-settings-sailfishos-l10n
|
||||
- Updated : 1.139.2-1.8.1.jolla -- 1.139.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 53 of 53 strings translated (0 need review).
|
||||
### jolla-settings-system-l10n
|
||||
- Updated : 1.556.5-1.12.1.jolla -- 1.556.6-1.13.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 631 of 631 strings translated (0 need review).
|
||||
### libgbinder-radio
|
||||
- Updated : 1.4.8-1.4.1.jolla -- 1.4.10-1.5.1.jolla
|
||||
- [gbinder-radio] Tweaked completion callback criteria.
|
||||
- [gbinder-radio] Added IMS types.
|
||||
### libglibutil
|
||||
- Updated : 1.0.61-1.12.1.jolla -- 1.0.62-1.13.1.jolla
|
||||
- [glibutil] Added gutil_strlen0()
|
||||
- [glibutil] Added gutil_strv_find_last() and gutil_strv_remove_dups()
|
||||
- [glibutil] Fixed a few weird unit test issues
|
||||
- [glibutil]
|
||||
- [license] Freshened up copyright
|
||||
### lipstick-jolla-home-qt5-l10n
|
||||
- Updated : 1.428.2-1.8.1.jolla -- 1.428.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 262 of 262 strings translated (0 need review).
|
||||
### mlsdb-data
|
||||
- Updated : 0.1.5-1.9.1.jolla -- 0.1.6-1.10.1.jolla
|
||||
- [mlsdb] Update Mozilla Location DB offline data to 2022-03-22.
|
||||
### ofono
|
||||
- Updated : 1.28+git3.1-1.12.1.jolla -- 1.28+git3.2-1.13.1.jolla
|
||||
- [ims] D-Bus access control for org.ofono.IpMultimediaSystem.
|
||||
- [ims] Disable IMS registration by default
|
||||
- [ims] Extend org.ofono.IpMultimediaSystem D-Bus API.
|
||||
- [ims] Tweak the treatment of the default Registration value
|
||||
- [watch] Added reg_tech watch.
|
||||
### ofono-binder-plugin
|
||||
- Updated : 1.0.2-1.1.1.jolla -- 1.1.1-1.2.1.jolla
|
||||
- Binaries added : libofonobinderpluginext - 1.1.1-1.2.1.jolla, libofonobinderpluginext-devel - 1.1.1-1.2.1.jolla
|
||||
- [ofono-binder] Allow lte value for MaxNonDataMode.
|
||||
- [ofono-binder] Fix startup with IRadioConfig 1.2 missing.
|
||||
- [ofono-binder] Make data profile ids configurable.
|
||||
- [build] Make sure strip is defined
|
||||
- [ext] Debian packaging for libofonobinderpluginext.
|
||||
- [ext] Don't invoke virtual method from a slot finalizer
|
||||
- [ext] Removed binder_ext_slot_plugin_name
|
||||
- [ofono-binder] Added IMS state registration tracker object.
|
||||
- [ofono-binder] Documented extPlugin config option
|
||||
- [ofono-binder] Extension for voice calls.
|
||||
- [ofono-binder] Fixed conversion of vec<string> to char**
|
||||
- [ofono-binder] Housekeeping
|
||||
- [ofono-binder] IMS control extension.
|
||||
- [ofono-binder] Prevent infinite recursion
|
||||
- [ofono-binder] Refactored SMS extension interface.
|
||||
- [ofono-binder] Send SMS over IMS when we can.
|
||||
- [ofono-binder] Support for plugin extensions.
|
||||
- [ofono-binder] Tweaked SMS extension interface.
|
||||
- [unit] More unit tests
|
||||
- [ofono-binder] Added ofono_ims_driver.
|
||||
### qmf-eas-plugin-l10n
|
||||
- Updated : 1.110.2-1.7.1.jolla -- 1.110.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 106 of 106 strings translated (0 need review).
|
||||
### qt5
|
||||
- Updated : 5.6.3+git46.1-1.16.2.jolla -- 5.6.3+git46.2-1.17.1.jolla
|
||||
- [qtbase] Protect QNetworkAccessManager on duplicated state changes.
|
||||
### sailfish-browser-l10n
|
||||
- Updated : 1.262.8-1.15.1.jolla -- 1.262.9-1.16.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 162 of 162 strings translated (0 need review).
|
||||
### sailfish-components-contacts-qt5-l10n
|
||||
- Updated : 1.198.2-1.7.1.jolla -- 1.198.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 158 of 158 strings translated (0 need review).
|
||||
### sailfish-components-filemanager-l10n
|
||||
- Updated : 1.99.4-1.7.1.jolla -- 1.99.5-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 65 of 65 strings translated (0 need review).
|
||||
### sailfish-components-webview-qt5-l10n
|
||||
- Updated : 1.83.4-1.11.1.jolla -- 1.83.5-1.12.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 123 of 123 strings translated (0 need review).
|
||||
### sailfish-office-l10n
|
||||
- Updated : 1.156.2-1.7.1.jolla -- 1.156.3-1.8.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 86 of 86 strings translated (0 need review).
|
||||
### sailfish-utilities
|
||||
- Updated : 0.1.14-1.5.11.jolla -- 0.1.16-1.6.1.jolla
|
||||
- [sailfish-utilities] Add a Restart Fingerprint button.
|
||||
- [sailfish-utilities] Updated project file for easier development.
|
||||
- [sailfish-utilities] Include license file as %license.
|
||||
### sailfishsilica-qt5-l10n
|
||||
- Updated : 1.156.3-1.6.1.jolla -- 1.156.6-1.7.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 49 of 107 strings translated (0 need review).
|
||||
### sailjail-permissions
|
||||
- Updated : 1.0.99-1.30.2.jolla -- 1.1.0-1.31.1.jolla
|
||||
- [permissions] Allow Location to access sensors to make compass work.
|
||||
### simkit-l10n
|
||||
- Updated : 1.59.3-1.5.1.jolla -- 1.59.4-1.6.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 14 of 14 strings translated (0 need review).
|
||||
### voicecall-ui-jolla
|
||||
- Updated : 1.14.38-1.5.1.jolla -- 1.14.38.1-1.6.1.jolla
|
||||
- [voicecall-ui] Combine desktop files.
|
||||
### voicecall-ui-jolla-l10n
|
||||
- Updated : 1.301.2-1.8.1.jolla -- 1.301.3-1.9.1.jolla
|
||||
- [l10n] Commit from Jolla localisation: 250 of 250 strings translated (0 need review).
|
||||
### xulrunner-qt5
|
||||
- Updated : 78.15.1+git24.1-1.30.1.jolla -- 78.15.1+git24.2-1.31.1.jolla
|
||||
- [sailfishos][embedlite] Drop radio and checkbox max size restriction.
|
||||
|
||||
-- the end --
|
|
@ -0,0 +1,638 @@
|
|||
============================================================================
|
||||
SAILFISH OS
|
||||
Changelog from 4.4.0.64 to 4.4.0.68
|
||||
2022-07-13
|
||||
============================================================================
|
||||
# PACKAGES MODIFIED
|
||||
|
||||
### acl
|
||||
- Updated : 2.2.53-1.6.16.jolla -- 2.2.53-1.7.6.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### acpid
|
||||
- Updated : 2.0.14-1.3.1.jolla -- 2.0.14+git3-1.1.1.jolla
|
||||
- [packaging] Fix systemd unit install path.
|
||||
- [packaging] Drop YAML packaging.
|
||||
- [packaging] Use submodule for packaging.
|
||||
### aliendalvik-configs
|
||||
- Updated : 10.0.59-1.4.1.jolla -- 10.0.59.1-1.5.1.jolla
|
||||
- [appsupport] increase the size of the /dev tmpfs to 2M.
|
||||
### aliendalvik-system
|
||||
- Updated : 10.0.0.62.1.1-1.8.1.jolla -- 10.0.0.62.1.4-1.9.1.jolla
|
||||
- [appsupport] avoid an issue with the selinux mount.
|
||||
- [appsupport] disallow access to /sys/fs/selinux.
|
||||
- [appsupport] keep metaState from input as EventHub::mapKey output. Fixes
|
||||
- [alien] Fix handling of networks.
|
||||
### alsa-utils
|
||||
- Updated : 1.2.3+git3-1.6.1.jolla -- 1.2.3+git4-1.7.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### attr
|
||||
- Updated : 2.4.47+git1-1.6.1.jolla -- 2.4.47+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### audit
|
||||
- Updated : 2.8.4+git7-1.8.12.jolla -- 2.8.4+git8-1.9.2.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### augeas
|
||||
- Updated : 1.12.0+git2-1.6.1.jolla -- 1.12.0+git4-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [augeas] Avoid installing tests with -libs.
|
||||
### autoconf-archive
|
||||
- Updated : 2019.01.06+git2-1.5.1.jolla -- 2019.01.06+git3-1.6.1.jolla
|
||||
- [git] Move more submodule repos to github.
|
||||
- [git] Move submodule repos to github.
|
||||
### binutils
|
||||
- Updated : 2.32+git3-1.7.5.jolla -- 2.32+git3.1-1.8.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### btrfs-progs
|
||||
- Updated : 3.16+git3-1.6.1.jolla -- 3.16+git4-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cmake
|
||||
- Updated : 3.19.3+git4-1.10.2.jolla -- 3.19.3+git5-1.11.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### commhistory-daemon
|
||||
- Updated : 0.8.43-1.11.1.jolla -- 0.8.44-1.12.1.jolla
|
||||
- [commhistory] Restore notification categories.
|
||||
### connman
|
||||
- Updated : 1.32+git180.2-1.16.1.jolla -- 1.32+git187-1.17.1.jolla
|
||||
- [blacklist monitor] Plugin to prevent IPv6 default routes on blacklisted ifs.
|
||||
- [device] Add wrapper to check if interface is blacklisted for plugins.
|
||||
- [inet] Do not add RTF_HOST for IPv6 default route.
|
||||
- [inet] Support setting metric value with IPv6 network route.
|
||||
- [ipconfig] Add wrapper to conf type getter for plugins.
|
||||
- [rtnl] Extend notify and better support IPv6 routes set via RA.
|
||||
- [service] Add wrappers for network and index lookup, getter for ipconfig.
|
||||
- [unit] Add blacklist monitor unit tests.
|
||||
- [connman] Apply upstream rtnl patches, revert debug disable commit.
|
||||
- [connman] Follow upstream in setting getter naming.
|
||||
- [main] Add path to localtime to config options.
|
||||
- [main] Add RegdomFollowsTimezone option for regdom changes.
|
||||
- [ofono] Do not change regdom when it follows timezone.
|
||||
- [timezone] Change regdom along timezone, use localtime config.
|
||||
- [connman] Add configurable run dir, drop legacy /var/run use. Fixes
|
||||
- [agent] Add support to check for active pending requests.
|
||||
- [service] Check if hidden service has a pending request.
|
||||
- [connman] Fix CVE-2022-23096 CVE-2022-23097 CVE-2022-23098. Fixes
|
||||
- [service] Implement counting of available services.
|
||||
- [wifi] Implement a heurestic for determening a weak WiFi.
|
||||
### connman-network-monitor
|
||||
- Updated : 0.0.0+git1-1.5.1.jolla -- 0.0.0+git2-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### crda
|
||||
- Updated : 4.14+git4-1.6.12.jolla -- 4.14+git5-1.7.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### createrepo_c
|
||||
- Updated : 0.12.0-1.2.1.jolla -- 0.12.0+git1-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-aarch64-binutils
|
||||
- Updated : 2.32+git3-1.7.2.jolla -- 2.32+git3.1-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-aarch64-gdb
|
||||
- Updated : 8.2.1+git8-1.5.2.jolla -- 8.2.1+git9-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-armv7hl-binutils
|
||||
- Updated : 2.32+git3-1.7.2.jolla -- 2.32+git3.1-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-armv7hl-gdb
|
||||
- Updated : 8.2.1+git8-1.5.2.jolla -- 8.2.1+git9-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-i486-binutils
|
||||
- Updated : 2.32+git3-1.7.2.jolla -- 2.32+git3.1-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cross-i486-gdb
|
||||
- Updated : 8.2.1+git8-1.7.2.jolla -- 8.2.1+git9-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### cups
|
||||
- Updated : 2.3.1+git2-1.7.2.jolla -- 2.3.1+git3-1.8.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### cython
|
||||
- Updated : 0.29.14+git2-1.6.1.jolla -- 0.29.14+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### dconf
|
||||
- Updated : 0.40.0+git3-1.8.1.jolla -- 0.40.0+git4-1.9.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### desktop-file-utils
|
||||
- Updated : 0.26+git3-1.7.1.jolla -- 0.26+git4-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### droid-config-xqau51
|
||||
- Updated : 0.1.24.1-1.6.1.jolla -- 0.1.24.3-1.7.1.jolla
|
||||
- Binaries removed : droid-config-xqau51-bluez4
|
||||
- [patterns] Add VoLTE enablers to adaptation pattern. Fixes
|
||||
- [configs] Package ofono-binder-plugin.
|
||||
- [configs] Remove BlueZ4 bluetoothd configs.
|
||||
- [configs] Remove BlueZ4 packaging. Fixes
|
||||
- [configs] Remove BlueZ4 PulseAudio related configuration.
|
||||
- [lib] Install oneshot scripts under /usr/lib.
|
||||
- [patterns] Add configuration to modify installed sailfish patterns.
|
||||
- [rpm] Obsolete ofono-configs-binder, we provide our own configs. Fixes
|
||||
### droid-config-xqau52
|
||||
- Updated : 0.1.24.1-1.6.1.jolla -- 0.1.24.3-1.7.1.jolla
|
||||
- Binaries removed : droid-config-xqau52-bluez4
|
||||
- [patterns] Add VoLTE enablers to adaptation pattern. Fixes
|
||||
- [configs] Package ofono-binder-plugin.
|
||||
- [configs] Remove BlueZ4 bluetoothd configs.
|
||||
- [configs] Remove BlueZ4 packaging. Fixes
|
||||
- [configs] Remove BlueZ4 PulseAudio related configuration.
|
||||
- [lib] Install oneshot scripts under /usr/lib.
|
||||
- [patterns] Add configuration to modify installed sailfish patterns.
|
||||
- [rpm] Obsolete ofono-configs-binder, we provide our own configs. Fixes
|
||||
### droid-src-sony-seine
|
||||
- Updated : 0.1.7-1.4.4.jolla -- 1.12.2-1.5.2.jolla
|
||||
- [dhs] Immediately fail Android builds on OBS if a command fails. Fixes
|
||||
- [droid-src] Add modem configs for Finnish providers Elisa and DNA.
|
||||
- [droid-src] Fix path of do not log battery status to kernel log patch.
|
||||
- [droid-src] hardware/adreno: Add back vendor->odm symlink for vulkan.qcom.so.
|
||||
- [hybris] device: sony: common: Do not log battery status to kernel log.
|
||||
- [droid-src] hybris: init: improve low memory killer thresholds. Fixes
|
||||
- [manifest] temporarily introduce manifest versioning.
|
||||
### droid-system-pdx201
|
||||
- Updated : 0.1.7-1.5.1.jolla -- 0.1.9-1.6.1.jolla
|
||||
- [dsd] helpers: Add support for product and system_ext.
|
||||
- [dsd] helpers: Replace all build user instances.
|
||||
- [dsd] helpers: Return true for setcap post commands.
|
||||
- [sparse] Add back vendor->odm symlink for vulkan.qcom.so.
|
||||
- [sparse] Add modem configs for Finnish providers Elisa and DNA.
|
||||
- [sparse] Do not log battery status to kernel log.
|
||||
- [hybris] init: improve low memory killer thresholds. Fixes
|
||||
### droid-system-pdx201-xqau51
|
||||
- Updated : 0.1.7-1.5.1.jolla -- 0.1.9-1.6.1.jolla
|
||||
- [dsd] helpers: Add support for product and system_ext.
|
||||
- [dsd] helpers: Replace all build user instances.
|
||||
- [dsd] helpers: Return true for setcap post commands.
|
||||
- [sparse] Add back vendor->odm symlink for vulkan.qcom.so.
|
||||
- [sparse] Add modem configs for Finnish providers Elisa and DNA.
|
||||
- [sparse] Do not log battery status to kernel log.
|
||||
- [hybris] init: improve low memory killer thresholds. Fixes
|
||||
### droid-system-pdx201-xqau52
|
||||
- Updated : 0.1.7-1.5.1.jolla -- 0.1.9-1.6.1.jolla
|
||||
- [dsd] helpers: Add support for product and system_ext.
|
||||
- [dsd] helpers: Replace all build user instances.
|
||||
- [dsd] helpers: Return true for setcap post commands.
|
||||
- [sparse] Add back vendor->odm symlink for vulkan.qcom.so.
|
||||
- [sparse] Add modem configs for Finnish providers Elisa and DNA.
|
||||
- [sparse] Do not log battery status to kernel log.
|
||||
- [hybris] init: improve low memory killer thresholds. Fixes
|
||||
### dtc
|
||||
- Updated : 1.4.7-1.2.1.jolla -- 1.4.7+git1-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### elfutils
|
||||
- Updated : 0.177+git1-1.6.1.jolla -- 0.177+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### embedlite-components-search-engines
|
||||
- Updated : 0.0.3-1.5.1.jolla -- 0.0.5-1.6.1.jolla
|
||||
- [search-engines] Update google search engine xml. Fixes
|
||||
### ffmpeg
|
||||
- Updated : 4.4.1+git1-1.6.1.jolla -- 4.4.1+git2-1.7.1.jolla
|
||||
- [ffmpeg] Enable ALAC codec. Fixes
|
||||
### flex
|
||||
- Updated : 2.6.4+git1-1.6.16.jolla -- 2.6.4+git2-1.7.6.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### fontconfig
|
||||
- Updated : 2.13.1+git3-1.5.1.jolla -- 2.13.1+git3.1-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### fribidi
|
||||
- Updated : 1.0.10+git1-1.6.1.jolla -- 1.0.10+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gdb
|
||||
- Updated : 8.2.1+git8-1.7.4.jolla -- 8.2.1+git9-1.8.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### git
|
||||
- Updated : 2.26.2+git1-1.2.2.jolla -- 2.26.2+git2-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gmp-droid
|
||||
- Updated : 0.5-1.3.1.jolla -- 0.5.1-1.4.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gnu-findutils
|
||||
- Updated : 4.6.0+git2-1.5.1.jolla -- 4.6.0+git3-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gnupg2
|
||||
- Updated : 2.0.4+git3-1.6.13.jolla -- 2.0.4+git4-1.7.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gnutls
|
||||
- Updated : 2.12.24+git1-1.6.12.jolla -- 2.12.24+git2-1.7.2.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### gpgme
|
||||
- Updated : 1.2.0+git6-1.6.1.jolla -- 1.2.0+git7-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### grubby
|
||||
- Updated : 7.0.8-1.5.1.jolla -- 7.0.8+git2-1.1.1.jolla
|
||||
- [packaging] Drop YAML packaging.
|
||||
- [packaging] Use submodule for packaging.
|
||||
### gtest
|
||||
- Updated : 1.11.0+git2-1.6.1.jolla -- 1.11.0+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### gupnp-av
|
||||
- Updated : 0.12.10-1.5.1.jolla -- 0.12.10-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### gupnp-dlna
|
||||
- Updated : 0.10.5-1.5.1.jolla -- 0.10.5-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### htop
|
||||
- Updated : 3.0.2+git1-1.2.1.jolla -- 3.0.2+git2-1.3.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### hunspell
|
||||
- Updated : 1.6.2+git1-1.6.1.jolla -- 1.6.2+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### iproute
|
||||
- Updated : 3.7.0+git6-1.6.1.jolla -- 3.7.0+git6.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### iso-codes
|
||||
- Updated : 3.79+git1-1.6.1.jolla -- 3.79+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### iw
|
||||
- Updated : 5.0.1+git1-1.6.1.jolla -- 5.0.1+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### jolla-common-configurations
|
||||
- Updated : 0.11.3-1.5.1.jolla -- 0.11.3.1-1.6.1.jolla
|
||||
- [connman] Use timed localtime, set regdom to follow timezone. Fixes
|
||||
### jolla-keyboard
|
||||
- Updated : 0.8.28.2-1.6.1.jolla -- 0.8.28.3-1.7.1.jolla
|
||||
- [keyboard] Decrease spacebar row punctionation keys.
|
||||
### jolla-settings-accounts
|
||||
- Updated : 0.4.57-1.5.1.jolla -- 0.4.57.1-1.6.1.jolla
|
||||
- [settings-accounts] Add password reset link to the forget password. Fixes
|
||||
- [settings-accounts] Show 'Update sign-in credentials' always for Google account. Fixes
|
||||
- [settings-accounts] Switch ToS views to use Gecko WebView.
|
||||
- [settings-accounts] Use externel browser for Google account. Fixes
|
||||
### jolla-settings-networking
|
||||
- Updated : 1.0.1-1.4.1.jolla -- 1.0.1.1-1.5.1.jolla
|
||||
- [settings-network] Add VoLTE registration switch for the 'Mobile network'. Fixes
|
||||
### jolla-settings-system
|
||||
- Updated : 1.1.51.1-1.8.4.jolla -- 1.1.51.2-1.9.1.jolla
|
||||
- [jolla-settings-system] Add rpm linking to the libsystemsettingsplugin.so. Fixes
|
||||
- [settings-system] Add packageName and whatProvides properties.
|
||||
- [system-settings] Add RPM info class.
|
||||
### kernel-cmdline
|
||||
- Updated : 1.1.0-1.2.42.jolla -- 1.1.1-1.3.8.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### kmod
|
||||
- Updated : 27-1.6.1.jolla -- 27+git1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libaccounts-qt5
|
||||
- Updated : 1.16+git1-1.6.1.jolla -- 1.16+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [libaccounts-qt5] Add %license file.
|
||||
### libatomic_ops
|
||||
- Updated : 7.4.4+git1-1.6.1.jolla -- 7.4.4+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libcanberra
|
||||
- Updated : 0.30+git1-1.6.1.jolla -- 0.30+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libcap
|
||||
- Updated : 2.25+git1-1.6.1.jolla -- 2.25+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libeigen3-devel
|
||||
- Updated : 3.3.5+git1-1.6.1.jolla -- 3.3.5+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libffi
|
||||
- Updated : 3.2.1+git1-1.6.1.jolla -- 3.2.1+git1.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libgpg-error
|
||||
- Updated : 1.27+git3-1.7.1.jolla -- 1.27+git3.1-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libhybris
|
||||
- Updated : 0.0.5.44-1.3.1.jolla -- 0.0.5.44.1-1.4.1.jolla
|
||||
- [packaging] Fix submodule URLs.
|
||||
### libical
|
||||
- Updated : 3.0.9+git1-1.5.1.jolla -- 3.0.9+git2-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libksba
|
||||
- Updated : 1.3.5+git2-1.6.1.jolla -- 1.3.5+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libnl
|
||||
- Updated : 3.4.0+git3-1.6.1.jolla -- 3.4.0+git3.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libqofono-qt5
|
||||
- Updated : 0.103-1.5.1.jolla -- 0.112-1.6.1.jolla
|
||||
- [libqofono] Support for IMS Registration property.
|
||||
- [tests] Drop context manipulation parts from connman tests.
|
||||
- [tests] Expect failure on context tests on Sailfish.
|
||||
- [tests] Fix sim manager tests.
|
||||
- [connectionmanager] Add support for reset contexts dbus call
|
||||
- [libqofono] Added QOfonoConnectionManager::resetContexts.
|
||||
- [libqofono] Housekeeping.
|
||||
- [libqofono] Run tests with sailfish-radio group.
|
||||
- [libqofono] Drop Qt4 legacy.
|
||||
- [libqofono] Fix phonesim setup in tests.
|
||||
- [libqofono] Move tests to /opt/tests.
|
||||
- [libqofono] Support for org.ofono.IpMultimediaSystem.
|
||||
- [libqofono] Fix systemctl path in tests.
|
||||
- [libqofono] Housekeeping.
|
||||
- [libqofono] Provide both In and Out annotations for signals
|
||||
- [libqofono-qt5] Have license file as %license.
|
||||
### libsbc
|
||||
- Updated : 1.3-1.6.1.jolla -- 1.3.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libselinux
|
||||
- Updated : 3.1+git2-1.5.12.jolla -- 3.1+git3-1.6.2.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### libsepol
|
||||
- Updated : 3.1+git2-1.5.1.jolla -- 3.1+git3-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### libtheora
|
||||
- Updated : 1.2.0alpha1+git2-1.6.1.jolla -- 1.2.0alpha1+git4-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [libtheora] Declare license file as %license.
|
||||
### libusb1
|
||||
- Updated : 1.0.20-1.6.1.jolla -- 1.0.20.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libutempter
|
||||
- Updated : 1.1.5+git2-1.6.17.jolla -- 1.1.5+git3-1.7.6.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libvncserver
|
||||
- Updated : 0.9.10+git1-1.2.1.jolla -- 0.9.10+git2-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libwbxml2
|
||||
- Updated : 0.11.6+git1-1.6.1.jolla -- 0.11.6+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libwebp
|
||||
- Updated : 1.2.0-1.8.2.jolla -- 1.2.0+git1-1.9.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### libwspcodec
|
||||
- Updated : 2.2.4-1.5.1.jolla -- 2.2.6-1.6.1.jolla
|
||||
- [libwspcodec] Allow empty quoted subject.
|
||||
- [libwspcodec] Include license as %license.
|
||||
- [rpm] Require rpm 4.11 for %license.
|
||||
### ltrace
|
||||
- Updated : 0.8.0+git1-1.2.1.jolla -- 0.8.0+git2-1.3.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### lvm2
|
||||
- Updated : 2.02.177+git5-1.7.1.jolla -- 2.02.177+git6-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### maliit-plugins
|
||||
- Updated : 0.99.0+git6-1.6.7.jolla -- 0.99.0+git7-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### modem_auto_config
|
||||
- Updated : 1.0.0-1.1.1.jolla -- 1.0.1-1.2.1.jolla
|
||||
- [modem-auto-config] Fix loading of modem configuration files.
|
||||
### nemo-qtmultimedia-plugins-gstvideotexturebackend
|
||||
- Updated : 0.1.2-1.5.1.jolla -- 0.1.4-1.6.1.jolla
|
||||
- [videotexturebackend] Fix null pointer derefenence from init. Fixes
|
||||
- [nemo-qtmultimedia-plugins] Add license file.
|
||||
### ninja
|
||||
- Updated : 1.10.2+git3-1.5.1.jolla -- 1.10.2+git4-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### nss-pem
|
||||
- Updated : 1.0.6+git1-1.5.12.jolla -- 1.0.6+git2-1.6.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### ofono-binder-plugin
|
||||
- Updated : 1.1.1-1.2.1.jolla -- 1.1.3-1.3.1.jolla
|
||||
- [ofono-binder] Use hangupWaitingOrBackground for incoming calls.
|
||||
- [ofono-binder] Hook up currentEmergencyNumberList indication.
|
||||
- [unit] Added unit_ext_plugin
|
||||
### ofono-ril-plugin
|
||||
- Updated : 1.0.2-1.2.2.jolla -- 1.0.2.1-1.3.1.jolla
|
||||
- [ofono-ril-plugin] Use HANGUP_WAITING_OR_BACKGROUND for incoming calls.
|
||||
### ofono-vendor-qti-radio-plugin
|
||||
- Updated : 1.0.0-1.1.1.jolla -- 1.0.1-1.2.1.jolla
|
||||
- [qti-radio] Housekeeping
|
||||
- [qti-radio] Provide ofono-ims-support.
|
||||
- [rpm] Bump libglibutil dependency version
|
||||
### oprofile
|
||||
- Updated : 1.2.0+git1-1.2.41.jolla -- 1.2.0+git2-1.3.8.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### orc
|
||||
- Updated : 0.4.26+git1-1.6.1.jolla -- 0.4.26+git1.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### parted
|
||||
- Updated : 3.0+mer5-1.2.1.jolla -- 3.0+mer6-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### passwd
|
||||
- Updated : 0.80+git1-1.6.1.jolla -- 0.80+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### pixman
|
||||
- Updated : 0.40.0+git1-1.6.1.jolla -- 0.40.0+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [pixman] Include license as %license.
|
||||
### polkit
|
||||
- Updated : 0.105+git8-1.8.6.jolla -- 0.105+git9-1.9.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### powertop
|
||||
- Updated : 2.10+git1-1.2.1.jolla -- 2.10+git2-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### procps-ng
|
||||
- Updated : 3.3.16+git1-1.5.1.jolla -- 3.3.16+git2-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### pykickstart
|
||||
- Updated : 3.25+git2-1.2.1.jolla -- 3.25+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python
|
||||
- Updated : 2.7.17+git7-1.6.1.jolla -- 2.7.17+git8-1.7.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### python3-cairo
|
||||
- Updated : 1.19.0+git1-1.6.1.jolla -- 1.19.0+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-certifi
|
||||
- Updated : 2020.04.05.1+git2-1.2.1.jolla -- 2020.04.05.1+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-chardet
|
||||
- Updated : 3.0.4+git2-1.2.1.jolla -- 3.0.4+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-cheetah
|
||||
- Updated : 3.2.4+git1-1.3.57.jolla -- 3.2.4+git2-1.4.13.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-distro
|
||||
- Updated : 1.5.0+git2-1.2.1.jolla -- 1.5.0+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-markdown
|
||||
- Updated : 3.2.1+git2-1.2.1.jolla -- 3.2.1+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-ordered-set
|
||||
- Updated : 3.1+git2-1.2.1.jolla -- 3.1+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-pycurl
|
||||
- Updated : 7.43.0.5+git2-1.2.2.jolla -- 7.43.0.5+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-pygments
|
||||
- Updated : 2.6.1+git2-1.2.11.jolla -- 2.6.1+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-requests
|
||||
- Updated : 2.23.0+git3-1.2.43.jolla -- 2.23.0+git4-1.3.8.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-six
|
||||
- Updated : 1.14.0+git2-1.5.1.jolla -- 1.14.0+git4-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [python3-six] Have license file as %license.
|
||||
### python3-urlgrabber
|
||||
- Updated : 4.1.0+git3-1.2.44.jolla -- 4.1.0+git4-1.3.9.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### python3-urllib3
|
||||
- Updated : 1.25.9+git2-1.2.1.jolla -- 1.25.9+git3-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### qmf-qt5
|
||||
- Updated : 4.0.4+git135-1.8.1.jolla -- 4.0.4+git136-1.9.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### qt5-qtdeclarative
|
||||
- Updated : 5.6.3+git21-1.8.1.jolla -- 5.6.3+git21.1-1.9.1.jolla
|
||||
- [tests] Remove unused submodule.
|
||||
### qt5-qtgraphicaleffects
|
||||
- Updated : 5.6.2+git3-1.5.1.jolla -- 5.6.2+git4-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### qt5-qtimageformats
|
||||
- Updated : 5.6.3+git2-1.5.1.jolla -- 5.6.3+git4-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [qtimageformats] Add %license file to packages.
|
||||
### qt5-qtwebkit
|
||||
- Updated : 5.6.2+git14-1.6.1.jolla -- 5.6.2+git16-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [qtwebkit] Strip debug symbols from the shared libraries. Fixes
|
||||
### qt5-qtxmlpatterns
|
||||
- Updated : 5.6.3+git3-1.6.1.jolla -- 5.6.3+git4-1.7.1.jolla
|
||||
- [packaging] Use submodule for packaging.
|
||||
### qtmozembed-qt5
|
||||
- Updated : 1.53.20-1.31.8.jolla -- 1.53.22-1.32.2.jolla
|
||||
- [qtmozembed] Avoid sending orientation signal on scene changes. Fixes
|
||||
- [tests] Split checkDefaultSearch of tst_searchengine to three.
|
||||
- [tests] Wait engine to load in initTestCase.
|
||||
### qtscenegraph-adaptation
|
||||
- Updated : 0.7.6-1.3.1.jolla -- 0.7.7-1.4.1.jolla
|
||||
- [customcontext] Fix copying QImages from hybris textures.
|
||||
### quilt
|
||||
- Updated : 0.64-1.6.1.jolla -- 0.64+git1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### quota
|
||||
- Updated : 4.05+git1-1.5.1.jolla -- 4.05+git2-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### re2c
|
||||
- Updated : 2.0.3+git2-1.5.1.jolla -- 2.0.3+git3-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### recode
|
||||
- Updated : 3.6-1.6.1.jolla -- 3.6-1.7.1.jolla
|
||||
- [packaging] Drop YAML packaging.
|
||||
- [packaging] Fix submodule URL.
|
||||
### rfkill
|
||||
- Updated : 0.5+git1-1.6.1.jolla -- 0.5+git2-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### rpm
|
||||
- Updated : 4.16.1.3+git8-1.10.1.jolla -- 4.16.1.3+git9-1.11.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### rpm-python
|
||||
- Updated : 4.16.1.3+git8-1.10.12.jolla -- 4.16.1.3+git9-1.11.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### rsync
|
||||
- Updated : 3.1.3+git1-1.5.1.jolla -- 3.1.3+git2-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### sailfish-components-webview-qt5
|
||||
- Updated : 1.5.9-1.19.1.jolla -- 1.5.9.2-1.20.1.jolla
|
||||
- [webview] Guard programmatic preference change with marker file. Fixes
|
||||
- [components-webview] Adjust keyboard margin based on position.
|
||||
- [components-webview] Fix keyboard margin calculation.
|
||||
- [components-webview] Respect component height. Fixes
|
||||
- [webview-docs] Add Jolla copyright to docs footer.
|
||||
- [webview-docs] Elaborate on using local content with CORS protection. Fixes
|
||||
### sailfish-content-browser-default
|
||||
- Updated : 0.1.4-1.2.1.jolla -- 0.1.6-1.3.1.jolla
|
||||
- [git] Bump up submodule sha1. Fixes
|
||||
- [git] Move submodule repos to github.
|
||||
### scons
|
||||
- Updated : 3.0.5+git2-1.6.13.jolla -- 3.0.5+git3-1.7.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### screen
|
||||
- Updated : 4.7.0+git2-1.7.12.jolla -- 4.7.0+git3-1.8.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### sdk-setup
|
||||
- Updated : 1.4.55-1.24.1.jolla -- 1.4.58-1.25.1.jolla
|
||||
- [sdk-manage] Obey also brand when matching SSU releases
|
||||
- [sdk-manage] Use tarball metadata to look up tooling.
|
||||
- [sdk-setup] Automatically load available bash completion.
|
||||
- [sdk-setup] Drop outdated bash completion.
|
||||
- [sdk-chroot] Utilize profile.d for bash setup.
|
||||
### shared-mime-info
|
||||
- Updated : 1.12-1.6.1.jolla -- 1.12+git1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### signon-qt5
|
||||
- Updated : 8.60.0+git3-1.8.18.jolla -- 8.60.0+git5-1.9.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [libsignon-qt5] Have license file as %license.
|
||||
- [libsignon-qt5] Have license file for libsignon-qt5 too.
|
||||
- [tests] Cleanup test definitions. Fixes
|
||||
### sound-theme-freedesktop
|
||||
- Updated : 0.8-1.6.1.jolla -- 0.8+git1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
- [sound-theme-freedesktop] Package license file.
|
||||
### spectacle
|
||||
- Updated : 0.32-1.2.44.jolla -- 0.33-1.3.8.jolla
|
||||
- [packaging] Drop YAML packaging.
|
||||
### sqlcipher
|
||||
- Updated : 3.4.1+git2-1.5.1.jolla -- 3.4.1+git2.1-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### stress-ng
|
||||
- Updated : 0.10.17-1.2.1.jolla -- 0.10.17+git1-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### systemd
|
||||
- Updated : 238+git13-1.13.1.jolla -- 238+git13.1-1.14.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### systemd-bootchart
|
||||
- Updated : 233+git2-1.7.1.jolla -- 233+git3-1.8.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### systemd-mini
|
||||
- Updated : 238+git13-1.2.1.jolla -- 238+git13.1-1.3.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### taglib
|
||||
- Updated : 1.12+git1-1.5.1.jolla -- 1.12+git2-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### tcpdump
|
||||
- Updated : 4.9.2+git1-1.3.1.jolla -- 4.9.2+git2-1.4.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### telepathy-qt5
|
||||
- Updated : 0.9.8+git2-1.9.1.jolla -- 0.9.8+git2.1-1.10.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### totem-pl-parser
|
||||
- Updated : 3.26.1+git1-1.6.1.jolla -- 3.26.1+git1.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### usbutils
|
||||
- Updated : 008-1.6.1.jolla -- 008.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### util-linux
|
||||
- Updated : 2.33+git3-1.7.15.jolla -- 2.33+git4-1.8.6.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### vim
|
||||
- Updated : 8.2.0000-1.5.10.jolla -- 8.2.0000.1-1.6.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### volume_key
|
||||
- Updated : 0.3.9+git2-1.6.1.jolla -- 0.3.9+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### wireless-regdb
|
||||
- Updated : 2020.04.29+git3-1.5.12.jolla -- 2020.04.29+git4-1.6.2.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### wpa_supplicant
|
||||
- Updated : 2.9+git4-1.7.1.jolla -- 2.9+git5-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### xdg-dbus-proxy
|
||||
- Updated : 0.1.2+git3-1.7.1.jolla -- 0.1.2+git4-1.8.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### xdg-user-dirs
|
||||
- Updated : 0.16+git2-1.6.1.jolla -- 0.16+git2.1-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### xulrunner-qt5
|
||||
- Updated : 78.15.1+git24.2-1.31.1.jolla -- 78.15.1+git24.3-1.32.1.jolla
|
||||
- [sailfishos][build] Add support for aarch64 to elfhack.
|
||||
- [sailfishos][build] Enable elf-hack. Fixes
|
||||
- [sailfishos][embedlite] Add a content controller stack. Fixes
|
||||
- [sailfishos][embedlite] Prefer profile directory for search engines. Fixes
|
||||
### yasm
|
||||
- Updated : 1.3.0+git2-1.5.3.jolla -- 1.3.0+git2.1-1.6.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### zlib
|
||||
- Updated : 1.2.11+git1-1.6.16.jolla -- 1.2.11+git2-1.7.6.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
### zxing-cpp
|
||||
- Updated : 1.1.1+git1-1.6.1.jolla -- 1.1.1+git2-1.7.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
### zypper
|
||||
- Updated : 1.14.38+git2-1.6.1.jolla -- 1.14.38+git3-1.7.1.jolla
|
||||
- [packaging] Fix submodule URL.
|
||||
|
||||
# PACKAGES ADDED
|
||||
|
||||
### ofono-modem-switcher-plugin
|
||||
- Binaries added : ofono-modem-switcher-plugin - 1.0.2-1.1.1.jolla
|
||||
- [modemswitcher] Write configuration to rild when it changes.
|
||||
- [modemswitcher] Undo configuration on uninstallation.
|
||||
- [modemswitcher] Changed package name
|
||||
- [modemswitcher] Housekeeping
|
||||
- [modemswitcher] Initial import.
|
||||
# PACKAGES REMOVED
|
||||
|
||||
### enchant
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
=======================================
|
||||
SAILFISH OS
|
||||
Changelog from 4.4.0.68 to 4.4.0.72
|
||||
2022-09-30
|
||||
=======================================
|
||||
# PACKAGES MODIFIED
|
||||
|
||||
### buteo-sync-plugins-sailfisheas
|
||||
- Updated : 0.1.2-1.5.1.jolla -- 0.1.3-1.6.2.jolla
|
||||
- [common] Derive sync service name from provider.
|
||||
### jolla-settings-accounts
|
||||
- Updated : 0.4.57.1-1.6.1.jolla -- 0.4.57.2-1.7.1.jolla
|
||||
- [settings-accounts] Support 3-legged OAuth 1.0a flow with external browser.
|
||||
### libjollasignonuiservice-qt5
|
||||
- Updated : 0.4.14-1.3.1.jolla -- 0.4.17-1.4.1.jolla
|
||||
- [libjollasignonservice] Get state query item from OAuth plugin.
|
||||
- [signonuiservice] Support external browser with 3-legged OAuth.
|
||||
- [signonuiservice] Switch OAuth to gecko WebView.
|
||||
### libsailfishkeyprovider-data-jolla
|
||||
- Updated : 0.0.18-1.2.1.jolla -- 0.1.0-1.3.2.jolla
|
||||
- [keyprovider-data] Add sailfisheas data.
|
||||
### mic
|
||||
- Updated : 1.0.9-1.3.57.jolla -- 1.0.11-1.4.13.jolla
|
||||
- [mic] Automatically create missing /var/lock.
|
||||
- [mic] Run scripts verbosely when mic is verbose
|
||||
- [mic] Run scripts with errexit when --erroronfail is used.
|
||||
- [packaging] Require kmod.
|
||||
### ofono-binder-plugin
|
||||
- Updated : 1.1.3-1.3.1.jolla -- 1.1.5-1.4.2.jolla
|
||||
- [debian] Bumped debhelper compat level to 7
|
||||
- [ofono-binder] Fix call forwarding query.
|
||||
- [debian] Updated changelog version
|
||||
- [ofono-binder] Fetch IMS registration state from one place.
|
||||
### patterns-sailfish
|
||||
- Updated : 1.1.6+git1-1.7.1.jolla -- 1.1.6+git2-1.8.1.jolla
|
||||
- [patterns] Require 'android-tools' from image-creation-tools.
|
||||
- [patterns] Require 'atruncate' from image-creation-tools.
|
||||
### pj-oss-project-config
|
||||
- Updated : 0.0.20-1.8.1.jolla -- 0.0.22-1.9.2.jolla
|
||||
- [prjconf] Ensure diffutils are available for build-compare.
|
||||
- [prjconf] Set source_date_epoch_from_changelog.
|
||||
### qmf-eas-plugin
|
||||
- Updated : 0.3.40-1.3.5.jolla -- 0.4.1-1.5.1.jolla
|
||||
- [qmf-eas-plugin] Fix checking credentials again after failure.
|
||||
- [qmf-eas-plugin] Use outlook.office.com domain in scopes.
|
||||
- [qmf-eas-plugin] Add account update page.
|
||||
- [qmf-eas-plugin] Add support for logging in with OAuth.
|
||||
- [qmf-eas] Remove declarations without implementation.
|
||||
### qtmozembed-qt5
|
||||
- Updated : 1.53.22-1.32.2.jolla -- 1.53.23-1.33.1.jolla
|
||||
- [qtmozembed] Use physicalDotsPerInch for EmbedLiteView dpi.
|
||||
### rpmlint
|
||||
- Updated : 2.0.0+git2-1.6.14.jolla -- 2.0.0+git2.1-1.7.3.jolla
|
||||
- [rpmlint] Ignore dynamic parts of version/release number.
|
||||
### sailfish-browser
|
||||
- Updated : 2.2.38.4-1.25.1.jolla -- 2.2.54.1-1.26.1.jolla
|
||||
- [browser] Ignore SIGPIPE.
|
||||
- [browser] Quick copy url to clipboard by press-and-hold url from toolbar.
|
||||
- [ua] Add linux for facebook user-agent.
|
||||
- [user-agent] Update preprocessed user agent overrides
|
||||
- [ua] Add linux for facebook user-agent.
|
||||
- [user-agent] Update user-agent overrides for 78.0.
|
||||
- [user-agent] Update preprocessed user agent overrides
|
||||
- [ua] Adjust linkedin.com user-agent.
|
||||
- [user-agent] Update user-agent overrides for 78.8.
|
||||
- [user-agent] Update preprocessed user agent overrides
|
||||
- [browser] Remove browser application name from google domain overrides.
|
||||
- [browser] Do not raise overlay when starting with requested url.
|
||||
- [browser] Webview test crash fix.
|
||||
- [tests] Stabilize declarativehistorymodel test case.
|
||||
- [browser] Fix icon for add to app grid.
|
||||
- [browser] Bump up package version
|
||||
- [browser] Cleanup general.useragent.override from preferences.
|
||||
- [browser] Fix popup input region.
|
||||
- [browser] Fix tab closing in app exit.
|
||||
- [browser] Explicitly state Camera permission.
|
||||
- [browser] Make it possible to configure max live tab count via setting.
|
||||
- [tests] Stop embedding after views&window destoyed (tst_webview).
|
||||
- [tests] Do not spy urlChanged signals on forwardBackwardNavigation case.
|
||||
- [tests] Mark tst_webview restart test as skipped.
|
||||
- [tests] Mark webcontainer of tst_webview as C++ owned.
|
||||
- [tests] Sleep 10ms whilst waiting for signals.
|
||||
- [tests] Add running property to the test object.
|
||||
- [tests] Cleanup tst_logins.
|
||||
- [browser] Add missing method for webpage mock
|
||||
- [tests] Improve test case comments.
|
||||
- [tests] The most recently used tab is activated when an active tab is closed.
|
||||
- [tests] Wait that created tabs are loaded.
|
||||
- [browser] After closing the active shift new active tab index.
|
||||
- [browser] Support touch events when selection active.
|
||||
- [user-agent] Update preprocessed user agent overrides for m.vk.com
|
||||
- [browser] Decreate overlay animation duration to 250ms.
|
||||
- [browser] Add invisible footer for favorite grid and history list.
|
||||
- [browser] Follow drag direction when opening / closing overlay.
|
||||
### sailfish-eas
|
||||
- Updated : 0.5.18.1-1.5.1.jolla -- 0.5.18.3-1.6.1.jolla
|
||||
- [sailfish-eas] Allow alternative provider and service name.
|
||||
- [sailfish-eas] Add OAuth to login flow and protocol commands.
|
||||
- [sailfish-eas] Ask to update credentials on failure.
|
||||
- [sailfish-eas] Implement token refresh on authentication error.
|
||||
### sailfish-mdm
|
||||
- Updated : 0.4.14-1.4.32.jolla -- 0.4.15-1.5.1.jolla
|
||||
- [docs] Fix links to User Manager docs.
|
||||
### sailfish-qdoc-template
|
||||
- Updated : 0.1.0-1.2.2.jolla -- 0.3-1.3.2.jolla
|
||||
- [sailfish-qdoc-template] Package documentation in HTML format.
|
||||
- [sailfish-qdoc-template] Allow linking between projects.
|
||||
- [sailfish-qdoc-template] Export BASE_URL to qdoc.
|
||||
### sailjail-permissions
|
||||
- Updated : 1.1.0-1.31.2.jolla -- 1.1.1-1.32.4.jolla
|
||||
- [docs] Advice on data migration.
|
||||
### sdk-setup
|
||||
- Updated : 1.4.58-1.25.1.jolla -- 1.4.61-1.26.1.jolla
|
||||
- [mb2] Fix passing arguments to make with %make_build.
|
||||
- [git-change-log] Allow for changes in tag naming conventions.
|
||||
- [git-change-log] Only consider tags reachable through first parent
|
||||
- [mb2] Prefer .changes.run file over .changes.
|
||||
### signon-plugin-oauth2-qt5
|
||||
- Updated : 0.21.7+git1-1.5.1.jolla -- 0.25+git1-1.6.1.jolla
|
||||
- [git] Move submodule repos to github.
|
||||
- [signon-plugin-oauth2] Update to version 0.25.
|
||||
### signon-qt5
|
||||
- Updated : 8.60.0+git5-1.9.1.jolla -- 8.60.0+git6-1.10.2.jolla
|
||||
- [libsignon] Increase maximum token storage size.
|
||||
### user-managerd
|
||||
- Updated : 0.8.5-1.7.2.jolla -- 0.8.7-1.8.2.jolla
|
||||
- [docs] Fix index file generation.
|
||||
- [user-managerd] Include license file as %license.
|
||||
|
||||
-- the end --
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,44 @@
|
|||
=====================================
|
||||
SAILFISH OS
|
||||
Changelog from 4.5.0.16 to 4.5.0.18
|
||||
2023-02-16
|
||||
=====================================
|
||||
|
||||
# Packages modified (9)
|
||||
|
||||
### declarative-transferengine-qt5
|
||||
Updated : 1.1.3-1.9.1.jolla -- 1.1.4-1.10.1.jolla
|
||||
- [declarative-transferengine] Add plugins.qmltypes for Sailfish.Tranferengine.
|
||||
### kf5bluezqt-bluez5
|
||||
Updated : 5.50.0+git4-1.8.1.jolla -- 5.50.0+git6-1.9.1.jolla
|
||||
- [kf5bluezqt] Add plugins.qmltypes.
|
||||
- [kf5bluezqt] Fix qmlplugindump crash.
|
||||
- [kf5bluezqt] Add qch to documentation package.
|
||||
- [kf5bluezqt] Force light mode in documentation.
|
||||
### libxslt
|
||||
Updated : 1.1.37+git1-1.7.2.jolla -- 1.1.37+git2-1.9.1.jolla
|
||||
- [libxslt] Backport patch to add missing symbolic links.
|
||||
### lipstick-jolla-home-qt5
|
||||
Updated : 1.25.13.2-1.14.1.jolla -- 1.25.13.3-1.15.1.jolla
|
||||
- [lipstick-jolla] Fix lock view ongoing call item being out of screen.
|
||||
### mer-qdoc-template
|
||||
Updated : 0.0.6-1.6.1.jolla -- 0.0.7-1.7.1.jolla
|
||||
- [mer-qdoc-template] Add left margin.
|
||||
- [mer-qdoc-template] Use px for margin definition.
|
||||
### sailfish-components-bluetooth-qt5
|
||||
Updated : 0.2.23.1-1.7.1.jolla -- 0.2.23.2-1.8.1.jolla
|
||||
- [components-bluetooth] Add plugins.qmltypes.
|
||||
### sailfish-qdoc-template
|
||||
Updated : 0.3-1.3.1.jolla -- 0.4-1.4.1.jolla
|
||||
- [sailfish-qdoc-template] Add left margin.
|
||||
- [sailfish-qdoc-template] Use px in margin definition.
|
||||
### sdk-setup
|
||||
Updated : 1.4.79-1.15.1.jolla -- 1.4.84-1.18.1.jolla
|
||||
- [sdk-info] Fix path to the 'ip' command.
|
||||
- [sdk-setup] Authenticate connections from sfdk.
|
||||
- [mb2] Use /usr/local/bin/git if available.
|
||||
- [sdk-init] Separate spec files per builder.
|
||||
- [sdk-make-qmltypes] Enable use with git submodules.
|
||||
### xulrunner-qt5
|
||||
Updated : 78.15.1+git33-1.19.1.jolla -- 78.15.1+git33.1-1.20.1.jolla
|
||||
- [sailfishos][gecko] Backport support for ffmpeg 5.0.
|
|
@ -0,0 +1,98 @@
|
|||
# SAILFISH OS: Changelog from 4.5.0.18 to 4.5.0.19
|
||||
|
||||
2023-03-15
|
||||
|
||||
## Packages modified (8)
|
||||
|
||||
### aliendalvik-configs
|
||||
- Updated : 11.0.26-1.17.1.jolla -- 11.0.26.2-1.18.1.jolla
|
||||
- [appsupport] Fix startup during SailfishOS boot.
|
||||
- [appsupport] Fix supplementary service control.
|
||||
- [appsupport] restart container after new wayland socket.
|
||||
|
||||
### connman
|
||||
- Updated : 1.32+git193-1.18.1.jolla -- 1.32+git194-1.19.1.jolla
|
||||
- [clat] Add frag hdr and dynamic pool support.
|
||||
- [clat] Avoid tayga zombies, fix config, improve state changes.
|
||||
- [clat] Call task stop only once.
|
||||
- [clat] Delay DNS query to ipv4only.arpa until nameservers are set.
|
||||
- [clat] Do DAD immediately when CLAT starts, then with timeout.
|
||||
- [clat] Do restart if interface is lost/invalid.
|
||||
- [clat] Do task stop when prefix cannot be resolved.
|
||||
- [clat] Ensure cleanup and stop in error cases.
|
||||
- [clat] Fix DAD return value use and reply processing.
|
||||
- [clat] Fix error cases, add leeway + tolerance for resolv errors.
|
||||
- [clat] Fix memory leaks and mem use error.
|
||||
- [clat] Fix prefix resolv failure shutdown case.
|
||||
- [clat] Fix process start and restart cases, handle segfaults.
|
||||
- [clat] Handle GResolv error cases better, support resolv retry.
|
||||
- [clat] Implement clat plugin to run tayga for IPv6 cellular.
|
||||
- [clat] Improve interface error handling and fix if error restart.
|
||||
- [clat] Improve tethering state monitor, stop if IPv6 goes away.
|
||||
- [clat] Keep ptr to ipconfig between IPv6 prep and restore.
|
||||
- [clat] Monitor tethering changes and enable double nat if on.
|
||||
- [clat] Prepare NAT when interface is up, add MTU 1260 for IPv4 route.
|
||||
- [clat] Re-add prefix query timeout, fix prefix change check.
|
||||
- [clat] Repeat prefix query for NO_ANSWER when doing initial one.
|
||||
- [clat] Stop CLAT if default changes to NULL.
|
||||
- [clat] Use wakeup timer for DAD and GResolv.
|
||||
- [connman] Implement CLAT support with tayga.
|
||||
- [inet] Add functions for creating and removing tun dev.
|
||||
- [inet] Add support for add/del neighbour proxy.
|
||||
- [inet] Expose ipv6_do_dad for plugins.
|
||||
- [inet] Review fix: Add functions for creating and removing tun dev.
|
||||
- [inet] Set host flag only for a single IPv6 host route.
|
||||
- [inet] Support adding IPv4 network routes with metric and MTU.
|
||||
- [ipconfig] Add get/set for ipaddress, accept_ra, ndproxy.
|
||||
- [nat] Add IPv6 preparation and double NAT support.
|
||||
- [ofono] Clear IP-address when protocol does not use it.
|
||||
- [packaging] Depend on tayga.
|
||||
- [service] Add getter wrapper for ipconfig.
|
||||
- [tools] Add ipconfig/inet dummies for iptables test.
|
||||
- [unit] Add CLAT plugin unit tests.
|
||||
- [unit] Add dummies for ipconfig ref/unref to iptables unit.
|
||||
|
||||
### droid-hal-pdx213
|
||||
- Updated : 1.9.5-1.6.6.jolla -- 1.9.6-1.7.1.jolla
|
||||
- [Kernel] Enable BNEP options
|
||||
- [kernel] Fix random restarts while using Android AppSupport or crash reporter
|
||||
- [kernel] input: sec_ts: Don't use ts->debug_flag to early, fix compile error.
|
||||
- [kernel] psi: Fix uaf issue when psi trigger is destroyed while being polled.
|
||||
- [kernel] usb: gadget: ffs: Remove IPC logging support.
|
||||
|
||||
### jolla-calendar
|
||||
- Updated : 1.1.5-1.9.1.jolla -- 1.1.6-1.10.1.jolla
|
||||
- [calendar] Fix date opened externally.
|
||||
- [jolla-calendar] Add a gotoDate() function to views.
|
||||
- [jolla-calendar] Adjust size of view in container.
|
||||
- [jolla-calendar] Bind view date in TabHeader instance.
|
||||
- [jolla-calendar] Fix DBus invocation to go to a specific date.
|
||||
- [jolla-calendar] Replace the gotoToday() signal with gotoDate()
|
||||
- [jolla-calendar] Use bindings for tab header height.
|
||||
|
||||
### jolla-settings-system
|
||||
- Updated : 1.2.5.3-1.15.1.jolla -- 1.2.5.4-1.16.1.jolla
|
||||
- [settings-system] Fix landscape lock screen with virtual keyboard.
|
||||
|
||||
### lipstick-jolla-home-qt5
|
||||
- Updated : 1.25.13.3-1.15.1.jolla -- 1.25.13.6-1.16.1.jolla
|
||||
- [lipstick-jolla-home] Fixup silica requirement.
|
||||
- [lipstick-jolla-home] Use File.exist to check Weather and Calendar widgets.
|
||||
- [lipstick-jolla-home] Allow captiveportal raise during Startup Wizard.
|
||||
|
||||
### sailfish-homescreen
|
||||
- Updated : 0.1.7-1.5.1.jolla -- 0.1.7.1-1.6.1.jolla
|
||||
- [sailfish-homescreen] Trigger captive portal during SUW when requested.
|
||||
|
||||
### sailfishsilica-qt5
|
||||
- Updated : 1.2.103-1.13.2.jolla -- 1.2.103.1-1.14.1.jolla
|
||||
- [silica] Add internal qmlImportPath.
|
||||
|
||||
## Packages added (1)
|
||||
|
||||
### tayga
|
||||
- Binaries added : tayga - 0.9.2+git3-1.1.1.jolla
|
||||
- [tayga] Remove the ignored patches as well because of OBS.
|
||||
- [tayga] EAM patches break CLAT, ignore them for now.
|
||||
- [tayga] Adding packaging data.
|
||||
|
|
@ -0,0 +1,170 @@
|
|||
SAILFISH OS: Changelog from 4.5.0.19 to 4.5.0.21
|
||||
|
||||
2023-07-11
|
||||
|
||||
## Packages modified (21)
|
||||
|
||||
### aliendalvik-configs
|
||||
Updated : 11.0.26.2-1.18.1.jolla -- 11.0.26.3-1.19.1.jolla
|
||||
- [appsupport] Remove mknod and mknodat syscalls from seccomp blocked list.
|
||||
|
||||
### droid-hal-pdx201
|
||||
Updated : 0.0.30-1.10.5.jolla -- 0.0.31-1.11.1.jolla
|
||||
- [kernel] free task immediately to prevent slab task_struct memory leak.
|
||||
|
||||
### droid-hal-pdx213
|
||||
Updated : 1.9.6-1.7.1.jolla -- 1.9.7-1.8.1.jolla
|
||||
- [kernel] enable CONFIG_SLAB.
|
||||
- [kernel] free task immediately to prevent slab task_struct memory leak.
|
||||
|
||||
### droidmedia
|
||||
Updated : 0.20220929.0-1.6.2.jolla -- 0.20230605.1-1.8.1.jolla
|
||||
- [droidmedia] Fix build for droid versions < 7.
|
||||
- [droidmedia] Add encoder setting for CBR/VBR.
|
||||
- [droidmedia] Fix ALOG usage.
|
||||
- [droidmedia] Fix AsyncCodecSource to be asynchronous.
|
||||
|
||||
### droidmedia-devel
|
||||
Updated : 0.20220929.0-1.4.3.jolla -- 0.20230605.1-1.6.1.jolla
|
||||
- [droidmedia] Fix build for droid versions < 7.
|
||||
- [droidmedia] Add encoder setting for CBR/VBR.
|
||||
- [droidmedia] Fix ALOG usage.
|
||||
- [droidmedia] Fix AsyncCodecSource to be asynchronous.
|
||||
|
||||
### gecko-camera
|
||||
Updated : 0.1.6-1.4.1.jolla -- 0.1.7-1.6.1.jolla
|
||||
- [gecko-camera] Set up the video encoder to produce CBR stream.
|
||||
- [gecko-camera] Use media buffers depending on CPU vendor.
|
||||
|
||||
### gecko-camera-droid-plugin
|
||||
Updated : 0.1.6-1.4.1.jolla -- 0.1.7-1.6.1.jolla
|
||||
- [gecko-camera] Set up the video encoder to produce CBR stream.
|
||||
- [gecko-camera] Use media buffers depending on CPU vendor.
|
||||
|
||||
### gmp-droid
|
||||
Updated : 0.7-1.4.1.jolla -- 0.8-1.5.1.jolla
|
||||
- [gmp-droid] Set up the video encoder to produce CBR stream.
|
||||
|
||||
### hybris-libsensorfw-qt5-binder
|
||||
Updated : 0.12.6-1.5.1.jolla -- 0.14.4-1.6.1.jolla
|
||||
- [sensorfw] Fix units used for sleep in sysfsadaptor.
|
||||
- [sensorfwd] Use ms values for getAvailableIntervals() reply.
|
||||
- [hybrisadaptor] Fix build errors from unresolvable id() calls.
|
||||
- [hybrisadaptor] Define data and interval ranges earlier.
|
||||
- [hybrisadaptor] Silence als/ps initial value warnings.
|
||||
- [sensorfwd] Add node id to diagnostic logging messages
|
||||
- [clientapitest] Move unit test operator== away from API header
|
||||
- [sensorfwd] Use float values for XYZ data.
|
||||
- [tapadaptor] Silence unused parameter warnings
|
||||
- [declinationfilter] Add unit suffixes to time values
|
||||
- [hybrisadaptor] Fix setDelay() return value
|
||||
- [nodebase] Remove dead code
|
||||
- [nodebase] Use closest supported data rate.
|
||||
- [nodebase] Use m_variableName convention for all members
|
||||
- [sensorfw] Add setDataRate() D-Bus method.
|
||||
- [sensorfw] Drop evaluateIntervalRequests overloading.
|
||||
- [sensorfw] Explicitly indicate interval time units.
|
||||
- [sensorfw] Handle intervals in microsecond granularity.
|
||||
- [sensorfw] Normalize setInterval() parameter order.
|
||||
- [hybrisadaptor] Force cancellation of pending POLL transaction.
|
||||
- [hybrisadaptor] Read and process capped number of events.
|
||||
- [hybrisadaptor] Shuffle cleanup order.
|
||||
- [sendorfwd] Skip deadlocking libgbinder cleanup.
|
||||
|
||||
### hybris-libsensorfw-qt5-hal
|
||||
Updated : 0.12.6-1.5.1.jolla -- 0.14.4-1.6.1.jolla
|
||||
- [sensorfw] Fix units used for sleep in sysfsadaptor.
|
||||
- [sensorfwd] Use ms values for getAvailableIntervals() reply.
|
||||
- [hybrisadaptor] Fix build errors from unresolvable id() calls.
|
||||
- [hybrisadaptor] Define data and interval ranges earlier.
|
||||
- [hybrisadaptor] Silence als/ps initial value warnings.
|
||||
- [sensorfwd] Add node id to diagnostic logging messages
|
||||
- [clientapitest] Move unit test operator== away from API header
|
||||
- [sensorfwd] Use float values for XYZ data.
|
||||
- [tapadaptor] Silence unused parameter warnings
|
||||
- [declinationfilter] Add unit suffixes to time values
|
||||
- [hybrisadaptor] Fix setDelay() return value
|
||||
- [nodebase] Remove dead code
|
||||
- [nodebase] Use closest supported data rate.
|
||||
- [nodebase] Use m_variableName convention for all members
|
||||
- [sensorfw] Add setDataRate() D-Bus method.
|
||||
- [sensorfw] Drop evaluateIntervalRequests overloading.
|
||||
- [sensorfw] Explicitly indicate interval time units.
|
||||
- [sensorfw] Handle intervals in microsecond granularity.
|
||||
- [sensorfw] Normalize setInterval() parameter order.
|
||||
- [hybrisadaptor] Force cancellation of pending POLL transaction.
|
||||
- [hybrisadaptor] Read and process capped number of events.
|
||||
- [hybrisadaptor] Shuffle cleanup order.
|
||||
- [sendorfwd] Skip deadlocking libgbinder cleanup.
|
||||
|
||||
### jolla-email
|
||||
Updated : 1.1.37-1.11.1.jolla -- 1.1.38-1.12.1.jolla
|
||||
- [email] Fix sharing url or plain text.
|
||||
|
||||
### libmce-glib
|
||||
Updated : 1.0.13-1.7.1.jolla -- 1.1.0-1.8.1.jolla
|
||||
- [debian] Bumped debhelper compat level to 7
|
||||
- [libmce-glib] A better way to silence deprecation warnings
|
||||
- [libmce-glib] Add an example application
|
||||
- [libmce-glib] Add MceInactivity object
|
||||
|
||||
### lipstick-jolla-home-qt5
|
||||
Updated : 1.25.13.6-1.16.1.jolla -- 1.25.13.7-1.17.1.jolla
|
||||
- [lipstick-jolla-home] Fix notification popups getting lost.
|
||||
|
||||
### mapplauncherd-booster-browser
|
||||
Updated : 0.1.3-1.6.1.jolla -- 0.2.0-1.7.1.jolla
|
||||
- [booster-browser] Drop booster-browser.service.
|
||||
|
||||
### mkcal-qt5
|
||||
Updated : 0.6.12-1.17.1.jolla -- 0.6.12.1-1.18.1.jolla
|
||||
- [mkcal] Fix alarm setting for recurring events.
|
||||
- [mkcal] Fix recurring event alarms with offset.
|
||||
|
||||
### nemo-qml-plugin-dbus-qt5
|
||||
Updated : 2.1.30-1.7.2.jolla -- 2.1.32-1.8.1.jolla
|
||||
- [nemo-dbus] Support a{sv} typed parameters.
|
||||
- [nemo-dbus] Deprecation warning on org.nemomobile.dbus import.
|
||||
|
||||
### qt5-plugin-position-geoclue
|
||||
Updated : 5.4.2+git2-1.6.1.jolla -- 5.4.2+git3-1.7.1.jolla
|
||||
- [qtlocation] Change OSM tileserver URLs to ones which are currently available.
|
||||
|
||||
### qt5-qtlocation-source
|
||||
Updated : 5.4.2+git2-1.6.1.jolla -- 5.4.2+git3-1.7.1.jolla
|
||||
- [qtlocation] Change OSM tileserver URLs to ones which are currently available.
|
||||
|
||||
### qt5-qtsensors
|
||||
Updated : 5.6.3+git2-1.5.1.jolla -- 5.6.3+git3-1.6.1.jolla
|
||||
- [sensorfw] Use setDataRate() for settings data rates.
|
||||
|
||||
### sensorfw-qt5
|
||||
Updated : 0.12.6-1.8.1.jolla -- 0.14.4-1.9.1.jolla
|
||||
- [sensorfw] Fix units used for sleep in sysfsadaptor.
|
||||
- [sensorfwd] Use ms values for getAvailableIntervals() reply.
|
||||
- [hybrisadaptor] Fix build errors from unresolvable id() calls.
|
||||
- [hybrisadaptor] Define data and interval ranges earlier.
|
||||
- [hybrisadaptor] Silence als/ps initial value warnings.
|
||||
- [sensorfwd] Add node id to diagnostic logging messages
|
||||
- [clientapitest] Move unit test operator== away from API header
|
||||
- [sensorfwd] Use float values for XYZ data.
|
||||
- [tapadaptor] Silence unused parameter warnings
|
||||
- [declinationfilter] Add unit suffixes to time values
|
||||
- [hybrisadaptor] Fix setDelay() return value
|
||||
- [nodebase] Remove dead code
|
||||
- [nodebase] Use closest supported data rate.
|
||||
- [nodebase] Use m_variableName convention for all members
|
||||
- [sensorfw] Add setDataRate() D-Bus method.
|
||||
- [sensorfw] Drop evaluateIntervalRequests overloading.
|
||||
- [sensorfw] Explicitly indicate interval time units.
|
||||
- [sensorfw] Handle intervals in microsecond granularity.
|
||||
- [sensorfw] Normalize setInterval() parameter order.
|
||||
- [hybrisadaptor] Force cancellation of pending POLL transaction.
|
||||
- [hybrisadaptor] Read and process capped number of events.
|
||||
- [hybrisadaptor] Shuffle cleanup order.
|
||||
- [sendorfwd] Skip deadlocking libgbinder cleanup.
|
||||
|
||||
### xulrunner-qt5
|
||||
Updated : 78.15.1+git33.1-1.20.1.jolla -- 78.15.1+git33.2-1.21.1.jolla
|
||||
- [sailfishos][embedlite] Enable dialog element.
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
SAILFISH OS: Changelog from 4.5.0.21 to 4.5.0.24
|
||||
2023-09-07
|
||||
|
||||
## Packages modified (13)
|
||||
|
||||
### declarative-transferengine-qt5
|
||||
Updated : 1.1.4-1.10.1.jolla -- 1.1.5-1.11.1.jolla
|
||||
- [declarative-transferengine] Do not clip download ProgressBar.
|
||||
|
||||
### jolla-calculator
|
||||
Updated : 1.0.8-1.4.1.jolla -- 1.0.9-1.5.1.jolla
|
||||
- [calculator] Use page high dragging area.
|
||||
|
||||
### jolla-keyboard
|
||||
Updated : 0.9.5-1.9.1.jolla -- 0.9.6-1.10.1.jolla
|
||||
- [keyboard] Allow text field to prevent vkb hiding.
|
||||
|
||||
### jolla-sessions-qt5
|
||||
Updated : 1.4.22-1.4.1.jolla -- 1.4.24.1-1.6.1.jolla
|
||||
- [jolla-sessions-qt5] Revert SUW done files changes.
|
||||
- [jolla-sessions] Update license to BSD.
|
||||
- [base-jolla-sessions-qt5] Startupwizard done files dir change.
|
||||
|
||||
### jolla-settings-system
|
||||
Updated : 1.2.5.4-1.16.1.jolla -- 1.2.5.7-1.17.1.jolla
|
||||
Binaries removed : jolla-settings-system-about-font-licenses, jolla-settings-system-about-package-licenses
|
||||
- [settings-system] Allow to pick a separate ringtone for SIM2.
|
||||
- [settings-system] Disable user closing virtual keyboard on lock input.
|
||||
- [settings-system] Stop tone preview playback when entering subpage.
|
||||
- [jolla-settings-system] Add 'Licenses' button to About product.
|
||||
- [settings-system] Remove obsolete about-font-licenses subpackage.
|
||||
|
||||
### mapplauncherd-booster-browser
|
||||
Updated : 0.2.0-1.7.1.jolla -- 0.2.1-1.8.1.jolla
|
||||
- [packaging] Use pkgconfig for systemd build requirement.
|
||||
|
||||
### nemo-qml-plugin-systemsettings
|
||||
Updated : 0.10.2-1.14.1.jolla -- 0.10.3-1.15.1.jolla
|
||||
- [systemsettings] Support another ringtone for SIM2.
|
||||
|
||||
### sailfish-components-weather-qt5
|
||||
Updated : 1.1.16-1.7.3.jolla -- 1.1.19-1.8.1.jolla
|
||||
- [sailfish-weather] Handle unauthorized API key.
|
||||
- [components-weather] Migrate nemo import name.
|
||||
- [components-weather] Remove bad connman-qt5 usage from unused location detection.
|
||||
|
||||
### sailfish-content-tones-default
|
||||
Updated : 0.16.1-1.2.1.jolla -- 0.16.2-1.3.1.jolla
|
||||
- [ringtones] Support profiled config for SIM2 ringtone.
|
||||
|
||||
### sailfish-fonts
|
||||
Updated : 0.3.0-1.4.1.jolla -- 0.3.1-1.6.1.jolla
|
||||
- [packaging] Remove unneeded font license package dependency.
|
||||
|
||||
### sailfish-weather
|
||||
Updated : 1.0.11-1.6.2.jolla -- 1.0.14-1.8.1.jolla
|
||||
- [sailfish-weather] Add credential error message below main header.
|
||||
- [sailfish-weather] Handle unauthorized API key.
|
||||
- [weather] Migrate nemo configuration plugin import name.
|
||||
|
||||
### voicecall-qt5
|
||||
Updated : 0.8.0-1.9.1.jolla -- 0.8.1-1.10.1.jolla
|
||||
- [voicecall] Support playing app-requested ringtone file.
|
||||
|
||||
### voicecall-ui-jolla
|
||||
Updated : 1.15.0.1-1.8.1.jolla -- 1.15.0.2-1.9.1.jolla
|
||||
- [voicecall-ui] Use separate ringtone for SIM2.
|
||||
|
||||
|
|
@ -0,0 +1,361 @@
|
|||
● Xperia10III
|
||||
State: degraded
|
||||
Jobs: 0 queued
|
||||
Failed: 3 units
|
||||
Since: Wed 2023-07-05 13:32:43 CEST; 2 days ago
|
||||
CGroup: /
|
||||
├─user.slice
|
||||
│ └─user-100000.slice
|
||||
│ ├─session-c4.scope
|
||||
│ │ ├─22470 sshd: defaultuser [priv]
|
||||
│ │ ├─22472 sshd: defaultuser@pts/1
|
||||
│ │ ├─22473 -bash
|
||||
│ │ └─22672 systemctl status
|
||||
│ ├─user@100000.service
|
||||
│ │ ├─ambienced.service
|
||||
│ │ │ └─5575 /usr/bin/invoker -o -s --type=qt5 /usr/bin/ambienced
|
||||
│ │ ├─alienaudio.service
|
||||
│ │ │ └─21162 /usr/bin/alienaudioservice -p pulseaudio -p sailfish
|
||||
│ │ ├─jolla-messages.service
|
||||
│ │ │ └─6756 /usr/bin/invoker --type=generic -- /usr/bin/sailjail -- /usr/bin/jolla-messages -prestart
|
||||
│ │ ├─booster\x2dbrowser.slice
|
||||
│ │ │ ├─booster-browser@sailfish-browser.service
|
||||
│ │ │ │ └─6457 /usr/bin/invoker --type=silica-session -- /usr/bin/sailjail --profile=sailfish-browser -- /usr/libexec/mapplauncherd/booster-browser --application=sailfish-browser
|
||||
│ │ │ └─booster-browser@jolla-email.service
|
||||
│ │ │ └─6460 /usr/bin/invoker --type=silica-session -- /usr/bin/sailjail --profile=jolla-email -- /usr/libexec/mapplauncherd/booster-browser --application=jolla-email
|
||||
│ │ ├─lipstick-security-ui.service
|
||||
│ │ │ └─6507 /usr/bin/invoker -s --type=silica-session /usr/libexec/lipstick-security-ui-launcher
|
||||
│ │ ├─ohm-session-agent.service
|
||||
│ │ │ └─5520 /usr/bin/ohm-session-agent
|
||||
│ │ ├─simkit-agent.service
|
||||
│ │ │ └─7067 /usr/bin/simkit
|
||||
│ │ ├─connectionagent.service
|
||||
│ │ │ └─5579 /usr/bin/invoker -o --type=qt5 /usr/bin/connectionagent
|
||||
│ │ ├─background.slice
|
||||
│ │ │ └─tracker-miner-fs-3.service
|
||||
│ │ │ └─7079 /usr/libexec/tracker-miner-fs-3
|
||||
│ │ ├─apkd-bridge-user.service
|
||||
│ │ │ └─21223 /usr/bin/invoker -o -s --global-syms --type=qt5 /usr/bin/apkd-bridge-user
|
||||
│ │ ├─dconf.service
|
||||
│ │ │ └─6069 /usr/libexec/dconf-service
|
||||
│ │ ├─pulseaudio.service
|
||||
│ │ │ ├─5794 /usr/bin/pulseaudio --daemonize=no -n --file=/etc/pulse/arm_droid_default.pa
|
||||
│ │ │ └─5924 /usr/libexec/audiosystem-passthrough/audiosystem-passthrough --module
|
||||
│ │ ├─mission-control-5.service
|
||||
│ │ │ └─6456 /usr/bin/invoker --type=generic --keep-oom-score /usr/libexec/mission-control-5
|
||||
│ │ ├─booster\x2dsilica\x2dmedia.slice
|
||||
│ │ │ ├─booster-silica-media@jolla-camera-lockscreen.service
|
||||
│ │ │ │ └─6463 /usr/bin/invoker --type=silica-session -- /usr/bin/sailjail --profile=jolla-camera-lockscreen -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera-lockscreen
|
||||
│ │ │ └─booster-silica-media@jolla-camera.service
|
||||
│ │ │ └─6451 /usr/bin/invoker --type=silica-session -- /usr/bin/sailjail --profile=jolla-camera -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera
|
||||
│ │ ├─xt9-server.service
|
||||
│ │ │ └─5576 /usr/libexec/xt9/xt9-server
|
||||
│ │ ├─alienkeyboard.service
|
||||
│ │ │ └─21183 /usr/bin/alienkeyboardservice
|
||||
│ │ ├─mpris-proxy.service
|
||||
│ │ │ └─6454 /usr/bin/mpris-proxy
|
||||
│ │ ├─profiled.service
|
||||
│ │ │ └─5567 /usr/bin/profiled
|
||||
│ │ ├─msyncd.service
|
||||
│ │ │ └─5571 /usr/bin/invoker -G -o -s --type=qt5 /usr/bin/msyncd
|
||||
│ │ ├─booster-qt5.service
|
||||
│ │ │ ├─ 5518 /usr/libexec/mapplauncherd/booster-qt5 --systemd --boot-mode
|
||||
│ │ │ ├─ 5547 /usr/bin/voicecall-manager
|
||||
│ │ │ ├─ 5588 /usr/bin/msyncd
|
||||
│ │ │ ├─ 5591 /usr/bin/ambienced
|
||||
│ │ │ ├─ 5593 /usr/bin/connectionagent
|
||||
│ │ │ ├─ 5595 /usr/bin/jolla-signon-ui
|
||||
│ │ │ ├─ 6462 /usr/bin/maliit-server
|
||||
│ │ │ ├─ 6465 /usr/bin/commhistoryd
|
||||
│ │ │ ├─ 6468 /usr/bin/contactsd
|
||||
│ │ │ ├─20348 booster [qt5]
|
||||
│ │ │ ├─21201 /usr/bin/apkd-bridge-user
|
||||
│ │ │ └─28380 /usr/bin/apkd-bridge
|
||||
│ │ ├─booster-generic.service
|
||||
│ │ │ ├─ 5524 /usr/libexec/mapplauncherd/booster-generic --systemd
|
||||
│ │ │ ├─ 5802 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:voicecall --private-bin=voicecall-ui --whitelist=/usr/share/voicecall-ui-jolla --whitelist=/usr/share/applications/voicecall-ui.desktop --whitelist=${HOME}/.local/share/voicecall-ui --whitelist=${HOME}/.config/voicecall-ui --whitelist=${HOME}/.cache/voicecall-ui --mkdir=${HOME}/.cache/com.jolla/voicecall --whitelist=${HOME}/.cache/com.jolla/voicecall --mkdir=${HOME}/.local/share/com.jolla/voicecall --whitelist=${HOME}/.local/share/com.jolla/voicecall --mkdir=${HOME}/.config/com.jolla/voicecall --whitelist=${HOME}/.config/com.jolla/voicecall --dbus-user.own=com.jolla.voicecall --dbus-user.own=com.jolla.voicecall.ui --profile=/etc/sailjail/permissions/voicecall-ui.profile --profile=/etc/sailjail/permissions/Phone.permission --profile=/etc/sailjail/permissions/CallRecordings.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Bluetooth.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/voicecall-ui -prestart
|
||||
│ │ │ ├─ 6464 /usr/libexec/mission-control-5
|
||||
│ │ │ ├─ 6497 /usr/bin/xdg-dbus-proxy --fd=4 --args=5
|
||||
│ │ │ ├─ 6506 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:voicecall --private-bin=voicecall-ui --whitelist=/usr/share/voicecall-ui-jolla --whitelist=/usr/share/applications/voicecall-ui.desktop --whitelist=${HOME}/.local/share/voicecall-ui --whitelist=${HOME}/.config/voicecall-ui --whitelist=${HOME}/.cache/voicecall-ui --mkdir=${HOME}/.cache/com.jolla/voicecall --whitelist=${HOME}/.cache/com.jolla/voicecall --mkdir=${HOME}/.local/share/com.jolla/voicecall --whitelist=${HOME}/.local/share/com.jolla/voicecall --mkdir=${HOME}/.config/com.jolla/voicecall --whitelist=${HOME}/.config/com.jolla/voicecall --dbus-user.own=com.jolla.voicecall --dbus-user.own=com.jolla.voicecall.ui --profile=/etc/sailjail/permissions/voicecall-ui.profile --profile=/etc/sailjail/permissions/Phone.permission --profile=/etc/sailjail/permissions/CallRecordings.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Bluetooth.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/voicecall-ui -prestart
|
||||
│ │ │ ├─ 6750 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:Messages --private-bin=jolla-messages --whitelist=/usr/share/jolla-messages --whitelist=/usr/share/applications/jolla-messages.desktop --whitelist=${HOME}/.local/share/jolla-messages --whitelist=${HOME}/.config/jolla-messages --whitelist=${HOME}/.cache/jolla-messages --mkdir=${HOME}/.cache/org.sailfishos/Messages --whitelist=${HOME}/.cache/org.sailfishos/Messages --mkdir=${HOME}/.local/share/org.sailfishos/Messages --whitelist=${HOME}/.local/share/org.sailfishos/Messages --mkdir=${HOME}/.config/org.sailfishos/Messages --whitelist=${HOME}/.config/org.sailfishos/Messages --dbus-user.own=org.sailfishos.Messages --profile=/etc/sailjail/permissions/jolla-messages.profile --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Messages.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/Ambience.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/jolla-messages -prestart
|
||||
│ │ │ ├─ 6781 /usr/bin/voicecall-ui -prestart
|
||||
│ │ │ ├─ 6821 /usr/libexec/telepathy-ring
|
||||
│ │ │ ├─ 6845 /usr/bin/xdg-dbus-proxy --fd=4 --args=5
|
||||
│ │ │ ├─ 6855 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:Messages --private-bin=jolla-messages --whitelist=/usr/share/jolla-messages --whitelist=/usr/share/applications/jolla-messages.desktop --whitelist=${HOME}/.local/share/jolla-messages --whitelist=${HOME}/.config/jolla-messages --whitelist=${HOME}/.cache/jolla-messages --mkdir=${HOME}/.cache/org.sailfishos/Messages --whitelist=${HOME}/.cache/org.sailfishos/Messages --mkdir=${HOME}/.local/share/org.sailfishos/Messages --whitelist=${HOME}/.local/share/org.sailfishos/Messages --mkdir=${HOME}/.config/org.sailfishos/Messages --whitelist=${HOME}/.config/org.sailfishos/Messages --dbus-user.own=org.sailfishos.Messages --profile=/etc/sailjail/permissions/jolla-messages.profile --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Messages.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/Ambience.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/jolla-messages -prestart
|
||||
│ │ │ ├─ 6998 /usr/bin/jolla-messages -prestart
|
||||
│ │ │ ├─15307 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:AudioRecorder --private-bin=sailfish-audiorecorder --whitelist=/usr/share/sailfish-audiorecorder --whitelist=/usr/share/applications/sailfish-audiorecorder.desktop --whitelist=${HOME}/.local/share/sailfish-audiorecorder --whitelist=${HOME}/.config/sailfish-audiorecorder --whitelist=${HOME}/.cache/sailfish-audiorecorder --mkdir=${HOME}/.cache/org.sailfishos/AudioRecorder --whitelist=${HOME}/.cache/org.sailfishos/AudioRecorder --mkdir=${HOME}/.local/share/org.sailfishos/AudioRecorder --whitelist=${HOME}/.local/share/org.sailfishos/AudioRecorder --mkdir=${HOME}/.config/org.sailfishos/AudioRecorder --whitelist=${HOME}/.config/org.sailfishos/AudioRecorder --dbus-user.own=org.sailfishos.AudioRecorder --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Documents.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/sailfish-audiorecorder
|
||||
│ │ │ ├─20561 booster [generic]
|
||||
│ │ │ ├─23111 /usr/bin/xdg-dbus-proxy --fd=4 --args=5
|
||||
│ │ │ ├─23113 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:AudioRecorder --private-bin=sailfish-audiorecorder --whitelist=/usr/share/sailfish-audiorecorder --whitelist=/usr/share/applications/sailfish-audiorecorder.desktop --whitelist=${HOME}/.local/share/sailfish-audiorecorder --whitelist=${HOME}/.config/sailfish-audiorecorder --whitelist=${HOME}/.cache/sailfish-audiorecorder --mkdir=${HOME}/.cache/org.sailfishos/AudioRecorder --whitelist=${HOME}/.cache/org.sailfishos/AudioRecorder --mkdir=${HOME}/.local/share/org.sailfishos/AudioRecorder --whitelist=${HOME}/.local/share/org.sailfishos/AudioRecorder --mkdir=${HOME}/.config/org.sailfishos/AudioRecorder --whitelist=${HOME}/.config/org.sailfishos/AudioRecorder --dbus-user.own=org.sailfishos.AudioRecorder --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Documents.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/bin/sailfish-audiorecorder
|
||||
│ │ │ └─23140 /usr/bin/sailfish-audiorecorder
|
||||
│ │ ├─sailfish-homescreen-services.service
|
||||
│ │ │ └─5517 /usr/libexec/sailfish-homescreen-services
|
||||
│ │ ├─jolla-signon-ui.service
|
||||
│ │ │ └─6448 /usr/bin/invoker -o -s --type=qt5 /usr/bin/jolla-signon-ui
|
||||
│ │ ├─commhistoryd.service
|
||||
│ │ │ └─6450 /usr/bin/invoker -o --type=qt5 /usr/bin/commhistoryd
|
||||
│ │ ├─voicecall-ui-prestart.service
|
||||
│ │ │ └─6458 /usr/bin/invoker -o -s --type=generic -- /usr/bin/sailjail -p voicecall-ui -- /usr/bin/voicecall-ui -prestart
|
||||
│ │ ├─voicecall-manager.service
|
||||
│ │ │ └─5569 /usr/bin/invoker -o --type=qt5 /usr/bin/voicecall-manager
|
||||
│ │ ├─init.scope
|
||||
│ │ │ ├─5424 /usr/lib/systemd/systemd --user --unit=default.target
|
||||
│ │ │ └─5427 (sd-pam)
|
||||
│ │ ├─maliit-server.service
|
||||
│ │ │ └─6447 /usr/bin/invoker --type=qt5 /usr/bin/maliit-server
|
||||
│ │ ├─timed-qt5.service
|
||||
│ │ │ └─5526 /usr/bin/timed-qt5 --systemd
|
||||
│ │ ├─contactsd.service
|
||||
│ │ │ └─7076 /usr/bin/invoker -o -s --global-syms --type=qt5 /usr/bin/contactsd
|
||||
│ │ ├─lipstick.service
|
||||
│ │ │ ├─ 5736 /usr/bin/lipstick -plugin evdevtouch -plugin evdevmouse -plugin evdevkeyboard:keymap=/usr/share/qt5/keymaps/droid.qmap --systemd
|
||||
│ │ │ └─23102 invoker --type=generic --id=sailfish-audiorecorder --single-instance /usr/bin/sailjail -p sailfish-audiorecorder.desktop /usr/bin/sailfish-audiorecorder
|
||||
│ │ ├─ngfd.service
|
||||
│ │ │ └─5570 /usr/bin/ngfd
|
||||
│ │ ├─telepathy-ring.service
|
||||
│ │ │ └─6773 /usr/bin/invoker --type=generic --keep-oom-score /usr/libexec/telepathy-ring
|
||||
│ │ ├─apkd-bridge.service
|
||||
│ │ │ └─21200 /usr/bin/invoker -o -s --global-syms --type=qt5 /usr/bin/apkd-bridge
|
||||
│ │ ├─obex.service
|
||||
│ │ │ └─6076 /usr/libexec/bluetooth/obexd -n --capability !/usr/bin/obex-capability --noplugin=syncevolution,ftp,mas,irmc --exclude=bluetooth:pcsuite --root=/home/defaultuser
|
||||
│ │ ├─dbus.service
|
||||
│ │ │ ├─ 5522 /usr/bin/dbus-daemon --session --address=systemd: --nofork --systemd-activation
|
||||
│ │ │ └─21612 /usr/libexec/geoclue-master
|
||||
│ │ └─booster-browser.service
|
||||
│ │ ├─7066 /usr/libexec/mapplauncherd/booster-browser --systemd
|
||||
│ │ └─7075 booster [browser]
|
||||
│ └─session-1.scope
|
||||
│ ├─ 5367 /usr/libexec/mapplauncherd/booster-silica-session --boot-mode
|
||||
│ ├─ 5502 (sd-pam)
|
||||
│ ├─ 5515 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:camera --private-bin=jolla-camera --whitelist=/usr/share/jolla-camera --whitelist=/usr/share/applications/jolla-camera.desktop --whitelist=${HOME}/.local/share/jolla-camera --whitelist=${HOME}/.config/jolla-camera --whitelist=${HOME}/.cache/jolla-camera --mkdir=${HOME}/.cache/com.jolla/camera --whitelist=${HOME}/.cache/com.jolla/camera --mkdir=${HOME}/.local/share/com.jolla/camera --whitelist=${HOME}/.local/share/com.jolla/camera --mkdir=${HOME}/.config/com.jolla/camera --whitelist=${HOME}/.config/com.jolla/camera --dbus-user.own=com.jolla.camera --profile=/etc/sailjail/permissions/booster-silica-media.profile --profile=/etc/sailjail/permissions/jolla-camera.profile --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Videos.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/Ambience.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera
|
||||
│ ├─ 6466 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:browser --private-bin=sailfish-browser --whitelist=/usr/share/sailfish-browser --whitelist=/usr/share/applications/sailfish-browser.desktop --whitelist=${HOME}/.local/share/sailfish-browser --whitelist=${HOME}/.config/sailfish-browser --whitelist=${HOME}/.cache/sailfish-browser --mkdir=${HOME}/.cache/org.sailfishos/browser --whitelist=${HOME}/.cache/org.sailfishos/browser --mkdir=${HOME}/.local/share/org.sailfishos/browser --whitelist=${HOME}/.local/share/org.sailfishos/browser --mkdir=${HOME}/.config/org.sailfishos/browser --whitelist=${HOME}/.config/org.sailfishos/browser --dbus-user.own=org.sailfishos.browser --dbus-user.own=org.sailfishos.browser.ui --profile=/etc/sailjail/permissions/booster-browser.profile --profile=/etc/sailjail/permissions/sailfish-browser.profile --profile=/etc/sailjail/permissions/WebView.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/Internet.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-browser --application=sailfish-browser
|
||||
│ ├─ 6467 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:email --private-bin=jolla-email --whitelist=/usr/share/jolla-email --whitelist=/usr/share/applications/jolla-email.desktop --whitelist=${HOME}/.local/share/jolla-email --whitelist=${HOME}/.config/jolla-email --whitelist=${HOME}/.cache/jolla-email --mkdir=${HOME}/.cache/com.jolla/email --whitelist=${HOME}/.cache/com.jolla/email --mkdir=${HOME}/.local/share/com.jolla/email --whitelist=${HOME}/.local/share/com.jolla/email --mkdir=${HOME}/.config/com.jolla/email --whitelist=${HOME}/.config/com.jolla/email --dbus-user.own=com.jolla.email --dbus-user.own=com.jolla.email.ui --profile=/etc/sailjail/permissions/booster-browser.profile --profile=/etc/sailjail/permissions/jolla-email.profile --profile=/etc/sailjail/permissions/Accounts.permission --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Phone.permission --profile=/etc/sailjail/permissions/Email.permission --profile=/etc/sailjail/permissions/WebView.permission --profile=/etc/sailjail/permissions/Internet.permission --profile=/etc/sailjail/permissions/AppLaunch.permission --profile=/etc/sailjail/permissions/Calendar.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-browser --application=jolla-email
|
||||
│ ├─ 6469 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:camera --private-bin=jolla-camera-lockscreen --whitelist=/usr/share/jolla-camera --whitelist=/usr/share/applications/jolla-camera-lockscreen.desktop --whitelist=${HOME}/.local/share/jolla-camera-lockscreen --whitelist=${HOME}/.config/jolla-camera-lockscreen --whitelist=${HOME}/.cache/jolla-camera-lockscreen --mkdir=${HOME}/.cache/com.jolla/camera --whitelist=${HOME}/.cache/com.jolla/camera --mkdir=${HOME}/.local/share/com.jolla/camera --whitelist=${HOME}/.local/share/com.jolla/camera --mkdir=${HOME}/.config/com.jolla/camera --whitelist=${HOME}/.config/com.jolla/camera --dbus-user.own=com.jolla.camera --profile=/etc/sailjail/permissions/booster-silica-media.profile --profile=/etc/sailjail/permissions/jolla-camera-lockscreen.profile --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Videos.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera-lockscreen
|
||||
│ ├─ 6479 /usr/libexec/lipstick-security-ui
|
||||
│ ├─ 6490 /usr/libexec/mapplauncherd/booster-silica-qt5 --daemon
|
||||
│ ├─ 6496 /usr/bin/xdg-dbus-proxy --fd=4 --args=9
|
||||
│ ├─ 6498 /usr/libexec/mapplauncherd/booster-silica-media --daemon
|
||||
│ ├─ 6499 /usr/bin/xdg-dbus-proxy --fd=4 --args=9
|
||||
│ ├─ 6502 booster [silica-media]
|
||||
│ ├─ 6503 /usr/bin/xdg-dbus-proxy --fd=4 --args=9
|
||||
│ ├─ 6509 /usr/bin/firejail --quiet --template=OrganizationName:org.sailfishos --template=ApplicationName:browser --private-bin=sailfish-browser --whitelist=/usr/share/sailfish-browser --whitelist=/usr/share/applications/sailfish-browser.desktop --whitelist=${HOME}/.local/share/sailfish-browser --whitelist=${HOME}/.config/sailfish-browser --whitelist=${HOME}/.cache/sailfish-browser --mkdir=${HOME}/.cache/org.sailfishos/browser --whitelist=${HOME}/.cache/org.sailfishos/browser --mkdir=${HOME}/.local/share/org.sailfishos/browser --whitelist=${HOME}/.local/share/org.sailfishos/browser --mkdir=${HOME}/.config/org.sailfishos/browser --whitelist=${HOME}/.config/org.sailfishos/browser --dbus-user.own=org.sailfishos.browser --dbus-user.own=org.sailfishos.browser.ui --profile=/etc/sailjail/permissions/booster-browser.profile --profile=/etc/sailjail/permissions/sailfish-browser.profile --profile=/etc/sailjail/permissions/WebView.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/Internet.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-browser --application=sailfish-browser
|
||||
│ ├─ 6514 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:camera --private-bin=jolla-camera --whitelist=/usr/share/jolla-camera --whitelist=/usr/share/applications/jolla-camera.desktop --whitelist=${HOME}/.local/share/jolla-camera --whitelist=${HOME}/.config/jolla-camera --whitelist=${HOME}/.cache/jolla-camera --mkdir=${HOME}/.cache/com.jolla/camera --whitelist=${HOME}/.cache/com.jolla/camera --mkdir=${HOME}/.local/share/com.jolla/camera --whitelist=${HOME}/.local/share/com.jolla/camera --mkdir=${HOME}/.config/com.jolla/camera --whitelist=${HOME}/.config/com.jolla/camera --dbus-user.own=com.jolla.camera --profile=/etc/sailjail/permissions/booster-silica-media.profile --profile=/etc/sailjail/permissions/jolla-camera.profile --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Videos.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/Ambience.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera
|
||||
│ ├─ 6515 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:camera --private-bin=jolla-camera-lockscreen --whitelist=/usr/share/jolla-camera --whitelist=/usr/share/applications/jolla-camera-lockscreen.desktop --whitelist=${HOME}/.local/share/jolla-camera-lockscreen --whitelist=${HOME}/.config/jolla-camera-lockscreen --whitelist=${HOME}/.cache/jolla-camera-lockscreen --mkdir=${HOME}/.cache/com.jolla/camera --whitelist=${HOME}/.cache/com.jolla/camera --mkdir=${HOME}/.local/share/com.jolla/camera --whitelist=${HOME}/.local/share/com.jolla/camera --mkdir=${HOME}/.config/com.jolla/camera --whitelist=${HOME}/.config/com.jolla/camera --dbus-user.own=com.jolla.camera --profile=/etc/sailjail/permissions/booster-silica-media.profile --profile=/etc/sailjail/permissions/jolla-camera-lockscreen.profile --profile=/etc/sailjail/permissions/Camera.permission --profile=/etc/sailjail/permissions/Audio.permission --profile=/etc/sailjail/permissions/Microphone.permission --profile=/etc/sailjail/permissions/Pictures.permission --profile=/etc/sailjail/permissions/Videos.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/Location.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera-lockscreen
|
||||
│ ├─ 6517 /usr/bin/xdg-dbus-proxy --fd=4 --args=9
|
||||
│ ├─ 6522 /usr/bin/firejail --quiet --template=OrganizationName:com.jolla --template=ApplicationName:email --private-bin=jolla-email --whitelist=/usr/share/jolla-email --whitelist=/usr/share/applications/jolla-email.desktop --whitelist=${HOME}/.local/share/jolla-email --whitelist=${HOME}/.config/jolla-email --whitelist=${HOME}/.cache/jolla-email --mkdir=${HOME}/.cache/com.jolla/email --whitelist=${HOME}/.cache/com.jolla/email --mkdir=${HOME}/.local/share/com.jolla/email --whitelist=${HOME}/.local/share/com.jolla/email --mkdir=${HOME}/.config/com.jolla/email --whitelist=${HOME}/.config/com.jolla/email --dbus-user.own=com.jolla.email --dbus-user.own=com.jolla.email.ui --profile=/etc/sailjail/permissions/booster-browser.profile --profile=/etc/sailjail/permissions/jolla-email.profile --profile=/etc/sailjail/permissions/Accounts.permission --profile=/etc/sailjail/permissions/Contacts.permission --profile=/etc/sailjail/permissions/Phone.permission --profile=/etc/sailjail/permissions/Email.permission --profile=/etc/sailjail/permissions/WebView.permission --profile=/etc/sailjail/permissions/Internet.permission --profile=/etc/sailjail/permissions/AppLaunch.permission --profile=/etc/sailjail/permissions/Calendar.permission --profile=/etc/sailjail/permissions/UserDirs.permission --profile=/etc/sailjail/permissions/RemovableMedia.permission --profile=/etc/sailjail/permissions/MediaIndexing.permission --profile=/etc/sailjail/permissions/CommunicationHistory.permission --profile=/etc/sailjail/permissions/Base.permission -- /usr/libexec/mapplauncherd/booster-browser --application=jolla-email
|
||||
│ ├─ 6526 booster [silica-session]
|
||||
│ ├─ 6770 /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera-lockscreen
|
||||
│ ├─ 6778 /usr/libexec/mapplauncherd/booster-silica-media --application=jolla-camera
|
||||
│ ├─ 6785 /usr/libexec/mapplauncherd/booster-browser --application=sailfish-browser
|
||||
│ ├─ 6788 /usr/libexec/mapplauncherd/booster-browser --application=jolla-email
|
||||
│ ├─ 6833 booster [browser]
|
||||
│ ├─ 6834 booster [browser]
|
||||
│ ├─20232 booster [silica-qt5]
|
||||
│ ├─22946 /usr/bin/jolla-settings -prestart
|
||||
│ ├─29805 booster [silica-media]
|
||||
│ └─31972 booster [silica-media]
|
||||
├─init.scope
|
||||
│ └─1 /usr/lib/systemd/systemd --unit=default.target
|
||||
└─system.slice
|
||||
├─ofono.service
|
||||
│ └─3308 /usr/sbin/ofonod -n --nobacktrace --noplugin=,he910,dun_gw_bluez5,hfp_bluez5,cdma_provision,isimodem,n900,u8500,qmimodem,gobi,cdmamodem,isiusb,nwmodem,ztemodem,iceramodem,huaweimodem,calypsomodem,swmodem,mbmmodem,hsomodem,ifxmodem,stemodem,dunmodem,hfpmodem,speedupmodem,phonesim,telitmodem,udev,udevng,bluez4,dun_gw_bluez4,hfp_ag_bluez4,hfp_bluez4,dun_gw_bluez5,hfp_bluez5
|
||||
├─dummy_netd.service
|
||||
│ └─3243 /usr/sbin/dummy_netd
|
||||
├─systemd-udevd.service
|
||||
│ └─687 /usr/lib/systemd/systemd-udevd
|
||||
├─connman-vpn.service
|
||||
│ └─5126 /usr/sbin/connman-vpnd -n
|
||||
├─mce.service
|
||||
│ └─2045 /usr/sbin/mce --systemd
|
||||
├─ohmd.service
|
||||
│ └─3128 /usr/sbin/ohmd --no-daemon --mlock=none
|
||||
├─droid-hal-init.service
|
||||
│ ├─ 3136 /sbin/droid-hal-init second_stage
|
||||
│ ├─ 3139 /sbin/droid-hal-init subcontext u:r:vendor_init:s0 12
|
||||
│ ├─ 3212 /system/bin/logd
|
||||
│ ├─ 3213 /system/bin/servicemanager
|
||||
│ ├─ 3214 /system/bin/hwservicemanager
|
||||
│ ├─ 3215 /vendor/bin/vndservicemanager /dev/vndbinder
|
||||
│ ├─ 3216 /odm/bin/qseecomd
|
||||
│ ├─ 3218 /odm/bin/hw/android.hardware.keymaster@4.0-service-qti
|
||||
│ ├─ 3337 /system/bin/hw/android.system.suspend@1.0-service
|
||||
│ ├─ 3339 /vendor/bin/hw/android.hardware.boot@1.1-service
|
||||
│ ├─ 3343 /vendor/bin/hw/android.hardware.configstore@1.1-service
|
||||
│ ├─ 3345 /vendor/bin/hw/vendor.qti.hardware.display.allocator-service
|
||||
│ ├─ 3585 /system/bin/tombstoned
|
||||
│ ├─ 3589 /vendor/bin/hw/android.hardware.camera.provider@2.4-service_64
|
||||
│ ├─ 3590 /system/bin/hw/android.hidl.allocator@1.0-service
|
||||
│ ├─ 3591 /vendor/bin/hw/android.hardware.bluetooth@1.0-service-qti
|
||||
│ ├─ 3592 /vendor/bin/hw/android.hardware.cas@1.2-service
|
||||
│ ├─ 3593 /vendor/bin/hw/android.hardware.gatekeeper@1.0-service
|
||||
│ ├─ 3594 /vendor/bin/hw/android.hardware.gnss@2.1-service-qti
|
||||
│ ├─ 3595 /vendor/bin/hw/android.hardware.health@2.0-service.sony
|
||||
│ ├─ 3596 /vendor/bin/hw/android.hardware.light@2.0-service.sony
|
||||
│ ├─ 3597 /vendor/bin/hw/android.hardware.memtrack@1.0-service
|
||||
│ ├─ 3598 /vendor/bin/hw/android.hardware.nfc@1.2-service
|
||||
│ ├─ 3599 /vendor/bin/hw/android.hardware.power@1.3-service.sony
|
||||
│ ├─ 3600 /system/bin/sh -c sleep 3; /vendor/bin/hw/android.hardware.sensors@2.1-service.multihal
|
||||
│ ├─ 3601 /vendor/bin/hw/android.hardware.thermal@1.0-service
|
||||
│ ├─ 3602 /vendor/bin/hw/android.hardware.wifi@1.0-service
|
||||
│ ├─ 3603 /odm/bin/hw/vendor.somc.hardware.miscta@1.0-service
|
||||
│ ├─ 3604 /system/bin/credstore /data/misc/credstore
|
||||
│ ├─ 3606 /system/bin/gpuservice
|
||||
│ ├─ 3608 /odm/bin/mlog_qmi_service
|
||||
│ ├─ 3609 /odm/bin/pd-mapper
|
||||
│ ├─ 3611 /odm/bin/pm-service
|
||||
│ ├─ 3612 /odm/bin/qrtr-ns -f
|
||||
│ ├─ 3613 /odm/bin/sct_service
|
||||
│ ├─ 3614 /odm/bin/ta_qmi_service
|
||||
│ ├─ 3615 /odm/bin/tad_static /dev/block/bootdevice/by-name/TA 0,16
|
||||
│ ├─ 3616 /odm/bin/tftp_server
|
||||
│ ├─ 3662 /system/bin/gatekeeperd /data/misc/gatekeeper
|
||||
│ ├─ 3665 /odm/bin/cnss-daemon -n -l
|
||||
│ ├─ 3668 /odm/bin/dpmd
|
||||
│ ├─ 3673 /odm/bin/hvdcp_opti
|
||||
│ ├─ 3674 /usr/libexec/droid-hybris/system/bin/minimediaservice
|
||||
│ ├─ 3675 /usr/libexec/droid-hybris/system/bin/minisfservice
|
||||
│ ├─ 3677 /system/bin/drmserver
|
||||
│ ├─ 3678 /system/bin/idmap2d
|
||||
│ ├─ 3679 /system/bin/incidentd
|
||||
│ ├─ 3683 /system/bin/keystore /data/misc/keystore
|
||||
│ ├─ 3684 media.extractor aextractor
|
||||
│ ├─ 3686 media.metrics diametrics
|
||||
│ ├─ 3688 /odm/bin/adpl
|
||||
│ ├─ 3689 /odm/bin/dpmd
|
||||
│ ├─ 3721 media.codec hw/android.hardware.media.omx@1.0-service
|
||||
│ ├─ 3740 /odm/bin/adsprpcd audiopd
|
||||
│ ├─ 3761 /odm/bin/cnd
|
||||
│ ├─ 3769 /odm/bin/qti
|
||||
│ ├─ 3772 /odm/bin/dpmQmiMgr
|
||||
│ ├─ 3773 /odm/bin/ims_rtp_daemon
|
||||
│ ├─ 3774 /odm/bin/imsqmidaemon
|
||||
│ ├─ 3775 /odm/bin/imsrcsd
|
||||
│ ├─ 3777 /vendor/bin/ipacm
|
||||
│ ├─ 3787 media.swcodec oid.media.swcodec/bin/mediaswcodec
|
||||
│ ├─ 3789 /apex/com.android.os.statsd/bin/statsd
|
||||
│ ├─ 3813 /system/bin/traced_probes
|
||||
│ ├─ 3817 /system/bin/traced
|
||||
│ ├─ 3828 /odm/bin/netmgrd
|
||||
│ ├─ 3835 /odm/bin/hw/qcrild
|
||||
│ ├─ 3844 /odm/bin/hw/qcrild -c 2
|
||||
│ ├─ 3848 /odm/bin/rmt_storage
|
||||
│ ├─ 3851 /odm/bin/imsdatadaemon
|
||||
│ ├─ 3852 /odm/bin/adsprpcd
|
||||
│ ├─ 3867 /odm/bin/adsprpcd sensorspd
|
||||
│ ├─ 3996 /odm/bin/cdsprpcd
|
||||
│ ├─ 4371 /vendor/bin/hw/android.hardware.sensors@2.1-service.multihal
|
||||
│ ├─ 5693 /vendor/bin/hw/vendor.qti.hardware.display.composer-service
|
||||
│ ├─ 7272 /odm/bin/msm_irqbalance -f /vendor/etc/msm_irqbalance.conf
|
||||
│ ├─ 7273 /odm/bin/pm-proxy
|
||||
│ └─31661 /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service.sony
|
||||
├─aliendalvik.service
|
||||
│ ├─18374 com.shazam.android
|
||||
│ ├─18389 org.thoughtcrime.securesms
|
||||
│ ├─21009 /bin/sh /usr/libexec/appsupport/start-aliendalvik.sh
|
||||
│ ├─21052 lxc-start --rcfile=/tmp/appsupport/aliendalvik/config --lxcpath=/tmp/appsupport -n aliendalvik -F
|
||||
│ ├─21059 /system/bin/init second_stage
|
||||
│ ├─21123 /system/bin/logd
|
||||
│ ├─21124 /system/bin/servicemanager
|
||||
│ ├─21125 /system/bin/hwservicemanager
|
||||
│ ├─21126 /system/bin/vndservicemanager /dev/vndbinder
|
||||
│ ├─21127 /system/bin/vold --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0
|
||||
│ ├─21224 /system/bin/hw/android.system.suspend@1.0-service
|
||||
│ ├─21237 /system/bin/tombstoned
|
||||
│ ├─21241 /apex/com.android.os.statsd/bin/statsd
|
||||
│ ├─21242 /system/bin/netd
|
||||
│ ├─21243 zygote64
|
||||
│ ├─21244 zygote
|
||||
│ ├─21245 /system/bin/hw/android.hardware.audio.service
|
||||
│ ├─21246 /system/bin/hw/android.hardware.configstore@1.1-service
|
||||
│ ├─21247 /system/bin/hw/android.hardware.drm@1.0-service
|
||||
│ ├─21248 /system/bin/hw/android.hardware.graphics.composer@2.1-service
|
||||
│ ├─21249 /system/bin/hw/android.hardware.thermal@1.0-service
|
||||
│ ├─21250 /system/bin/hw/android.hidl.allocator@1.0-service
|
||||
│ ├─21251 /system/bin/healthd
|
||||
│ ├─21252 /system/bin/audioserver
|
||||
│ ├─21253 /system/bin/credstore /data/misc/credstore
|
||||
│ ├─21254 /system/bin/gpuservice
|
||||
│ ├─21255 /system/bin/lmkd
|
||||
│ ├─21260 /system/bin/traced_probes
|
||||
│ ├─21261 /system/bin/traced
|
||||
│ ├─21262 media.codec hw/android.hardware.media.omx@1.0-service
|
||||
│ ├─21263 /system/bin/cameraserver
|
||||
│ ├─21264 /system/bin/drmserver
|
||||
│ ├─21265 /system/bin/idmap2d
|
||||
│ ├─21266 /system/bin/incidentd
|
||||
│ ├─21267 /system/bin/installd
|
||||
│ ├─21268 /system/bin/iorapd
|
||||
│ ├─21269 /system/bin/keystore /data/misc/keystore
|
||||
│ ├─21270 media.extractor aextractor
|
||||
│ ├─21271 media.metrics diametrics
|
||||
│ ├─21272 /system/bin/mediaserver
|
||||
│ ├─21273 /system/bin/storaged
|
||||
│ ├─21274 media.swcodec oid.media.swcodec/bin/mediaswcodec
|
||||
│ ├─21275 /system/bin/gatekeeperd /data/misc/gatekeeper
|
||||
│ ├─21488 system_server
|
||||
│ ├─21716 /system/bin/iorap.prefetcherd --input-fd 7 --output-fd 8
|
||||
│ ├─21779 com.android.systemui
|
||||
│ ├─21848 com.android.se
|
||||
│ ├─21870 com.android.phone
|
||||
│ ├─21884 android.ext.services
|
||||
│ ├─21937 webview_zygote
|
||||
│ ├─22024 com.android.providers.media.module
|
||||
│ ├─22031 com.jolla.inputmethod.remote
|
||||
│ ├─22089 android.process.acore
|
||||
│ ├─22125 android.process.media
|
||||
│ ├─22201 com.android.packageinstaller
|
||||
│ ├─22232 com.android.permissioncontroller
|
||||
│ ├─22350 com.android.providers.calendar
|
||||
│ ├─22424 com.android.externalstorage
|
||||
│ ├─22466 com.android.statementservice
|
||||
│ ├─22602 org.fdroid.fdroid
|
||||
│ ├─22664 app.organicmaps
|
||||
│ ├─22767 cm.aptoide.pt
|
||||
│ ├─22817 com.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0
|
||||
│ ├─23189 org.telegram.messenger
|
||||
│ ├─29151 com.spotify.music
|
||||
│ └─29350 /system/bin/mdnsd
|
||||
├─polkit.service
|
||||
│ └─6565 /usr/libexec/polkit-1/polkitd --no-debug
|
||||
├─bluetooth.service
|
||||
│ └─4615 /usr/libexec/bluetooth/bluetoothd -n
|
||||
├─sailfish-devicelock-encsfa-fpd.service
|
||||
│ └─3280 /usr/lib64/qt5/plugins/devicelock/encsfa-fpd --daemon
|
||||
├─wpa_supplicant.service
|
||||
│ └─5293 /usr/sbin/wpa_supplicant -u -c /etc/wpa_supplicant/wpa_supplicant.conf -O/var/run/wpa_supplicant -u -P /var/run/wpa_supplicant.pid
|
||||
├─systemd-journald.service
|
||||
│ └─667 /usr/lib/systemd/systemd-journald
|
||||
├─dsme.service
|
||||
│ ├─2239 /usr/sbin/dsme -- -p /usr/lib64/dsme/startup.so --systemd
|
||||
│ └─2254 /usr/sbin/dsme-server -p /usr/lib64/dsme/startup.so --systemd
|
||||
├─sailfish-fpd.service
|
||||
│ ├─22668 /usr/bin/sailfish-fpd --systemd
|
||||
│ └─22669 /usr/libexec/sailfish-fpd/fpslave --log-to=syslog --log-level=4
|
||||
├─connman.service
|
||||
│ └─5118 /usr/sbin/connmand -n -W nl80211 --nobacktrace --noplugin=wifi
|
||||
├─audiosystem-passthrough-dummy-af.service
|
||||
│ └─2036 /usr/libexec/audiosystem-passthrough/audiosystem-passthrough --address dummy
|
||||
├─quota_nld.service
|
||||
│ └─3244 /usr/sbin/quota_nld --foreground --no-console --print-below
|
||||
├─dbus-org.pacrunner.service
|
||||
│ └─6151 /usr/sbin/pacrunner -n
|
||||
├─sailjaild.service
|
||||
│ └─5117 /usr/bin/sailjaild --systemd
|
||||
├─bluebinder.service
|
||||
│ └─3791 /usr/sbin/bluebinder
|
||||
├─nfcd.service
|
||||
│ └─3289 /usr/sbin/nfcd -o syslog
|
||||
├─sensorfwd.service
|
||||
│ └─3309 /usr/sbin/sensorfwd -c=/etc/sensorfw/primaryuse.conf --systemd --log-level=warning --no-magnetometer-bg-calibration
|
||||
├─usb-moded.service
|
||||
│ └─3127 /usr/sbin/usb_moded --systemd --force-syslog
|
||||
├─systemd-ask-password-wall.service
|
||||
│ └─5149 /usr/bin/systemd-tty-ask-password-agent --wall
|
||||
├─udisks2.service
|
||||
│ └─12029 /usr/libexec/udisks2/udisksd
|
||||
├─dbus.service
|
||||
│ └─2084 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
|
||||
├─systemd-logind.service
|
||||
│ └─3242 /usr/lib/systemd/systemd-logind
|
||||
└─apkd.service
|
||||
└─5139 /usr/sbin/apkd
|
|
@ -0,0 +1,37 @@
|
|||
From 3d6b0e30abb2c5629a503c5ef1e9b3bc36717361 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:43:26 +0100
|
||||
Subject: [PATCH 1/5] xdg-shell: disable pinging of windows
|
||||
|
||||
Pings are buggy in aliendalvik and cause surfaceflinger (which acts as the
|
||||
wayland client) to crash, let's disable pinging windows.
|
||||
---
|
||||
src/wayland/meta-wayland-xdg-shell.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
|
||||
index 268a5e7c7..d47fedbdd 100644
|
||||
--- a/src/wayland/meta-wayland-xdg-shell.c
|
||||
+++ b/src/wayland/meta-wayland-xdg-shell.c
|
||||
@@ -1856,8 +1856,17 @@ meta_wayland_xdg_surface_ping (MetaWaylandShellSurface *shell_surface,
|
||||
MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (shell_surface);
|
||||
MetaWaylandXdgSurfacePrivate *priv =
|
||||
meta_wayland_xdg_surface_get_instance_private (xdg_surface);
|
||||
+MetaWaylandSurface *surface = meta_wayland_surface_role_get_surface (shell_surface);
|
||||
+
|
||||
+ MetaContext *context =
|
||||
+ meta_wayland_compositor_get_context (surface->compositor);
|
||||
+
|
||||
+ MetaDisplay *display = meta_context_get_display (context);
|
||||
+
|
||||
+
|
||||
+// xdg_wm_base_send_ping (priv->shell_client->resource, serial);
|
||||
+ meta_display_pong_for_serial (display, serial);
|
||||
|
||||
- xdg_wm_base_send_ping (priv->shell_client->resource, serial);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
From 962fedd7b3dc2abdb2c988c6aa040b187d001995 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:44:50 +0100
|
||||
Subject: [PATCH 2/5] window: force geometry scale for alien windows to 1
|
||||
|
||||
---
|
||||
src/core/window.c | 2 ++
|
||||
src/wayland/meta-window-wayland.c | 11 +++++++++++
|
||||
src/wayland/meta-window-wayland.h | 2 ++
|
||||
3 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/src/core/window.c b/src/core/window.c
|
||||
index 15d35864f..3ee584e46 100644
|
||||
--- a/src/core/window.c
|
||||
+++ b/src/core/window.c
|
||||
@@ -7333,6 +7333,8 @@ meta_window_set_wm_class (MetaWindow *window,
|
||||
window->res_name = g_strdup (wm_instance);
|
||||
window->res_class = g_strdup (wm_class);
|
||||
|
||||
+ meta_window_wayland_update_geometry_scale (window);
|
||||
+
|
||||
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_WM_CLASS]);
|
||||
}
|
||||
|
||||
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
|
||||
index f022fcf8d..b8d686f7d 100644
|
||||
--- a/src/wayland/meta-window-wayland.c
|
||||
+++ b/src/wayland/meta-window-wayland.c
|
||||
@@ -1088,9 +1088,20 @@ meta_window_wayland_get_geometry_scale (MetaWindow *window)
|
||||
if (!window->monitor)
|
||||
return 1;
|
||||
|
||||
+ if (g_str_has_prefix (window->res_class, "alien_"))
|
||||
+ return 1;
|
||||
+
|
||||
return get_window_geometry_scale_for_logical_monitor (window->monitor);
|
||||
}
|
||||
|
||||
+void
|
||||
+meta_window_wayland_update_geometry_scale (MetaWindow *window)
|
||||
+{
|
||||
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
||||
+
|
||||
+ set_geometry_scale_for_window (wl_window, meta_window_wayland_get_geometry_scale (window));
|
||||
+}
|
||||
+
|
||||
static void
|
||||
calculate_position (MetaWaylandWindowConfiguration *configuration,
|
||||
MtkRectangle *geometry,
|
||||
diff --git a/src/wayland/meta-window-wayland.h b/src/wayland/meta-window-wayland.h
|
||||
index a02224e55..d23d9ea90 100644
|
||||
--- a/src/wayland/meta-window-wayland.h
|
||||
+++ b/src/wayland/meta-window-wayland.h
|
||||
@@ -43,6 +43,8 @@ void meta_window_wayland_finish_move_resize (MetaWindow *window,
|
||||
|
||||
int meta_window_wayland_get_geometry_scale (MetaWindow *window);
|
||||
|
||||
+void meta_window_wayland_update_geometry_scale (MetaWindow *window);
|
||||
+
|
||||
void meta_window_place_with_placement_rule (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule);
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From be9b9c35a5a5fb8476da760f097fcf24053661d2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:40:16 +0100
|
||||
Subject: [PATCH 3/5] window-wayland: disable xdg_toplevel_minimize
|
||||
|
||||
Looks like the xdg toplevel implementation of aliendalvik uses this
|
||||
request quite extensively to hide windows when they go out of focus.
|
||||
That is not on user request and quite confusing, so force-disable the
|
||||
whole minimization behavior, we don't really need it anyway.
|
||||
---
|
||||
src/wayland/meta-wayland-xdg-shell.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
|
||||
index d47fedbdd..6a5044bbc 100644
|
||||
--- a/src/wayland/meta-wayland-xdg-shell.c
|
||||
+++ b/src/wayland/meta-wayland-xdg-shell.c
|
||||
@@ -538,7 +538,7 @@ xdg_toplevel_set_minimized (struct wl_client *client,
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
- meta_window_minimize (window);
|
||||
+// meta_window_minimize (window);
|
||||
}
|
||||
|
||||
static const struct xdg_toplevel_interface meta_wayland_xdg_toplevel_interface = {
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 32a1f557572f79b7cd0d4f24c38852282ec938c5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:48:36 +0100
|
||||
Subject: [PATCH 4/5] wayland/text-input: small improvements which are
|
||||
hopefully correct
|
||||
|
||||
---
|
||||
src/wayland/meta-wayland-text-input.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
|
||||
index 7befbcdb0..8d67e29be 100644
|
||||
--- a/src/wayland/meta-wayland-text-input.c
|
||||
+++ b/src/wayland/meta-wayland-text-input.c
|
||||
@@ -367,6 +367,8 @@ meta_wayland_text_input_set_focus (MetaWaylandTextInput *text_input,
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
+g_warning("MUTTER sending text input leave to surface %p res %p", text_input->surface, text_input->surface->resource);
|
||||
+if (text_input->surface->resource)
|
||||
zwp_text_input_v3_send_leave (resource,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
@@ -740,8 +742,7 @@ meta_wayland_text_input_create_new_resource (MetaWaylandTextInput *text_input,
|
||||
&meta_text_input_interface,
|
||||
text_input, text_input_destructor);
|
||||
|
||||
- if (text_input->surface &&
|
||||
- wl_resource_get_client (text_input->surface->resource) == client)
|
||||
+ if (client_matches_focus (text_input, client))
|
||||
{
|
||||
wl_list_insert (&text_input->focus_resource_list,
|
||||
wl_resource_get_link (text_input_resource));
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,200 @@
|
|||
From 02767d9d81bb167f7621189bcf3044910ab4daee Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:50:57 +0100
|
||||
Subject: [PATCH 5/5] wayland/text-input: replace focus for aliendalvik with
|
||||
another client
|
||||
|
||||
While there is wl_text_input v3 support in Aliendalvik, the implementation
|
||||
is so broken it's impossible to use, even with workarounds in the
|
||||
compositor.
|
||||
|
||||
Instead we don't use wl_text_input for Aliendalvik clients at all (we force
|
||||
disable the protocol in libwayland) and trick aliendalvik into using the
|
||||
dbus based protocol that's used on Sailfish OS. We shim this dbus
|
||||
based protocol in the alienkeyboard-maliit-shim. This process also acts as
|
||||
a wayland client for wl_text_input, and acts as a drop-in for wl_text_input
|
||||
of the aliendalvik surface.
|
||||
|
||||
This patch implements a really crude "magic string"-based solution for
|
||||
wayland clients to take over wl_text_input handling for the current surface.
|
||||
|
||||
This is a really bad hack, and it's quite insecure (every client knowing the
|
||||
magic string can take over handling, not just the shimming script).
|
||||
---
|
||||
src/wayland/meta-wayland-text-input.c | 93 +++++++++++++++++++++++----
|
||||
1 file changed, 81 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
|
||||
index 8d67e29be..0b55e2c25 100644
|
||||
--- a/src/wayland/meta-wayland-text-input.c
|
||||
+++ b/src/wayland/meta-wayland-text-input.c
|
||||
@@ -81,6 +81,9 @@ struct _MetaWaylandTextInput
|
||||
} preedit;
|
||||
|
||||
guint done_idle_id;
|
||||
+
|
||||
+ struct wl_resource *magic_resource;
|
||||
+
|
||||
};
|
||||
|
||||
struct _MetaWaylandTextInputFocus
|
||||
@@ -306,6 +309,12 @@ meta_wayland_text_input_focus_new (MetaWaylandTextInput *text_input)
|
||||
|
||||
return CLUTTER_INPUT_FOCUS (focus);
|
||||
}
|
||||
+static void
|
||||
+move_resources (struct wl_list *destination, struct wl_list *source)
|
||||
+{
|
||||
+ wl_list_insert_list (destination, source);
|
||||
+ wl_list_init (source);
|
||||
+}
|
||||
|
||||
static void
|
||||
text_input_handle_focus_surface_destroy (struct wl_listener *listener,
|
||||
@@ -313,17 +322,54 @@ text_input_handle_focus_surface_destroy (struct wl_listener *listener,
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_container_of (listener, text_input,
|
||||
surface_listener);
|
||||
+g_warning("MUTTER: text input on focus surface destroy");
|
||||
|
||||
- meta_wayland_text_input_set_focus (text_input, NULL);
|
||||
-}
|
||||
+ text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
+
|
||||
+ if (text_input->surface)
|
||||
+ {
|
||||
+ if (!wl_list_empty (&text_input->focus_resource_list))
|
||||
+ {
|
||||
+ ClutterInputFocus *focus = text_input->input_focus;
|
||||
+ ClutterInputMethod *input_method;
|
||||
+ struct wl_resource *resource;
|
||||
+
|
||||
+ if (clutter_input_focus_is_focused (focus))
|
||||
+ {
|
||||
+ input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
+ clutter_input_focus_reset (focus);
|
||||
+ meta_wayland_text_input_focus_flush_done (focus);
|
||||
+ clutter_input_method_focus_out (input_method);
|
||||
+ }
|
||||
+
|
||||
+ wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
+ {
|
||||
+ if (resource != text_input->magic_resource)
|
||||
+ {
|
||||
+ zwp_text_input_v3_send_leave (resource,
|
||||
+ text_input->surface->resource);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ move_resources (&text_input->resource_list,
|
||||
+ &text_input->focus_resource_list);
|
||||
+
|
||||
+ if (text_input->magic_resource)
|
||||
+ {
|
||||
+ g_warning("INPUT: tehre's a magic resource though,readding");
|
||||
+ wl_list_remove (wl_resource_get_link (text_input->magic_resource));
|
||||
+ wl_list_insert (&text_input->focus_resource_list, wl_resource_get_link (text_input->magic_resource));
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ wl_list_remove (&text_input->surface_listener.link);
|
||||
+ text_input->surface = NULL;
|
||||
+ }
|
||||
|
||||
-static void
|
||||
-move_resources (struct wl_list *destination, struct wl_list *source)
|
||||
-{
|
||||
- wl_list_insert_list (destination, source);
|
||||
- wl_list_init (source);
|
||||
}
|
||||
|
||||
+
|
||||
static void
|
||||
move_resources_for_client (struct wl_list *destination,
|
||||
struct wl_list *source,
|
||||
@@ -367,10 +413,12 @@ meta_wayland_text_input_set_focus (MetaWaylandTextInput *text_input,
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
-g_warning("MUTTER sending text input leave to surface %p res %p", text_input->surface, text_input->surface->resource);
|
||||
-if (text_input->surface->resource)
|
||||
- zwp_text_input_v3_send_leave (resource,
|
||||
- text_input->surface->resource);
|
||||
+ g_warning("MUTTER sending text input leave to surface %p res %p", text_input->surface, text_input->surface->resource);
|
||||
+ if (text_input->surface->resource && resource != text_input->magic_resource)
|
||||
+ {
|
||||
+ zwp_text_input_v3_send_leave (resource,
|
||||
+ text_input->surface->resource);
|
||||
+ }
|
||||
}
|
||||
|
||||
move_resources (&text_input->resource_list,
|
||||
@@ -400,6 +448,7 @@ if (text_input->surface->resource)
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
+if (resource != text_input->magic_resource)
|
||||
zwp_text_input_v3_send_enter (resource, surface->resource);
|
||||
}
|
||||
}
|
||||
@@ -413,6 +462,12 @@ text_input_destructor (struct wl_resource *resource)
|
||||
|
||||
g_hash_table_remove (text_input->resource_serials, resource);
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
+
|
||||
+ if (text_input->magic_resource == resource)
|
||||
+ {
|
||||
+ g_warning("INPUT: The magic resource got destroyed, unsettng");
|
||||
+ text_input->magic_resource = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -429,6 +484,11 @@ client_matches_focus (MetaWaylandTextInput *text_input,
|
||||
if (!text_input->surface)
|
||||
return FALSE;
|
||||
|
||||
+ if (text_input->magic_resource &&
|
||||
+ client == wl_resource_get_client (text_input->magic_resource))
|
||||
+ return TRUE;
|
||||
+
|
||||
+
|
||||
return client == wl_resource_get_client (text_input->surface->resource);
|
||||
}
|
||||
|
||||
@@ -467,6 +527,14 @@ text_input_set_surrounding_text (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
+ if (g_strcmp0 (text, "magictext") == 0)
|
||||
+ {
|
||||
+ g_warning("INPUT GOT THE MAGIC TEXT, inserting us into focus list");
|
||||
+ text_input->magic_resource = resource;
|
||||
+ wl_list_remove (wl_resource_get_link (text_input->magic_resource));
|
||||
+ wl_list_insert (&text_input->focus_resource_list, wl_resource_get_link (text_input->magic_resource));
|
||||
+ }
|
||||
+
|
||||
if (!client_matches_focus (text_input, client))
|
||||
return;
|
||||
|
||||
@@ -717,6 +785,7 @@ meta_wayland_text_input_new (MetaWaylandSeat *seat)
|
||||
void
|
||||
meta_wayland_text_input_destroy (MetaWaylandTextInput *text_input)
|
||||
{
|
||||
+g_warning("MUTTER text input itself destroy, setting to NULL");
|
||||
meta_wayland_text_input_set_focus (text_input, NULL);
|
||||
g_object_unref (text_input->input_focus);
|
||||
g_hash_table_destroy (text_input->resource_serials);
|
||||
@@ -746,7 +815,7 @@ meta_wayland_text_input_create_new_resource (MetaWaylandTextInput *text_input,
|
||||
{
|
||||
wl_list_insert (&text_input->focus_resource_list,
|
||||
wl_resource_get_link (text_input_resource));
|
||||
-
|
||||
+if (text_input_resource != text_input->magic_resource)
|
||||
zwp_text_input_v3_send_enter (text_input_resource,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
From 94b98f0e8e05e0fcd6398eefd15397f61b9acc85 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:30:02 +0100
|
||||
Subject: [PATCH 1/2] server: don't be so angry about client errors
|
||||
|
||||
It seems the aliendalvik sometimes doesn't comply to the protocols
|
||||
and cause protocol errors in libwayland. Things work fine if we just
|
||||
ignore them instead of terminating the connection to the compositor,
|
||||
so be a bit more gentle about those errors.
|
||||
---
|
||||
src/wayland-server.c | 31 +++++++++++++++++++------------
|
||||
1 file changed, 19 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/wayland-server.c b/src/wayland-server.c
|
||||
index e784ef6..b3a29eb 100644
|
||||
--- a/src/wayland-server.c
|
||||
+++ b/src/wayland-server.c
|
||||
@@ -381,10 +381,12 @@ wl_client_connection_data(int fd, uint32_t mask, void *data)
|
||||
resource = wl_map_lookup(&client->objects, p[0]);
|
||||
resource_flags = wl_map_lookup_flags(&client->objects, p[0]);
|
||||
if (resource == NULL) {
|
||||
- wl_resource_post_error(client->display_resource,
|
||||
- WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
- "invalid object %u", p[0]);
|
||||
- break;
|
||||
+// wl_resource_post_error(client->display_resource,
|
||||
+// WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
+// "invalid object %u", p[0]);
|
||||
+ wl_log("DISCARDING request from buggy client: invalid object %u\n", p[0]);
|
||||
+ wl_connection_consume(connection, size);
|
||||
+ goto next;
|
||||
}
|
||||
|
||||
object = &resource->object;
|
||||
@@ -421,14 +423,19 @@ wl_client_connection_data(int fd, uint32_t mask, void *data)
|
||||
break;
|
||||
} else if (closure == NULL ||
|
||||
wl_closure_lookup_objects(closure, &client->objects) < 0) {
|
||||
- wl_resource_post_error(client->display_resource,
|
||||
- WL_DISPLAY_ERROR_INVALID_METHOD,
|
||||
- "invalid arguments for %s#%u.%s",
|
||||
- object->interface->name,
|
||||
- object->id,
|
||||
- message->name);
|
||||
+// wl_resource_post_error(client->display_resource,
|
||||
+// WL_DISPLAY_ERROR_INVALID_METHOD,
|
||||
+// "invalid arguments for %s#%u.%s",
|
||||
+// object->interface->name,
|
||||
+// object->id,
|
||||
+// message->name);
|
||||
+ wl_log("DISCARDING: invalid arguments for %s#%u.%s\n",
|
||||
+ object->interface->name,
|
||||
+ object->id,
|
||||
+ message->name);
|
||||
+
|
||||
wl_closure_destroy(closure);
|
||||
- break;
|
||||
+ goto next;
|
||||
}
|
||||
|
||||
log_closure(resource, closure, false);
|
||||
@@ -446,7 +453,7 @@ wl_client_connection_data(int fd, uint32_t mask, void *data)
|
||||
|
||||
if (client->error)
|
||||
break;
|
||||
-
|
||||
+next:
|
||||
len = wl_connection_pending_input(connection);
|
||||
}
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
From a76eb21146fe9c24373eacd0bce41eaac73e4d19 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
|
||||
Date: Wed, 20 Dec 2023 09:28:15 +0100
|
||||
Subject: [PATCH 2/2] don't offer zwp_text_input_v3 to alien clients
|
||||
|
||||
their implementation is extremely buggy, we want the thing to connect to
|
||||
maliit via dbus instead for text input, and it will only do that if it
|
||||
doesn't get offered zwp_text_input.
|
||||
|
||||
So (very very crudely) detect that the client is aliendalvik and then
|
||||
remove the zwp_text_input protocol from the ones the server offers.
|
||||
---
|
||||
src/wayland-server.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/src/wayland-server.c b/src/wayland-server.c
|
||||
index b3a29eb..f61cf5f 100644
|
||||
--- a/src/wayland-server.c
|
||||
+++ b/src/wayland-server.c
|
||||
@@ -212,6 +212,7 @@ handle_array(struct wl_resource *resource, uint32_t opcode,
|
||||
{
|
||||
struct wl_closure *closure;
|
||||
struct wl_object *object = &resource->object;
|
||||
+ static const char *disable_protocol = NULL;
|
||||
|
||||
if (resource->client->error)
|
||||
return;
|
||||
@@ -229,6 +230,22 @@ handle_array(struct wl_resource *resource, uint32_t opcode,
|
||||
return;
|
||||
}
|
||||
|
||||
+
|
||||
+ if (resource->client->uid >= 500000) {
|
||||
+ fprintf(stderr, "client has high UID %d, assuming it's aliendalvik", resource->client->uid);
|
||||
+ disable_protocol = "zwp_text_input_manager_v3";
|
||||
+ } else {
|
||||
+ disable_protocol = "";
|
||||
+ }
|
||||
+
|
||||
+ if (strcmp (object->interface->name, "wl_registry") == 0 &&
|
||||
+ strcmp (closure->message->name, "global") == 0 &&
|
||||
+ strcmp (closure->args[1].s, disable_protocol) == 0) {
|
||||
+ fprintf(stderr, "found disabled proto queu %s\n", closure->args[1].s);
|
||||
+ wl_closure_destroy(closure);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
log_closure(resource, closure, true);
|
||||
|
||||
if (send_func(closure, resource->client->connection))
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
- create overlayfs for system img (as root)
|
||||
mkdir /tmp/from
|
||||
mkdir /tmp/to
|
||||
mkdir /tmp/work
|
||||
mount /opt/alien/system.img /tmp/from
|
||||
# if for some reason mount didn't work, go with this (and skip the mount -t overlay)
|
||||
unsquashfs /opt/alien/system.img
|
||||
mv squashfs-root/ /opt/alien/rootfs
|
||||
|
||||
mount -t overlay -o lowerdir=/tmp/from,upperdir=/tmp/to,workdir=/tmp/work overlay /opt/alien/rootfs
|
||||
|
||||
- edit init file in rootfs to comment out memfd override
|
||||
nano /opt/alien/rootfs/system/etc/init/hw/init.rc
|
||||
# comment out this line
|
||||
setprop sys.use_memfd false
|
||||
|
||||
- chmod device files (as root)
|
||||
# TODO: if there's no binder devices, either create using binder_linux
|
||||
modprobe binder_linux devices=
|
||||
# or binderfs module (and link whatever devices are available)
|
||||
mkdir /dev/binderfs
|
||||
mount -t binder binder /dev/binderfs
|
||||
ln -s /dev/binderfs/anbox-binder /dev/binder
|
||||
ln -s /dev/binderfs/anbox-hwbinder /dev/hwbinder
|
||||
ln -s /dev/binderfs/anbox-vndbinder /dev/vndbinder
|
||||
chmod 777 /dev/binder
|
||||
chmod 777 /dev/hwbinder
|
||||
chmod 777 /dev/vndbinder
|
||||
chmod 777 /dev/dri/card0
|
||||
|
||||
- chmod wayland socket
|
||||
chown YOUR_USER:appsupport-wayland /run/user/YOUR_UID/wayland-0
|
||||
chmod 775 /run/user/YOUR_UID/wayland-0
|
||||
|
||||
- setup the waydroid vendor blob with another overlayfs (as root)
|
||||
mkdir /tmp/from2
|
||||
mkdir /tmp/to2
|
||||
mkdir /tmp/work2
|
||||
mkdir /tmp/waydroid-vendor
|
||||
mount waydroid/vendor.img /tmp/from2
|
||||
mount -t overlay -o lowerdir=/tmp/from2,upperdir=/tmp/to2,workdir=/tmp/work2 overlay /tmp/waydroid-vendor
|
||||
# remove gatekeeper, that seems to be the only HAL that's loaded (and it also crashes)
|
||||
rm /tmp/waydroid-vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl.so
|
||||
rm /tmp/waydroid-vendor/lib/hw/android.hardware.gatekeeper@1.0-impl.so
|
||||
|
||||
- replace webview with waydroid one
|
||||
mkdir /tmp/waydroid-system
|
||||
mount waydroid/system.img /tmp/waydroid-system
|
||||
cp /tmp/waydroid-system/system/product/app/webview/webview.apk /opt/alien/rootfs/system/app/webview/webview.apk
|
||||
|
||||
- optional: copy overlay for gesture navigation from waydroid into alien (as root)
|
||||
cp -r /tmp/waydroid-system/system/product/overlay /opt/alien/rootfs/product/
|
||||
|
||||
- set data dir in LXC config
|
||||
nano /tmp/appsupport/aliendalvik/10-bsp_config
|
||||
# set __DATA_DIR__ to /opt/alien/data
|
||||
|
||||
- set UID in LXC config
|
||||
nano /tmp/appsupport/aliendalvik/10-bsp_config
|
||||
# set __UID__ to your UID in this line
|
||||
lxc.mount.entry = /run/user/__UID__/wayland-0 run/display/wayland-0 none bind,nodev,nosuid,create=file 0 0
|
||||
|
||||
nano /tmp/appsupport/aliendalvik/20-privilege_config
|
||||
# set __UID__ to your UID (this maps your UID to UID 100000 inside the container)
|
||||
lxc.idmap = u 100000 __UID__ 1
|
||||
lxc.idmap = g 100000 __UID__ 1
|
||||
|
||||
- setup networking for container
|
||||
/usr/lib/lxc/lxc-net start
|
||||
|
||||
- now check if lxc wants to startup
|
||||
/usr/bin/lxc-start --rcfile=/tmp/appsupport/aliendalvik/config --lxcpath=/tmp/appsupport/aliendalvik -n aliendalvik -F
|
||||
# shouldn't error out immediately, but should crash after like 30 seconds
|
||||
# there should be stuff in /opt/alien/data now, and logs in /opt/alien/data/logcats/log
|
||||
# if you got to this point, you're very close :)
|
||||
|
||||
- setup at least 7 ssh sessions on the device to run all the daemons
|
||||
|
||||
- get connman shim up and running (as root)
|
||||
gjs shimming/connman/mock.js
|
||||
|
||||
- get maliit shim up and running (as user)
|
||||
WAYLAND_DEBUG=1 python shimming/maliit/maliit-shim.py
|
||||
|
||||
- start the systemd service that runs the container (as root)
|
||||
systemctl start aliendalvik
|
||||
|
||||
- right after that start integration daemons (as user)
|
||||
alienaudioservice -d /dev/binder -n /dev/vndbinder -w /dev/hwbinder -p pulseaudio --verbose
|
||||
QT_DEBUG_PLUGINS=1 QTCONTACTS_MANAGER_OVERRIDE=folks QT_LOGGING_RULES="*.debug=true" apkd-bridge
|
||||
QT_LOGGING_RULES="*.debug=true" apkd-bridge-user
|
||||
QDBUS_DEBUG=1 alienkeyboardservice
|
||||
|
||||
- things are running now, android settings app should appear on your app grid
|
||||
if it doesn't, but you can see it in .local/share/applications/, relogin for shell to pick it up
|
||||
|
||||
- can now install fdroid via (as user)
|
||||
wget https://f-droid.org/F-Droid.apk
|
||||
apkd-install F-Droid.apk
|
||||
|
||||
- optional: run commands inside the android container from alien-post-startup.sh script
|
||||
|
||||
- optional: use gesture navigation in android to have swipe-back gesture
|
||||
# go into container and disable -> enable the overlay
|
||||
lxc-attach --name=aliendalvik --lxcpath=/tmp/appsupport -- /system/bin/sh
|
||||
cmd overlay disable com.android.internal.systemui.navbar.gestural
|
||||
cmd overlay enable com.android.internal.systemui.navbar.gestural
|
||||
|
||||
notes:
|
||||
- when apps don't draw after startup, touch the screen to trigger the app to start drawing
|
|
@ -0,0 +1,40 @@
|
|||
- enable systemd-resolved to actually answer queries on port 53 so that android can ask dns queries
|
||||
# add this line to /etc/systemd/resolved.conf
|
||||
DNSStubListenerExtra=127.0.0.1
|
||||
# then restart systemd-resolved
|
||||
sudo systemctl restart systemd-resolved
|
||||
|
||||
- setup users/groups needed for aliendalvik
|
||||
# create user+group that gets permissions for wayland-socket
|
||||
useradd -u 501000 -U appsupport-wayland
|
||||
groupmod -g 501000 appsupport-wayland
|
||||
|
||||
# create appsupport-root user with UID and GID 500000
|
||||
useradd -u 500000 -U appsupport-root
|
||||
groupmod -g 500000 appsupport-root
|
||||
|
||||
# own data directory
|
||||
mkdir -p /opt/alien/data/
|
||||
chown -R appsupport-root:appsupport-root /opt/alien/data/
|
||||
|
||||
# set subuids (no clue how correct this actually is, but works)
|
||||
# might have to create those files
|
||||
touch /etc/subuid
|
||||
touch /etc/subgid
|
||||
usermod --add-subuids 100000-100000 --add-subgids 100000-100000 root
|
||||
usermod --add-subuids 100000-100000 --add-subgids 100000-100000 appsupport-root
|
||||
usermod --add-subuids 500000-599999 --add-subgids 500000-599999 root
|
||||
usermod --add-subuids 500000-599999 --add-subgids 500000-599999 appsupport-root
|
||||
usermod --add-subuids 600001-700000 --add-subgids 600001-700000 root
|
||||
usermod --add-subuids 600001-700000 --add-subgids 600001-700000 appsupport-root
|
||||
|
||||
- symlink from /usr/lib to /usr/lib64 (alienaudioservice hardcodes some paths to lib64 :/)
|
||||
ln -s /usr/lib /usr/lib64
|
||||
|
||||
- make sure pulseaudio is used instead of pipewire (pipewire for some reason stops working after a few minutes)
|
||||
systemctl --user mask pipewire
|
||||
systemctl --user disable --now pipewire.socket
|
||||
systemctl --user enable --now pulseaudio
|
||||
|
||||
- modify alienkeyboardservice binary to use the correct binder device
|
||||
use a hex editor to replace the NULL-terminated string /dev/puddlejumper with /dev/binder
|
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||
<busconfig>
|
||||
<policy context="default">
|
||||
<allow own="org.maemo.resource.manager"/>
|
||||
<allow send_interface="org.maemo.resource.client"/>
|
||||
<allow send_interface="org.maemo.resource.manager"/>
|
||||
</policy>
|
||||
|
||||
<policy context="default">
|
||||
<allow own="org.nemomobile.Route.Manager"/>
|
||||
<allow send_interface="org.nemomobile.Route.Manager"/>
|
||||
</policy>
|
||||
|
||||
<policy context="default">
|
||||
<allow own="com.nokia.NonGraphicFeedback1.Backend"/>
|
||||
<allow send_interface="com.nokia.NonGraphicFeedback1"/>
|
||||
</policy>
|
||||
|
||||
<policy context="default">
|
||||
<allow own="com.nokia.mce"/>
|
||||
<allow send_interface="com.nokia.mce.request"/>
|
||||
</policy>
|
||||
</busconfig>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik audio DBus shim provider
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
ExecStart=/usr/bin/alienaudio-shim
|
|
@ -0,0 +1,443 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import os
|
||||
import asyncio
|
||||
from pywayland.client import Display
|
||||
from pywayland.protocol.wayland import (
|
||||
WlSeat,
|
||||
WlShell,
|
||||
WlShm,
|
||||
)
|
||||
from protocols.text_input_unstable_v3 import ZwpTextInputManagerV3
|
||||
|
||||
import dbussy as dbus
|
||||
from dbussy import \
|
||||
DBUS, \
|
||||
Introspection
|
||||
import ravel
|
||||
|
||||
socket_path = os.environ["XDG_RUNTIME_DIR"] + "/maliit-server"
|
||||
if not os.path.exists(socket_path):
|
||||
os.makedirs(socket_path)
|
||||
|
||||
my_socket_name = "unix:path=" + socket_path + "/dbus-socket"
|
||||
my_interface_name = "com.meego.inputmethod.uiserver1"
|
||||
client_interface_name = "com.meego.inputmethod.inputcontext1"
|
||||
|
||||
idle_timeout = 15 # seconds, short value for testing
|
||||
|
||||
ClientInterface = ravel.def_proxy_interface \
|
||||
(
|
||||
ravel.INTERFACE.CLIENT,
|
||||
name = "ClientInterface",
|
||||
introspected =
|
||||
Introspection.Interface
|
||||
(
|
||||
name = client_interface_name,
|
||||
methods =
|
||||
[
|
||||
Introspection.Interface.Method
|
||||
(
|
||||
name = "setLanguage",
|
||||
args =
|
||||
[
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "lang",
|
||||
type = dbus.BasicType(dbus.TYPE.STRING),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Introspection.Interface.Method
|
||||
(
|
||||
name = "setRedirectKeys",
|
||||
args =
|
||||
[
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "redi",
|
||||
type = dbus.BasicType(dbus.TYPE.BOOLEAN),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Introspection.Interface.Method
|
||||
(
|
||||
name = "updateInputMethodArea",
|
||||
args =
|
||||
[
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "x",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "y",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "width",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "height",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Introspection.Interface.Method
|
||||
(
|
||||
name = "commitString",
|
||||
args =
|
||||
[
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "string",
|
||||
type = dbus.BasicType(dbus.TYPE.STRING),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "replacementStart",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "replacementLength",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
Introspection.Interface.Method.Arg
|
||||
(
|
||||
name = "cursorPos",
|
||||
type = dbus.BasicType(dbus.TYPE.INT32),
|
||||
direction = Introspection.DIRECTION.IN
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
is_async = True
|
||||
)
|
||||
|
||||
useless_objects_bus_name = "org.maliit.server"
|
||||
useless_objects_iface_name = "org.maliit.Server.Address"
|
||||
|
||||
@ravel.interface(ravel.INTERFACE.SERVER, name = useless_objects_iface_name)
|
||||
class UselessObjectServer :
|
||||
|
||||
__slots__ = ("bus",)
|
||||
|
||||
def __init__(self, bus) :
|
||||
self.bus = bus
|
||||
#end __init__
|
||||
|
||||
@ravel.propgetter \
|
||||
(
|
||||
name = "address",
|
||||
type = dbus.BasicType(dbus.TYPE.STRING),
|
||||
change_notification = dbus.Introspection.PROP_CHANGE_NOTIFICATION.NEW_VALUE,
|
||||
)
|
||||
def get_address(self) :
|
||||
return "unix:path=" + socket_path + "/dbus-socket"
|
||||
#end get_address
|
||||
|
||||
object_created = ravel.def_signal_stub \
|
||||
(
|
||||
name = "object_created",
|
||||
in_signature = [],
|
||||
)
|
||||
|
||||
object_deleted = ravel.def_signal_stub \
|
||||
(
|
||||
name = "object_deleted",
|
||||
in_signature = [],
|
||||
)
|
||||
|
||||
#end UselessObjectServer
|
||||
|
||||
background_tasks = set()
|
||||
def run_in_background(invocation):
|
||||
task = asyncio.create_task(invocation)
|
||||
background_tasks.add(task)
|
||||
task.add_done_callback(background_tasks.discard)
|
||||
|
||||
@ravel.interface(ravel.INTERFACE.SERVER, name = my_interface_name)
|
||||
class DirectConnectServer :
|
||||
__slots__ = ("bus", "_last_request", "intf", "wayland")
|
||||
|
||||
def __init__(self, bus, wayland) :
|
||||
self.bus = bus
|
||||
self.wayland = wayland
|
||||
|
||||
self.intf = ClientInterface \
|
||||
(
|
||||
connection = self.bus.connection,
|
||||
dest = "com.meego.inputmethod.inputcontext1", # no D-Bus daemon to care
|
||||
)["/com/meego/inputmethod/inputcontext"]
|
||||
#end __init__
|
||||
|
||||
# @ravel.method \
|
||||
# (
|
||||
# name = "reset",
|
||||
# in_signature = "",
|
||||
# out_signature = "",
|
||||
# arg_keys = [],
|
||||
# )
|
||||
# def reset(self) :
|
||||
# print("got reset() message")
|
||||
# #end reset
|
||||
|
||||
@ravel.method \
|
||||
(
|
||||
name = "updateWidgetInformation",
|
||||
in_signature = "a{sv}b",
|
||||
out_signature = "",
|
||||
arg_keys = ["vardict", "boolean"],
|
||||
)
|
||||
def updateWidgetInformation(self, vardict, boolean) :
|
||||
# print("got updateWidgetInformation() message")
|
||||
# print(vardict)
|
||||
surrounding_text = vardict["surroundingText"][1]
|
||||
cursor_position = vardict["cursorPosition"][1]
|
||||
|
||||
self.wayland["text_input"].set_surrounding_text(surrounding_text, cursor_position, cursor_position)
|
||||
self.wayland["text_input"].commit()
|
||||
self.wayland["display"].flush()
|
||||
#end updateWidgetInformation
|
||||
|
||||
# @ravel.method \
|
||||
# (
|
||||
# name = "activateContext",
|
||||
# in_signature = "",
|
||||
# out_signature = "",
|
||||
# arg_keys = [],
|
||||
# )
|
||||
# def activateContext(self) :
|
||||
# print("got activateContext() message")
|
||||
# #end activateContext
|
||||
|
||||
@ravel.method \
|
||||
(
|
||||
name = "appOrientationChanged",
|
||||
in_signature = "i",
|
||||
out_signature = "",
|
||||
arg_keys = ["orientation"],
|
||||
)
|
||||
def appOrientationChanged(self, orientation) :
|
||||
print("got appOrientationChanged() message")
|
||||
#end appOrientationChanged
|
||||
|
||||
@ravel.method \
|
||||
(
|
||||
name = "showInputMethod",
|
||||
in_signature = "",
|
||||
out_signature = "",
|
||||
arg_keys = [],
|
||||
)
|
||||
def showInputMethod(self) :
|
||||
# print("got showInputMethod() message, setting input size")
|
||||
|
||||
self.wayland["text_input"].set_surrounding_text("magictext", 0, 0)
|
||||
self.wayland["display"].flush()
|
||||
|
||||
self.wayland["text_input"].set_content_type(0, 0)
|
||||
self.wayland["text_input"].enable()
|
||||
self.wayland["text_input"].commit()
|
||||
self.wayland["display"].flush()
|
||||
|
||||
run_in_background(self.intf.updateInputMethodArea(0, 1360, 1080, 670))
|
||||
#end showInputMethod
|
||||
|
||||
@ravel.method \
|
||||
(
|
||||
name = "hideInputMethod",
|
||||
in_signature = "",
|
||||
out_signature = "",
|
||||
arg_keys = [],
|
||||
)
|
||||
def hideInputMethod(self) :
|
||||
# print("got hideInputMethod() message, setting input size")
|
||||
|
||||
self.wayland["text_input"].disable()
|
||||
self.wayland["text_input"].commit()
|
||||
self.wayland["display"].flush()
|
||||
|
||||
run_in_background(self.intf.updateInputMethodArea(0, 0, 0, 0))
|
||||
#end hideInputMethod
|
||||
|
||||
# @ravel.method \
|
||||
# (
|
||||
# name = "setGlobalCorrectionEnabled",
|
||||
# in_signature = "b",
|
||||
# out_signature = "",
|
||||
# arg_keys = ["enabled"],
|
||||
# )
|
||||
# def setGlobalCorrectionEnabled(self, enabled) :
|
||||
# print("got setGlobalCorrectionEnabled() message")
|
||||
# #end setGlobalCorrectionEnabled
|
||||
|
||||
# @ravel.method \
|
||||
# (
|
||||
# name = "setDetectableAutoRepeat",
|
||||
# in_signature = "b",
|
||||
# out_signature = "",
|
||||
# arg_keys = ["detectable"],
|
||||
# )
|
||||
# def setDetectableAutoRepeat(self, detectable) :
|
||||
# print("got setDetectableAutoRepeat() message")
|
||||
# #end setDetectableAutoRepeat
|
||||
|
||||
#end DirectConnectServer
|
||||
|
||||
def handle_enter(text_input, surface):
|
||||
# print("got enter event for surface ")
|
||||
return 0
|
||||
|
||||
def handle_leave(text_input, surface):
|
||||
# print("got leave event for surface ")
|
||||
return 0
|
||||
|
||||
def handle_preedit_string(text_input, string, cursor_begin, cursor_end):
|
||||
# print("got preedit str ")
|
||||
return 0
|
||||
|
||||
def handle_commit_string(text_input, string):
|
||||
# print("commit str: " + string + " sending to dbus")
|
||||
wayland = text_input.user_data
|
||||
|
||||
run_in_background(wayland["dbus_server"].intf.commitString(string, 0, 0, 0))
|
||||
|
||||
return 0
|
||||
|
||||
def handle_delete_surrounding_text(text_input, before_len, after_len):
|
||||
# print("got delete surrounding text")
|
||||
return 0
|
||||
|
||||
def handle_done(text_input, serial):
|
||||
# print("got a done event serial " + str(serial))
|
||||
return 0
|
||||
|
||||
def handle_seat_capabilities(wl_seat, capabilities):
|
||||
wayland = wl_seat.user_data
|
||||
|
||||
if "text_input_manager" not in wayland:
|
||||
raise Exception("text_input_manager protocol is not supported by compositor")
|
||||
|
||||
wayland["text_input"] = wayland["text_input_manager"].get_text_input(wl_seat)
|
||||
wayland["text_input"].user_data = wayland
|
||||
wayland["text_input"].dispatcher["enter"] = handle_enter
|
||||
wayland["text_input"].dispatcher["leave"] = handle_leave
|
||||
# wayland["text_input"].dispatcher["preedit_string"] = handle_preedit_string
|
||||
wayland["text_input"].dispatcher["commit_string"] = handle_commit_string
|
||||
wayland["text_input"].dispatcher["delete_surrounding_text"] = handle_delete_surrounding_text
|
||||
wayland["text_input"].dispatcher["done"] = handle_done
|
||||
|
||||
wayland["display"].flush()
|
||||
|
||||
return 1
|
||||
|
||||
def handle_registry_global(wl_registry, id_num, iface_name, version):
|
||||
wayland = wl_registry.user_data
|
||||
if iface_name == "wl_seat":
|
||||
wayland["seat"] = wl_registry.bind(id_num, WlSeat, version)
|
||||
wayland["seat"].user_data = wayland
|
||||
wayland["seat"].dispatcher["capabilities"] = handle_seat_capabilities
|
||||
elif iface_name == "zwp_text_input_manager_v3":
|
||||
wayland["text_input_manager"] = wl_registry.bind(id_num, ZwpTextInputManagerV3, version)
|
||||
|
||||
wayland["display"].flush()
|
||||
|
||||
return 1
|
||||
|
||||
async def setup_dbus(wayland):
|
||||
listen = ravel.Server(address = my_socket_name)
|
||||
clients = {}
|
||||
|
||||
@ravel.signal \
|
||||
(
|
||||
in_signature = "",
|
||||
bus_keyword = "conn"
|
||||
)
|
||||
def connection_terminated(conn) :
|
||||
# handler for signal sent by libdbus when client disconnects.
|
||||
print("connection from PID %s terminated\n" % conn.connection.unix_process_id)
|
||||
del clients[id(conn)]
|
||||
#end connection_terminated
|
||||
|
||||
while True :
|
||||
conn = await listen.await_new_connection(timeout = idle_timeout / 3)
|
||||
if conn != None :
|
||||
print("new connection on DBus")
|
||||
|
||||
server = DirectConnectServer(conn, wayland)
|
||||
wayland["dbus_server"] = server
|
||||
|
||||
conn.register \
|
||||
(
|
||||
path = "/com/meego/inputmethod/uiserver1",
|
||||
fallback = True,
|
||||
interface = server
|
||||
)
|
||||
conn.listen_signal \
|
||||
(
|
||||
path = "/",
|
||||
fallback = True,
|
||||
interface = DBUS.INTERFACE_LOCAL,
|
||||
name = "Disconnected",
|
||||
func = connection_terminated
|
||||
)
|
||||
clients[id(conn)] = conn
|
||||
|
||||
await server.intf.setLanguage('')
|
||||
#end if
|
||||
#end while
|
||||
|
||||
async def run_dbus_loop(wayland):
|
||||
server = await setup_dbus(wayland)
|
||||
|
||||
display = Display()
|
||||
display.connect()
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
loop.add_reader(display.get_fd(), lambda: display.dispatch(block=True))
|
||||
|
||||
wayland = {}
|
||||
|
||||
wayland["display"] = display
|
||||
wayland["registry"] = wayland["display"].get_registry()
|
||||
wayland["registry"].user_data = wayland
|
||||
wayland["registry"].dispatcher["global"] = handle_registry_global
|
||||
|
||||
wayland["display"].flush()
|
||||
|
||||
bus = ravel.session_bus()
|
||||
bus.attach_asyncio(loop)
|
||||
|
||||
bus.request_name \
|
||||
(
|
||||
bus_name = useless_objects_bus_name,
|
||||
flags = DBUS.NAME_FLAG_DO_NOT_QUEUE
|
||||
)
|
||||
bus.register \
|
||||
(
|
||||
path = "/org/maliit/server",
|
||||
fallback = True,
|
||||
interface = UselessObjectServer(bus)
|
||||
)
|
||||
|
||||
loop.create_task(run_dbus_loop(wayland))
|
||||
|
||||
loop.run_forever()
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Aliendalvik keyboard DBus shim provider
|
||||
After=dbus.socket graphical-session.target
|
||||
Requires=dbus.socket graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
ExecStart=/usr/bin/alienkeyboard-maliit-shim/alienkeyboard-maliit-shim
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,26 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2021 Emmanuel Gil Peyrot
|
||||
# Copyright © 2022 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .wp_content_type_manager_v1 import WpContentTypeManagerV1 # noqa: F401
|
||||
from .wp_content_type_v1 import WpContentTypeV1 # noqa: F401
|
|
@ -0,0 +1,107 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2021 Emmanuel Gil Peyrot
|
||||
# Copyright © 2022 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
from .wp_content_type_v1 import WpContentTypeV1
|
||||
|
||||
|
||||
class WpContentTypeManagerV1(Interface):
|
||||
"""Surface content type manager
|
||||
|
||||
This interface allows a client to describe the kind of content a surface
|
||||
will display, to allow the compositor to optimize its behavior for it.
|
||||
|
||||
Warning! The protocol described in this file is currently in the testing
|
||||
phase. Backward compatible changes may be added together with the
|
||||
corresponding interface version bump. Backward incompatible changes can
|
||||
only be done by creating a new major version of the extension.
|
||||
"""
|
||||
|
||||
name = "wp_content_type_manager_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
already_constructed = 0
|
||||
|
||||
|
||||
class WpContentTypeManagerV1Proxy(Proxy[WpContentTypeManagerV1]):
|
||||
interface = WpContentTypeManagerV1
|
||||
|
||||
@WpContentTypeManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the content type manager object
|
||||
|
||||
Destroy the content type manager. This doesn't destroy objects created
|
||||
with the manager.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@WpContentTypeManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpContentTypeV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
)
|
||||
def get_surface_content_type(self, surface: WlSurface) -> Proxy[WpContentTypeV1]:
|
||||
"""Create a new toplevel decoration object
|
||||
|
||||
Create a new content type object associated with the given surface.
|
||||
|
||||
Creating a :class:`~pywayland.protocol.content_type_v1.WpContentTypeV1`
|
||||
from a :class:`~pywayland.protocol.wayland.WlSurface` which already has
|
||||
one attached is a client error: already_constructed.
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.content_type_v1.WpContentTypeV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, WpContentTypeV1, surface)
|
||||
return id
|
||||
|
||||
|
||||
class WpContentTypeManagerV1Resource(Resource):
|
||||
interface = WpContentTypeManagerV1
|
||||
|
||||
|
||||
class WpContentTypeManagerV1Global(Global):
|
||||
interface = WpContentTypeManagerV1
|
||||
|
||||
|
||||
WpContentTypeManagerV1._gen_c()
|
||||
WpContentTypeManagerV1.proxy_class = WpContentTypeManagerV1Proxy
|
||||
WpContentTypeManagerV1.resource_class = WpContentTypeManagerV1Resource
|
||||
WpContentTypeManagerV1.global_class = WpContentTypeManagerV1Global
|
|
@ -0,0 +1,110 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2021 Emmanuel Gil Peyrot
|
||||
# Copyright © 2022 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class WpContentTypeV1(Interface):
|
||||
"""Content type object for a surface
|
||||
|
||||
The content type object allows the compositor to optimize for the kind of
|
||||
content shown on the surface. A compositor may for example use it to set
|
||||
relevant drm properties like "content type".
|
||||
|
||||
The client may request to switch to another content type at any time. When
|
||||
the associated surface gets destroyed, this object becomes inert and the
|
||||
client should destroy it.
|
||||
"""
|
||||
|
||||
name = "wp_content_type_v1"
|
||||
version = 1
|
||||
|
||||
class type(enum.IntEnum):
|
||||
none = 0
|
||||
photo = 1
|
||||
video = 2
|
||||
game = 3
|
||||
|
||||
|
||||
class WpContentTypeV1Proxy(Proxy[WpContentTypeV1]):
|
||||
interface = WpContentTypeV1
|
||||
|
||||
@WpContentTypeV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the content type object
|
||||
|
||||
Switch back to not specifying the content type of this surface. This is
|
||||
equivalent to setting the content type to none, including double
|
||||
buffering semantics. See set_content_type for details.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@WpContentTypeV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def set_content_type(self, content_type: int) -> None:
|
||||
"""Specify the content type
|
||||
|
||||
Set the surface content type. This informs the compositor that the
|
||||
client believes it is displaying buffers matching this content type.
|
||||
|
||||
This is purely a hint for the compositor, which can be used to adjust
|
||||
its behavior or hardware settings to fit the presented content best.
|
||||
|
||||
The content type is double-buffered state, see
|
||||
:func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>` for details.
|
||||
|
||||
:param content_type:
|
||||
the content type
|
||||
:type content_type:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(1, content_type)
|
||||
|
||||
|
||||
class WpContentTypeV1Resource(Resource):
|
||||
interface = WpContentTypeV1
|
||||
|
||||
|
||||
class WpContentTypeV1Global(Global):
|
||||
interface = WpContentTypeV1
|
||||
|
||||
|
||||
WpContentTypeV1._gen_c()
|
||||
WpContentTypeV1.proxy_class = WpContentTypeV1Proxy
|
||||
WpContentTypeV1.resource_class = WpContentTypeV1Resource
|
||||
WpContentTypeV1.global_class = WpContentTypeV1Global
|
|
@ -0,0 +1,24 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2018 The Chromium Authors
|
||||
# Copyright 2023 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .wp_cursor_shape_device_v1 import WpCursorShapeDeviceV1 # noqa: F401
|
||||
from .wp_cursor_shape_manager_v1 import WpCursorShapeManagerV1 # noqa: F401
|
|
@ -0,0 +1,154 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2018 The Chromium Authors
|
||||
# Copyright 2023 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class WpCursorShapeDeviceV1(Interface):
|
||||
"""Cursor shape for a device
|
||||
|
||||
This interface advertises the list of supported cursor shapes for a device,
|
||||
and allows clients to set the cursor shape.
|
||||
"""
|
||||
|
||||
name = "wp_cursor_shape_device_v1"
|
||||
version = 1
|
||||
|
||||
class shape(enum.IntEnum):
|
||||
default = 1
|
||||
context_menu = 2
|
||||
help = 3
|
||||
pointer = 4
|
||||
progress = 5
|
||||
wait = 6
|
||||
cell = 7
|
||||
crosshair = 8
|
||||
text = 9
|
||||
vertical_text = 10
|
||||
alias = 11
|
||||
copy = 12
|
||||
move = 13
|
||||
no_drop = 14
|
||||
not_allowed = 15
|
||||
grab = 16
|
||||
grabbing = 17
|
||||
e_resize = 18
|
||||
n_resize = 19
|
||||
ne_resize = 20
|
||||
nw_resize = 21
|
||||
s_resize = 22
|
||||
se_resize = 23
|
||||
sw_resize = 24
|
||||
w_resize = 25
|
||||
ew_resize = 26
|
||||
ns_resize = 27
|
||||
nesw_resize = 28
|
||||
nwse_resize = 29
|
||||
col_resize = 30
|
||||
row_resize = 31
|
||||
all_scroll = 32
|
||||
zoom_in = 33
|
||||
zoom_out = 34
|
||||
|
||||
class error(enum.IntEnum):
|
||||
invalid_shape = 1
|
||||
|
||||
|
||||
class WpCursorShapeDeviceV1Proxy(Proxy[WpCursorShapeDeviceV1]):
|
||||
interface = WpCursorShapeDeviceV1
|
||||
|
||||
@WpCursorShapeDeviceV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the cursor shape device
|
||||
|
||||
Destroy the cursor shape device.
|
||||
|
||||
The device cursor shape remains unchanged.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@WpCursorShapeDeviceV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def set_shape(self, serial: int, shape: int) -> None:
|
||||
"""Set device cursor to the shape
|
||||
|
||||
Sets the device cursor to the specified shape. The compositor will
|
||||
change the cursor image based on the specified shape.
|
||||
|
||||
The cursor actually changes only if the input device focus is one of
|
||||
the requesting client's surfaces. If any, the previous cursor image
|
||||
(surface or shape) is replaced.
|
||||
|
||||
The "shape" argument must be a valid enum entry, otherwise the
|
||||
invalid_shape protocol error is raised.
|
||||
|
||||
This is similar to the :func:`WlPointer.set_cursor()
|
||||
<pywayland.protocol.wayland.WlPointer.set_cursor>` and
|
||||
:func:`ZwpTabletToolV2.set_cursor()
|
||||
<pywayland.protocol.tablet_unstable_v2.ZwpTabletToolV2.set_cursor>`
|
||||
requests, but this request accepts a shape instead of contents in the
|
||||
form of a surface. Clients can mix set_cursor and set_shape requests.
|
||||
|
||||
The serial parameter must match the latest :func:`WlPointer.enter()
|
||||
<pywayland.protocol.wayland.WlPointer.enter>` or
|
||||
:func:`ZwpTabletToolV2.proximity_in()
|
||||
<pywayland.protocol.tablet_unstable_v2.ZwpTabletToolV2.proximity_in>`
|
||||
serial number sent to the client. Otherwise the request will be
|
||||
ignored.
|
||||
|
||||
:param serial:
|
||||
serial number of the enter event
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param shape:
|
||||
:type shape:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(1, serial, shape)
|
||||
|
||||
|
||||
class WpCursorShapeDeviceV1Resource(Resource):
|
||||
interface = WpCursorShapeDeviceV1
|
||||
|
||||
|
||||
class WpCursorShapeDeviceV1Global(Global):
|
||||
interface = WpCursorShapeDeviceV1
|
||||
|
||||
|
||||
WpCursorShapeDeviceV1._gen_c()
|
||||
WpCursorShapeDeviceV1.proxy_class = WpCursorShapeDeviceV1Proxy
|
||||
WpCursorShapeDeviceV1.resource_class = WpCursorShapeDeviceV1Resource
|
||||
WpCursorShapeDeviceV1.global_class = WpCursorShapeDeviceV1Global
|
|
@ -0,0 +1,123 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2018 The Chromium Authors
|
||||
# Copyright 2023 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..tablet_unstable_v2 import ZwpTabletToolV2
|
||||
from ..wayland import WlPointer
|
||||
from .wp_cursor_shape_device_v1 import WpCursorShapeDeviceV1
|
||||
|
||||
|
||||
class WpCursorShapeManagerV1(Interface):
|
||||
"""Cursor shape manager
|
||||
|
||||
This global offers an alternative, optional way to set cursor images. This
|
||||
new way uses enumerated cursors instead of a
|
||||
:class:`~pywayland.protocol.wayland.WlSurface` like
|
||||
:func:`WlPointer.set_cursor()
|
||||
<pywayland.protocol.wayland.WlPointer.set_cursor>` does.
|
||||
|
||||
Warning! The protocol described in this file is currently in the testing
|
||||
phase. Backward compatible changes may be added together with the
|
||||
corresponding interface version bump. Backward incompatible changes can
|
||||
only be done by creating a new major version of the extension.
|
||||
"""
|
||||
|
||||
name = "wp_cursor_shape_manager_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class WpCursorShapeManagerV1Proxy(Proxy[WpCursorShapeManagerV1]):
|
||||
interface = WpCursorShapeManagerV1
|
||||
|
||||
@WpCursorShapeManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the manager
|
||||
|
||||
Destroy the cursor shape manager.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@WpCursorShapeManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpCursorShapeDeviceV1),
|
||||
Argument(ArgumentType.Object, interface=WlPointer),
|
||||
)
|
||||
def get_pointer(self, pointer: WlPointer) -> Proxy[WpCursorShapeDeviceV1]:
|
||||
"""Manage the cursor shape of a pointer device
|
||||
|
||||
Obtain a
|
||||
:class:`~pywayland.protocol.cursor_shape_v1.WpCursorShapeDeviceV1` for
|
||||
a :class:`~pywayland.protocol.wayland.WlPointer` object.
|
||||
|
||||
:param pointer:
|
||||
:type pointer:
|
||||
:class:`~pywayland.protocol.wayland.WlPointer`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.cursor_shape_v1.WpCursorShapeDeviceV1`
|
||||
"""
|
||||
cursor_shape_device = self._marshal_constructor(1, WpCursorShapeDeviceV1, pointer)
|
||||
return cursor_shape_device
|
||||
|
||||
@WpCursorShapeManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpCursorShapeDeviceV1),
|
||||
Argument(ArgumentType.Object, interface=ZwpTabletToolV2),
|
||||
)
|
||||
def get_tablet_tool_v2(self, tablet_tool: ZwpTabletToolV2) -> Proxy[WpCursorShapeDeviceV1]:
|
||||
"""Manage the cursor shape of a tablet tool device
|
||||
|
||||
Obtain a
|
||||
:class:`~pywayland.protocol.cursor_shape_v1.WpCursorShapeDeviceV1` for
|
||||
a :class:`~pywayland.protocol.tablet_unstable_v2.ZwpTabletToolV2`
|
||||
object.
|
||||
|
||||
:param tablet_tool:
|
||||
:type tablet_tool:
|
||||
:class:`~pywayland.protocol.tablet_unstable_v2.ZwpTabletToolV2`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.cursor_shape_v1.WpCursorShapeDeviceV1`
|
||||
"""
|
||||
cursor_shape_device = self._marshal_constructor(2, WpCursorShapeDeviceV1, tablet_tool)
|
||||
return cursor_shape_device
|
||||
|
||||
|
||||
class WpCursorShapeManagerV1Resource(Resource):
|
||||
interface = WpCursorShapeManagerV1
|
||||
|
||||
|
||||
class WpCursorShapeManagerV1Global(Global):
|
||||
interface = WpCursorShapeManagerV1
|
||||
|
||||
|
||||
WpCursorShapeManagerV1._gen_c()
|
||||
WpCursorShapeManagerV1.proxy_class = WpCursorShapeManagerV1Proxy
|
||||
WpCursorShapeManagerV1.resource_class = WpCursorShapeManagerV1Resource
|
||||
WpCursorShapeManagerV1.global_class = WpCursorShapeManagerV1Global
|
|
@ -0,0 +1,29 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 NXP
|
||||
# Copyright © 2019 Status Research & Development GmbH.
|
||||
# Copyright © 2021 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .wp_drm_lease_connector_v1 import WpDrmLeaseConnectorV1 # noqa: F401
|
||||
from .wp_drm_lease_device_v1 import WpDrmLeaseDeviceV1 # noqa: F401
|
||||
from .wp_drm_lease_request_v1 import WpDrmLeaseRequestV1 # noqa: F401
|
||||
from .wp_drm_lease_v1 import WpDrmLeaseV1 # noqa: F401
|
|
@ -0,0 +1,174 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 NXP
|
||||
# Copyright © 2019 Status Research & Development GmbH.
|
||||
# Copyright © 2021 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class WpDrmLeaseConnectorV1(Interface):
|
||||
"""A leasable drm connector
|
||||
|
||||
Represents a DRM connector which is available for lease. These objects are
|
||||
created via :func:`WpDrmLeaseDeviceV1.connector()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseDeviceV1.connector>` events, and
|
||||
should be passed to lease requests via
|
||||
:func:`WpDrmLeaseRequestV1.request_connector()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseRequestV1.request_connector>`.
|
||||
Immediately after the :class:`WpDrmLeaseConnectorV1` object is created the
|
||||
compositor will send a name, a description, a connector_id and a done
|
||||
event. When the description is updated the compositor will send a
|
||||
description event followed by a done event.
|
||||
"""
|
||||
|
||||
name = "wp_drm_lease_connector_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class WpDrmLeaseConnectorV1Proxy(Proxy[WpDrmLeaseConnectorV1]):
|
||||
interface = WpDrmLeaseConnectorV1
|
||||
|
||||
@WpDrmLeaseConnectorV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy connector
|
||||
|
||||
The client may send this request to indicate that it will not use this
|
||||
connector. Clients are encouraged to send this after receiving the
|
||||
"withdrawn" event so that the server can release the resources
|
||||
associated with this connector offer. Neither existing lease requests
|
||||
nor leases will be affected.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class WpDrmLeaseConnectorV1Resource(Resource):
|
||||
interface = WpDrmLeaseConnectorV1
|
||||
|
||||
@WpDrmLeaseConnectorV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def name(self, name: str) -> None:
|
||||
"""Name
|
||||
|
||||
The compositor sends this event once the connector is created to
|
||||
indicate the name of this connector. This will not change for the
|
||||
duration of the Wayland session, but is not guaranteed to be consistent
|
||||
between sessions.
|
||||
|
||||
If the compositor supports
|
||||
:class:`~pywayland.protocol.wayland.WlOutput` version 4 and this
|
||||
connector corresponds to a
|
||||
:class:`~pywayland.protocol.wayland.WlOutput`, the compositor should
|
||||
use the same name as for the
|
||||
:class:`~pywayland.protocol.wayland.WlOutput`.
|
||||
|
||||
:param name:
|
||||
connector name
|
||||
:type name:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(0, name)
|
||||
|
||||
@WpDrmLeaseConnectorV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def description(self, description: str) -> None:
|
||||
"""Description
|
||||
|
||||
The compositor sends this event once the connector is created to
|
||||
provide a human-readable description for this connector, which may be
|
||||
presented to the user. The compositor may send this event multiple
|
||||
times over the lifetime of this object to reflect changes in the
|
||||
description.
|
||||
|
||||
:param description:
|
||||
connector description
|
||||
:type description:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(1, description)
|
||||
|
||||
@WpDrmLeaseConnectorV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def connector_id(self, connector_id: int) -> None:
|
||||
"""Connector_id
|
||||
|
||||
The compositor sends this event once the connector is created to
|
||||
indicate the DRM object ID which represents the underlying connector
|
||||
that is being offered. Note that the final lease may include additional
|
||||
object IDs, such as CRTCs and planes.
|
||||
|
||||
:param connector_id:
|
||||
DRM connector ID
|
||||
:type connector_id:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(2, connector_id)
|
||||
|
||||
@WpDrmLeaseConnectorV1.event()
|
||||
def done(self) -> None:
|
||||
"""All properties have been sent
|
||||
|
||||
This event is sent after all properties of a connector have been sent.
|
||||
This allows changes to the properties to be seen as atomic even if they
|
||||
happen via multiple events.
|
||||
"""
|
||||
self._post_event(3)
|
||||
|
||||
@WpDrmLeaseConnectorV1.event()
|
||||
def withdrawn(self) -> None:
|
||||
"""Lease offer withdrawn
|
||||
|
||||
Sent to indicate that the compositor will no longer honor requests for
|
||||
DRM leases which include this connector. The client may still issue a
|
||||
lease request including this connector, but the compositor will send
|
||||
:func:`WpDrmLeaseV1.finished()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseV1.finished>` without
|
||||
issuing a lease fd. Compositors are encouraged to send this event when
|
||||
they lose access to connector, for example when the connector is hot-
|
||||
unplugged, when the connector gets leased to a client or when the
|
||||
compositor loses DRM master.
|
||||
"""
|
||||
self._post_event(4)
|
||||
|
||||
|
||||
class WpDrmLeaseConnectorV1Global(Global):
|
||||
interface = WpDrmLeaseConnectorV1
|
||||
|
||||
|
||||
WpDrmLeaseConnectorV1._gen_c()
|
||||
WpDrmLeaseConnectorV1.proxy_class = WpDrmLeaseConnectorV1Proxy
|
||||
WpDrmLeaseConnectorV1.resource_class = WpDrmLeaseConnectorV1Resource
|
||||
WpDrmLeaseConnectorV1.global_class = WpDrmLeaseConnectorV1Global
|
|
@ -0,0 +1,206 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 NXP
|
||||
# Copyright © 2019 Status Research & Development GmbH.
|
||||
# Copyright © 2021 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from .wp_drm_lease_connector_v1 import WpDrmLeaseConnectorV1
|
||||
from .wp_drm_lease_request_v1 import WpDrmLeaseRequestV1
|
||||
|
||||
|
||||
class WpDrmLeaseDeviceV1(Interface):
|
||||
"""Lease device
|
||||
|
||||
This protocol is used by Wayland compositors which act as Direct
|
||||
Renderering Manager (DRM) masters to lease DRM resources to Wayland
|
||||
clients.
|
||||
|
||||
The compositor will advertise one :class:`WpDrmLeaseDeviceV1` global for
|
||||
each DRM node. Some time after a client binds to the
|
||||
:class:`WpDrmLeaseDeviceV1` global, the compositor will send a drm_fd event
|
||||
followed by zero, one or more connector events. After all currently
|
||||
available connectors have been sent, the compositor will send a
|
||||
:func:`WpDrmLeaseDeviceV1.done()` event.
|
||||
|
||||
When the list of connectors available for lease changes the compositor will
|
||||
send :func:`WpDrmLeaseDeviceV1.connector()` events for added connectors and
|
||||
:func:`WpDrmLeaseConnectorV1.withdrawn()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseConnectorV1.withdrawn>` events
|
||||
for removed connectors, followed by a :func:`WpDrmLeaseDeviceV1.done()`
|
||||
event.
|
||||
|
||||
The compositor will indicate when a device is gone by removing the global
|
||||
via a :func:`WlRegistry.global_remove()
|
||||
<pywayland.protocol.wayland.WlRegistry.global_remove>` event. Upon
|
||||
receiving this event, the client should destroy any matching
|
||||
:class:`WpDrmLeaseDeviceV1` object.
|
||||
|
||||
To destroy a :class:`WpDrmLeaseDeviceV1` object, the client must first
|
||||
issue a release request. Upon receiving this request, the compositor will
|
||||
immediately send a released event and destroy the object. The client must
|
||||
continue to process and discard drm_fd and connector events until it
|
||||
receives the released event. Upon receiving the released event, the client
|
||||
can safely cleanup any client-side resources.
|
||||
|
||||
Warning! The protocol described in this file is currently in the testing
|
||||
phase. Backward compatible changes may be added together with the
|
||||
corresponding interface version bump. Backward incompatible changes can
|
||||
only be done by creating a new major version of the extension.
|
||||
"""
|
||||
|
||||
name = "wp_drm_lease_device_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class WpDrmLeaseDeviceV1Proxy(Proxy[WpDrmLeaseDeviceV1]):
|
||||
interface = WpDrmLeaseDeviceV1
|
||||
|
||||
@WpDrmLeaseDeviceV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpDrmLeaseRequestV1),
|
||||
)
|
||||
def create_lease_request(self) -> Proxy[WpDrmLeaseRequestV1]:
|
||||
"""Create a lease request object
|
||||
|
||||
Creates a lease request object.
|
||||
|
||||
See the documentation for
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseRequestV1` for
|
||||
details.
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseRequestV1`
|
||||
"""
|
||||
id = self._marshal_constructor(0, WpDrmLeaseRequestV1)
|
||||
return id
|
||||
|
||||
@WpDrmLeaseDeviceV1.request()
|
||||
def release(self) -> None:
|
||||
"""Release this object
|
||||
|
||||
Indicates the client no longer wishes to use this object. In response
|
||||
the compositor will immediately send the released event and destroy
|
||||
this object. It can however not guarantee that the client won't receive
|
||||
connector events before the released event. The client must not send
|
||||
any requests after this one, doing so will raise a
|
||||
:class:`~pywayland.protocol.wayland.WlDisplay` error. Existing
|
||||
connectors, lease request and leases will not be affected.
|
||||
"""
|
||||
self._marshal(1)
|
||||
|
||||
|
||||
class WpDrmLeaseDeviceV1Resource(Resource):
|
||||
interface = WpDrmLeaseDeviceV1
|
||||
|
||||
@WpDrmLeaseDeviceV1.event(
|
||||
Argument(ArgumentType.FileDescriptor),
|
||||
)
|
||||
def drm_fd(self, fd: int) -> None:
|
||||
"""Open a non-master fd for this drm node
|
||||
|
||||
The compositor will send this event when the
|
||||
:class:`WpDrmLeaseDeviceV1` global is bound, although there are no
|
||||
guarantees as to how long this takes - the compositor might need to
|
||||
wait until regaining DRM master. The included fd is a non-master DRM
|
||||
file descriptor opened for this device and the compositor must not
|
||||
authenticate it. The purpose of this event is to give the client the
|
||||
ability to query DRM and discover information which may help them pick
|
||||
the appropriate DRM device or select the appropriate connectors
|
||||
therein.
|
||||
|
||||
:param fd:
|
||||
DRM file descriptor
|
||||
:type fd:
|
||||
`ArgumentType.FileDescriptor`
|
||||
"""
|
||||
self._post_event(0, fd)
|
||||
|
||||
@WpDrmLeaseDeviceV1.event(
|
||||
Argument(ArgumentType.NewId, interface=WpDrmLeaseConnectorV1),
|
||||
)
|
||||
def connector(self, id: WpDrmLeaseConnectorV1) -> None:
|
||||
"""Advertise connectors available for leases
|
||||
|
||||
The compositor will use this event to advertise connectors available
|
||||
for lease by clients. This object may be passed into a lease request to
|
||||
indicate the client would like to lease that connector, see
|
||||
:func:`WpDrmLeaseRequestV1.request_connector()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseRequestV1.request_connector>`
|
||||
for details. While the compositor will make a best effort to not send
|
||||
disconnected connectors, no guarantees can be made.
|
||||
|
||||
The compositor must send the drm_fd event before sending connectors.
|
||||
After the drm_fd event it will send all available connectors but may
|
||||
send additional connectors at any time.
|
||||
|
||||
:param id:
|
||||
:type id:
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseConnectorV1`
|
||||
"""
|
||||
self._post_event(1, id)
|
||||
|
||||
@WpDrmLeaseDeviceV1.event()
|
||||
def done(self) -> None:
|
||||
"""Signals grouping of connectors
|
||||
|
||||
The compositor will send this event to indicate that it has sent all
|
||||
currently available connectors after the client binds to the global or
|
||||
when it updates the connector list, for example on hotplug, drm master
|
||||
change or when a leased connector becomes available again. It will
|
||||
similarly send this event to group
|
||||
:func:`WpDrmLeaseConnectorV1.withdrawn()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseConnectorV1.withdrawn>`
|
||||
events of connectors of this device.
|
||||
"""
|
||||
self._post_event(2)
|
||||
|
||||
@WpDrmLeaseDeviceV1.event()
|
||||
def released(self) -> None:
|
||||
"""The compositor has finished using the device
|
||||
|
||||
This event is sent in response to the release request and indicates
|
||||
that the compositor is done sending connector events. The compositor
|
||||
will destroy this object immediately after sending the event and it
|
||||
will become invalid. The client should release any resources associated
|
||||
with this device after receiving this event.
|
||||
"""
|
||||
self._post_event(3)
|
||||
|
||||
|
||||
class WpDrmLeaseDeviceV1Global(Global):
|
||||
interface = WpDrmLeaseDeviceV1
|
||||
|
||||
|
||||
WpDrmLeaseDeviceV1._gen_c()
|
||||
WpDrmLeaseDeviceV1.proxy_class = WpDrmLeaseDeviceV1Proxy
|
||||
WpDrmLeaseDeviceV1.resource_class = WpDrmLeaseDeviceV1Resource
|
||||
WpDrmLeaseDeviceV1.global_class = WpDrmLeaseDeviceV1Global
|
|
@ -0,0 +1,120 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 NXP
|
||||
# Copyright © 2019 Status Research & Development GmbH.
|
||||
# Copyright © 2021 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from .wp_drm_lease_connector_v1 import WpDrmLeaseConnectorV1
|
||||
from .wp_drm_lease_v1 import WpDrmLeaseV1
|
||||
|
||||
|
||||
class WpDrmLeaseRequestV1(Interface):
|
||||
"""Drm lease request
|
||||
|
||||
A client that wishes to lease DRM resources will attach the list of
|
||||
connectors advertised with :func:`WpDrmLeaseDeviceV1.connector()
|
||||
<pywayland.protocol.drm_lease_v1.WpDrmLeaseDeviceV1.connector>` that they
|
||||
wish to lease, then use :func:`WpDrmLeaseRequestV1.submit()` to submit the
|
||||
request.
|
||||
"""
|
||||
|
||||
name = "wp_drm_lease_request_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
wrong_device = 0
|
||||
duplicate_connector = 1
|
||||
empty_lease = 2
|
||||
|
||||
|
||||
class WpDrmLeaseRequestV1Proxy(Proxy[WpDrmLeaseRequestV1]):
|
||||
interface = WpDrmLeaseRequestV1
|
||||
|
||||
@WpDrmLeaseRequestV1.request(
|
||||
Argument(ArgumentType.Object, interface=WpDrmLeaseConnectorV1),
|
||||
)
|
||||
def request_connector(self, connector: WpDrmLeaseConnectorV1) -> None:
|
||||
"""Request a connector for this lease
|
||||
|
||||
Indicates that the client would like to lease the given connector. This
|
||||
is only used as a suggestion, the compositor may choose to include any
|
||||
resources in the lease it issues, or change the set of leased resources
|
||||
at any time. Compositors are however encouraged to include the
|
||||
requested connector and other resources necessary to drive the
|
||||
connected output in the lease.
|
||||
|
||||
Requesting a connector that was created from a different lease device
|
||||
than this lease request raises the wrong_device error. Requesting a
|
||||
connector twice will raise the duplicate_connector error.
|
||||
|
||||
:param connector:
|
||||
:type connector:
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseConnectorV1`
|
||||
"""
|
||||
self._marshal(0, connector)
|
||||
|
||||
@WpDrmLeaseRequestV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpDrmLeaseV1),
|
||||
)
|
||||
def submit(self) -> Proxy[WpDrmLeaseV1]:
|
||||
"""Submit the lease request
|
||||
|
||||
Submits the lease request and creates a new
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseV1` object. After
|
||||
calling submit the compositor will immediately destroy this object,
|
||||
issuing any more requests will cause a wl_diplay error. The compositor
|
||||
doesn't make any guarantees about the events of the lease object,
|
||||
clients cannot expect an immediate response. Not requesting any
|
||||
connectors before submitting the lease request will raise the
|
||||
empty_lease error.
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.drm_lease_v1.WpDrmLeaseV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, WpDrmLeaseV1)
|
||||
return id
|
||||
|
||||
|
||||
class WpDrmLeaseRequestV1Resource(Resource):
|
||||
interface = WpDrmLeaseRequestV1
|
||||
|
||||
|
||||
class WpDrmLeaseRequestV1Global(Global):
|
||||
interface = WpDrmLeaseRequestV1
|
||||
|
||||
|
||||
WpDrmLeaseRequestV1._gen_c()
|
||||
WpDrmLeaseRequestV1.proxy_class = WpDrmLeaseRequestV1Proxy
|
||||
WpDrmLeaseRequestV1.resource_class = WpDrmLeaseRequestV1Resource
|
||||
WpDrmLeaseRequestV1.global_class = WpDrmLeaseRequestV1Global
|
|
@ -0,0 +1,120 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 NXP
|
||||
# Copyright © 2019 Status Research & Development GmbH.
|
||||
# Copyright © 2021 Xaver Hugl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class WpDrmLeaseV1(Interface):
|
||||
"""A drm lease
|
||||
|
||||
A DRM lease object is used to transfer the DRM file descriptor to the
|
||||
client and manage the lifetime of the lease.
|
||||
|
||||
Some time after the :class:`WpDrmLeaseV1` object is created, the compositor
|
||||
will reply with the lease request's result. If the lease request is
|
||||
granted, the compositor will send a lease_fd event. If the lease request is
|
||||
denied, the compositor will send a finished event without a lease_fd event.
|
||||
"""
|
||||
|
||||
name = "wp_drm_lease_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class WpDrmLeaseV1Proxy(Proxy[WpDrmLeaseV1]):
|
||||
interface = WpDrmLeaseV1
|
||||
|
||||
@WpDrmLeaseV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroys the lease object
|
||||
|
||||
The client should send this to indicate that it no longer wishes to use
|
||||
this lease. The compositor should use drmModeRevokeLease on the
|
||||
appropriate file descriptor, if necessary.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class WpDrmLeaseV1Resource(Resource):
|
||||
interface = WpDrmLeaseV1
|
||||
|
||||
@WpDrmLeaseV1.event(
|
||||
Argument(ArgumentType.FileDescriptor),
|
||||
)
|
||||
def lease_fd(self, leased_fd: int) -> None:
|
||||
"""Shares the drm file descriptor
|
||||
|
||||
This event returns a file descriptor suitable for use with DRM-related
|
||||
ioctls. The client should use drmModeGetLease to enumerate the DRM
|
||||
objects which have been leased to them. The compositor guarantees it
|
||||
will not use the leased DRM objects itself until it sends the finished
|
||||
event. If the compositor cannot or will not grant a lease for the
|
||||
requested connectors, it will not send this event, instead sending the
|
||||
finished event.
|
||||
|
||||
The compositor will send this event at most once during this objects
|
||||
lifetime.
|
||||
|
||||
:param leased_fd:
|
||||
leased DRM file descriptor
|
||||
:type leased_fd:
|
||||
`ArgumentType.FileDescriptor`
|
||||
"""
|
||||
self._post_event(0, leased_fd)
|
||||
|
||||
@WpDrmLeaseV1.event()
|
||||
def finished(self) -> None:
|
||||
"""Sent when the lease has been revoked
|
||||
|
||||
The compositor uses this event to either reject a lease request, or if
|
||||
it previously sent a lease_fd, to notify the client that the lease has
|
||||
been revoked. If the client requires a new lease, they should destroy
|
||||
this object and submit a new lease request. The compositor will send no
|
||||
further events for this object after sending the finish event.
|
||||
Compositors should revoke the lease when any of the leased resources
|
||||
become unavailable, namely when a hot-unplug occurs or when the
|
||||
compositor loses DRM master.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class WpDrmLeaseV1Global(Global):
|
||||
interface = WpDrmLeaseV1
|
||||
|
||||
|
||||
WpDrmLeaseV1._gen_c()
|
||||
WpDrmLeaseV1.proxy_class = WpDrmLeaseV1Proxy
|
||||
WpDrmLeaseV1.resource_class = WpDrmLeaseV1Resource
|
||||
WpDrmLeaseV1.global_class = WpDrmLeaseV1Global
|
|
@ -0,0 +1,30 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 Ilia Bozhinov
|
||||
# Copyright © 2020 Isaac Freund
|
||||
# Copyright © 2022 wb9688
|
||||
# Copyright © 2023 i509VCB
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this
|
||||
# software and its documentation for any purpose is hereby granted
|
||||
# without fee, provided that the above copyright notice appear in
|
||||
# all copies and that both that copyright notice and this permission
|
||||
# notice appear in supporting documentation, and that the name of
|
||||
# the copyright holders not be used in advertising or publicity
|
||||
# pertaining to distribution of the software without specific,
|
||||
# written prior permission. The copyright holders make no
|
||||
# representations about the suitability of this software for any
|
||||
# purpose. It is provided "as is" without express or implied
|
||||
# warranty.
|
||||
#
|
||||
# THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
# FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
# THIS SOFTWARE.
|
||||
|
||||
from .ext_foreign_toplevel_handle_v1 import ExtForeignToplevelHandleV1 # noqa: F401
|
||||
from .ext_foreign_toplevel_list_v1 import ExtForeignToplevelListV1 # noqa: F401
|
|
@ -0,0 +1,192 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 Ilia Bozhinov
|
||||
# Copyright © 2020 Isaac Freund
|
||||
# Copyright © 2022 wb9688
|
||||
# Copyright © 2023 i509VCB
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this
|
||||
# software and its documentation for any purpose is hereby granted
|
||||
# without fee, provided that the above copyright notice appear in
|
||||
# all copies and that both that copyright notice and this permission
|
||||
# notice appear in supporting documentation, and that the name of
|
||||
# the copyright holders not be used in advertising or publicity
|
||||
# pertaining to distribution of the software without specific,
|
||||
# written prior permission. The copyright holders make no
|
||||
# representations about the suitability of this software for any
|
||||
# purpose. It is provided "as is" without express or implied
|
||||
# warranty.
|
||||
#
|
||||
# THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
# FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
# THIS SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class ExtForeignToplevelHandleV1(Interface):
|
||||
"""A mapped toplevel
|
||||
|
||||
A :class:`ExtForeignToplevelHandleV1` object represents a mapped toplevel
|
||||
window. A single app may have multiple mapped toplevels.
|
||||
"""
|
||||
|
||||
name = "ext_foreign_toplevel_handle_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ExtForeignToplevelHandleV1Proxy(Proxy[ExtForeignToplevelHandleV1]):
|
||||
interface = ExtForeignToplevelHandleV1
|
||||
|
||||
@ExtForeignToplevelHandleV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the :class:`ExtForeignToplevelHandleV1` object
|
||||
|
||||
This request should be used when the client will no longer use the
|
||||
handle or after the closed event has been received to allow destruction
|
||||
of the object.
|
||||
|
||||
When a handle is destroyed, a new handle may not be created by the
|
||||
server until the toplevel is unmapped and then remapped. Destroying a
|
||||
toplevel handle is not recommended unless the client is cleaning up
|
||||
child objects before destroying the
|
||||
:class:`~pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelListV1`
|
||||
object, the toplevel was closed or the toplevel handle will not be used
|
||||
in the future.
|
||||
|
||||
Other protocols which extend the :class:`ExtForeignToplevelHandleV1`
|
||||
interface should require destructors for extension interfaces be called
|
||||
before allowing the toplevel handle to be destroyed.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ExtForeignToplevelHandleV1Resource(Resource):
|
||||
interface = ExtForeignToplevelHandleV1
|
||||
|
||||
@ExtForeignToplevelHandleV1.event()
|
||||
def closed(self) -> None:
|
||||
"""The toplevel has been closed
|
||||
|
||||
The server will emit no further events on the
|
||||
:class:`ExtForeignToplevelHandleV1` after this event. Any requests
|
||||
received aside from the destroy request must be ignored. Upon receiving
|
||||
this event, the client should destroy the handle.
|
||||
|
||||
Other protocols which extend the :class:`ExtForeignToplevelHandleV1`
|
||||
interface must also ignore requests other than destructors.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ExtForeignToplevelHandleV1.event()
|
||||
def done(self) -> None:
|
||||
"""All information about the toplevel has been sent
|
||||
|
||||
This event is sent after all changes in the toplevel state have been
|
||||
sent.
|
||||
|
||||
This allows changes to the :class:`ExtForeignToplevelHandleV1`
|
||||
properties to be atomically applied. Other protocols which extend the
|
||||
:class:`ExtForeignToplevelHandleV1` interface may use this event to
|
||||
also atomically apply any pending state.
|
||||
|
||||
This event must not be sent after the
|
||||
:func:`ExtForeignToplevelHandleV1.closed()` event.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
@ExtForeignToplevelHandleV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def title(self, title: str) -> None:
|
||||
"""Title change
|
||||
|
||||
The title of the toplevel has changed.
|
||||
|
||||
The configured state must not be applied immediately. See
|
||||
:func:`ExtForeignToplevelHandleV1.done()` for details.
|
||||
|
||||
:param title:
|
||||
:type title:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(2, title)
|
||||
|
||||
@ExtForeignToplevelHandleV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def app_id(self, app_id: str) -> None:
|
||||
"""App_id change
|
||||
|
||||
The app id of the toplevel has changed.
|
||||
|
||||
The configured state must not be applied immediately. See
|
||||
:func:`ExtForeignToplevelHandleV1.done()` for details.
|
||||
|
||||
:param app_id:
|
||||
:type app_id:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(3, app_id)
|
||||
|
||||
@ExtForeignToplevelHandleV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def identifier(self, identifier: str) -> None:
|
||||
"""A stable identifier for a toplevel
|
||||
|
||||
This identifier is used to check if two or more toplevel handles belong
|
||||
to the same toplevel.
|
||||
|
||||
The identifier is useful for command line tools or privileged clients
|
||||
which may need to reference an exact toplevel across processes or
|
||||
instances of the
|
||||
:class:`~pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelListV1`
|
||||
global.
|
||||
|
||||
The compositor must only send this event when the handle is created.
|
||||
|
||||
The identifier must be unique per toplevel and it's handles. Two
|
||||
different toplevels must not have the same identifier. The identifier
|
||||
is only valid as long as the toplevel is mapped. If the toplevel is
|
||||
unmapped the identifier must not be reused. An identifier must not be
|
||||
reused by the compositor to ensure there are no races when sharing
|
||||
identifiers between processes.
|
||||
|
||||
An identifier is a string that contains up to 32 printable ASCII bytes.
|
||||
An identifier must not be an empty string. It is recommended that a
|
||||
compositor includes an opaque generation value in identifiers. How the
|
||||
generation value is used when generating the identifier is
|
||||
implementation dependent.
|
||||
|
||||
:param identifier:
|
||||
:type identifier:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(4, identifier)
|
||||
|
||||
|
||||
class ExtForeignToplevelHandleV1Global(Global):
|
||||
interface = ExtForeignToplevelHandleV1
|
||||
|
||||
|
||||
ExtForeignToplevelHandleV1._gen_c()
|
||||
ExtForeignToplevelHandleV1.proxy_class = ExtForeignToplevelHandleV1Proxy
|
||||
ExtForeignToplevelHandleV1.resource_class = ExtForeignToplevelHandleV1Resource
|
||||
ExtForeignToplevelHandleV1.global_class = ExtForeignToplevelHandleV1Global
|
|
@ -0,0 +1,151 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2018 Ilia Bozhinov
|
||||
# Copyright © 2020 Isaac Freund
|
||||
# Copyright © 2022 wb9688
|
||||
# Copyright © 2023 i509VCB
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this
|
||||
# software and its documentation for any purpose is hereby granted
|
||||
# without fee, provided that the above copyright notice appear in
|
||||
# all copies and that both that copyright notice and this permission
|
||||
# notice appear in supporting documentation, and that the name of
|
||||
# the copyright holders not be used in advertising or publicity
|
||||
# pertaining to distribution of the software without specific,
|
||||
# written prior permission. The copyright holders make no
|
||||
# representations about the suitability of this software for any
|
||||
# purpose. It is provided "as is" without express or implied
|
||||
# warranty.
|
||||
#
|
||||
# THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
# FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
# THIS SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from .ext_foreign_toplevel_handle_v1 import ExtForeignToplevelHandleV1
|
||||
|
||||
|
||||
class ExtForeignToplevelListV1(Interface):
|
||||
"""List toplevels
|
||||
|
||||
A toplevel is defined as a surface with a role similar to
|
||||
:class:`~pywayland.protocol.xdg_shell.XdgToplevel`. XWayland surfaces may
|
||||
be treated like toplevels in this protocol.
|
||||
|
||||
After a client binds the :class:`ExtForeignToplevelListV1`, each mapped
|
||||
toplevel window will be sent using the
|
||||
:func:`ExtForeignToplevelListV1.toplevel()` event.
|
||||
|
||||
Clients which only care about the current state can perform a roundtrip
|
||||
after binding this global.
|
||||
|
||||
For each instance of :class:`ExtForeignToplevelListV1`, the compositor must
|
||||
create a new
|
||||
:class:`~pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelHandleV1`
|
||||
object for each mapped toplevel.
|
||||
|
||||
If a compositor implementation sends the
|
||||
:func:`ExtForeignToplevelListV1.finished()` event after the global is
|
||||
bound, the compositor must not send any
|
||||
:func:`ExtForeignToplevelListV1.toplevel()` events.
|
||||
"""
|
||||
|
||||
name = "ext_foreign_toplevel_list_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ExtForeignToplevelListV1Proxy(Proxy[ExtForeignToplevelListV1]):
|
||||
interface = ExtForeignToplevelListV1
|
||||
|
||||
@ExtForeignToplevelListV1.request()
|
||||
def stop(self) -> None:
|
||||
"""Stop sending events
|
||||
|
||||
This request indicates that the client no longer wishes to receive
|
||||
events for new toplevels.
|
||||
|
||||
The Wayland protocol is asynchronous, meaning the compositor may send
|
||||
further toplevel events until the stop request is processed. The client
|
||||
should wait for a :func:`ExtForeignToplevelListV1.finished()` event
|
||||
before destroying this object.
|
||||
"""
|
||||
self._marshal(0)
|
||||
|
||||
@ExtForeignToplevelListV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the :class:`ExtForeignToplevelListV1` object
|
||||
|
||||
This request should be called either when the client will no longer use
|
||||
the :class:`ExtForeignToplevelListV1` or after the finished event has
|
||||
been received to allow destruction of the object.
|
||||
|
||||
If a client wishes to destroy this object it should send a
|
||||
:func:`ExtForeignToplevelListV1.stop()` request and wait for a
|
||||
:func:`ExtForeignToplevelListV1.finished()` event, then destroy the
|
||||
handles and then this object.
|
||||
"""
|
||||
self._marshal(1)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ExtForeignToplevelListV1Resource(Resource):
|
||||
interface = ExtForeignToplevelListV1
|
||||
|
||||
@ExtForeignToplevelListV1.event(
|
||||
Argument(ArgumentType.NewId, interface=ExtForeignToplevelHandleV1),
|
||||
)
|
||||
def toplevel(self, toplevel: ExtForeignToplevelHandleV1) -> None:
|
||||
"""A toplevel has been created
|
||||
|
||||
This event is emitted whenever a new toplevel window is created. It is
|
||||
emitted for all toplevels, regardless of the app that has created them.
|
||||
|
||||
All initial properties of the toplevel (identifier, title, app_id) will
|
||||
be sent immediately after this event using the corresponding events for
|
||||
:class:`~pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelHandleV1`.
|
||||
The compositor will use the :func:`ExtForeignToplevelHandleV1.done()
|
||||
<pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelHandleV1.done>`
|
||||
event to indicate when all data has been sent.
|
||||
|
||||
:param toplevel:
|
||||
:type toplevel:
|
||||
:class:`~pywayland.protocol.ext_foreign_toplevel_list_v1.ExtForeignToplevelHandleV1`
|
||||
"""
|
||||
self._post_event(0, toplevel)
|
||||
|
||||
@ExtForeignToplevelListV1.event()
|
||||
def finished(self) -> None:
|
||||
"""The compositor has finished with the toplevel manager
|
||||
|
||||
This event indicates that the compositor is done sending events to this
|
||||
object. The client should should destroy the object. See
|
||||
:func:`ExtForeignToplevelListV1.destroy()` for more information.
|
||||
|
||||
The compositor must not send any more toplevel events after this event.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ExtForeignToplevelListV1Global(Global):
|
||||
interface = ExtForeignToplevelListV1
|
||||
|
||||
|
||||
ExtForeignToplevelListV1._gen_c()
|
||||
ExtForeignToplevelListV1.proxy_class = ExtForeignToplevelListV1Proxy
|
||||
ExtForeignToplevelListV1.resource_class = ExtForeignToplevelListV1Resource
|
||||
ExtForeignToplevelListV1.global_class = ExtForeignToplevelListV1Global
|
|
@ -0,0 +1,26 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Martin Gräßlin
|
||||
# Copyright © 2022 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .ext_idle_notification_v1 import ExtIdleNotificationV1 # noqa: F401
|
||||
from .ext_idle_notifier_v1 import ExtIdleNotifierV1 # noqa: F401
|
|
@ -0,0 +1,102 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Martin Gräßlin
|
||||
# Copyright © 2022 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import Global, Interface, Proxy, Resource
|
||||
|
||||
|
||||
class ExtIdleNotificationV1(Interface):
|
||||
"""Idle notification
|
||||
|
||||
This interface is used by the compositor to send idle notification events
|
||||
to clients.
|
||||
|
||||
Initially the notification object is not idle. The notification object
|
||||
becomes idle when no user activity has happened for at least the timeout
|
||||
duration, starting from the creation of the notification object. User
|
||||
activity may include input events or a presence sensor, but is compositor-
|
||||
specific. If an idle inhibitor is active (e.g. another client has created a
|
||||
:class:`~pywayland.protocol.idle_inhibit_unstable_v1.ZwpIdleInhibitorV1` on
|
||||
a visible surface), the compositor must not make the notification object
|
||||
idle.
|
||||
|
||||
When the notification object becomes idle, an idled event is sent. When
|
||||
user activity starts again, the notification object stops being idle, a
|
||||
resumed event is sent and the timeout is restarted.
|
||||
"""
|
||||
|
||||
name = "ext_idle_notification_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ExtIdleNotificationV1Proxy(Proxy[ExtIdleNotificationV1]):
|
||||
interface = ExtIdleNotificationV1
|
||||
|
||||
@ExtIdleNotificationV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the notification object
|
||||
|
||||
Destroy the notification object.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ExtIdleNotificationV1Resource(Resource):
|
||||
interface = ExtIdleNotificationV1
|
||||
|
||||
@ExtIdleNotificationV1.event()
|
||||
def idled(self) -> None:
|
||||
"""Notification object is idle
|
||||
|
||||
This event is sent when the notification object becomes idle.
|
||||
|
||||
It's a compositor protocol error to send this event twice without a
|
||||
resumed event in-between.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ExtIdleNotificationV1.event()
|
||||
def resumed(self) -> None:
|
||||
"""Notification object is no longer idle
|
||||
|
||||
This event is sent when the notification object stops being idle.
|
||||
|
||||
It's a compositor protocol error to send this event twice without an
|
||||
idled event in-between. It's a compositor protocol error to send this
|
||||
event prior to any idled event.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ExtIdleNotificationV1Global(Global):
|
||||
interface = ExtIdleNotificationV1
|
||||
|
||||
|
||||
ExtIdleNotificationV1._gen_c()
|
||||
ExtIdleNotificationV1.proxy_class = ExtIdleNotificationV1Proxy
|
||||
ExtIdleNotificationV1.resource_class = ExtIdleNotificationV1Resource
|
||||
ExtIdleNotificationV1.global_class = ExtIdleNotificationV1Global
|
|
@ -0,0 +1,111 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Martin Gräßlin
|
||||
# Copyright © 2022 Simon Ser
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSeat
|
||||
from .ext_idle_notification_v1 import ExtIdleNotificationV1
|
||||
|
||||
|
||||
class ExtIdleNotifierV1(Interface):
|
||||
"""Idle notification manager
|
||||
|
||||
This interface allows clients to monitor user idle status.
|
||||
|
||||
After binding to this global, clients can create
|
||||
:class:`~pywayland.protocol.ext_idle_notify_v1.ExtIdleNotificationV1`
|
||||
objects to get notified when the user is idle for a given amount of time.
|
||||
"""
|
||||
|
||||
name = "ext_idle_notifier_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ExtIdleNotifierV1Proxy(Proxy[ExtIdleNotifierV1]):
|
||||
interface = ExtIdleNotifierV1
|
||||
|
||||
@ExtIdleNotifierV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the manager
|
||||
|
||||
Destroy the manager object. All objects created via this interface
|
||||
remain valid.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ExtIdleNotifierV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ExtIdleNotificationV1),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Object, interface=WlSeat),
|
||||
)
|
||||
def get_idle_notification(self, timeout: int, seat: WlSeat) -> Proxy[ExtIdleNotificationV1]:
|
||||
"""Create a notification object
|
||||
|
||||
Create a new idle notification object.
|
||||
|
||||
The notification object has a minimum timeout duration and is tied to a
|
||||
seat. The client will be notified if the seat is inactive for at least
|
||||
the provided timeout. See
|
||||
:class:`~pywayland.protocol.ext_idle_notify_v1.ExtIdleNotificationV1`
|
||||
for more details.
|
||||
|
||||
A zero timeout is valid and means the client wants to be notified as
|
||||
soon as possible when the seat is inactive.
|
||||
|
||||
:param timeout:
|
||||
minimum idle timeout in msec
|
||||
:type timeout:
|
||||
`ArgumentType.Uint`
|
||||
:param seat:
|
||||
:type seat:
|
||||
:class:`~pywayland.protocol.wayland.WlSeat`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.ext_idle_notify_v1.ExtIdleNotificationV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ExtIdleNotificationV1, timeout, seat)
|
||||
return id
|
||||
|
||||
|
||||
class ExtIdleNotifierV1Resource(Resource):
|
||||
interface = ExtIdleNotifierV1
|
||||
|
||||
|
||||
class ExtIdleNotifierV1Global(Global):
|
||||
interface = ExtIdleNotifierV1
|
||||
|
||||
|
||||
ExtIdleNotifierV1._gen_c()
|
||||
ExtIdleNotifierV1.proxy_class = ExtIdleNotifierV1Proxy
|
||||
ExtIdleNotifierV1.resource_class = ExtIdleNotifierV1Resource
|
||||
ExtIdleNotifierV1.global_class = ExtIdleNotifierV1Global
|
|
@ -0,0 +1,25 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2021 Isaac Freund
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from .ext_session_lock_manager_v1 import ExtSessionLockManagerV1 # noqa: F401
|
||||
from .ext_session_lock_surface_v1 import ExtSessionLockSurfaceV1 # noqa: F401
|
||||
from .ext_session_lock_v1 import ExtSessionLockV1 # noqa: F401
|
|
@ -0,0 +1,93 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2021 Isaac Freund
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from .ext_session_lock_v1 import ExtSessionLockV1
|
||||
|
||||
|
||||
class ExtSessionLockManagerV1(Interface):
|
||||
"""Used to lock the session
|
||||
|
||||
This interface is used to request that the session be locked.
|
||||
"""
|
||||
|
||||
name = "ext_session_lock_manager_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ExtSessionLockManagerV1Proxy(Proxy[ExtSessionLockManagerV1]):
|
||||
interface = ExtSessionLockManagerV1
|
||||
|
||||
@ExtSessionLockManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the session lock manager object
|
||||
|
||||
This informs the compositor that the session lock manager object will
|
||||
no longer be used. Existing objects created through this interface
|
||||
remain valid.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ExtSessionLockManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ExtSessionLockV1),
|
||||
)
|
||||
def lock(self) -> Proxy[ExtSessionLockV1]:
|
||||
"""Attempt to lock the session
|
||||
|
||||
This request creates a session lock and asks the compositor to lock the
|
||||
session. The compositor will send either the
|
||||
:func:`ExtSessionLockV1.locked()
|
||||
<pywayland.protocol.ext_session_lock_v1.ExtSessionLockV1.locked>` or
|
||||
:func:`ExtSessionLockV1.finished()
|
||||
<pywayland.protocol.ext_session_lock_v1.ExtSessionLockV1.finished>`
|
||||
event on the created object in response to this request.
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.ext_session_lock_v1.ExtSessionLockV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ExtSessionLockV1)
|
||||
return id
|
||||
|
||||
|
||||
class ExtSessionLockManagerV1Resource(Resource):
|
||||
interface = ExtSessionLockManagerV1
|
||||
|
||||
|
||||
class ExtSessionLockManagerV1Global(Global):
|
||||
interface = ExtSessionLockManagerV1
|
||||
|
||||
|
||||
ExtSessionLockManagerV1._gen_c()
|
||||
ExtSessionLockManagerV1.proxy_class = ExtSessionLockManagerV1Proxy
|
||||
ExtSessionLockManagerV1.resource_class = ExtSessionLockManagerV1Resource
|
||||
ExtSessionLockManagerV1.global_class = ExtSessionLockManagerV1Global
|
|
@ -0,0 +1,166 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2021 Isaac Freund
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class ExtSessionLockSurfaceV1(Interface):
|
||||
"""A surface displayed while the session is locked
|
||||
|
||||
The client may use lock surfaces to display a screensaver, render a dialog
|
||||
to enter a password and unlock the session, or however else it sees fit.
|
||||
|
||||
On binding this interface the compositor will immediately send the first
|
||||
configure event. After making the ack_configure request in response to this
|
||||
event the client should attach and commit the first buffer. Committing the
|
||||
surface before acking the first configure is a protocol error. Committing
|
||||
the surface with a null buffer at any time is a protocol error.
|
||||
|
||||
The compositor is free to handle keyboard/pointer focus for lock surfaces
|
||||
however it chooses. A reasonable way to do this would be to give the first
|
||||
lock surface created keyboard focus and change keyboard focus if the user
|
||||
clicks on other surfaces.
|
||||
"""
|
||||
|
||||
name = "ext_session_lock_surface_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
commit_before_first_ack = 0
|
||||
null_buffer = 1
|
||||
dimensions_mismatch = 2
|
||||
invalid_serial = 3
|
||||
|
||||
|
||||
class ExtSessionLockSurfaceV1Proxy(Proxy[ExtSessionLockSurfaceV1]):
|
||||
interface = ExtSessionLockSurfaceV1
|
||||
|
||||
@ExtSessionLockSurfaceV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the lock surface object
|
||||
|
||||
This informs the compositor that the lock surface object will no longer
|
||||
be used.
|
||||
|
||||
It is recommended for a lock client to destroy lock surfaces if their
|
||||
corresponding :class:`~pywayland.protocol.wayland.WlOutput` global is
|
||||
removed.
|
||||
|
||||
If a lock surface on an active output is destroyed before the
|
||||
:func:`ExtSessionLockV1.unlock_and_destroy()
|
||||
<pywayland.protocol.ext_session_lock_v1.ExtSessionLockV1.unlock_and_destroy>`
|
||||
event is sent, the compositor must fall back to rendering a solid
|
||||
color.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ExtSessionLockSurfaceV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def ack_configure(self, serial: int) -> None:
|
||||
"""Ack a configure event
|
||||
|
||||
When a configure event is received, if a client commits the surface in
|
||||
response to the configure event, then the client must make an
|
||||
ack_configure request sometime before the commit request, passing along
|
||||
the serial of the configure event.
|
||||
|
||||
If the client receives multiple configure events before it can respond
|
||||
to one, it only has to ack the last configure event.
|
||||
|
||||
A client is not required to commit immediately after sending an
|
||||
ack_configure request - it may even ack_configure several times before
|
||||
its next surface commit.
|
||||
|
||||
A client may send multiple ack_configure requests before committing,
|
||||
but only the last request sent before a commit indicates which
|
||||
configure event the client really is responding to.
|
||||
|
||||
Sending an ack_configure request consumes the configure event
|
||||
referenced by the given serial, as well as all older configure events
|
||||
sent on this object.
|
||||
|
||||
It is a protocol error to issue multiple ack_configure requests
|
||||
referencing the same configure event or to issue an ack_configure
|
||||
request referencing a configure event older than the last configure
|
||||
event acked for a given lock surface.
|
||||
|
||||
:param serial:
|
||||
serial from the configure event
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(1, serial)
|
||||
|
||||
|
||||
class ExtSessionLockSurfaceV1Resource(Resource):
|
||||
interface = ExtSessionLockSurfaceV1
|
||||
|
||||
@ExtSessionLockSurfaceV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def configure(self, serial: int, width: int, height: int) -> None:
|
||||
"""The client should resize its surface
|
||||
|
||||
This event is sent once on binding the interface and may be sent again
|
||||
at the compositor's discretion, for example if output geometry changes.
|
||||
|
||||
The width and height are in surface-local coordinates and are exact
|
||||
requirements. Failing to match these surface dimensions in the next
|
||||
commit after acking a configure is a protocol error.
|
||||
|
||||
:param serial:
|
||||
serial for use in ack_configure
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param width:
|
||||
:type width:
|
||||
`ArgumentType.Uint`
|
||||
:param height:
|
||||
:type height:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, serial, width, height)
|
||||
|
||||
|
||||
class ExtSessionLockSurfaceV1Global(Global):
|
||||
interface = ExtSessionLockSurfaceV1
|
||||
|
||||
|
||||
ExtSessionLockSurfaceV1._gen_c()
|
||||
ExtSessionLockSurfaceV1.proxy_class = ExtSessionLockSurfaceV1Proxy
|
||||
ExtSessionLockSurfaceV1.resource_class = ExtSessionLockSurfaceV1Resource
|
||||
ExtSessionLockSurfaceV1.global_class = ExtSessionLockSurfaceV1Global
|
|
@ -0,0 +1,246 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2021 Isaac Freund
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlOutput
|
||||
from ..wayland import WlSurface
|
||||
from .ext_session_lock_surface_v1 import ExtSessionLockSurfaceV1
|
||||
|
||||
|
||||
class ExtSessionLockV1(Interface):
|
||||
"""Manage lock state and create lock surfaces
|
||||
|
||||
In response to the creation of this object the compositor must send either
|
||||
the locked or finished event.
|
||||
|
||||
The locked event indicates that the session is locked. This means that the
|
||||
compositor must stop rendering and providing input to normal clients.
|
||||
Instead the compositor must blank all outputs with an opaque color such
|
||||
that their normal content is fully hidden.
|
||||
|
||||
The only surfaces that should be rendered while the session is locked are
|
||||
the lock surfaces created through this interface and optionally, at the
|
||||
compositor's discretion, special privileged surfaces such as input methods
|
||||
or portions of desktop shell UIs.
|
||||
|
||||
The locked event must not be sent until a new "locked" frame (either from a
|
||||
session lock surface or the compositor blanking the output) has been
|
||||
presented on all outputs and no security sensitive normal/unlocked content
|
||||
is possibly visible.
|
||||
|
||||
The finished event should be sent immediately on creation of this object if
|
||||
the compositor decides that the locked event will not be sent.
|
||||
|
||||
The compositor may wait for the client to create and render session lock
|
||||
surfaces before sending the locked event to avoid displaying intermediate
|
||||
blank frames. However, it must impose a reasonable time limit if waiting
|
||||
and send the locked event as soon as the hard requirements described above
|
||||
can be met if the time limit expires. Clients should immediately create
|
||||
lock surfaces for all outputs on creation of this object to make this
|
||||
possible.
|
||||
|
||||
This behavior of the locked event is required in order to prevent possible
|
||||
race conditions with clients that wish to suspend the system or similar
|
||||
after locking the session. Without these semantics, clients triggering a
|
||||
suspend after receiving the locked event would race with the first "locked"
|
||||
frame being presented and normal/unlocked frames might be briefly visible
|
||||
as the system is resumed if the suspend operation wins the race.
|
||||
|
||||
If the client dies while the session is locked, the compositor must not
|
||||
unlock the session in response. It is acceptable for the session to be
|
||||
permanently locked if this happens. The compositor may choose to continue
|
||||
to display the lock surfaces the client had mapped before it died or
|
||||
alternatively fall back to a solid color, this is compositor policy.
|
||||
|
||||
Compositors may also allow a secure way to recover the session, the details
|
||||
of this are compositor policy. Compositors may allow a new client to create
|
||||
a :class:`ExtSessionLockV1` object and take responsibility for unlocking
|
||||
the session, they may even start a new lock client instance automatically.
|
||||
"""
|
||||
|
||||
name = "ext_session_lock_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
invalid_destroy = 0
|
||||
invalid_unlock = 1
|
||||
role = 2
|
||||
duplicate_output = 3
|
||||
already_constructed = 4
|
||||
|
||||
|
||||
class ExtSessionLockV1Proxy(Proxy[ExtSessionLockV1]):
|
||||
interface = ExtSessionLockV1
|
||||
|
||||
@ExtSessionLockV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the session lock
|
||||
|
||||
This informs the compositor that the lock object will no longer be
|
||||
used. Existing objects created through this interface remain valid.
|
||||
|
||||
After this request is made, lock surfaces created through this object
|
||||
should be destroyed by the client as they will no longer be used by the
|
||||
compositor.
|
||||
|
||||
It is a protocol error to make this request if the locked event was
|
||||
sent, the unlock_and_destroy request must be used instead.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ExtSessionLockV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ExtSessionLockSurfaceV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Object, interface=WlOutput),
|
||||
)
|
||||
def get_lock_surface(self, surface: WlSurface, output: WlOutput) -> Proxy[ExtSessionLockSurfaceV1]:
|
||||
"""Create a lock surface for a given output
|
||||
|
||||
The client is expected to create lock surfaces for all outputs
|
||||
currently present and any new outputs as they are advertised. These
|
||||
won't be displayed by the compositor unless the lock is successful and
|
||||
the locked event is sent.
|
||||
|
||||
Providing a :class:`~pywayland.protocol.wayland.WlSurface` which
|
||||
already has a role or already has a buffer attached or committed is a
|
||||
protocol error, as is attaching/committing a buffer before the first
|
||||
:func:`ExtSessionLockSurfaceV1.configure()
|
||||
<pywayland.protocol.ext_session_lock_v1.ExtSessionLockSurfaceV1.configure>`
|
||||
event.
|
||||
|
||||
Attempting to create more than one lock surface for a given output is a
|
||||
duplicate_output protocol error.
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param output:
|
||||
:type output:
|
||||
:class:`~pywayland.protocol.wayland.WlOutput`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.ext_session_lock_v1.ExtSessionLockSurfaceV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ExtSessionLockSurfaceV1, surface, output)
|
||||
return id
|
||||
|
||||
@ExtSessionLockV1.request()
|
||||
def unlock_and_destroy(self) -> None:
|
||||
"""Unlock the session, destroying the object
|
||||
|
||||
This request indicates that the session should be unlocked, for example
|
||||
because the user has entered their password and it has been verified by
|
||||
the client.
|
||||
|
||||
This request also informs the compositor that the lock object will no
|
||||
longer be used and should be destroyed. Existing objects created
|
||||
through this interface remain valid.
|
||||
|
||||
After this request is made, lock surfaces created through this object
|
||||
should be destroyed by the client as they will no longer be used by the
|
||||
compositor.
|
||||
|
||||
It is a protocol error to make this request if the locked event has not
|
||||
been sent. In that case, the lock object must be destroyed using the
|
||||
destroy request.
|
||||
|
||||
Note that a correct client that wishes to exit directly after unlocking
|
||||
the session must use the :func:`WlDisplay.sync()
|
||||
<pywayland.protocol.wayland.WlDisplay.sync>` request to ensure the
|
||||
server receives and processes the unlock_and_destroy request. Otherwise
|
||||
there is no guarantee that the server has unlocked the session due to
|
||||
the asynchronous nature of the Wayland protocol. For example, the
|
||||
server might terminate the client with a protocol error before it
|
||||
processes the unlock_and_destroy request.
|
||||
"""
|
||||
self._marshal(2)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ExtSessionLockV1Resource(Resource):
|
||||
interface = ExtSessionLockV1
|
||||
|
||||
@ExtSessionLockV1.event()
|
||||
def locked(self) -> None:
|
||||
"""Session successfully locked
|
||||
|
||||
This client is now responsible for displaying graphics while the
|
||||
session is locked and deciding when to unlock the session.
|
||||
|
||||
The locked event must not be sent until a new "locked" frame has been
|
||||
presented on all outputs and no security sensitive normal/unlocked
|
||||
content is possibly visible.
|
||||
|
||||
If this event is sent, making the destroy request is a protocol error,
|
||||
the lock object must be destroyed using the unlock_and_destroy request.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ExtSessionLockV1.event()
|
||||
def finished(self) -> None:
|
||||
"""The session lock object should be destroyed
|
||||
|
||||
The compositor has decided that the session lock should be destroyed as
|
||||
it will no longer be used by the compositor. Exactly when this event is
|
||||
sent is compositor policy, but it must never be sent more than once for
|
||||
a given session lock object.
|
||||
|
||||
This might be sent because there is already another
|
||||
:class:`ExtSessionLockV1` object held by a client, or the compositor
|
||||
has decided to deny the request to lock the session for some other
|
||||
reason. This might also be sent because the compositor implements some
|
||||
alternative, secure way to authenticate and unlock the session.
|
||||
|
||||
The finished event should be sent immediately on creation of this
|
||||
object if the compositor decides that the locked event will not be
|
||||
sent.
|
||||
|
||||
If the locked event is sent on creation of this object the finished
|
||||
event may still be sent at some later time in this object's lifetime.
|
||||
This is compositor policy.
|
||||
|
||||
Upon receiving this event, the client should make either the destroy
|
||||
request or the unlock_and_destroy request, depending on whether or not
|
||||
the locked event was received on this object.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ExtSessionLockV1Global(Global):
|
||||
interface = ExtSessionLockV1
|
||||
|
||||
|
||||
ExtSessionLockV1._gen_c()
|
||||
ExtSessionLockV1.proxy_class = ExtSessionLockV1Proxy
|
||||
ExtSessionLockV1.resource_class = ExtSessionLockV1Resource
|
||||
ExtSessionLockV1.global_class = ExtSessionLockV1Global
|
|
@ -0,0 +1,25 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2022 Kenny Levinsen
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .wp_fractional_scale_manager_v1 import WpFractionalScaleManagerV1 # noqa: F401
|
||||
from .wp_fractional_scale_v1 import WpFractionalScaleV1 # noqa: F401
|
|
@ -0,0 +1,106 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2022 Kenny Levinsen
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
from .wp_fractional_scale_v1 import WpFractionalScaleV1
|
||||
|
||||
|
||||
class WpFractionalScaleManagerV1(Interface):
|
||||
"""Fractional surface scale information
|
||||
|
||||
A global interface for requesting surfaces to use fractional scales.
|
||||
"""
|
||||
|
||||
name = "wp_fractional_scale_manager_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
fractional_scale_exists = 0
|
||||
|
||||
|
||||
class WpFractionalScaleManagerV1Proxy(Proxy[WpFractionalScaleManagerV1]):
|
||||
interface = WpFractionalScaleManagerV1
|
||||
|
||||
@WpFractionalScaleManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Unbind the fractional surface scale interface
|
||||
|
||||
Informs the server that the client will not be using this protocol
|
||||
object anymore. This does not affect any other objects,
|
||||
:class:`~pywayland.protocol.fractional_scale_v1.WpFractionalScaleV1`
|
||||
objects included.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@WpFractionalScaleManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WpFractionalScaleV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
)
|
||||
def get_fractional_scale(self, surface: WlSurface) -> Proxy[WpFractionalScaleV1]:
|
||||
"""Extend surface interface for scale information
|
||||
|
||||
Create an add-on object for the the
|
||||
:class:`~pywayland.protocol.wayland.WlSurface` to let the compositor
|
||||
request fractional scales. If the given
|
||||
:class:`~pywayland.protocol.wayland.WlSurface` already has a
|
||||
:class:`~pywayland.protocol.fractional_scale_v1.WpFractionalScaleV1`
|
||||
object associated, the fractional_scale_exists protocol error is
|
||||
raised.
|
||||
|
||||
:param surface:
|
||||
the surface
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.fractional_scale_v1.WpFractionalScaleV1`
|
||||
-- the new surface scale info interface id
|
||||
"""
|
||||
id = self._marshal_constructor(1, WpFractionalScaleV1, surface)
|
||||
return id
|
||||
|
||||
|
||||
class WpFractionalScaleManagerV1Resource(Resource):
|
||||
interface = WpFractionalScaleManagerV1
|
||||
|
||||
|
||||
class WpFractionalScaleManagerV1Global(Global):
|
||||
interface = WpFractionalScaleManagerV1
|
||||
|
||||
|
||||
WpFractionalScaleManagerV1._gen_c()
|
||||
WpFractionalScaleManagerV1.proxy_class = WpFractionalScaleManagerV1Proxy
|
||||
WpFractionalScaleManagerV1.resource_class = WpFractionalScaleManagerV1Resource
|
||||
WpFractionalScaleManagerV1.global_class = WpFractionalScaleManagerV1Global
|
|
@ -0,0 +1,93 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2022 Kenny Levinsen
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class WpFractionalScaleV1(Interface):
|
||||
"""Fractional scale interface to a :class:`~pywayland.protocol.wayland.WlSurface`
|
||||
|
||||
An additional interface to a :class:`~pywayland.protocol.wayland.WlSurface`
|
||||
object which allows the compositor to inform the client of the preferred
|
||||
scale.
|
||||
"""
|
||||
|
||||
name = "wp_fractional_scale_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class WpFractionalScaleV1Proxy(Proxy[WpFractionalScaleV1]):
|
||||
interface = WpFractionalScaleV1
|
||||
|
||||
@WpFractionalScaleV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Remove surface scale information for surface
|
||||
|
||||
Destroy the fractional scale object. When this object is destroyed,
|
||||
preferred_scale events will no longer be sent.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class WpFractionalScaleV1Resource(Resource):
|
||||
interface = WpFractionalScaleV1
|
||||
|
||||
@WpFractionalScaleV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def preferred_scale(self, scale: int) -> None:
|
||||
"""Notify of new preferred scale
|
||||
|
||||
Notification of a new preferred scale for this surface that the
|
||||
compositor suggests that the client should use.
|
||||
|
||||
The sent scale is the numerator of a fraction with a denominator of
|
||||
120.
|
||||
|
||||
:param scale:
|
||||
the new preferred scale
|
||||
:type scale:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, scale)
|
||||
|
||||
|
||||
class WpFractionalScaleV1Global(Global):
|
||||
interface = WpFractionalScaleV1
|
||||
|
||||
|
||||
WpFractionalScaleV1._gen_c()
|
||||
WpFractionalScaleV1.proxy_class = WpFractionalScaleV1Proxy
|
||||
WpFractionalScaleV1.resource_class = WpFractionalScaleV1Resource
|
||||
WpFractionalScaleV1.global_class = WpFractionalScaleV1Global
|
|
@ -0,0 +1,27 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2016 Yong Bakos
|
||||
# Copyright © 2015 Jason Ekstrand
|
||||
# Copyright © 2015 Jonas Ådahl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_fullscreen_shell_mode_feedback_v1 import ZwpFullscreenShellModeFeedbackV1 # noqa: F401
|
||||
from .zwp_fullscreen_shell_v1 import ZwpFullscreenShellV1 # noqa: F401
|
|
@ -0,0 +1,91 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2016 Yong Bakos
|
||||
# Copyright © 2015 Jason Ekstrand
|
||||
# Copyright © 2015 Jonas Ådahl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import Global, Interface, Proxy, Resource
|
||||
|
||||
|
||||
class ZwpFullscreenShellModeFeedbackV1(Interface):
|
||||
name = "zwp_fullscreen_shell_mode_feedback_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpFullscreenShellModeFeedbackV1Proxy(Proxy[ZwpFullscreenShellModeFeedbackV1]):
|
||||
interface = ZwpFullscreenShellModeFeedbackV1
|
||||
|
||||
|
||||
class ZwpFullscreenShellModeFeedbackV1Resource(Resource):
|
||||
interface = ZwpFullscreenShellModeFeedbackV1
|
||||
|
||||
@ZwpFullscreenShellModeFeedbackV1.event()
|
||||
def mode_successful(self) -> None:
|
||||
"""Mode switch succeeded
|
||||
|
||||
This event indicates that the attempted mode switch operation was
|
||||
successful. A surface of the size requested in the mode switch will
|
||||
fill the output without scaling.
|
||||
|
||||
Upon receiving this event, the client should destroy the
|
||||
wl_fullscreen_shell_mode_feedback object.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ZwpFullscreenShellModeFeedbackV1.event()
|
||||
def mode_failed(self) -> None:
|
||||
"""Mode switch failed
|
||||
|
||||
This event indicates that the attempted mode switch operation failed.
|
||||
This may be because the requested output mode is not possible or it may
|
||||
mean that the compositor does not want to allow it.
|
||||
|
||||
Upon receiving this event, the client should destroy the
|
||||
wl_fullscreen_shell_mode_feedback object.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
@ZwpFullscreenShellModeFeedbackV1.event()
|
||||
def present_cancelled(self) -> None:
|
||||
"""Mode switch cancelled
|
||||
|
||||
This event indicates that the attempted mode switch operation was
|
||||
cancelled. Most likely this is because the client requested a second
|
||||
mode switch before the first one completed.
|
||||
|
||||
Upon receiving this event, the client should destroy the
|
||||
wl_fullscreen_shell_mode_feedback object.
|
||||
"""
|
||||
self._post_event(2)
|
||||
|
||||
|
||||
class ZwpFullscreenShellModeFeedbackV1Global(Global):
|
||||
interface = ZwpFullscreenShellModeFeedbackV1
|
||||
|
||||
|
||||
ZwpFullscreenShellModeFeedbackV1._gen_c()
|
||||
ZwpFullscreenShellModeFeedbackV1.proxy_class = ZwpFullscreenShellModeFeedbackV1Proxy
|
||||
ZwpFullscreenShellModeFeedbackV1.resource_class = ZwpFullscreenShellModeFeedbackV1Resource
|
||||
ZwpFullscreenShellModeFeedbackV1.global_class = ZwpFullscreenShellModeFeedbackV1Global
|
|
@ -0,0 +1,260 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2016 Yong Bakos
|
||||
# Copyright © 2015 Jason Ekstrand
|
||||
# Copyright © 2015 Jonas Ådahl
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlOutput
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_fullscreen_shell_mode_feedback_v1 import ZwpFullscreenShellModeFeedbackV1
|
||||
|
||||
|
||||
class ZwpFullscreenShellV1(Interface):
|
||||
"""Displays a single surface per output
|
||||
|
||||
Displays a single surface per output.
|
||||
|
||||
This interface provides a mechanism for a single client to display simple
|
||||
full-screen surfaces. While there technically may be multiple clients
|
||||
bound to this interface, only one of those clients should be shown at a
|
||||
time.
|
||||
|
||||
To present a surface, the client uses either the present_surface or
|
||||
present_surface_for_mode requests. Presenting a surface takes effect on
|
||||
the next :func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>`. See the individual
|
||||
requests for details about scaling and mode switches.
|
||||
|
||||
The client can have at most one surface per output at any time. Requesting
|
||||
a surface to be presented on an output that already has a surface replaces
|
||||
the previously presented surface. Presenting a null surface removes its
|
||||
content and effectively disables the output. Exactly what happens when an
|
||||
output is "disabled" is compositor-specific. The same surface may be
|
||||
presented on multiple outputs simultaneously.
|
||||
|
||||
Once a surface is presented on an output, it stays on that output until
|
||||
either the client removes it or the compositor destroys the output. This
|
||||
way, the client can update the output's contents by simply attaching a new
|
||||
buffer.
|
||||
|
||||
Warning! The protocol described in this file is experimental and backward
|
||||
incompatible changes may be made. Backward compatible changes may be added
|
||||
together with the corresponding interface version bump. Backward
|
||||
incompatible changes are done by bumping the version number in the protocol
|
||||
and interface names and resetting the interface version. Once the protocol
|
||||
is to be declared stable, the 'z' prefix and the version number in the
|
||||
protocol and interface names are removed and the interface version number
|
||||
is reset.
|
||||
"""
|
||||
|
||||
name = "zwp_fullscreen_shell_v1"
|
||||
version = 1
|
||||
|
||||
class capability(enum.IntEnum):
|
||||
arbitrary_modes = 1
|
||||
cursor_plane = 2
|
||||
|
||||
class present_method(enum.IntEnum):
|
||||
default = 0
|
||||
center = 1
|
||||
zoom = 2
|
||||
zoom_crop = 3
|
||||
stretch = 4
|
||||
|
||||
class error(enum.IntEnum):
|
||||
invalid_method = 0
|
||||
role = 1
|
||||
|
||||
|
||||
class ZwpFullscreenShellV1Proxy(Proxy[ZwpFullscreenShellV1]):
|
||||
interface = ZwpFullscreenShellV1
|
||||
|
||||
@ZwpFullscreenShellV1.request()
|
||||
def release(self) -> None:
|
||||
"""Release the wl_fullscreen_shell interface
|
||||
|
||||
Release the binding from the wl_fullscreen_shell interface.
|
||||
|
||||
This destroys the server-side object and frees this binding. If the
|
||||
client binds to wl_fullscreen_shell multiple times, it may wish to free
|
||||
some of those bindings.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpFullscreenShellV1.request(
|
||||
Argument(ArgumentType.Object, interface=WlSurface, nullable=True),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Object, interface=WlOutput, nullable=True),
|
||||
)
|
||||
def present_surface(self, surface: WlSurface | None, method: int, output: WlOutput | None) -> None:
|
||||
"""Present surface for display
|
||||
|
||||
Present a surface on the given output.
|
||||
|
||||
If the output is null, the compositor will present the surface on
|
||||
whatever display (or displays) it thinks best. In particular, this may
|
||||
replace any or all surfaces currently presented so it should not be
|
||||
used in combination with placing surfaces on specific outputs.
|
||||
|
||||
The method parameter is a hint to the compositor for how the surface is
|
||||
to be presented. In particular, it tells the compositor how to handle
|
||||
a size mismatch between the presented surface and the output. The
|
||||
compositor is free to ignore this parameter.
|
||||
|
||||
The "zoom", "zoom_crop", and "stretch" methods imply a scaling
|
||||
operation on the surface. This will override any kind of output
|
||||
scaling, so the buffer_scale property of the surface is effectively
|
||||
ignored.
|
||||
|
||||
This request gives the surface the role of a fullscreen shell surface.
|
||||
If the surface already has another role, it raises a role protocol
|
||||
error.
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface` or `None`
|
||||
:param method:
|
||||
:type method:
|
||||
`ArgumentType.Uint`
|
||||
:param output:
|
||||
:type output:
|
||||
:class:`~pywayland.protocol.wayland.WlOutput` or `None`
|
||||
"""
|
||||
self._marshal(1, surface, method, output)
|
||||
|
||||
@ZwpFullscreenShellV1.request(
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Object, interface=WlOutput),
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.NewId, interface=ZwpFullscreenShellModeFeedbackV1),
|
||||
)
|
||||
def present_surface_for_mode(self, surface: WlSurface, output: WlOutput, framerate: int) -> Proxy[ZwpFullscreenShellModeFeedbackV1]:
|
||||
"""Present surface for display at a particular mode
|
||||
|
||||
Presents a surface on the given output for a particular mode.
|
||||
|
||||
If the current size of the output differs from that of the surface, the
|
||||
compositor will attempt to change the size of the output to match the
|
||||
surface. The result of the mode-switch operation will be returned via
|
||||
the provided wl_fullscreen_shell_mode_feedback object.
|
||||
|
||||
If the current output mode matches the one requested or if the
|
||||
compositor successfully switches the mode to match the surface, then
|
||||
the mode_successful event will be sent and the output will contain the
|
||||
contents of the given surface. If the compositor cannot match the
|
||||
output size to the surface size, the mode_failed will be sent and the
|
||||
output will contain the contents of the previously presented surface
|
||||
(if any). If another surface is presented on the given output before
|
||||
either of these has a chance to happen, the present_cancelled event
|
||||
will be sent.
|
||||
|
||||
Due to race conditions and other issues unknown to the client, no mode-
|
||||
switch operation is guaranteed to succeed. However, if the mode is one
|
||||
advertised by :func:`WlOutput.mode()
|
||||
<pywayland.protocol.wayland.WlOutput.mode>` or if the compositor
|
||||
advertises the ARBITRARY_MODES capability, then the client should
|
||||
expect that the mode-switch operation will usually succeed.
|
||||
|
||||
If the size of the presented surface changes, the resulting output is
|
||||
undefined. The compositor may attempt to change the output mode to
|
||||
compensate. However, there is no guarantee that a suitable mode will
|
||||
be found and the client has no way to be notified of success or
|
||||
failure.
|
||||
|
||||
The framerate parameter specifies the desired framerate for the output
|
||||
in mHz. The compositor is free to ignore this parameter. A value of 0
|
||||
indicates that the client has no preference.
|
||||
|
||||
If the value of :func:`WlOutput.scale()
|
||||
<pywayland.protocol.wayland.WlOutput.scale>` differs from
|
||||
:func:`WlSurface.buffer_scale()
|
||||
<pywayland.protocol.wayland.WlSurface.buffer_scale>`, then the
|
||||
compositor may choose a mode that matches either the buffer size or the
|
||||
surface size. In either case, the surface will fill the output.
|
||||
|
||||
This request gives the surface the role of a fullscreen shell surface.
|
||||
If the surface already has another role, it raises a role protocol
|
||||
error.
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param output:
|
||||
:type output:
|
||||
:class:`~pywayland.protocol.wayland.WlOutput`
|
||||
:param framerate:
|
||||
:type framerate:
|
||||
`ArgumentType.Int`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.fullscreen_shell_unstable_v1.ZwpFullscreenShellModeFeedbackV1`
|
||||
"""
|
||||
feedback = self._marshal_constructor(2, ZwpFullscreenShellModeFeedbackV1, surface, output, framerate)
|
||||
return feedback
|
||||
|
||||
|
||||
class ZwpFullscreenShellV1Resource(Resource):
|
||||
interface = ZwpFullscreenShellV1
|
||||
|
||||
@ZwpFullscreenShellV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def capability(self, capability: int) -> None:
|
||||
"""Advertises a capability of the compositor
|
||||
|
||||
Advertises a single capability of the compositor.
|
||||
|
||||
When the wl_fullscreen_shell interface is bound, this event is emitted
|
||||
once for each capability advertised. Valid capabilities are given by
|
||||
the wl_fullscreen_shell.capability enum. If clients want to take
|
||||
advantage of any of these capabilities, they should use a
|
||||
:func:`WlDisplay.sync() <pywayland.protocol.wayland.WlDisplay.sync>`
|
||||
request immediately after binding to ensure that they receive all the
|
||||
capability events.
|
||||
|
||||
:param capability:
|
||||
:type capability:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, capability)
|
||||
|
||||
|
||||
class ZwpFullscreenShellV1Global(Global):
|
||||
interface = ZwpFullscreenShellV1
|
||||
|
||||
|
||||
ZwpFullscreenShellV1._gen_c()
|
||||
ZwpFullscreenShellV1.proxy_class = ZwpFullscreenShellV1Proxy
|
||||
ZwpFullscreenShellV1.resource_class = ZwpFullscreenShellV1Resource
|
||||
ZwpFullscreenShellV1.global_class = ZwpFullscreenShellV1Global
|
|
@ -0,0 +1,25 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Samsung Electronics Co., Ltd
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_idle_inhibit_manager_v1 import ZwpIdleInhibitManagerV1 # noqa: F401
|
||||
from .zwp_idle_inhibitor_v1 import ZwpIdleInhibitorV1 # noqa: F401
|
|
@ -0,0 +1,103 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Samsung Electronics Co., Ltd
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_idle_inhibitor_v1 import ZwpIdleInhibitorV1
|
||||
|
||||
|
||||
class ZwpIdleInhibitManagerV1(Interface):
|
||||
"""Control behavior when display idles
|
||||
|
||||
This interface permits inhibiting the idle behavior such as screen
|
||||
blanking, locking, and screensaving. The client binds the idle manager
|
||||
globally, then creates idle-inhibitor objects for each surface.
|
||||
|
||||
Warning! The protocol described in this file is experimental and backward
|
||||
incompatible changes may be made. Backward compatible changes may be added
|
||||
together with the corresponding interface version bump. Backward
|
||||
incompatible changes are done by bumping the version number in the protocol
|
||||
and interface names and resetting the interface version. Once the protocol
|
||||
is to be declared stable, the 'z' prefix and the version number in the
|
||||
protocol and interface names are removed and the interface version number
|
||||
is reset.
|
||||
"""
|
||||
|
||||
name = "zwp_idle_inhibit_manager_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpIdleInhibitManagerV1Proxy(Proxy[ZwpIdleInhibitManagerV1]):
|
||||
interface = ZwpIdleInhibitManagerV1
|
||||
|
||||
@ZwpIdleInhibitManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the idle inhibitor object
|
||||
|
||||
Destroy the inhibit manager.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpIdleInhibitManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpIdleInhibitorV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
)
|
||||
def create_inhibitor(self, surface: WlSurface) -> Proxy[ZwpIdleInhibitorV1]:
|
||||
"""Create a new inhibitor object
|
||||
|
||||
Create a new inhibitor object associated with the given surface.
|
||||
|
||||
:param surface:
|
||||
the surface that inhibits the idle behavior
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.idle_inhibit_unstable_v1.ZwpIdleInhibitorV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ZwpIdleInhibitorV1, surface)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpIdleInhibitManagerV1Resource(Resource):
|
||||
interface = ZwpIdleInhibitManagerV1
|
||||
|
||||
|
||||
class ZwpIdleInhibitManagerV1Global(Global):
|
||||
interface = ZwpIdleInhibitManagerV1
|
||||
|
||||
|
||||
ZwpIdleInhibitManagerV1._gen_c()
|
||||
ZwpIdleInhibitManagerV1.proxy_class = ZwpIdleInhibitManagerV1Proxy
|
||||
ZwpIdleInhibitManagerV1.resource_class = ZwpIdleInhibitManagerV1Resource
|
||||
ZwpIdleInhibitManagerV1.global_class = ZwpIdleInhibitManagerV1Global
|
|
@ -0,0 +1,76 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2015 Samsung Electronics Co., Ltd
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import Global, Interface, Proxy, Resource
|
||||
|
||||
|
||||
class ZwpIdleInhibitorV1(Interface):
|
||||
"""Context object for inhibiting idle behavior
|
||||
|
||||
An idle inhibitor prevents the output that the associated surface is
|
||||
visible on from being set to a state where it is not visually usable due to
|
||||
lack of user interaction (e.g. blanked, dimmed, locked, set to power save,
|
||||
etc.) Any screensaver processes are also blocked from displaying.
|
||||
|
||||
If the surface is destroyed, unmapped, becomes occluded, loses visibility,
|
||||
or otherwise becomes not visually relevant for the user, the idle inhibitor
|
||||
will not be honored by the compositor; if the surface subsequently regains
|
||||
visibility the inhibitor takes effect once again. Likewise, the inhibitor
|
||||
isn't honored if the system was already idled at the time the inhibitor was
|
||||
established, although if the system later de-idles and re-idles the
|
||||
inhibitor will take effect.
|
||||
"""
|
||||
|
||||
name = "zwp_idle_inhibitor_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpIdleInhibitorV1Proxy(Proxy[ZwpIdleInhibitorV1]):
|
||||
interface = ZwpIdleInhibitorV1
|
||||
|
||||
@ZwpIdleInhibitorV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the idle inhibitor object
|
||||
|
||||
Remove the inhibitor effect from the associated
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ZwpIdleInhibitorV1Resource(Resource):
|
||||
interface = ZwpIdleInhibitorV1
|
||||
|
||||
|
||||
class ZwpIdleInhibitorV1Global(Global):
|
||||
interface = ZwpIdleInhibitorV1
|
||||
|
||||
|
||||
ZwpIdleInhibitorV1._gen_c()
|
||||
ZwpIdleInhibitorV1.proxy_class = ZwpIdleInhibitorV1Proxy
|
||||
ZwpIdleInhibitorV1.resource_class = ZwpIdleInhibitorV1Resource
|
||||
ZwpIdleInhibitorV1.global_class = ZwpIdleInhibitorV1Global
|
|
@ -0,0 +1,27 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2012, 2013 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_input_method_context_v1 import ZwpInputMethodContextV1 # noqa: F401
|
||||
from .zwp_input_method_v1 import ZwpInputMethodV1 # noqa: F401
|
||||
from .zwp_input_panel_surface_v1 import ZwpInputPanelSurfaceV1 # noqa: F401
|
||||
from .zwp_input_panel_v1 import ZwpInputPanelV1 # noqa: F401
|
|
@ -0,0 +1,510 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2012, 2013 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlKeyboard
|
||||
|
||||
|
||||
class ZwpInputMethodContextV1(Interface):
|
||||
"""Input method context
|
||||
|
||||
Corresponds to a text input on the input method side. An input method
|
||||
context is created on text input activation on the input method side. It
|
||||
allows receiving information about the text input from the application via
|
||||
events. Input method contexts do not keep state after deactivation and
|
||||
should be destroyed after deactivation is handled.
|
||||
|
||||
Text is generally UTF-8 encoded, indices and lengths are in bytes.
|
||||
|
||||
Serials are used to synchronize the state between the text input and an
|
||||
input method. New serials are sent by the text input in the commit_state
|
||||
request and are used by the input method to indicate the known text input
|
||||
state in events like preedit_string, commit_string, and keysym. The text
|
||||
input can then ignore events from the input method which are based on an
|
||||
outdated state (for example after a reset).
|
||||
|
||||
Warning! The protocol described in this file is experimental and backward
|
||||
incompatible changes may be made. Backward compatible changes may be added
|
||||
together with the corresponding interface version bump. Backward
|
||||
incompatible changes are done by bumping the version number in the protocol
|
||||
and interface names and resetting the interface version. Once the protocol
|
||||
is to be declared stable, the 'z' prefix and the version number in the
|
||||
protocol and interface names are removed and the interface version number
|
||||
is reset.
|
||||
"""
|
||||
|
||||
name = "zwp_input_method_context_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpInputMethodContextV1Proxy(Proxy[ZwpInputMethodContextV1]):
|
||||
interface = ZwpInputMethodContextV1
|
||||
|
||||
@ZwpInputMethodContextV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""destroy
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def commit_string(self, serial: int, text: str) -> None:
|
||||
"""Commit string
|
||||
|
||||
Send the commit string text for insertion to the application.
|
||||
|
||||
The text to commit could be either just a single character after a key
|
||||
press or the result of some composing (pre-edit). It could be also an
|
||||
empty text when some text should be removed (see
|
||||
delete_surrounding_text) or when the input cursor should be moved (see
|
||||
cursor_position).
|
||||
|
||||
Any previously set composing text will be removed.
|
||||
|
||||
:param serial:
|
||||
serial of the latest known text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param text:
|
||||
:type text:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._marshal(1, serial, text)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.String),
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def preedit_string(self, serial: int, text: str, commit: str) -> None:
|
||||
"""Pre-edit string
|
||||
|
||||
Send the pre-edit string text to the application text input.
|
||||
|
||||
The commit text can be used to replace the pre-edit text on reset (for
|
||||
example on unfocus).
|
||||
|
||||
Previously sent preedit_style and preedit_cursor requests are also
|
||||
processed by the text_input.
|
||||
|
||||
:param serial:
|
||||
serial of the latest known text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param text:
|
||||
:type text:
|
||||
`ArgumentType.String`
|
||||
:param commit:
|
||||
:type commit:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._marshal(2, serial, text, commit)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def preedit_styling(self, index: int, length: int, style: int) -> None:
|
||||
"""Pre-edit styling
|
||||
|
||||
Set the styling information on composing text. The style is applied for
|
||||
length in bytes from index relative to the beginning of the composing
|
||||
text (as byte offset). Multiple styles can be applied to a composing
|
||||
text.
|
||||
|
||||
This request should be sent before sending a preedit_string request.
|
||||
|
||||
:param index:
|
||||
:type index:
|
||||
`ArgumentType.Uint`
|
||||
:param length:
|
||||
:type length:
|
||||
`ArgumentType.Uint`
|
||||
:param style:
|
||||
:type style:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(3, index, length, style)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Int),
|
||||
)
|
||||
def preedit_cursor(self, index: int) -> None:
|
||||
"""Pre-edit cursor
|
||||
|
||||
Set the cursor position inside the composing text (as byte offset)
|
||||
relative to the start of the composing text.
|
||||
|
||||
When index is negative no cursor should be displayed.
|
||||
|
||||
This request should be sent before sending a preedit_string request.
|
||||
|
||||
:param index:
|
||||
:type index:
|
||||
`ArgumentType.Int`
|
||||
"""
|
||||
self._marshal(4, index)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def delete_surrounding_text(self, index: int, length: int) -> None:
|
||||
"""Delete text
|
||||
|
||||
Remove the surrounding text.
|
||||
|
||||
This request will be handled on the text_input side directly following
|
||||
a commit_string request.
|
||||
|
||||
:param index:
|
||||
:type index:
|
||||
`ArgumentType.Int`
|
||||
:param length:
|
||||
:type length:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(5, index, length)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Int),
|
||||
)
|
||||
def cursor_position(self, index: int, anchor: int) -> None:
|
||||
"""Set cursor to a new position
|
||||
|
||||
Set the cursor and anchor to a new position. Index is the new cursor
|
||||
position in bytes (when >= 0 this is relative to the end of the
|
||||
inserted text, otherwise it is relative to the beginning of the
|
||||
inserted text). Anchor is the new anchor position in bytes (when >= 0
|
||||
this is relative to the end of the inserted text, otherwise it is
|
||||
relative to the beginning of the inserted text). When there should be
|
||||
no selected text, anchor should be the same as index.
|
||||
|
||||
This request will be handled on the text_input side directly following
|
||||
a commit_string request.
|
||||
|
||||
:param index:
|
||||
:type index:
|
||||
`ArgumentType.Int`
|
||||
:param anchor:
|
||||
:type anchor:
|
||||
`ArgumentType.Int`
|
||||
"""
|
||||
self._marshal(6, index, anchor)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Array),
|
||||
)
|
||||
def modifiers_map(self, map: list) -> None:
|
||||
"""modifiers_map
|
||||
|
||||
:param map:
|
||||
:type map:
|
||||
`ArgumentType.Array`
|
||||
"""
|
||||
self._marshal(7, map)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def keysym(self, serial: int, time: int, sym: int, state: int, modifiers: int) -> None:
|
||||
"""Keysym
|
||||
|
||||
Notify when a key event was sent. Key events should not be used for
|
||||
normal text input operations, which should be done with commit_string,
|
||||
delete_surrounding_text, etc. The key event follows the
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard` key event convention.
|
||||
Sym is an XKB keysym, state is a
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard` key_state.
|
||||
|
||||
:param serial:
|
||||
serial of the latest known text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param time:
|
||||
:type time:
|
||||
`ArgumentType.Uint`
|
||||
:param sym:
|
||||
:type sym:
|
||||
`ArgumentType.Uint`
|
||||
:param state:
|
||||
:type state:
|
||||
`ArgumentType.Uint`
|
||||
:param modifiers:
|
||||
:type modifiers:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(8, serial, time, sym, state, modifiers)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WlKeyboard),
|
||||
)
|
||||
def grab_keyboard(self) -> Proxy[WlKeyboard]:
|
||||
"""Grab hardware keyboard
|
||||
|
||||
Allow an input method to receive hardware keyboard input and process
|
||||
key events to generate text events (with pre-edit) over the wire. This
|
||||
allows input methods which compose multiple key events for inputting
|
||||
text like it is done for CJK languages.
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`
|
||||
"""
|
||||
keyboard = self._marshal_constructor(9, WlKeyboard)
|
||||
return keyboard
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def key(self, serial: int, time: int, key: int, state: int) -> None:
|
||||
"""Forward key event
|
||||
|
||||
Forward a :class:`~pywayland.protocol.wayland.WlKeyboard`::key event to
|
||||
the client that was not processed by the input method itself. Should be
|
||||
used when filtering key events with grab_keyboard. The arguments
|
||||
should be the ones from the
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::key event.
|
||||
|
||||
For generating custom key events use the keysym request instead.
|
||||
|
||||
:param serial:
|
||||
serial from :class:`~pywayland.protocol.wayland.WlKeyboard`::key
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param time:
|
||||
time from :class:`~pywayland.protocol.wayland.WlKeyboard`::key
|
||||
:type time:
|
||||
`ArgumentType.Uint`
|
||||
:param key:
|
||||
key from :class:`~pywayland.protocol.wayland.WlKeyboard`::key
|
||||
:type key:
|
||||
`ArgumentType.Uint`
|
||||
:param state:
|
||||
state from :class:`~pywayland.protocol.wayland.WlKeyboard`::key
|
||||
:type state:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(10, serial, time, key, state)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def modifiers(self, serial: int, mods_depressed: int, mods_latched: int, mods_locked: int, group: int) -> None:
|
||||
"""Forward modifiers event
|
||||
|
||||
Forward a :class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
event to the client that was not processed by the input method itself.
|
||||
Should be used when filtering key events with grab_keyboard. The
|
||||
arguments should be the ones from the
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers event.
|
||||
|
||||
:param serial:
|
||||
serial from
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param mods_depressed:
|
||||
mods_depressed from
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
:type mods_depressed:
|
||||
`ArgumentType.Uint`
|
||||
:param mods_latched:
|
||||
mods_latched from
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
:type mods_latched:
|
||||
`ArgumentType.Uint`
|
||||
:param mods_locked:
|
||||
mods_locked from
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
:type mods_locked:
|
||||
`ArgumentType.Uint`
|
||||
:param group:
|
||||
group from
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`::modifiers
|
||||
:type group:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(11, serial, mods_depressed, mods_latched, mods_locked, group)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def language(self, serial: int, language: str) -> None:
|
||||
"""language
|
||||
|
||||
:param serial:
|
||||
serial of the latest known text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param language:
|
||||
:type language:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._marshal(12, serial, language)
|
||||
|
||||
@ZwpInputMethodContextV1.request(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def text_direction(self, serial: int, direction: int) -> None:
|
||||
"""text_direction
|
||||
|
||||
:param serial:
|
||||
serial of the latest known text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param direction:
|
||||
:type direction:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(13, serial, direction)
|
||||
|
||||
|
||||
class ZwpInputMethodContextV1Resource(Resource):
|
||||
interface = ZwpInputMethodContextV1
|
||||
|
||||
@ZwpInputMethodContextV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def surrounding_text(self, text: str, cursor: int, anchor: int) -> None:
|
||||
"""Surrounding text event
|
||||
|
||||
The plain surrounding text around the input position. Cursor is the
|
||||
position in bytes within the surrounding text relative to the beginning
|
||||
of the text. Anchor is the position in bytes of the selection anchor
|
||||
within the surrounding text relative to the beginning of the text. If
|
||||
there is no selected text then anchor is the same as cursor.
|
||||
|
||||
:param text:
|
||||
:type text:
|
||||
`ArgumentType.String`
|
||||
:param cursor:
|
||||
:type cursor:
|
||||
`ArgumentType.Uint`
|
||||
:param anchor:
|
||||
:type anchor:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, text, cursor, anchor)
|
||||
|
||||
@ZwpInputMethodContextV1.event()
|
||||
def reset(self) -> None:
|
||||
"""reset
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
@ZwpInputMethodContextV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def content_type(self, hint: int, purpose: int) -> None:
|
||||
"""content_type
|
||||
|
||||
:param hint:
|
||||
:type hint:
|
||||
`ArgumentType.Uint`
|
||||
:param purpose:
|
||||
:type purpose:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(2, hint, purpose)
|
||||
|
||||
@ZwpInputMethodContextV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def invoke_action(self, button: int, index: int) -> None:
|
||||
"""invoke_action
|
||||
|
||||
:param button:
|
||||
:type button:
|
||||
`ArgumentType.Uint`
|
||||
:param index:
|
||||
:type index:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(3, button, index)
|
||||
|
||||
@ZwpInputMethodContextV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def commit_state(self, serial: int) -> None:
|
||||
"""commit_state
|
||||
|
||||
:param serial:
|
||||
serial of text input state
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(4, serial)
|
||||
|
||||
@ZwpInputMethodContextV1.event(
|
||||
Argument(ArgumentType.String),
|
||||
)
|
||||
def preferred_language(self, language: str) -> None:
|
||||
"""preferred_language
|
||||
|
||||
:param language:
|
||||
:type language:
|
||||
`ArgumentType.String`
|
||||
"""
|
||||
self._post_event(5, language)
|
||||
|
||||
|
||||
class ZwpInputMethodContextV1Global(Global):
|
||||
interface = ZwpInputMethodContextV1
|
||||
|
||||
|
||||
ZwpInputMethodContextV1._gen_c()
|
||||
ZwpInputMethodContextV1.proxy_class = ZwpInputMethodContextV1Proxy
|
||||
ZwpInputMethodContextV1.resource_class = ZwpInputMethodContextV1Resource
|
||||
ZwpInputMethodContextV1.global_class = ZwpInputMethodContextV1Global
|
|
@ -0,0 +1,97 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2012, 2013 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from .zwp_input_method_context_v1 import ZwpInputMethodContextV1
|
||||
|
||||
|
||||
class ZwpInputMethodV1(Interface):
|
||||
"""Input method
|
||||
|
||||
An input method object is responsible for composing text in response to
|
||||
input from hardware or virtual keyboards. There is one input method object
|
||||
per seat. On activate there is a new input method context object created
|
||||
which allows the input method to communicate with the text input.
|
||||
"""
|
||||
|
||||
name = "zwp_input_method_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpInputMethodV1Proxy(Proxy[ZwpInputMethodV1]):
|
||||
interface = ZwpInputMethodV1
|
||||
|
||||
|
||||
class ZwpInputMethodV1Resource(Resource):
|
||||
interface = ZwpInputMethodV1
|
||||
|
||||
@ZwpInputMethodV1.event(
|
||||
Argument(ArgumentType.NewId, interface=ZwpInputMethodContextV1),
|
||||
)
|
||||
def activate(self, id: ZwpInputMethodContextV1) -> None:
|
||||
"""Activate event
|
||||
|
||||
A text input was activated. Creates an input method context object
|
||||
which allows communication with the text input.
|
||||
|
||||
:param id:
|
||||
:type id:
|
||||
:class:`~pywayland.protocol.input_method_unstable_v1.ZwpInputMethodContextV1`
|
||||
"""
|
||||
self._post_event(0, id)
|
||||
|
||||
@ZwpInputMethodV1.event(
|
||||
Argument(ArgumentType.Object, interface=ZwpInputMethodContextV1),
|
||||
)
|
||||
def deactivate(self, context: ZwpInputMethodContextV1) -> None:
|
||||
"""Deactivate event
|
||||
|
||||
The text input corresponding to the context argument was deactivated.
|
||||
The input method context should be destroyed after deactivation is
|
||||
handled.
|
||||
|
||||
:param context:
|
||||
:type context:
|
||||
:class:`~pywayland.protocol.input_method_unstable_v1.ZwpInputMethodContextV1`
|
||||
"""
|
||||
self._post_event(1, context)
|
||||
|
||||
|
||||
class ZwpInputMethodV1Global(Global):
|
||||
interface = ZwpInputMethodV1
|
||||
|
||||
|
||||
ZwpInputMethodV1._gen_c()
|
||||
ZwpInputMethodV1.proxy_class = ZwpInputMethodV1Proxy
|
||||
ZwpInputMethodV1.resource_class = ZwpInputMethodV1Resource
|
||||
ZwpInputMethodV1.global_class = ZwpInputMethodV1Global
|
|
@ -0,0 +1,93 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2012, 2013 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlOutput
|
||||
|
||||
|
||||
class ZwpInputPanelSurfaceV1(Interface):
|
||||
name = "zwp_input_panel_surface_v1"
|
||||
version = 1
|
||||
|
||||
class position(enum.IntEnum):
|
||||
center_bottom = 0
|
||||
|
||||
|
||||
class ZwpInputPanelSurfaceV1Proxy(Proxy[ZwpInputPanelSurfaceV1]):
|
||||
interface = ZwpInputPanelSurfaceV1
|
||||
|
||||
@ZwpInputPanelSurfaceV1.request(
|
||||
Argument(ArgumentType.Object, interface=WlOutput),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def set_toplevel(self, output: WlOutput, position: int) -> None:
|
||||
"""Set the surface type as a keyboard
|
||||
|
||||
Set the input_panel_surface type to keyboard.
|
||||
|
||||
A keyboard surface is only shown when a text input is active.
|
||||
|
||||
:param output:
|
||||
:type output:
|
||||
:class:`~pywayland.protocol.wayland.WlOutput`
|
||||
:param position:
|
||||
:type position:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(0, output, position)
|
||||
|
||||
@ZwpInputPanelSurfaceV1.request()
|
||||
def set_overlay_panel(self) -> None:
|
||||
"""Set the surface type as an overlay panel
|
||||
|
||||
Set the input_panel_surface to be an overlay panel.
|
||||
|
||||
This is shown near the input cursor above the application window when a
|
||||
text input is active.
|
||||
"""
|
||||
self._marshal(1)
|
||||
|
||||
|
||||
class ZwpInputPanelSurfaceV1Resource(Resource):
|
||||
interface = ZwpInputPanelSurfaceV1
|
||||
|
||||
|
||||
class ZwpInputPanelSurfaceV1Global(Global):
|
||||
interface = ZwpInputPanelSurfaceV1
|
||||
|
||||
|
||||
ZwpInputPanelSurfaceV1._gen_c()
|
||||
ZwpInputPanelSurfaceV1.proxy_class = ZwpInputPanelSurfaceV1Proxy
|
||||
ZwpInputPanelSurfaceV1.resource_class = ZwpInputPanelSurfaceV1Resource
|
||||
ZwpInputPanelSurfaceV1.global_class = ZwpInputPanelSurfaceV1Global
|
|
@ -0,0 +1,80 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2012, 2013 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_input_panel_surface_v1 import ZwpInputPanelSurfaceV1
|
||||
|
||||
|
||||
class ZwpInputPanelV1(Interface):
|
||||
"""Interface for implementing keyboards
|
||||
|
||||
Only one client can bind this interface at a time.
|
||||
"""
|
||||
|
||||
name = "zwp_input_panel_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpInputPanelV1Proxy(Proxy[ZwpInputPanelV1]):
|
||||
interface = ZwpInputPanelV1
|
||||
|
||||
@ZwpInputPanelV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpInputPanelSurfaceV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
)
|
||||
def get_input_panel_surface(self, surface: WlSurface) -> Proxy[ZwpInputPanelSurfaceV1]:
|
||||
"""get_input_panel_surface
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.input_method_unstable_v1.ZwpInputPanelSurfaceV1`
|
||||
"""
|
||||
id = self._marshal_constructor(0, ZwpInputPanelSurfaceV1, surface)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpInputPanelV1Resource(Resource):
|
||||
interface = ZwpInputPanelV1
|
||||
|
||||
|
||||
class ZwpInputPanelV1Global(Global):
|
||||
interface = ZwpInputPanelV1
|
||||
|
||||
|
||||
ZwpInputPanelV1._gen_c()
|
||||
ZwpInputPanelV1.proxy_class = ZwpInputPanelV1Proxy
|
||||
ZwpInputPanelV1.resource_class = ZwpInputPanelV1Resource
|
||||
ZwpInputPanelV1.global_class = ZwpInputPanelV1Global
|
|
@ -0,0 +1,25 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_input_timestamps_manager_v1 import ZwpInputTimestampsManagerV1 # noqa: F401
|
||||
from .zwp_input_timestamps_v1 import ZwpInputTimestampsV1 # noqa: F401
|
|
@ -0,0 +1,166 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlKeyboard
|
||||
from ..wayland import WlPointer
|
||||
from ..wayland import WlTouch
|
||||
from .zwp_input_timestamps_v1 import ZwpInputTimestampsV1
|
||||
|
||||
|
||||
class ZwpInputTimestampsManagerV1(Interface):
|
||||
"""Context object for high-resolution input timestamps
|
||||
|
||||
A global interface used for requesting high-resolution timestamps for input
|
||||
events.
|
||||
"""
|
||||
|
||||
name = "zwp_input_timestamps_manager_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpInputTimestampsManagerV1Proxy(Proxy[ZwpInputTimestampsManagerV1]):
|
||||
interface = ZwpInputTimestampsManagerV1
|
||||
|
||||
@ZwpInputTimestampsManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the input timestamps manager object
|
||||
|
||||
Informs the server that the client will no longer be using this
|
||||
protocol object. Existing objects created by this object are not
|
||||
affected.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpInputTimestampsManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpInputTimestampsV1),
|
||||
Argument(ArgumentType.Object, interface=WlKeyboard),
|
||||
)
|
||||
def get_keyboard_timestamps(self, keyboard: WlKeyboard) -> Proxy[ZwpInputTimestampsV1]:
|
||||
"""Subscribe to high-resolution keyboard timestamp events
|
||||
|
||||
Creates a new input timestamps object that represents a subscription to
|
||||
high-resolution timestamp events for all
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard` events that carry a
|
||||
timestamp.
|
||||
|
||||
If the associated :class:`~pywayland.protocol.wayland.WlKeyboard`
|
||||
object is invalidated, either through client action (e.g. release) or
|
||||
server-side changes, the input timestamps object becomes inert and the
|
||||
client should destroy it by calling
|
||||
:func:`ZwpInputTimestampsV1.destroy()
|
||||
<pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1.destroy>`.
|
||||
|
||||
:param keyboard:
|
||||
the :class:`~pywayland.protocol.wayland.WlKeyboard` object for
|
||||
which to get timestamp events
|
||||
:type keyboard:
|
||||
:class:`~pywayland.protocol.wayland.WlKeyboard`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ZwpInputTimestampsV1, keyboard)
|
||||
return id
|
||||
|
||||
@ZwpInputTimestampsManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpInputTimestampsV1),
|
||||
Argument(ArgumentType.Object, interface=WlPointer),
|
||||
)
|
||||
def get_pointer_timestamps(self, pointer: WlPointer) -> Proxy[ZwpInputTimestampsV1]:
|
||||
"""Subscribe to high-resolution pointer timestamp events
|
||||
|
||||
Creates a new input timestamps object that represents a subscription to
|
||||
high-resolution timestamp events for all
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` events that carry a
|
||||
timestamp.
|
||||
|
||||
If the associated :class:`~pywayland.protocol.wayland.WlPointer` object
|
||||
is invalidated, either through client action (e.g. release) or server-
|
||||
side changes, the input timestamps object becomes inert and the client
|
||||
should destroy it by calling :func:`ZwpInputTimestampsV1.destroy()
|
||||
<pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1.destroy>`.
|
||||
|
||||
:param pointer:
|
||||
the :class:`~pywayland.protocol.wayland.WlPointer` object for which
|
||||
to get timestamp events
|
||||
:type pointer:
|
||||
:class:`~pywayland.protocol.wayland.WlPointer`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1`
|
||||
"""
|
||||
id = self._marshal_constructor(2, ZwpInputTimestampsV1, pointer)
|
||||
return id
|
||||
|
||||
@ZwpInputTimestampsManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpInputTimestampsV1),
|
||||
Argument(ArgumentType.Object, interface=WlTouch),
|
||||
)
|
||||
def get_touch_timestamps(self, touch: WlTouch) -> Proxy[ZwpInputTimestampsV1]:
|
||||
"""Subscribe to high-resolution touch timestamp events
|
||||
|
||||
Creates a new input timestamps object that represents a subscription to
|
||||
high-resolution timestamp events for all
|
||||
:class:`~pywayland.protocol.wayland.WlTouch` events that carry a
|
||||
timestamp.
|
||||
|
||||
If the associated :class:`~pywayland.protocol.wayland.WlTouch` object
|
||||
becomes invalid, either through client action (e.g. release) or server-
|
||||
side changes, the input timestamps object becomes inert and the client
|
||||
should destroy it by calling :func:`ZwpInputTimestampsV1.destroy()
|
||||
<pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1.destroy>`.
|
||||
|
||||
:param touch:
|
||||
the :class:`~pywayland.protocol.wayland.WlTouch` object for which
|
||||
to get timestamp events
|
||||
:type touch:
|
||||
:class:`~pywayland.protocol.wayland.WlTouch`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsV1`
|
||||
"""
|
||||
id = self._marshal_constructor(3, ZwpInputTimestampsV1, touch)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpInputTimestampsManagerV1Resource(Resource):
|
||||
interface = ZwpInputTimestampsManagerV1
|
||||
|
||||
|
||||
class ZwpInputTimestampsManagerV1Global(Global):
|
||||
interface = ZwpInputTimestampsManagerV1
|
||||
|
||||
|
||||
ZwpInputTimestampsManagerV1._gen_c()
|
||||
ZwpInputTimestampsManagerV1.proxy_class = ZwpInputTimestampsManagerV1Proxy
|
||||
ZwpInputTimestampsManagerV1.resource_class = ZwpInputTimestampsManagerV1Resource
|
||||
ZwpInputTimestampsManagerV1.global_class = ZwpInputTimestampsManagerV1Global
|
|
@ -0,0 +1,114 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class ZwpInputTimestampsV1(Interface):
|
||||
"""Context object for input timestamps
|
||||
|
||||
Provides high-resolution timestamp events for a set of subscribed input
|
||||
events. The set of subscribed input events is determined by the
|
||||
:class:`~pywayland.protocol.input_timestamps_unstable_v1.ZwpInputTimestampsManagerV1`
|
||||
request used to create this object.
|
||||
"""
|
||||
|
||||
name = "zwp_input_timestamps_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpInputTimestampsV1Proxy(Proxy[ZwpInputTimestampsV1]):
|
||||
interface = ZwpInputTimestampsV1
|
||||
|
||||
@ZwpInputTimestampsV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the input timestamps object
|
||||
|
||||
Informs the server that the client will no longer be using this
|
||||
protocol object. After the server processes the request, no more
|
||||
timestamp events will be emitted.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ZwpInputTimestampsV1Resource(Resource):
|
||||
interface = ZwpInputTimestampsV1
|
||||
|
||||
@ZwpInputTimestampsV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def timestamp(self, tv_sec_hi: int, tv_sec_lo: int, tv_nsec: int) -> None:
|
||||
"""High-resolution timestamp event
|
||||
|
||||
The timestamp event is associated with the first subsequent input event
|
||||
carrying a timestamp which belongs to the set of input events this
|
||||
object is subscribed to.
|
||||
|
||||
The timestamp provided by this event is a high-resolution version of
|
||||
the timestamp argument of the associated input event. The provided
|
||||
timestamp is in the same clock domain and is at least as accurate as
|
||||
the associated input event timestamp.
|
||||
|
||||
The timestamp is expressed as tv_sec_hi, tv_sec_lo, tv_nsec triples,
|
||||
each component being an unsigned 32-bit value. Whole seconds are in
|
||||
tv_sec which is a 64-bit value combined from tv_sec_hi and tv_sec_lo,
|
||||
and the additional fractional part in tv_nsec as nanoseconds. Hence,
|
||||
for valid timestamps tv_nsec must be in [0, 999999999].
|
||||
|
||||
:param tv_sec_hi:
|
||||
high 32 bits of the seconds part of the timestamp
|
||||
:type tv_sec_hi:
|
||||
`ArgumentType.Uint`
|
||||
:param tv_sec_lo:
|
||||
low 32 bits of the seconds part of the timestamp
|
||||
:type tv_sec_lo:
|
||||
`ArgumentType.Uint`
|
||||
:param tv_nsec:
|
||||
nanoseconds part of the timestamp
|
||||
:type tv_nsec:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, tv_sec_hi, tv_sec_lo, tv_nsec)
|
||||
|
||||
|
||||
class ZwpInputTimestampsV1Global(Global):
|
||||
interface = ZwpInputTimestampsV1
|
||||
|
||||
|
||||
ZwpInputTimestampsV1._gen_c()
|
||||
ZwpInputTimestampsV1.proxy_class = ZwpInputTimestampsV1Proxy
|
||||
ZwpInputTimestampsV1.resource_class = ZwpInputTimestampsV1Resource
|
||||
ZwpInputTimestampsV1.global_class = ZwpInputTimestampsV1Global
|
|
@ -0,0 +1,25 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_keyboard_shortcuts_inhibit_manager_v1 import ZwpKeyboardShortcutsInhibitManagerV1 # noqa: F401
|
||||
from .zwp_keyboard_shortcuts_inhibitor_v1 import ZwpKeyboardShortcutsInhibitorV1 # noqa: F401
|
|
@ -0,0 +1,107 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSeat
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_keyboard_shortcuts_inhibitor_v1 import ZwpKeyboardShortcutsInhibitorV1
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitManagerV1(Interface):
|
||||
"""Context object for keyboard grab_manager
|
||||
|
||||
A global interface used for inhibiting the compositor keyboard shortcuts.
|
||||
"""
|
||||
|
||||
name = "zwp_keyboard_shortcuts_inhibit_manager_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
already_inhibited = 0
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitManagerV1Proxy(Proxy[ZwpKeyboardShortcutsInhibitManagerV1]):
|
||||
interface = ZwpKeyboardShortcutsInhibitManagerV1
|
||||
|
||||
@ZwpKeyboardShortcutsInhibitManagerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the keyboard shortcuts inhibitor object
|
||||
|
||||
Destroy the keyboard shortcuts inhibitor manager.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpKeyboardShortcutsInhibitManagerV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpKeyboardShortcutsInhibitorV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Object, interface=WlSeat),
|
||||
)
|
||||
def inhibit_shortcuts(self, surface: WlSurface, seat: WlSeat) -> Proxy[ZwpKeyboardShortcutsInhibitorV1]:
|
||||
"""Create a new keyboard shortcuts inhibitor object
|
||||
|
||||
Create a new keyboard shortcuts inhibitor object associated with the
|
||||
given surface for the given seat.
|
||||
|
||||
If shortcuts are already inhibited for the specified seat and surface,
|
||||
a protocol error "already_inhibited" is raised by the compositor.
|
||||
|
||||
:param surface:
|
||||
the surface that inhibits the keyboard shortcuts behavior
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param seat:
|
||||
the :class:`~pywayland.protocol.wayland.WlSeat` for which keyboard
|
||||
shortcuts should be disabled
|
||||
:type seat:
|
||||
:class:`~pywayland.protocol.wayland.WlSeat`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.keyboard_shortcuts_inhibit_unstable_v1.ZwpKeyboardShortcutsInhibitorV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ZwpKeyboardShortcutsInhibitorV1, surface, seat)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitManagerV1Resource(Resource):
|
||||
interface = ZwpKeyboardShortcutsInhibitManagerV1
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitManagerV1Global(Global):
|
||||
interface = ZwpKeyboardShortcutsInhibitManagerV1
|
||||
|
||||
|
||||
ZwpKeyboardShortcutsInhibitManagerV1._gen_c()
|
||||
ZwpKeyboardShortcutsInhibitManagerV1.proxy_class = ZwpKeyboardShortcutsInhibitManagerV1Proxy
|
||||
ZwpKeyboardShortcutsInhibitManagerV1.resource_class = ZwpKeyboardShortcutsInhibitManagerV1Resource
|
||||
ZwpKeyboardShortcutsInhibitManagerV1.global_class = ZwpKeyboardShortcutsInhibitManagerV1Global
|
|
@ -0,0 +1,120 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2017 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import Global, Interface, Proxy, Resource
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitorV1(Interface):
|
||||
"""Context object for keyboard shortcuts inhibitor
|
||||
|
||||
A keyboard shortcuts inhibitor instructs the compositor to ignore its own
|
||||
keyboard shortcuts when the associated surface has keyboard focus. As a
|
||||
result, when the surface has keyboard focus on the given seat, it will
|
||||
receive all key events originating from the specified seat, even those
|
||||
which would normally be caught by the compositor for its own shortcuts.
|
||||
|
||||
The Wayland compositor is however under no obligation to disable all of its
|
||||
shortcuts, and may keep some special key combo for its own use, including
|
||||
but not limited to one allowing the user to forcibly restore normal
|
||||
keyboard events routing in the case of an unwilling client. The compositor
|
||||
may also use the same key combo to reactivate an existing shortcut
|
||||
inhibitor that was previously deactivated on user request.
|
||||
|
||||
When the compositor restores its own keyboard shortcuts, an "inactive"
|
||||
event is emitted to notify the client that the keyboard shortcuts inhibitor
|
||||
is not effectively active for the surface and seat any more, and the client
|
||||
should not expect to receive all keyboard events.
|
||||
|
||||
When the keyboard shortcuts inhibitor is inactive, the client has no way to
|
||||
forcibly reactivate the keyboard shortcuts inhibitor.
|
||||
|
||||
The user can chose to re-enable a previously deactivated keyboard shortcuts
|
||||
inhibitor using any mechanism the compositor may offer, in which case the
|
||||
compositor will send an "active" event to notify the client.
|
||||
|
||||
If the surface is destroyed, unmapped, or loses the seat's keyboard focus,
|
||||
the keyboard shortcuts inhibitor becomes irrelevant and the compositor will
|
||||
restore its own keyboard shortcuts but no "inactive" event is emitted in
|
||||
this case.
|
||||
"""
|
||||
|
||||
name = "zwp_keyboard_shortcuts_inhibitor_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitorV1Proxy(Proxy[ZwpKeyboardShortcutsInhibitorV1]):
|
||||
interface = ZwpKeyboardShortcutsInhibitorV1
|
||||
|
||||
@ZwpKeyboardShortcutsInhibitorV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the keyboard shortcuts inhibitor object
|
||||
|
||||
Remove the keyboard shortcuts inhibitor from the associated
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitorV1Resource(Resource):
|
||||
interface = ZwpKeyboardShortcutsInhibitorV1
|
||||
|
||||
@ZwpKeyboardShortcutsInhibitorV1.event()
|
||||
def active(self) -> None:
|
||||
"""Shortcuts are inhibited
|
||||
|
||||
This event indicates that the shortcut inhibitor is active.
|
||||
|
||||
The compositor sends this event every time compositor shortcuts are
|
||||
inhibited on behalf of the surface. When active, the client may receive
|
||||
input events normally reserved by the compositor (see
|
||||
:class:`ZwpKeyboardShortcutsInhibitorV1`).
|
||||
|
||||
This occurs typically when the initial request "inhibit_shortcuts"
|
||||
first becomes active or when the user instructs the compositor to re-
|
||||
enable and existing shortcuts inhibitor using any mechanism offered by
|
||||
the compositor.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ZwpKeyboardShortcutsInhibitorV1.event()
|
||||
def inactive(self) -> None:
|
||||
"""Shortcuts are restored
|
||||
|
||||
This event indicates that the shortcuts inhibitor is inactive, normal
|
||||
shortcuts processing is restored by the compositor.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ZwpKeyboardShortcutsInhibitorV1Global(Global):
|
||||
interface = ZwpKeyboardShortcutsInhibitorV1
|
||||
|
||||
|
||||
ZwpKeyboardShortcutsInhibitorV1._gen_c()
|
||||
ZwpKeyboardShortcutsInhibitorV1.proxy_class = ZwpKeyboardShortcutsInhibitorV1Proxy
|
||||
ZwpKeyboardShortcutsInhibitorV1.resource_class = ZwpKeyboardShortcutsInhibitorV1Resource
|
||||
ZwpKeyboardShortcutsInhibitorV1.global_class = ZwpKeyboardShortcutsInhibitorV1Global
|
|
@ -0,0 +1,26 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014, 2015 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_linux_buffer_params_v1 import ZwpLinuxBufferParamsV1 # noqa: F401
|
||||
from .zwp_linux_dmabuf_feedback_v1 import ZwpLinuxDmabufFeedbackV1 # noqa: F401
|
||||
from .zwp_linux_dmabuf_v1 import ZwpLinuxDmabufV1 # noqa: F401
|
|
@ -0,0 +1,336 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014, 2015 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlBuffer
|
||||
|
||||
|
||||
class ZwpLinuxBufferParamsV1(Interface):
|
||||
"""Parameters for creating a dmabuf-based :class:`~pywayland.protocol.wayland.WlBuffer`
|
||||
|
||||
This temporary object is a collection of dmabufs and other parameters that
|
||||
together form a single logical buffer. The temporary object may eventually
|
||||
create one :class:`~pywayland.protocol.wayland.WlBuffer` unless cancelled
|
||||
by destroying it before requesting 'create'.
|
||||
|
||||
Single-planar formats only require one dmabuf, however multi-planar formats
|
||||
may require more than one dmabuf. For all formats, an 'add' request must be
|
||||
called once per plane (even if the underlying dmabuf fd is identical).
|
||||
|
||||
You must use consecutive plane indices ('plane_idx' argument for 'add')
|
||||
from zero to the number of planes used by the drm_fourcc format code. All
|
||||
planes required by the format must be given exactly once, but can be given
|
||||
in any order. Each plane index can be set only once.
|
||||
"""
|
||||
|
||||
name = "zwp_linux_buffer_params_v1"
|
||||
version = 4
|
||||
|
||||
class error(enum.IntEnum):
|
||||
already_used = 0
|
||||
plane_idx = 1
|
||||
plane_set = 2
|
||||
incomplete = 3
|
||||
invalid_format = 4
|
||||
invalid_dimensions = 5
|
||||
out_of_bounds = 6
|
||||
invalid_wl_buffer = 7
|
||||
|
||||
class flags(enum.IntFlag):
|
||||
y_invert = 1
|
||||
interlaced = 2
|
||||
bottom_first = 4
|
||||
|
||||
|
||||
class ZwpLinuxBufferParamsV1Proxy(Proxy[ZwpLinuxBufferParamsV1]):
|
||||
interface = ZwpLinuxBufferParamsV1
|
||||
|
||||
@ZwpLinuxBufferParamsV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Delete this object, used or not
|
||||
|
||||
Cleans up the temporary data sent to the server for dmabuf-based
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` creation.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpLinuxBufferParamsV1.request(
|
||||
Argument(ArgumentType.FileDescriptor),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def add(self, fd: int, plane_idx: int, offset: int, stride: int, modifier_hi: int, modifier_lo: int) -> None:
|
||||
"""Add a dmabuf to the temporary set
|
||||
|
||||
This request adds one dmabuf to the set in this
|
||||
:class:`ZwpLinuxBufferParamsV1`.
|
||||
|
||||
The 64-bit unsigned value combined from modifier_hi and modifier_lo is
|
||||
the dmabuf layout modifier. DRM AddFB2 ioctl calls this the fb
|
||||
modifier, which is defined in drm_mode.h of Linux UAPI. This is an
|
||||
opaque token. Drivers use this token to express tiling, compression,
|
||||
etc. driver-specific modifications to the base format defined by the
|
||||
DRM fourcc code.
|
||||
|
||||
Starting from version 4, the invalid_format protocol error is sent if
|
||||
the format + modifier pair was not advertised as supported.
|
||||
|
||||
This request raises the PLANE_IDX error if plane_idx is too large. The
|
||||
error PLANE_SET is raised if attempting to set a plane that was already
|
||||
set.
|
||||
|
||||
:param fd:
|
||||
dmabuf fd
|
||||
:type fd:
|
||||
`ArgumentType.FileDescriptor`
|
||||
:param plane_idx:
|
||||
plane index
|
||||
:type plane_idx:
|
||||
`ArgumentType.Uint`
|
||||
:param offset:
|
||||
offset in bytes
|
||||
:type offset:
|
||||
`ArgumentType.Uint`
|
||||
:param stride:
|
||||
stride in bytes
|
||||
:type stride:
|
||||
`ArgumentType.Uint`
|
||||
:param modifier_hi:
|
||||
high 32 bits of layout modifier
|
||||
:type modifier_hi:
|
||||
`ArgumentType.Uint`
|
||||
:param modifier_lo:
|
||||
low 32 bits of layout modifier
|
||||
:type modifier_lo:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(1, fd, plane_idx, offset, stride, modifier_hi, modifier_lo)
|
||||
|
||||
@ZwpLinuxBufferParamsV1.request(
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def create(self, width: int, height: int, format: int, flags: int) -> None:
|
||||
"""Create a :class:`~pywayland.protocol.wayland.WlBuffer` from the given dmabufs
|
||||
|
||||
This asks for creation of a
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` from the added dmabuf
|
||||
buffers. The :class:`~pywayland.protocol.wayland.WlBuffer` is not
|
||||
created immediately but returned via the 'created' event if the dmabuf
|
||||
sharing succeeds. The sharing may fail at runtime for reasons a client
|
||||
cannot predict, in which case the 'failed' event is triggered.
|
||||
|
||||
The 'format' argument is a DRM_FORMAT code, as defined by the libdrm's
|
||||
drm_fourcc.h. The Linux kernel's DRM sub-system is the authoritative
|
||||
source on how the format codes should work.
|
||||
|
||||
The 'flags' is a bitfield of the flags defined in enum "flags".
|
||||
'y_invert' means the that the image needs to be y-flipped.
|
||||
|
||||
Flag 'interlaced' means that the frame in the buffer is not progressive
|
||||
as usual, but interlaced. An interlaced buffer as supported here must
|
||||
always contain both top and bottom fields. The top field always begins
|
||||
on the first pixel row. The temporal ordering between the two fields is
|
||||
top field first, unless 'bottom_first' is specified. It is undefined
|
||||
whether 'bottom_first' is ignored if 'interlaced' is not set.
|
||||
|
||||
This protocol does not convey any information about field rate,
|
||||
duration, or timing, other than the relative ordering between the two
|
||||
fields in one buffer. A compositor may have to estimate the intended
|
||||
field rate from the incoming buffer rate. It is undefined whether the
|
||||
time of receiving :func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>` with a new buffer
|
||||
attached, applying the :class:`~pywayland.protocol.wayland.WlSurface`
|
||||
state, :func:`WlSurface.frame()
|
||||
<pywayland.protocol.wayland.WlSurface.frame>` callback trigger,
|
||||
presentation, or any other point in the compositor cycle is used to
|
||||
measure the frame or field times. There is no support for detecting
|
||||
missed or late frames/fields/buffers either, and there is no support
|
||||
whatsoever for cooperating with interlaced compositor output.
|
||||
|
||||
The composited image quality resulting from the use of interlaced
|
||||
buffers is explicitly undefined. A compositor may use elaborate
|
||||
hardware features or software to deinterlace and create progressive
|
||||
output frames from a sequence of interlaced input buffers, or it may
|
||||
produce substandard image quality. However, compositors that cannot
|
||||
guarantee reasonable image quality in all cases are recommended to just
|
||||
reject all interlaced buffers.
|
||||
|
||||
Any argument errors, including non-positive width or height, mismatch
|
||||
between the number of planes and the format, bad format, bad offset or
|
||||
stride, may be indicated by fatal protocol errors: INCOMPLETE,
|
||||
INVALID_FORMAT, INVALID_DIMENSIONS, OUT_OF_BOUNDS.
|
||||
|
||||
Dmabuf import errors in the server that are not obvious client bugs are
|
||||
returned via the 'failed' event as non-fatal. This allows attempting
|
||||
dmabuf sharing and falling back in the client if it fails.
|
||||
|
||||
This request can be sent only once in the object's lifetime, after
|
||||
which the only legal request is destroy. This object should be
|
||||
destroyed after issuing a 'create' request. Attempting to use this
|
||||
object after issuing 'create' raises ALREADY_USED protocol error.
|
||||
|
||||
It is not mandatory to issue 'create'. If a client wants to cancel the
|
||||
buffer creation, it can just destroy this object.
|
||||
|
||||
:param width:
|
||||
base plane width in pixels
|
||||
:type width:
|
||||
`ArgumentType.Int`
|
||||
:param height:
|
||||
base plane height in pixels
|
||||
:type height:
|
||||
`ArgumentType.Int`
|
||||
:param format:
|
||||
DRM_FORMAT code
|
||||
:type format:
|
||||
`ArgumentType.Uint`
|
||||
:param flags:
|
||||
see enum flags
|
||||
:type flags:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._marshal(2, width, height, format, flags)
|
||||
|
||||
@ZwpLinuxBufferParamsV1.request(
|
||||
Argument(ArgumentType.NewId, interface=WlBuffer),
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Int),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
version=2,
|
||||
)
|
||||
def create_immed(self, width: int, height: int, format: int, flags: int) -> Proxy[WlBuffer]:
|
||||
"""Immediately create a :class:`~pywayland.protocol.wayland.WlBuffer` from the given dmabufs
|
||||
|
||||
This asks for immediate creation of a
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` by importing the added
|
||||
dmabufs.
|
||||
|
||||
In case of import success, no event is sent from the server, and the
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` is ready to be used by
|
||||
the client.
|
||||
|
||||
Upon import failure, either of the following may happen, as seen fit by
|
||||
the implementation: - the client is terminated with one of the
|
||||
following fatal protocol errors: - INCOMPLETE, INVALID_FORMAT,
|
||||
INVALID_DIMENSIONS, OUT_OF_BOUNDS, in case of argument errors such
|
||||
as mismatch between the number of planes and the format, bad
|
||||
format, non-positive width or height, or bad offset or stride. -
|
||||
INVALID_WL_BUFFER, in case the cause for failure is unknown or
|
||||
plaform specific. - the server creates an invalid
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer`, marks it as failed and
|
||||
sends a 'failed' event to the client. The result of using this
|
||||
invalid :class:`~pywayland.protocol.wayland.WlBuffer` as an argument in
|
||||
any request by the client is defined by the compositor
|
||||
implementation.
|
||||
|
||||
This takes the same arguments as a 'create' request, and obeys the same
|
||||
restrictions.
|
||||
|
||||
:param width:
|
||||
base plane width in pixels
|
||||
:type width:
|
||||
`ArgumentType.Int`
|
||||
:param height:
|
||||
base plane height in pixels
|
||||
:type height:
|
||||
`ArgumentType.Int`
|
||||
:param format:
|
||||
DRM_FORMAT code
|
||||
:type format:
|
||||
`ArgumentType.Uint`
|
||||
:param flags:
|
||||
see enum flags
|
||||
:type flags:
|
||||
`ArgumentType.Uint`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` -- id for the newly
|
||||
created :class:`~pywayland.protocol.wayland.WlBuffer`
|
||||
"""
|
||||
buffer_id = self._marshal_constructor(3, WlBuffer, width, height, format, flags)
|
||||
return buffer_id
|
||||
|
||||
|
||||
class ZwpLinuxBufferParamsV1Resource(Resource):
|
||||
interface = ZwpLinuxBufferParamsV1
|
||||
|
||||
@ZwpLinuxBufferParamsV1.event(
|
||||
Argument(ArgumentType.NewId, interface=WlBuffer),
|
||||
)
|
||||
def created(self, buffer: WlBuffer) -> None:
|
||||
"""Buffer creation succeeded
|
||||
|
||||
This event indicates that the attempted buffer creation was successful.
|
||||
It provides the new :class:`~pywayland.protocol.wayland.WlBuffer`
|
||||
referencing the dmabuf(s).
|
||||
|
||||
Upon receiving this event, the client should destroy the
|
||||
:class:`ZwpLinuxBufferParamsV1` object.
|
||||
|
||||
:param buffer:
|
||||
the newly created :class:`~pywayland.protocol.wayland.WlBuffer`
|
||||
:type buffer:
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer`
|
||||
"""
|
||||
self._post_event(0, buffer)
|
||||
|
||||
@ZwpLinuxBufferParamsV1.event()
|
||||
def failed(self) -> None:
|
||||
"""Buffer creation failed
|
||||
|
||||
This event indicates that the attempted buffer creation has failed. It
|
||||
usually means that one of the dmabuf constraints has not been
|
||||
fulfilled.
|
||||
|
||||
Upon receiving this event, the client should destroy the
|
||||
:class:`ZwpLinuxBufferParamsV1` object.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ZwpLinuxBufferParamsV1Global(Global):
|
||||
interface = ZwpLinuxBufferParamsV1
|
||||
|
||||
|
||||
ZwpLinuxBufferParamsV1._gen_c()
|
||||
ZwpLinuxBufferParamsV1.proxy_class = ZwpLinuxBufferParamsV1Proxy
|
||||
ZwpLinuxBufferParamsV1.resource_class = ZwpLinuxBufferParamsV1Resource
|
||||
ZwpLinuxBufferParamsV1.global_class = ZwpLinuxBufferParamsV1Global
|
|
@ -0,0 +1,294 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014, 2015 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
|
||||
|
||||
class ZwpLinuxDmabufFeedbackV1(Interface):
|
||||
"""Dmabuf feedback
|
||||
|
||||
This object advertises dmabuf parameters feedback. This includes the
|
||||
preferred devices and the supported formats/modifiers.
|
||||
|
||||
The parameters are sent once when this object is created and whenever they
|
||||
change. The done event is always sent once after all parameters have been
|
||||
sent. When a single parameter changes, all parameters are re-sent by the
|
||||
compositor.
|
||||
|
||||
Compositors can re-send the parameters when the current client buffer
|
||||
allocations are sub-optimal. Compositors should not re-send the parameters
|
||||
if re-allocating the buffers would not result in a more optimal
|
||||
configuration. In particular, compositors should avoid sending the exact
|
||||
same parameters multiple times in a row.
|
||||
|
||||
The tranche_target_device and tranche_formats events are grouped by
|
||||
tranches of preference. For each tranche, a tranche_target_device, one
|
||||
tranche_flags and one or more tranche_formats events are sent, followed by
|
||||
a tranche_done event finishing the list. The tranches are sent in
|
||||
descending order of preference. All formats and modifiers in the same
|
||||
tranche have the same preference.
|
||||
|
||||
To send parameters, the compositor sends one main_device event, tranches
|
||||
(each consisting of one tranche_target_device event, one tranche_flags
|
||||
event, tranche_formats events and then a tranche_done event), then one done
|
||||
event.
|
||||
"""
|
||||
|
||||
name = "zwp_linux_dmabuf_feedback_v1"
|
||||
version = 4
|
||||
|
||||
class tranche_flags(enum.IntFlag):
|
||||
scanout = 1
|
||||
|
||||
|
||||
class ZwpLinuxDmabufFeedbackV1Proxy(Proxy[ZwpLinuxDmabufFeedbackV1]):
|
||||
interface = ZwpLinuxDmabufFeedbackV1
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the feedback object
|
||||
|
||||
Using this request a client can tell the server that it is not going to
|
||||
use the wp_linux_dmabuf_feedback object anymore.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ZwpLinuxDmabufFeedbackV1Resource(Resource):
|
||||
interface = ZwpLinuxDmabufFeedbackV1
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event()
|
||||
def done(self) -> None:
|
||||
"""All feedback has been sent
|
||||
|
||||
This event is sent after all parameters of a wp_linux_dmabuf_feedback
|
||||
object have been sent.
|
||||
|
||||
This allows changes to the wp_linux_dmabuf_feedback parameters to be
|
||||
seen as atomic, even if they happen via multiple events.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event(
|
||||
Argument(ArgumentType.FileDescriptor),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def format_table(self, fd: int, size: int) -> None:
|
||||
"""Format and modifier table
|
||||
|
||||
This event provides a file descriptor which can be memory-mapped to
|
||||
access the format and modifier table.
|
||||
|
||||
The table contains a tightly packed array of consecutive format +
|
||||
modifier pairs. Each pair is 16 bytes wide. It contains a format as a
|
||||
32-bit unsigned integer, followed by 4 bytes of unused padding, and a
|
||||
modifier as a 64-bit unsigned integer. The native endianness is used.
|
||||
|
||||
The client must map the file descriptor in read-only private mode.
|
||||
|
||||
Compositors are not allowed to mutate the table file contents once this
|
||||
event has been sent. Instead, compositors must create a new, separate
|
||||
table file and re-send feedback parameters. Compositors are allowed to
|
||||
store duplicate format + modifier pairs in the table.
|
||||
|
||||
:param fd:
|
||||
table file descriptor
|
||||
:type fd:
|
||||
`ArgumentType.FileDescriptor`
|
||||
:param size:
|
||||
table size, in bytes
|
||||
:type size:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(1, fd, size)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event(
|
||||
Argument(ArgumentType.Array),
|
||||
)
|
||||
def main_device(self, device: list) -> None:
|
||||
"""Preferred main device
|
||||
|
||||
This event advertises the main device that the server prefers to use
|
||||
when direct scan-out to the target device isn't possible. The
|
||||
advertised main device may be different for each
|
||||
wp_linux_dmabuf_feedback object, and may change over time.
|
||||
|
||||
There is exactly one main device. The compositor must send at least one
|
||||
preference tranche with tranche_target_device equal to main_device.
|
||||
|
||||
Clients need to create buffers that the main device can import and read
|
||||
from, otherwise creating the dmabuf
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` will fail (see the
|
||||
wp_linux_buffer_params.create and create_immed requests for details).
|
||||
The main device will also likely be kept active by the compositor, so
|
||||
clients can use it instead of waking up another device for power
|
||||
savings.
|
||||
|
||||
In general the device is a DRM node. The DRM node type (primary vs.
|
||||
render) is unspecified. Clients must not rely on the compositor sending
|
||||
a particular node type. Clients cannot check two devices for equality
|
||||
by comparing the dev_t value.
|
||||
|
||||
If explicit modifiers are not supported and the client performs buffer
|
||||
allocations on a different device than the main device, then the client
|
||||
must force the buffer to have a linear layout.
|
||||
|
||||
:param device:
|
||||
device dev_t value
|
||||
:type device:
|
||||
`ArgumentType.Array`
|
||||
"""
|
||||
self._post_event(2, device)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event()
|
||||
def tranche_done(self) -> None:
|
||||
"""A preference tranche has been sent
|
||||
|
||||
This event splits tranche_target_device and tranche_formats events in
|
||||
preference tranches. It is sent after a set of tranche_target_device
|
||||
and tranche_formats events; it represents the end of a tranche. The
|
||||
next tranche will have a lower preference.
|
||||
"""
|
||||
self._post_event(3)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event(
|
||||
Argument(ArgumentType.Array),
|
||||
)
|
||||
def tranche_target_device(self, device: list) -> None:
|
||||
"""Target device
|
||||
|
||||
This event advertises the target device that the server prefers to use
|
||||
for a buffer created given this tranche. The advertised target device
|
||||
may be different for each preference tranche, and may change over time.
|
||||
|
||||
There is exactly one target device per tranche.
|
||||
|
||||
The target device may be a scan-out device, for example if the
|
||||
compositor prefers to directly scan-out a buffer created given this
|
||||
tranche. The target device may be a rendering device, for example if
|
||||
the compositor prefers to texture from said buffer.
|
||||
|
||||
The client can use this hint to allocate the buffer in a way that makes
|
||||
it accessible from the target device, ideally directly. The buffer must
|
||||
still be accessible from the main device, either through direct import
|
||||
or through a potentially more expensive fallback path. If the buffer
|
||||
can't be directly imported from the main device then clients must be
|
||||
prepared for the compositor changing the tranche priority or making
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` creation fail (see the
|
||||
wp_linux_buffer_params.create and create_immed requests for details).
|
||||
|
||||
If the device is a DRM node, the DRM node type (primary vs. render) is
|
||||
unspecified. Clients must not rely on the compositor sending a
|
||||
particular node type. Clients cannot check two devices for equality by
|
||||
comparing the dev_t value.
|
||||
|
||||
This event is tied to a preference tranche, see the tranche_done event.
|
||||
|
||||
:param device:
|
||||
device dev_t value
|
||||
:type device:
|
||||
`ArgumentType.Array`
|
||||
"""
|
||||
self._post_event(4, device)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event(
|
||||
Argument(ArgumentType.Array),
|
||||
)
|
||||
def tranche_formats(self, indices: list) -> None:
|
||||
"""Supported buffer format modifier
|
||||
|
||||
This event advertises the format + modifier combinations that the
|
||||
compositor supports.
|
||||
|
||||
It carries an array of indices, each referring to a format + modifier
|
||||
pair in the last received format table (see the format_table event).
|
||||
Each index is a 16-bit unsigned integer in native endianness.
|
||||
|
||||
For legacy support, DRM_FORMAT_MOD_INVALID is an allowed modifier. It
|
||||
indicates that the server can support the format with an implicit
|
||||
modifier. When a buffer has DRM_FORMAT_MOD_INVALID as its modifier, it
|
||||
is as if no explicit modifier is specified. The effective modifier will
|
||||
be derived from the dmabuf.
|
||||
|
||||
A compositor that sends valid modifiers and DRM_FORMAT_MOD_INVALID for
|
||||
a given format supports both explicit modifiers and implicit modifiers.
|
||||
|
||||
Compositors must not send duplicate format + modifier pairs within the
|
||||
same tranche or across two different tranches with the same target
|
||||
device and flags.
|
||||
|
||||
This event is tied to a preference tranche, see the tranche_done event.
|
||||
|
||||
For the definition of the format and modifier codes, see the
|
||||
wp_linux_buffer_params.create request.
|
||||
|
||||
:param indices:
|
||||
array of 16-bit indexes
|
||||
:type indices:
|
||||
`ArgumentType.Array`
|
||||
"""
|
||||
self._post_event(5, indices)
|
||||
|
||||
@ZwpLinuxDmabufFeedbackV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def tranche_flags(self, flags: int) -> None:
|
||||
"""Tranche flags
|
||||
|
||||
This event sets tranche-specific flags.
|
||||
|
||||
The scanout flag is a hint that direct scan-out may be attempted by the
|
||||
compositor on the target device if the client appropriately allocates a
|
||||
buffer. How to allocate a buffer that can be scanned out on the target
|
||||
device is implementation-defined.
|
||||
|
||||
This event is tied to a preference tranche, see the tranche_done event.
|
||||
|
||||
:param flags:
|
||||
tranche flags
|
||||
:type flags:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(6, flags)
|
||||
|
||||
|
||||
class ZwpLinuxDmabufFeedbackV1Global(Global):
|
||||
interface = ZwpLinuxDmabufFeedbackV1
|
||||
|
||||
|
||||
ZwpLinuxDmabufFeedbackV1._gen_c()
|
||||
ZwpLinuxDmabufFeedbackV1.proxy_class = ZwpLinuxDmabufFeedbackV1Proxy
|
||||
ZwpLinuxDmabufFeedbackV1.resource_class = ZwpLinuxDmabufFeedbackV1Resource
|
||||
ZwpLinuxDmabufFeedbackV1.global_class = ZwpLinuxDmabufFeedbackV1Global
|
|
@ -0,0 +1,279 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014, 2015 Collabora, Ltd.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_linux_buffer_params_v1 import ZwpLinuxBufferParamsV1
|
||||
from .zwp_linux_dmabuf_feedback_v1 import ZwpLinuxDmabufFeedbackV1
|
||||
|
||||
|
||||
class ZwpLinuxDmabufV1(Interface):
|
||||
"""Factory for creating dmabuf-based wl_buffers
|
||||
|
||||
Following the interfaces from:
|
||||
https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_image_dma_buf_import.txt
|
||||
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt
|
||||
and the Linux DRM sub-system's AddFb2 ioctl.
|
||||
|
||||
This interface offers ways to create generic dmabuf-based wl_buffers.
|
||||
|
||||
Clients can use the get_surface_feedback request to get dmabuf feedback for
|
||||
a particular surface. If the client wants to retrieve feedback not tied to
|
||||
a surface, they can use the get_default_feedback request.
|
||||
|
||||
The following are required from clients:
|
||||
|
||||
- Clients must ensure that either all data in the dma-buf is coherent for
|
||||
all subsequent read access or that coherency is correctly handled by the
|
||||
underlying kernel-side dma-buf implementation.
|
||||
|
||||
- Don't make any more attachments after sending the buffer to the
|
||||
compositor. Making more attachments later increases the risk of the
|
||||
compositor not being able to use (re-import) an existing dmabuf-based
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer`.
|
||||
|
||||
The underlying graphics stack must ensure the following:
|
||||
|
||||
- The dmabuf file descriptors relayed to the server will stay valid for the
|
||||
whole lifetime of the :class:`~pywayland.protocol.wayland.WlBuffer`. This
|
||||
means the server may at any time use those fds to import the dmabuf into
|
||||
any kernel sub-system that might accept it.
|
||||
|
||||
However, when the underlying graphics stack fails to deliver the promise,
|
||||
because of e.g. a device hot-unplug which raises internal errors, after the
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` has been successfully created
|
||||
the compositor must not raise protocol errors to the client when dmabuf
|
||||
import later fails.
|
||||
|
||||
To create a :class:`~pywayland.protocol.wayland.WlBuffer` from one or more
|
||||
dmabufs, a client creates a zwp_linux_dmabuf_params_v1 object with a
|
||||
:func:`ZwpLinuxDmabufV1.create_params()` request. All planes required by
|
||||
the intended format are added with the 'add' request. Finally, a 'create'
|
||||
or 'create_immed' request is issued, which has the following outcome
|
||||
depending on the import success.
|
||||
|
||||
The 'create' request, - on success, triggers a 'created' event which
|
||||
provides the final :class:`~pywayland.protocol.wayland.WlBuffer` to the
|
||||
client. - on failure, triggers a 'failed' event to convey that the server
|
||||
cannot use the dmabufs received from the client.
|
||||
|
||||
For the 'create_immed' request, - on success, the server immediately
|
||||
imports the added dmabufs to create a
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer`. No event is sent from the
|
||||
server in this case. - on failure, the server can choose to either: -
|
||||
terminate the client by raising a fatal error. - mark the
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` as failed, and send a
|
||||
'failed' event to the client. If the client uses a failed
|
||||
:class:`~pywayland.protocol.wayland.WlBuffer` as an argument to any
|
||||
request, the behaviour is compositor implementation-defined.
|
||||
|
||||
For all DRM formats and unless specified in another protocol extension,
|
||||
pre-multiplied alpha is used for pixel values.
|
||||
|
||||
Warning! The protocol described in this file is experimental and backward
|
||||
incompatible changes may be made. Backward compatible changes may be added
|
||||
together with the corresponding interface version bump. Backward
|
||||
incompatible changes are done by bumping the version number in the protocol
|
||||
and interface names and resetting the interface version. Once the protocol
|
||||
is to be declared stable, the 'z' prefix and the version number in the
|
||||
protocol and interface names are removed and the interface version number
|
||||
is reset.
|
||||
"""
|
||||
|
||||
name = "zwp_linux_dmabuf_v1"
|
||||
version = 4
|
||||
|
||||
|
||||
class ZwpLinuxDmabufV1Proxy(Proxy[ZwpLinuxDmabufV1]):
|
||||
interface = ZwpLinuxDmabufV1
|
||||
|
||||
@ZwpLinuxDmabufV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Unbind the factory
|
||||
|
||||
Objects created through this interface, especially wl_buffers, will
|
||||
remain valid.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpLinuxDmabufV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpLinuxBufferParamsV1),
|
||||
)
|
||||
def create_params(self) -> Proxy[ZwpLinuxBufferParamsV1]:
|
||||
"""Create a temporary object for buffer parameters
|
||||
|
||||
This temporary object is used to collect multiple dmabuf handles into a
|
||||
single batch to create a :class:`~pywayland.protocol.wayland.WlBuffer`.
|
||||
It can only be used once and should be destroyed after a 'created' or
|
||||
'failed' event has been received.
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxBufferParamsV1`
|
||||
-- the new temporary
|
||||
"""
|
||||
params_id = self._marshal_constructor(1, ZwpLinuxBufferParamsV1)
|
||||
return params_id
|
||||
|
||||
@ZwpLinuxDmabufV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpLinuxDmabufFeedbackV1),
|
||||
version=4,
|
||||
)
|
||||
def get_default_feedback(self) -> Proxy[ZwpLinuxDmabufFeedbackV1]:
|
||||
"""Get default feedback
|
||||
|
||||
This request creates a new wp_linux_dmabuf_feedback object not bound to
|
||||
a particular surface. This object will deliver feedback about dmabuf
|
||||
parameters to use if the client doesn't support per-surface feedback
|
||||
(see get_surface_feedback).
|
||||
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxDmabufFeedbackV1`
|
||||
"""
|
||||
id = self._marshal_constructor(2, ZwpLinuxDmabufFeedbackV1)
|
||||
return id
|
||||
|
||||
@ZwpLinuxDmabufV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpLinuxDmabufFeedbackV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
version=4,
|
||||
)
|
||||
def get_surface_feedback(self, surface: WlSurface) -> Proxy[ZwpLinuxDmabufFeedbackV1]:
|
||||
"""Get feedback for a surface
|
||||
|
||||
This request creates a new wp_linux_dmabuf_feedback object for the
|
||||
specified :class:`~pywayland.protocol.wayland.WlSurface`. This object
|
||||
will deliver feedback about dmabuf parameters to use for buffers
|
||||
attached to this surface.
|
||||
|
||||
If the surface is destroyed before the wp_linux_dmabuf_feedback object,
|
||||
the feedback object becomes inert.
|
||||
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxDmabufFeedbackV1`
|
||||
"""
|
||||
id = self._marshal_constructor(3, ZwpLinuxDmabufFeedbackV1, surface)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpLinuxDmabufV1Resource(Resource):
|
||||
interface = ZwpLinuxDmabufV1
|
||||
|
||||
@ZwpLinuxDmabufV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def format(self, format: int) -> None:
|
||||
"""Supported buffer format
|
||||
|
||||
This event advertises one buffer format that the server supports. All
|
||||
the supported formats are advertised once when the client binds to this
|
||||
interface. A roundtrip after binding guarantees that the client has
|
||||
received all supported formats.
|
||||
|
||||
For the definition of the format codes, see the
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxBufferParamsV1`::create
|
||||
request.
|
||||
|
||||
Starting version 4, the format event is deprecated and must not be sent
|
||||
by compositors. Instead, use get_default_feedback or
|
||||
get_surface_feedback.
|
||||
|
||||
:param format:
|
||||
DRM_FORMAT code
|
||||
:type format:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, format)
|
||||
|
||||
@ZwpLinuxDmabufV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
version=3,
|
||||
)
|
||||
def modifier(self, format: int, modifier_hi: int, modifier_lo: int) -> None:
|
||||
"""Supported buffer format modifier
|
||||
|
||||
This event advertises the formats that the server supports, along with
|
||||
the modifiers supported for each format. All the supported modifiers
|
||||
for all the supported formats are advertised once when the client binds
|
||||
to this interface. A roundtrip after binding guarantees that the client
|
||||
has received all supported format-modifier pairs.
|
||||
|
||||
For legacy support, DRM_FORMAT_MOD_INVALID (that is, modifier_hi ==
|
||||
0x00ffffff and modifier_lo == 0xffffffff) is allowed in this event. It
|
||||
indicates that the server can support the format with an implicit
|
||||
modifier. When a plane has DRM_FORMAT_MOD_INVALID as its modifier, it
|
||||
is as if no explicit modifier is specified. The effective modifier will
|
||||
be derived from the dmabuf.
|
||||
|
||||
A compositor that sends valid modifiers and DRM_FORMAT_MOD_INVALID for
|
||||
a given format supports both explicit modifiers and implicit modifiers.
|
||||
|
||||
For the definition of the format and modifier codes, see the
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxBufferParamsV1`::create
|
||||
and
|
||||
:class:`~pywayland.protocol.linux_dmabuf_unstable_v1.ZwpLinuxBufferParamsV1`::add
|
||||
requests.
|
||||
|
||||
Starting version 4, the modifier event is deprecated and must not be
|
||||
sent by compositors. Instead, use get_default_feedback or
|
||||
get_surface_feedback.
|
||||
|
||||
:param format:
|
||||
DRM_FORMAT code
|
||||
:type format:
|
||||
`ArgumentType.Uint`
|
||||
:param modifier_hi:
|
||||
high 32 bits of layout modifier
|
||||
:type modifier_hi:
|
||||
`ArgumentType.Uint`
|
||||
:param modifier_lo:
|
||||
low 32 bits of layout modifier
|
||||
:type modifier_lo:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(1, format, modifier_hi, modifier_lo)
|
||||
|
||||
|
||||
class ZwpLinuxDmabufV1Global(Global):
|
||||
interface = ZwpLinuxDmabufV1
|
||||
|
||||
|
||||
ZwpLinuxDmabufV1._gen_c()
|
||||
ZwpLinuxDmabufV1.proxy_class = ZwpLinuxDmabufV1Proxy
|
||||
ZwpLinuxDmabufV1.resource_class = ZwpLinuxDmabufV1Resource
|
||||
ZwpLinuxDmabufV1.global_class = ZwpLinuxDmabufV1Global
|
|
@ -0,0 +1,27 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014 Jonas Ådahl
|
||||
# Copyright © 2015 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from .zwp_confined_pointer_v1 import ZwpConfinedPointerV1 # noqa: F401
|
||||
from .zwp_locked_pointer_v1 import ZwpLockedPointerV1 # noqa: F401
|
||||
from .zwp_pointer_constraints_v1 import ZwpPointerConstraintsV1 # noqa: F401
|
|
@ -0,0 +1,143 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014 Jonas Ådahl
|
||||
# Copyright © 2015 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlRegion
|
||||
|
||||
|
||||
class ZwpConfinedPointerV1(Interface):
|
||||
"""Confined pointer object
|
||||
|
||||
The wp_confined_pointer interface represents a confined pointer state.
|
||||
|
||||
This object will send the event 'confined' when the confinement is
|
||||
activated. Whenever the confinement is activated, it is guaranteed that the
|
||||
surface the pointer is confined to will already have received pointer focus
|
||||
and that the pointer will be within the region passed to the request
|
||||
creating this object. It is up to the compositor to decide whether this
|
||||
requires some user interaction and if the pointer will warp to within the
|
||||
passed region if outside.
|
||||
|
||||
To unconfine the pointer, send the destroy request. This will also destroy
|
||||
the wp_confined_pointer object.
|
||||
|
||||
If the compositor decides to unconfine the pointer the unconfined event is
|
||||
sent. The wp_confined_pointer object is at this point defunct and should be
|
||||
destroyed.
|
||||
"""
|
||||
|
||||
name = "zwp_confined_pointer_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpConfinedPointerV1Proxy(Proxy[ZwpConfinedPointerV1]):
|
||||
interface = ZwpConfinedPointerV1
|
||||
|
||||
@ZwpConfinedPointerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the confined pointer object
|
||||
|
||||
Destroy the confined pointer object. If applicable, the compositor will
|
||||
unconfine the pointer.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpConfinedPointerV1.request(
|
||||
Argument(ArgumentType.Object, interface=WlRegion, nullable=True),
|
||||
)
|
||||
def set_region(self, region: WlRegion | None) -> None:
|
||||
"""Set a new confine region
|
||||
|
||||
Set a new region used to confine the pointer.
|
||||
|
||||
The new confine region is double-buffered. The new confine region will
|
||||
only take effect when the associated surface gets its pending state
|
||||
applied. See :func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>` for details.
|
||||
|
||||
If the confinement is active when the new confinement region is applied
|
||||
and the pointer ends up outside of newly applied region, the pointer
|
||||
may warped to a position within the new confinement region. If warped,
|
||||
a :func:`WlPointer.motion()
|
||||
<pywayland.protocol.wayland.WlPointer.motion>` event will be emitted,
|
||||
but no wp_relative_pointer.relative_motion event.
|
||||
|
||||
The compositor may also, instead of using the new region, unconfine the
|
||||
pointer.
|
||||
|
||||
For details about the confine region, see wp_confined_pointer.
|
||||
|
||||
:param region:
|
||||
region of surface
|
||||
:type region:
|
||||
:class:`~pywayland.protocol.wayland.WlRegion` or `None`
|
||||
"""
|
||||
self._marshal(1, region)
|
||||
|
||||
|
||||
class ZwpConfinedPointerV1Resource(Resource):
|
||||
interface = ZwpConfinedPointerV1
|
||||
|
||||
@ZwpConfinedPointerV1.event()
|
||||
def confined(self) -> None:
|
||||
"""Pointer confined
|
||||
|
||||
Notification that the pointer confinement of the seat's pointer is
|
||||
activated.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ZwpConfinedPointerV1.event()
|
||||
def unconfined(self) -> None:
|
||||
"""Pointer unconfined
|
||||
|
||||
Notification that the pointer confinement of the seat's pointer is no
|
||||
longer active. If this is a oneshot pointer confinement (see
|
||||
wp_pointer_constraints.lifetime) this object is now defunct and should
|
||||
be destroyed. If this is a persistent pointer confinement (see
|
||||
wp_pointer_constraints.lifetime) this pointer confinement may again
|
||||
reactivate in the future.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ZwpConfinedPointerV1Global(Global):
|
||||
interface = ZwpConfinedPointerV1
|
||||
|
||||
|
||||
ZwpConfinedPointerV1._gen_c()
|
||||
ZwpConfinedPointerV1.proxy_class = ZwpConfinedPointerV1Proxy
|
||||
ZwpConfinedPointerV1.resource_class = ZwpConfinedPointerV1Resource
|
||||
ZwpConfinedPointerV1.global_class = ZwpConfinedPointerV1Global
|
|
@ -0,0 +1,172 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014 Jonas Ådahl
|
||||
# Copyright © 2015 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlRegion
|
||||
|
||||
|
||||
class ZwpLockedPointerV1(Interface):
|
||||
"""Receive relative pointer motion events
|
||||
|
||||
The wp_locked_pointer interface represents a locked pointer state.
|
||||
|
||||
While the lock of this object is active, the
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` objects of the associated
|
||||
seat will not emit any :func:`WlPointer.motion()
|
||||
<pywayland.protocol.wayland.WlPointer.motion>` events.
|
||||
|
||||
This object will send the event 'locked' when the lock is activated.
|
||||
Whenever the lock is activated, it is guaranteed that the locked surface
|
||||
will already have received pointer focus and that the pointer will be
|
||||
within the region passed to the request creating this object.
|
||||
|
||||
To unlock the pointer, send the destroy request. This will also destroy the
|
||||
wp_locked_pointer object.
|
||||
|
||||
If the compositor decides to unlock the pointer the unlocked event is sent.
|
||||
See wp_locked_pointer.unlock for details.
|
||||
|
||||
When unlocking, the compositor may warp the cursor position to the set
|
||||
cursor position hint. If it does, it will not result in any relative motion
|
||||
events emitted via wp_relative_pointer.
|
||||
|
||||
If the surface the lock was requested on is destroyed and the lock is not
|
||||
yet activated, the wp_locked_pointer object is now defunct and must be
|
||||
destroyed.
|
||||
"""
|
||||
|
||||
name = "zwp_locked_pointer_v1"
|
||||
version = 1
|
||||
|
||||
|
||||
class ZwpLockedPointerV1Proxy(Proxy[ZwpLockedPointerV1]):
|
||||
interface = ZwpLockedPointerV1
|
||||
|
||||
@ZwpLockedPointerV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the locked pointer object
|
||||
|
||||
Destroy the locked pointer object. If applicable, the compositor will
|
||||
unlock the pointer.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpLockedPointerV1.request(
|
||||
Argument(ArgumentType.Fixed),
|
||||
Argument(ArgumentType.Fixed),
|
||||
)
|
||||
def set_cursor_position_hint(self, surface_x: float, surface_y: float) -> None:
|
||||
"""Set the pointer cursor position hint
|
||||
|
||||
Set the cursor position hint relative to the top left corner of the
|
||||
surface.
|
||||
|
||||
If the client is drawing its own cursor, it should update the position
|
||||
hint to the position of its own cursor. A compositor may use this
|
||||
information to warp the pointer upon unlock in order to avoid pointer
|
||||
jumps.
|
||||
|
||||
The cursor position hint is double buffered. The new hint will only
|
||||
take effect when the associated surface gets it pending state applied.
|
||||
See :func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>` for details.
|
||||
|
||||
:param surface_x:
|
||||
surface-local x coordinate
|
||||
:type surface_x:
|
||||
`ArgumentType.Fixed`
|
||||
:param surface_y:
|
||||
surface-local y coordinate
|
||||
:type surface_y:
|
||||
`ArgumentType.Fixed`
|
||||
"""
|
||||
self._marshal(1, surface_x, surface_y)
|
||||
|
||||
@ZwpLockedPointerV1.request(
|
||||
Argument(ArgumentType.Object, interface=WlRegion, nullable=True),
|
||||
)
|
||||
def set_region(self, region: WlRegion | None) -> None:
|
||||
"""Set a new lock region
|
||||
|
||||
Set a new region used to lock the pointer.
|
||||
|
||||
The new lock region is double-buffered. The new lock region will only
|
||||
take effect when the associated surface gets its pending state applied.
|
||||
See :func:`WlSurface.commit()
|
||||
<pywayland.protocol.wayland.WlSurface.commit>` for details.
|
||||
|
||||
For details about the lock region, see wp_locked_pointer.
|
||||
|
||||
:param region:
|
||||
region of surface
|
||||
:type region:
|
||||
:class:`~pywayland.protocol.wayland.WlRegion` or `None`
|
||||
"""
|
||||
self._marshal(2, region)
|
||||
|
||||
|
||||
class ZwpLockedPointerV1Resource(Resource):
|
||||
interface = ZwpLockedPointerV1
|
||||
|
||||
@ZwpLockedPointerV1.event()
|
||||
def locked(self) -> None:
|
||||
"""Lock activation event
|
||||
|
||||
Notification that the pointer lock of the seat's pointer is activated.
|
||||
"""
|
||||
self._post_event(0)
|
||||
|
||||
@ZwpLockedPointerV1.event()
|
||||
def unlocked(self) -> None:
|
||||
"""Lock deactivation event
|
||||
|
||||
Notification that the pointer lock of the seat's pointer is no longer
|
||||
active. If this is a oneshot pointer lock (see
|
||||
wp_pointer_constraints.lifetime) this object is now defunct and should
|
||||
be destroyed. If this is a persistent pointer lock (see
|
||||
wp_pointer_constraints.lifetime) this pointer lock may again reactivate
|
||||
in the future.
|
||||
"""
|
||||
self._post_event(1)
|
||||
|
||||
|
||||
class ZwpLockedPointerV1Global(Global):
|
||||
interface = ZwpLockedPointerV1
|
||||
|
||||
|
||||
ZwpLockedPointerV1._gen_c()
|
||||
ZwpLockedPointerV1.proxy_class = ZwpLockedPointerV1Proxy
|
||||
ZwpLockedPointerV1.resource_class = ZwpLockedPointerV1Resource
|
||||
ZwpLockedPointerV1.global_class = ZwpLockedPointerV1Global
|
|
@ -0,0 +1,221 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright © 2014 Jonas Ådahl
|
||||
# Copyright © 2015 Red Hat Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlPointer
|
||||
from ..wayland import WlRegion
|
||||
from ..wayland import WlSurface
|
||||
from .zwp_confined_pointer_v1 import ZwpConfinedPointerV1
|
||||
from .zwp_locked_pointer_v1 import ZwpLockedPointerV1
|
||||
|
||||
|
||||
class ZwpPointerConstraintsV1(Interface):
|
||||
"""Constrain the movement of a pointer
|
||||
|
||||
The global interface exposing pointer constraining functionality. It
|
||||
exposes two requests: lock_pointer for locking the pointer to its position,
|
||||
and confine_pointer for locking the pointer to a region.
|
||||
|
||||
The lock_pointer and confine_pointer requests create the objects
|
||||
wp_locked_pointer and wp_confined_pointer respectively, and the client can
|
||||
use these objects to interact with the lock.
|
||||
|
||||
For any surface, only one lock or confinement may be active across all
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` objects of the same seat. If
|
||||
a lock or confinement is requested when another lock or confinement is
|
||||
active or requested on the same surface and with any of the
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` objects of the same seat, an
|
||||
'already_constrained' error will be raised.
|
||||
"""
|
||||
|
||||
name = "zwp_pointer_constraints_v1"
|
||||
version = 1
|
||||
|
||||
class error(enum.IntEnum):
|
||||
already_constrained = 1
|
||||
|
||||
class lifetime(enum.IntEnum):
|
||||
oneshot = 1
|
||||
persistent = 2
|
||||
|
||||
|
||||
class ZwpPointerConstraintsV1Proxy(Proxy[ZwpPointerConstraintsV1]):
|
||||
interface = ZwpPointerConstraintsV1
|
||||
|
||||
@ZwpPointerConstraintsV1.request()
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the pointer constraints manager object
|
||||
|
||||
Used by the client to notify the server that it will no longer use this
|
||||
pointer constraints object.
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
@ZwpPointerConstraintsV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpLockedPointerV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Object, interface=WlPointer),
|
||||
Argument(ArgumentType.Object, interface=WlRegion, nullable=True),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def lock_pointer(self, surface: WlSurface, pointer: WlPointer, region: WlRegion | None, lifetime: int) -> Proxy[ZwpLockedPointerV1]:
|
||||
"""Lock pointer to a position
|
||||
|
||||
The lock_pointer request lets the client request to disable movements
|
||||
of the virtual pointer (i.e. the cursor), effectively locking the
|
||||
pointer to a position. This request may not take effect immediately; in
|
||||
the future, when the compositor deems implementation-specific
|
||||
constraints are satisfied, the pointer lock will be activated and the
|
||||
compositor sends a locked event.
|
||||
|
||||
The protocol provides no guarantee that the constraints are ever
|
||||
satisfied, and does not require the compositor to send an error if the
|
||||
constraints cannot ever be satisfied. It is thus possible to request a
|
||||
lock that will never activate.
|
||||
|
||||
There may not be another pointer constraint of any kind requested or
|
||||
active on the surface for any of the
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` objects of the seat of
|
||||
the passed pointer when requesting a lock. If there is, an error will
|
||||
be raised. See general pointer lock documentation for more details.
|
||||
|
||||
The intersection of the region passed with this request and the input
|
||||
region of the surface is used to determine where the pointer must be in
|
||||
order for the lock to activate. It is up to the compositor whether to
|
||||
warp the pointer or require some kind of user interaction for the lock
|
||||
to activate. If the region is null the surface input region is used.
|
||||
|
||||
A surface may receive pointer focus without the lock being activated.
|
||||
|
||||
The request creates a new object wp_locked_pointer which is used to
|
||||
interact with the lock as well as receive updates about its state. See
|
||||
the the description of wp_locked_pointer for further information.
|
||||
|
||||
Note that while a pointer is locked, the
|
||||
:class:`~pywayland.protocol.wayland.WlPointer` objects of the
|
||||
corresponding seat will not emit any :func:`WlPointer.motion()
|
||||
<pywayland.protocol.wayland.WlPointer.motion>` events, but relative
|
||||
motion events will still be emitted via wp_relative_pointer objects of
|
||||
the same seat. :func:`WlPointer.axis()
|
||||
<pywayland.protocol.wayland.WlPointer.axis>` and
|
||||
:func:`WlPointer.button()
|
||||
<pywayland.protocol.wayland.WlPointer.button>` events are unaffected.
|
||||
|
||||
:param surface:
|
||||
surface to lock pointer to
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param pointer:
|
||||
the pointer that should be locked
|
||||
:type pointer:
|
||||
:class:`~pywayland.protocol.wayland.WlPointer`
|
||||
:param region:
|
||||
region of surface
|
||||
:type region:
|
||||
:class:`~pywayland.protocol.wayland.WlRegion` or `None`
|
||||
:param lifetime:
|
||||
lock lifetime
|
||||
:type lifetime:
|
||||
`ArgumentType.Uint`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.pointer_constraints_unstable_v1.ZwpLockedPointerV1`
|
||||
"""
|
||||
id = self._marshal_constructor(1, ZwpLockedPointerV1, surface, pointer, region, lifetime)
|
||||
return id
|
||||
|
||||
@ZwpPointerConstraintsV1.request(
|
||||
Argument(ArgumentType.NewId, interface=ZwpConfinedPointerV1),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Object, interface=WlPointer),
|
||||
Argument(ArgumentType.Object, interface=WlRegion, nullable=True),
|
||||
Argument(ArgumentType.Uint),
|
||||
)
|
||||
def confine_pointer(self, surface: WlSurface, pointer: WlPointer, region: WlRegion | None, lifetime: int) -> Proxy[ZwpConfinedPointerV1]:
|
||||
"""Confine pointer to a region
|
||||
|
||||
The confine_pointer request lets the client request to confine the
|
||||
pointer cursor to a given region. This request may not take effect
|
||||
immediately; in the future, when the compositor deems implementation-
|
||||
specific constraints are satisfied, the pointer confinement will be
|
||||
activated and the compositor sends a confined event.
|
||||
|
||||
The intersection of the region passed with this request and the input
|
||||
region of the surface is used to determine where the pointer must be in
|
||||
order for the confinement to activate. It is up to the compositor
|
||||
whether to warp the pointer or require some kind of user interaction
|
||||
for the confinement to activate. If the region is null the surface
|
||||
input region is used.
|
||||
|
||||
The request will create a new object wp_confined_pointer which is used
|
||||
to interact with the confinement as well as receive updates about its
|
||||
state. See the the description of wp_confined_pointer for further
|
||||
information.
|
||||
|
||||
:param surface:
|
||||
surface to lock pointer to
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param pointer:
|
||||
the pointer that should be confined
|
||||
:type pointer:
|
||||
:class:`~pywayland.protocol.wayland.WlPointer`
|
||||
:param region:
|
||||
region of surface
|
||||
:type region:
|
||||
:class:`~pywayland.protocol.wayland.WlRegion` or `None`
|
||||
:param lifetime:
|
||||
confinement lifetime
|
||||
:type lifetime:
|
||||
`ArgumentType.Uint`
|
||||
:returns:
|
||||
:class:`~pywayland.protocol.pointer_constraints_unstable_v1.ZwpConfinedPointerV1`
|
||||
"""
|
||||
id = self._marshal_constructor(2, ZwpConfinedPointerV1, surface, pointer, region, lifetime)
|
||||
return id
|
||||
|
||||
|
||||
class ZwpPointerConstraintsV1Resource(Resource):
|
||||
interface = ZwpPointerConstraintsV1
|
||||
|
||||
|
||||
class ZwpPointerConstraintsV1Global(Global):
|
||||
interface = ZwpPointerConstraintsV1
|
||||
|
||||
|
||||
ZwpPointerConstraintsV1._gen_c()
|
||||
ZwpPointerConstraintsV1.proxy_class = ZwpPointerConstraintsV1Proxy
|
||||
ZwpPointerConstraintsV1.resource_class = ZwpPointerConstraintsV1Resource
|
||||
ZwpPointerConstraintsV1.global_class = ZwpPointerConstraintsV1Global
|
|
@ -0,0 +1,20 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2015 Sean Vig
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from .zwp_pointer_gesture_hold_v1 import ZwpPointerGestureHoldV1 # noqa: F401
|
||||
from .zwp_pointer_gesture_pinch_v1 import ZwpPointerGesturePinchV1 # noqa: F401
|
||||
from .zwp_pointer_gesture_swipe_v1 import ZwpPointerGestureSwipeV1 # noqa: F401
|
||||
from .zwp_pointer_gestures_v1 import ZwpPointerGesturesV1 # noqa: F401
|
|
@ -0,0 +1,140 @@
|
|||
# This file has been autogenerated by the pywayland scanner
|
||||
|
||||
# Copyright 2015 Sean Vig
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from pywayland.protocol_core import (
|
||||
Argument,
|
||||
ArgumentType,
|
||||
Global,
|
||||
Interface,
|
||||
Proxy,
|
||||
Resource,
|
||||
)
|
||||
from ..wayland import WlSurface
|
||||
|
||||
|
||||
class ZwpPointerGestureHoldV1(Interface):
|
||||
"""A hold gesture object
|
||||
|
||||
A hold gesture object notifies a client about a single- or multi-finger
|
||||
hold gesture detected on an indirect input device such as a touchpad. The
|
||||
gesture is usually initiated by one or more fingers being held down without
|
||||
significant movement. The precise conditions of when such a gesture is
|
||||
detected are implementation-dependent.
|
||||
|
||||
In particular, this gesture may be used to cancel kinetic scrolling.
|
||||
|
||||
A hold gesture consists of two stages: begin and end. Unlike pinch and
|
||||
swipe there is no update stage. There cannot be multiple simultaneous hold,
|
||||
pinch or swipe gestures on a same pointer/seat, how compositors prevent
|
||||
these situations is implementation-dependent.
|
||||
|
||||
A gesture may be cancelled by the compositor or the hardware. Clients
|
||||
should not consider performing permanent or irreversible actions until the
|
||||
end of a gesture has been received.
|
||||
"""
|
||||
|
||||
name = "zwp_pointer_gesture_hold_v1"
|
||||
version = 3
|
||||
|
||||
|
||||
class ZwpPointerGestureHoldV1Proxy(Proxy[ZwpPointerGestureHoldV1]):
|
||||
interface = ZwpPointerGestureHoldV1
|
||||
|
||||
@ZwpPointerGestureHoldV1.request(version=3)
|
||||
def destroy(self) -> None:
|
||||
"""Destroy the hold gesture object
|
||||
"""
|
||||
self._marshal(0)
|
||||
self._destroy()
|
||||
|
||||
|
||||
class ZwpPointerGestureHoldV1Resource(Resource):
|
||||
interface = ZwpPointerGestureHoldV1
|
||||
|
||||
@ZwpPointerGestureHoldV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Object, interface=WlSurface),
|
||||
Argument(ArgumentType.Uint),
|
||||
version=3,
|
||||
)
|
||||
def begin(self, serial: int, time: int, surface: WlSurface, fingers: int) -> None:
|
||||
"""Multi-finger hold begin
|
||||
|
||||
This event is sent when a hold gesture is detected on the device.
|
||||
|
||||
:param serial:
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param time:
|
||||
timestamp with millisecond granularity
|
||||
:type time:
|
||||
`ArgumentType.Uint`
|
||||
:param surface:
|
||||
:type surface:
|
||||
:class:`~pywayland.protocol.wayland.WlSurface`
|
||||
:param fingers:
|
||||
number of fingers
|
||||
:type fingers:
|
||||
`ArgumentType.Uint`
|
||||
"""
|
||||
self._post_event(0, serial, time, surface, fingers)
|
||||
|
||||
@ZwpPointerGestureHoldV1.event(
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Uint),
|
||||
Argument(ArgumentType.Int),
|
||||
version=3,
|
||||
)
|
||||
def end(self, serial: int, time: int, cancelled: int) -> None:
|
||||
"""Multi-finger hold end
|
||||
|
||||
This event is sent when a hold gesture ceases to be valid. This may
|
||||
happen when the holding fingers are lifted or the gesture is cancelled,
|
||||
for example if the fingers move past an implementation-defined
|
||||
threshold, the finger count changes or the hold gesture changes into a
|
||||
different type of gesture.
|
||||
|
||||
When a gesture is cancelled, the client may need to undo state changes
|
||||
caused by this gesture. What causes a gesture to be cancelled is
|
||||
implementation-dependent.
|
||||
|
||||
:param serial:
|
||||
:type serial:
|
||||
`ArgumentType.Uint`
|
||||
:param time:
|
||||
timestamp with millisecond granularity
|
||||
:type time:
|
||||
`ArgumentType.Uint`
|
||||
:param cancelled:
|
||||
1 if the gesture was cancelled, 0 otherwise
|
||||
:type cancelled:
|
||||
`ArgumentType.Int`
|
||||
"""
|
||||
self._post_event(1, serial, time, cancelled)
|
||||
|
||||
|
||||
class ZwpPointerGestureHoldV1Global(Global):
|
||||
interface = ZwpPointerGestureHoldV1
|
||||
|
||||
|
||||
ZwpPointerGestureHoldV1._gen_c()
|
||||
ZwpPointerGestureHoldV1.proxy_class = ZwpPointerGestureHoldV1Proxy
|
||||
ZwpPointerGestureHoldV1.resource_class = ZwpPointerGestureHoldV1Resource
|
||||
ZwpPointerGestureHoldV1.global_class = ZwpPointerGestureHoldV1Global
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue