forked from enlightenment/efl
Compare commits
83 Commits
Author | SHA1 | Date |
---|---|---|
Carsten Haitzler | 15ce7118f8 | |
Carsten Haitzler | b3eac8b838 | |
Carsten Haitzler | 919e646ad3 | |
Dmitri Chudinov | 90e1ab7a39 | |
Carsten Haitzler | 6670a57054 | |
Christopher Michael | 853fb69417 | |
Carsten Haitzler | c142783851 | |
Carsten Haitzler | 869255d068 | |
Carsten Haitzler | 6b3eaf41e7 | |
Carsten Haitzler | 5f3c627661 | |
Carsten Haitzler | bb2a4e8a4f | |
Carsten Haitzler | 241d67116f | |
Carsten Haitzler | e5170acebf | |
Carsten Haitzler | 7a0118e7f1 | |
Carsten Haitzler | 83d598a79c | |
Marcel Hollerbach | c3d1f19ed8 | |
Marcel Hollerbach | af6134aa6c | |
Carsten Haitzler | 54c6516373 | |
Christopher Michael | 0dc787ee6b | |
Carsten Haitzler | 3008e1cd4c | |
Carsten Haitzler | 712c0d5b0d | |
Carsten Haitzler | a4a0dc7a75 | |
Carsten Haitzler | b0232b5e1d | |
Carsten Haitzler | f682178017 | |
Carsten Haitzler | 5f85967da1 | |
Carsten Haitzler | e9e40eb610 | |
Carsten Haitzler | 165589875b | |
Vincent Torri | 11843f1991 | |
Vincent Torri | 329163c290 | |
Carsten Haitzler | ad2276d8c2 | |
Carsten Haitzler | c535a3a6f4 | |
Carsten Haitzler | 7743b17dba | |
Carsten Haitzler | 9490cf857b | |
Carsten Haitzler | bdbac3ae45 | |
Carsten Haitzler | d7521c69dd | |
Vincent Torri | 01fb3233eb | |
Carsten Haitzler | d4ee3a158a | |
Carsten Haitzler | 6fd2852b14 | |
Carsten Haitzler | 5aa9a59c33 | |
Carsten Haitzler | 4ee80acc49 | |
Carsten Haitzler | 1e623d3350 | |
Carsten Haitzler | 1e19806faf | |
Carsten Haitzler | 8d4a2a70cf | |
Carsten Haitzler | d8fe6e9450 | |
Carsten Haitzler | 4ba44bd865 | |
Carsten Haitzler | da0a6f9ed0 | |
Christopher Michael | dc81e925c8 | |
Carsten Haitzler | 41dd584789 | |
Carsten Haitzler | 0f6e1c03f0 | |
Vincent Torri | 0a1ae11586 | |
Carsten Haitzler | 107b19d427 | |
Carsten Haitzler | ac6734d217 | |
Carsten Haitzler | d051e08876 | |
Carsten Haitzler | 0ec15a2ecb | |
Jaehyun Cho | 3756b88cde | |
Carsten Haitzler | d3a1b077fb | |
Carsten Haitzler | d3b8f40ff0 | |
Christopher Michael | e3e5314950 | |
Carsten Haitzler | 5e1023f64b | |
Carsten Haitzler | 33c0b2a82d | |
Carsten Haitzler | 1650f9f723 | |
junsu choi | 7b4c9284a9 | |
junsu choi | ef784708b9 | |
junsu choi | 92f77c5123 | |
junsu choi | 5ebebe4698 | |
junsu choi | 3411c604f2 | |
Carsten Haitzler | 7a674c6a29 | |
junsu choi | a32373195b | |
Carsten Haitzler | ec80ef2ce4 | |
Carsten Haitzler | 6c9784b918 | |
Carsten Haitzler | ebd8632dba | |
Carsten Haitzler | f817041d69 | |
Carsten Haitzler | 4ccbe49b92 | |
Carsten Haitzler | 34a36b49e1 | |
Carsten Haitzler | 29029bc781 | |
Carsten Haitzler | 0d3c7c820d | |
Carsten Haitzler | b1ddbd8408 | |
Carsten Haitzler | 0fe3c751d1 | |
Carsten Haitzler | 95b3fec338 | |
Vincent Torri | 8189c1a529 | |
Carsten Haitzler | e5d3319693 | |
Carsten Haitzler | 40147b36e9 | |
Ali Alzyod | 57b2bedac3 |
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"project_id" : "efl",
|
||||
"projects" : "efl",
|
||||
"conduit_uri" : "https://phab.enlightenment.org/",
|
||||
"phabricator.uri" : "https://phab.enlightenment.org/",
|
||||
"repository.callsign" : "EFL"
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
mkdir build-bootstrap-native
|
||||
meson --prefix=/usr/ --libdir=/usr/lib -Dbuild-examples=false -Dbuild-tests=false -Dbindings=cxx build-bootstrap-native
|
||||
ninja -C build-bootstrap-native install
|
||||
rm -rf build-bootstrap-native
|
||||
ldconfig
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
if [ -d /usr/local/lib64 ] ; then
|
||||
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
|
||||
else
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
fi
|
||||
cd .ci/example
|
||||
|
||||
#build the example
|
||||
mkdir build
|
||||
meson . build
|
||||
ninja -C build all
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
max_size = 500M
|
||||
compression = true
|
||||
compression_level = 1
|
||||
sloppiness = time_macros,include_file_mtime,include_file_ctime,file_macro
|
||||
run_second_cpp = false
|
||||
hash_dir = false
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "codecov" ] || [ "$1" = "coverity" ] || [ "$1" = "mingw" ] || [ "$1" = "release-ready" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "app-compile-test"
|
||||
travis_time_start "app-compile-test"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) .ci/build-example.sh
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
exit 0
|
||||
#FIXME: we don't install efl_ui.pc on osx?
|
||||
export PATH="$(brew --prefix gettext)/bin:$PATH"
|
||||
.ci/build-example.sh
|
||||
fi
|
||||
travis_time_finish "app-compile-test"
|
||||
travis_fold end "app-compile-test"
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "ccache-stats"
|
||||
travis_time_start "ccache-stats"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec $(cat $HOME/cid) ccache -s
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
ccache -s
|
||||
fi
|
||||
travis_time_finish "ccache-stats"
|
||||
travis_fold end "ccache-stats"
|
|
@ -1,114 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "meson"
|
||||
travis_time_start "meson"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
# Why do we need to disable the imf loaders here?
|
||||
OPTS=" -Decore-imf-loaders-disabler=scim,ibus"
|
||||
|
||||
MONO_LINUX_COPTS=" -Dbindings=cxx,mono -Dmono-beta=true"
|
||||
|
||||
WAYLAND_LINUX_COPTS=" -Dwl=true -Ddrm=true -Dopengl=es-egl -Dwl-deprecated=true -Ddrm-deprecated=true"
|
||||
|
||||
# TODO:
|
||||
# - No libelogind package in fedora 30 repo
|
||||
# - Ibus
|
||||
ENABLED_LINUX_COPTS=" -Dfb=true -Dsdl=true -Dbuffer=true -Dbuild-id=travis-build \
|
||||
-Ddebug-threads=true -Dglib=true -Dg-mainloop=true -Dxpresent=true -Dxinput22=true \
|
||||
-Decore-imf-loaders-disabler= \
|
||||
-Dharfbuzz=true -Dpixman=true -Dhyphen=true -Defl-one=true \
|
||||
-Dvnc-server=true -Delua=true -Dbindings=lua,cxx,mono -Delogind=false -Dinstall-eo-files=true -Dphysics=true"
|
||||
|
||||
# Enabled png, jpeg evas loader for in tree edje file builds
|
||||
DISABLED_LINUX_COPTS=" -Daudio=false -Davahi=false -Dx11=false -Dphysics=false -Deeze=false \
|
||||
-Dopengl=none -Deina-magic-debug=false -Dbuild-examples=false -Dbuild-tests=false \
|
||||
-Dcrypto=gnutls -Dglib=false -Dgstreamer=false -Dsystemd=false -Dpulseaudio=false \
|
||||
-Dnetwork-backend=connman -Dxinput2=false -Dtslib=false \
|
||||
-Devas-loaders-disabler=gst,pdf,ps,raw,svg,xcf,bmp,dds,eet,generic,gif,ico,jp2k,json,pmaps,psd,tga,tgv,tiff,wbmp,webp,xpm,avif,heif \
|
||||
-Decore-imf-loaders-disabler=xim,ibus,scim \
|
||||
-Dfribidi=false -Dfontconfig=false \
|
||||
-Dedje-sound-and-video=false -Dembedded-lz4=false -Dlibmount=false -Dv4l2=false \
|
||||
-Delua=false -Dnls=false -Dbindings= -Dlua-interpreter=luajit -Dnative-arch-optimization=false"
|
||||
#evas_filter_parser.c:(.text+0xc59): undefined reference to `lua_getglobal' with interpreter lua
|
||||
|
||||
RELEASE_READY_LINUX_COPTS=" --buildtype=release"
|
||||
|
||||
MINGW_COPTS="--cross-file .ci/cross_toolchain.txt -Davahi=false -Deeze=false -Dsystemd=false \
|
||||
-Dpulseaudio=false -Dx11=false -Dopengl=none -Dlibmount=false \
|
||||
-Devas-loaders-disabler=json,pdf,ps,raw,svg,rsvg,avif,heif \
|
||||
-Dharfbuzz=true -Dpixman=true -Dembedded-lz4=false "
|
||||
|
||||
if [ "$1" = "default" ]; then
|
||||
OPTS="$OPTS $MONO_LINUX_COPTS"
|
||||
elif [ "$1" = "options-enabled" ]; then
|
||||
OPTS="$OPTS $ENABLED_LINUX_COPTS $WAYLAND_LINUX_COPTS"
|
||||
elif [ "$1" = "options-disabled" ]; then
|
||||
OPTS="$OPTS $DISABLED_LINUX_COPTS"
|
||||
elif [ "$1" = "wayland" ]; then
|
||||
OPTS="$OPTS $WAYLAND_LINUX_COPTS"
|
||||
elif [ "$1" = "release-ready" ]; then
|
||||
OPTS="$OPTS $RELEASE_READY_LINUX_COPTS"
|
||||
elif [ "$1" = "coverity" ]; then
|
||||
travis_fold start "cov-download"
|
||||
travis_time_start "cov-download"
|
||||
OPTS="$OPTS $WAYLAND_LINUX_COPTS"
|
||||
docker exec --env COVERITY_SCAN_TOKEN=$COVERITY_SCAN_TOKEN $(cat $HOME/cid) sh -c '.ci/coverity-tools-install.sh'
|
||||
travis_time_finish "cov-download"
|
||||
travis_fold end "cov-download"
|
||||
elif [ "$1" = "mingw" ]; then
|
||||
travis_fold start "cross-native"
|
||||
travis_time_start "cross-native"
|
||||
OPTS="$OPTS $MINGW_COPTS"
|
||||
docker exec $(cat $HOME/cid) sh -c '.ci/bootstrap-efl-native-for-cross.sh'
|
||||
travis_time_finish "cross-native"
|
||||
travis_fold end "cross-native"
|
||||
fi
|
||||
|
||||
if [ "$1" = "asan" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" --env CFLAGS="-O0 -g" --env CXXFLAGS="-O0 -g" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS -Db_sanitize=address"
|
||||
elif [ "$1" = "mingw" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env PKG_CONFIG_PATH="/ewpi-64-install/lib/pkgconfig/" \
|
||||
$(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
elif [ "$1" = "coverity" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CFLAGS="-fdirectives-only" --env CC="gcc" --env CXX="g++"\
|
||||
--env CXXFLAGS="-fdirectives-only" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
else
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" --env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
fi
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
# Prepare OSX env for build
|
||||
mkdir -p ~/Library/LaunchAgents
|
||||
ln -sfv /usr/local/opt/d-bus/*.plist ~/Library/LaunchAgents
|
||||
launchctl load ~/Library/LaunchAgents/org.freedesktop.dbus-session.plist
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
|
||||
export CFLAGS="-I/usr/local/opt/openssl/include -frewrite-includes $CFLAGS"
|
||||
export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS"
|
||||
LIBFFI_VER=$(brew list --versions libffi|head -n1|cut -d' ' -f2)
|
||||
export CC="ccache gcc"
|
||||
#force using system zlib, which doesn't have a pc file provided because that's the smartest thing possible
|
||||
zlib_vers=$(grep ZLIB_VERSION /usr/include/zlib.h|head -n1|awk '{print $3}'|cut -d'"' -f2)
|
||||
sed -iE "s/REPLACE_THIS/$zlib_vers/" .ci/zlib.pc
|
||||
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:/usr/local/Cellar/libffi/$LIBFFI_VER/lib/pkgconfig:$(pwd)/.ci"
|
||||
mkdir build && meson build -Dopengl=full -Decore-imf-loaders-disabler=scim,ibus -Dx11=false -Davahi=false -Deeze=false -Dsystemd=false -Dnls=false -Dcocoa=true -Dgstreamer=false -Dbuild-tests=false
|
||||
else # Native Ubuntu Linux Travis builds (non-docker)
|
||||
OPTS=" -Decore-imf-loaders-disabler=scim,ibus"
|
||||
|
||||
if [ "$TRAVIS_CPU_ARCH" = "ppc64le" ]; then
|
||||
OPTS="$OPTS -Dbindings="
|
||||
elif [ "$TRAVIS_CPU_ARCH" = "s390x" ] ; then
|
||||
OPTS="$OPTS -Dbindings= -Delua=false -Dlua-interpreter=lua"
|
||||
fi
|
||||
if [ "$1" = "codecov" ]; then
|
||||
OPTS="$OPTS -Db_coverage=true"
|
||||
fi
|
||||
mkdir build && meson build $OPTS
|
||||
fi
|
||||
travis_time_finish "meson"
|
||||
travis_fold end "meson"
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "exactness" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "exactness"
|
||||
travis_time_start "exactness"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) sh -c 'git -C /exactness-elm-data pull'
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64 --env EINA_LOG_LEVELS_GLOB=eina_*:0,ecore*:0,efreet*:0,eldbus:0,elementary:0 $(cat $HOME/cid) exactness -j 20 -b /exactness-elm-data/default-profile -p /exactness-elm-data/default-profile/ci-fedora32-tests.txt
|
||||
fi
|
||||
travis_time_finish "exactness"
|
||||
travis_fold end "exactness"
|
|
@ -1,17 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "default" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
travis_fold start "ninja-benchmark"
|
||||
travis_time_start "ninja-benchmark"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env ELM_ENGINE=buffer $(cat $HOME/cid) ninja benchmark -C build
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja benchmark -C build
|
||||
fi
|
||||
travis_time_finish "ninja-benchmark"
|
||||
travis_fold end "ninja-benchmark"
|
|
@ -1,41 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] || [ "$1" = "mingw" ] || [ "$1" = "coverity" ] || [ "$1" = "options-enabled" ] || [ "$1" = "options-disabled" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
NUM_TRIES=5
|
||||
|
||||
if [ "$1" = "codecov" ] ; then
|
||||
travis_fold start "codecov"
|
||||
travis_time_start "codecov"
|
||||
for tries in $(seq 1 ${NUM_TRIES}); do
|
||||
export EFL_TEST_ECORE_CON_IPV6=1
|
||||
meson test -t 120 -C build --wrapper dbus-launch && break
|
||||
cat build/meson-logs/testlog-dbus-launch.txt
|
||||
if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi
|
||||
false
|
||||
done
|
||||
curl -s https://codecov.io/bash | bash -s -
|
||||
travis_time_finish "codecov"
|
||||
travis_fold end "codecov"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-test"
|
||||
travis_time_start "ninja-test"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
for tries in $(seq 1 ${NUM_TRIES}); do
|
||||
(docker exec --env EINA_LOG_BACKTRACE="0" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) meson test -t 120 -C build --wrapper dbus-launch ) && break
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) cat build/meson-logs/testlog-dbus-launch.txt
|
||||
if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi
|
||||
false
|
||||
done
|
||||
fi
|
||||
ret=$?
|
||||
travis_time_finish "ninja-test"
|
||||
travis_fold end "ninja-test"
|
||||
|
||||
exit $ret
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "release-ready" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-dist"
|
||||
travis_time_start "ninja-dist"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" \
|
||||
--env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) dbus-launch ninja -C build dist || \
|
||||
(sudo cat efl-*/_build/sub/src/test-suite.log; false)
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build dist
|
||||
fi
|
||||
travis_time_finish "ninja-dist"
|
||||
travis_fold end "ninja-dist"
|
|
@ -1,20 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] || [ "$1" = "coverity" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-install"
|
||||
travis_time_start "ninja-install"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build install
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build install
|
||||
else
|
||||
sudo ninja -C build install
|
||||
fi
|
||||
travis_time_finish "ninja-install"
|
||||
travis_fold end "ninja-install"
|
|
@ -1,31 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja"
|
||||
travis_time_start "ninja"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
if [ "$1" = "coverity" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env PATH="/src/cov-analysis-linux64-2019.03/bin:$PATH" $(cat $HOME/cid) sh -c "cov-build --dir cov-int ninja -C build"
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) sh -c "tar caf efl-$(git rev-parse --short HEAD).xz cov-int"
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env COVERITY_SCAN_TOKEN=$COVERITY_SCAN_TOKEN $(cat $HOME/cid) sh -c ".ci/coverity-upload.sh"
|
||||
else
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build
|
||||
if [ "$1" = "options-enabled" ]; then # we have efl-one on and want to check it after build
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) python scripts/test-efl-one.py build
|
||||
fi
|
||||
fi
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
latest_brew_python3_bin="$(ls -1d /usr/local/Cellar/python/3.*/bin | sort -n | tail -n1)"
|
||||
export PATH="${latest_brew_python3_bin}${PATH:+:}${PATH}"
|
||||
export PATH="$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build
|
||||
else
|
||||
ninja -C build
|
||||
fi
|
||||
travis_time_finish "ninja"
|
||||
travis_fold end "ninja"
|
|
@ -1,17 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "ccache-setup"
|
||||
travis_time_start "ccache-setup"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec $(cat $HOME/cid) sh -c ".ci/docker-ccache-setup.sh $1"
|
||||
docker exec $(cat $HOME/cid) ccache -pz
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
cp .ci/ccache.conf ~/.ccache
|
||||
sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
|
||||
echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
|
||||
ccache -pz
|
||||
fi
|
||||
travis_time_finish "ccache-setup"
|
||||
travis_fold end "ccache-setup"
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
wget https://scan.coverity.com/download/linux64 --post-data="token=$COVERITY_SCAN_TOKEN&project=Enlightenment+Foundation+Libraries" -O coverity_tool.tgz
|
||||
tar xzf coverity_tool.tgz
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
curl --form token=$COVERITY_SCAN_TOKEN \
|
||||
--form email=stefan@datenfreihafen.org \
|
||||
--form file=@efl-$(git rev-parse --short HEAD).xz \
|
||||
--form version=$(git rev-parse --short HEAD) \
|
||||
--form description="Submission from Travis CI" \
|
||||
https://scan.coverity.com/builds?project=Enlightenment+Foundation+Libraries
|
|
@ -1,20 +0,0 @@
|
|||
[binaries]
|
||||
c = ['ccache', 'x86_64-w64-mingw32-gcc']
|
||||
cpp = ['ccache', 'x86_64-w64-mingw32-g++']
|
||||
ar = 'x86_64-w64-mingw32-ar'
|
||||
ranlib = 'x86_64-w64-mingw32-ranlib'
|
||||
strip = 'x86_64-w64-mingw32-strip'
|
||||
windres = 'x86_64-w64-mingw32-windres'
|
||||
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
c_args = ['-D_WIN32_WINNT=0x0601', '-I/ewpi-64-install/include', '-O2', '-pipe', '-march=x86-64']
|
||||
c_link_args = ['-L/ewpi-64-install/lib', '-s']
|
||||
cpp_args = ['-D_WIN32_WINNT=0x0601', '-I/ewpi-64-install/include', '-O2', '-pipe', '-march=x86-64']
|
||||
cpp_link_args = ['-L/ewpi-64-install/lib', '-s']
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
CI_BUILD_TYPE="$1"
|
||||
|
||||
cp .ci/ccache.conf ~/.ccache
|
||||
|
||||
sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
|
||||
echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
|
|
@ -1,13 +0,0 @@
|
|||
project(
|
||||
'efl-example', 'c',
|
||||
version : '0.0.1',
|
||||
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.38.0')
|
||||
|
||||
eina = dependency('eina', version : '>=1.20.99')
|
||||
efl = dependency('efl-ui', version : '>=1.20.99')
|
||||
elm = dependency('elementary', version : '>=1.20.99')
|
||||
|
||||
inc = include_directories('.')
|
||||
subdir('src')
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#define EFL_BETA_API_SUPPORT 1
|
||||
#define EFL_NOLEGACY_API_SUPPORT
|
||||
#include <Efl_Ui.h>
|
||||
|
||||
|
||||
EAPI_MAIN void
|
||||
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
EFL_MAIN()
|
|
@ -1,12 +0,0 @@
|
|||
src = files([
|
||||
'main.c',
|
||||
])
|
||||
|
||||
deps = [eina, efl, elm]
|
||||
|
||||
executable('efl_example', src,
|
||||
dependencies : deps,
|
||||
include_directories : inc,
|
||||
install : true
|
||||
)
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "bionic-deps"
|
||||
travis_time_start "bionic-deps"
|
||||
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y build-essential autoconf automake autopoint doxygen check libharfbuzz-dev libpng-dev libudev-dev libwebp-dev libssl-dev libfribidi-dev libcogl-gles2-dev libgif-dev libtiff5-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libdbus-1-dev libmount-dev libblkid-dev libpulse-dev libxrandr-dev libxtst-dev libxcursor-dev libxcomposite-dev libxinerama-dev libxkbfile-dev libbullet-dev libsndfile1-dev libraw-dev libspectre-dev libpoppler-cpp-dev libpam0g-dev liblz4-dev faenza-icon-theme gettext git imagemagick libasound2-dev libbluetooth-dev libfontconfig1-dev libfreetype6-dev libibus-1.0-dev libiconv-hook-dev libjpeg-dev libjpeg-turbo8-dev libpoppler-dev libpoppler-private-dev libproxy-dev librsvg2-dev libscim-dev libsystemd-dev libtool libudisks2-dev libunibreak-dev libxcb-keysyms1-dev libxss-dev linux-tools-common libcurl4-openssl-dev systemd ccache git binutils-gold python3-pip ninja-build dbus-x11 libavahi-client-dev python3-setuptools libopenjp2-7-dev libc6-dev libpcre3-dev
|
||||
# s390x on Ubuntu Bionic on Travis does not have a luajit package and fails install, use lua5.1
|
||||
if [ "$TRAVIS_CPU_ARCH" = "s390x" ] ; then
|
||||
sudo apt-get install -y liblua5.1-dev
|
||||
else
|
||||
sudo apt-get install -y luajit libluajit-5.1-dev
|
||||
fi
|
||||
sudo pip3 install meson==0.54.3
|
||||
|
||||
travis_time_finish "bionic-deps"
|
||||
travis_fold end "bionic-deps"
|
13
.ci/zlib.pc
13
.ci/zlib.pc
|
@ -1,13 +0,0 @@
|
|||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=/usr/lib64
|
||||
sharedlibdir=${libdir}
|
||||
includedir=/usr/include
|
||||
|
||||
Name: zlib
|
||||
Description: zlib compression library
|
||||
Version: REPLACE_THIS
|
||||
|
||||
Requires:
|
||||
Libs: -L${libdir} -L${sharedlibdir} -lz
|
||||
Cflags: -I${includedir}
|
|
@ -1 +0,0 @@
|
|||
geninfo_auto_base=1
|
|
@ -1,7 +0,0 @@
|
|||
extraction:
|
||||
python:
|
||||
python_setup:
|
||||
version: 3
|
||||
queries:
|
||||
-
|
||||
exclude: cpp/fixme-comment
|
153
.travis.yml
153
.travis.yml
|
@ -1,153 +0,0 @@
|
|||
version: ~> 1.0
|
||||
|
||||
language: c
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/cachedir
|
||||
- $HOME/.ccache
|
||||
dist: bionic
|
||||
|
||||
osx_image: xcode11.3
|
||||
|
||||
addons:
|
||||
homebrew:
|
||||
packages:
|
||||
- gettext
|
||||
- check
|
||||
- bullet
|
||||
- dbus
|
||||
- fontconfig
|
||||
- freetype
|
||||
- fribidi
|
||||
- gst-plugins-good
|
||||
- gstreamer
|
||||
- luajit
|
||||
- openssl
|
||||
- webp
|
||||
- libsndfile
|
||||
- glib
|
||||
- libspectre
|
||||
- libraw
|
||||
- librsvg
|
||||
- poppler
|
||||
- lz4
|
||||
- pulseaudio
|
||||
- ccache
|
||||
- ninja
|
||||
- python3
|
||||
- libffi
|
||||
update: true
|
||||
|
||||
env:
|
||||
global:
|
||||
- EIO_MONITOR_POLL=1
|
||||
- CC="ccache gcc"
|
||||
- CXX="ccache g++"
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32-mingw CI_BUILD_TYPE=mingw
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=options-enabled
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=options-disabled
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=wayland
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=default
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=release-ready
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Ubuntu2004
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Ubuntu1910
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Debian103
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora31 CI_BUILD_TYPE=coverity
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=asan
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: CI_BUILD_TYPE=codecov
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: arm64
|
||||
env: CI_BUILD_TYPE=default
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: ppc64le
|
||||
env: CI_BUILD_TYPE=no-bindings
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: s390x
|
||||
env: CI_BUILD_TYPE=no-bindings
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_install:
|
||||
- export -f travis_nanoseconds
|
||||
- export -f travis_fold
|
||||
- export -f travis_time_start
|
||||
- export -f travis_time_finish
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||
rm -rf $HOME/Library/Caches/Homebrew
|
||||
rm -rf $HOME/cachedir/Homebrew/Homebrew
|
||||
mv $HOME/cachedir/Homebrew $HOME/Library/Caches/Homebrew
|
||||
pip3 install meson
|
||||
fi
|
||||
|
||||
before_script:
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$DISTRO" != "" ]]; then
|
||||
docker pull stefanschmidt1/ci-support-files:$DISTRO
|
||||
docker version
|
||||
docker run --cap-add SYS_PTRACE --cidfile $HOME/cid -t -d -v `pwd`:/src -v $HOME/.ccache:/root/.ccache -w /src stefanschmidt1/ci-support-files:$DISTRO bash
|
||||
fi
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$DISTRO" == "" ]]; then
|
||||
.ci/ubuntu-bionic-install-deps.sh
|
||||
fi
|
||||
- .ci/ci-ccache-stats.sh
|
||||
|
||||
script:
|
||||
- .ci/ci-configure.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-setup-ccache.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-install.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-benchmark.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-check.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-exactness.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-distcheck.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-build-test.sh "$CI_BUILD_TYPE"
|
||||
|
||||
before_cache:
|
||||
- .ci/ci-ccache-stats.sh
|
||||
- |
|
||||
mkdir -p $HOME/cachedir
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then
|
||||
sudo chown travis:travis $HOME/.ccache
|
||||
else
|
||||
mv $HOME/Library/Caches/Homebrew $HOME/cachedir/Homebrew
|
||||
fi
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#edevelop"
|
||||
on_success: change
|
||||
on_failure: always
|
||||
template:
|
||||
- "TravisCI build %{build_number} in branch %{branch}: %{result} - %{message} (%{elapsed_time})"
|
||||
- "Commit: %{commit_subject} (%{commit}) from %{author}"
|
||||
- "Change view : %{compare_url}"
|
||||
- "Build details : %{build_url}"
|
|
@ -1,10 +0,0 @@
|
|||
Gesture Layer 2 (all the icons in data/elementary/images/g_layer):
|
||||
Illustrations provided by GestureWorks® (www.gestureworks.com)
|
||||
Creative Commons Attribution Sharealike license v 3.0.
|
||||
http://gestureworks.com/
|
||||
http://gestureworks.com/icons-fonts
|
||||
http://creativecommons.org/licenses/by-sa/3.0/us/
|
||||
|
||||
EFL Bluish-X icons theme (all the icons in data/elementary/themes/fdo):
|
||||
GNU General Public License v3
|
||||
see the README in data/elementary/themes/fdo for more info
|
59
INSTALL
59
INSTALL
|
@ -1,59 +0,0 @@
|
|||
** COMPILING and INSTALLING **
|
||||
------------------------------
|
||||
|
||||
Meson is the build system used for this project. For more information please
|
||||
see:
|
||||
|
||||
http://mesonbuild.com
|
||||
|
||||
----
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
For meson build generic options:
|
||||
|
||||
meson --help
|
||||
|
||||
For a list of project specific options supported:
|
||||
|
||||
cat meson_options.txt
|
||||
|
||||
To set 1 or more project specific options:
|
||||
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
|
||||
To display current configuration:
|
||||
|
||||
meson configure build
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
|
||||
meson . build
|
||||
|
||||
** QUICK AND DIRTY HELP **
|
||||
--------------------------
|
||||
|
||||
How clean out the build and config and start fresh:
|
||||
|
||||
rm -rf build
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
|
||||
ninja -C build dist
|
||||
|
||||
How to change prefix:
|
||||
|
||||
meson --prefix=/path/to/prefix . build
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
|
||||
ninja -C build -v
|
|
@ -1,10 +1,12 @@
|
|||
EFL
|
||||
===
|
||||
![EFL](/data/readme/efl.png)
|
||||
# EFL
|
||||
|
||||
******************************************************************************
|
||||
FOR ANY ISSUES PLEASE EMAIL:
|
||||
enlightenment-devel@lists.sourceforge.net
|
||||
******************************************************************************
|
||||
-----
|
||||
|
||||
*Please report bugs/issues at*
|
||||
[git.enlightenment.org](https://git.enlightenment.org/enlightenment/efl/issues)
|
||||
|
||||
-----
|
||||
|
||||
EFL is a collection of libraries for handling many common tasks a
|
||||
developer may have such as data structures, communication, rendering,
|
||||
|
@ -24,23 +26,21 @@ Config files installed to help developers build against EFL.
|
|||
|
||||
For more documentation please see:
|
||||
|
||||
https://www.enlightenment.org/docs
|
||||
[www.enlightenment.org/doc](https://www.enlightenment.org/docs)
|
||||
|
||||
PLATFORMS
|
||||
---------
|
||||
## Platforms
|
||||
|
||||
EFL is primarily developerd on Linux (GNU/Linux) and should work on
|
||||
EFL is primarily developed on Linux (GNU/Linux) and should work on
|
||||
most distributions as long as dependencies are provided. It has been
|
||||
compiled and run also on Windows (using MSYS2 + mingw-w64 - please see
|
||||
https://phab.enlightenment.org/w/windows/), Mac OS X, FreeBSD and
|
||||
NetBSD.
|
||||
[Phabricator windows docs](https://phab.enlightenment.org/w/windows)),
|
||||
Mac OS X, FreeBSD and NetBSD.
|
||||
|
||||
COMPONENTS
|
||||
----------
|
||||
## Components
|
||||
|
||||
**Ecore:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is the core main-loop, system events and execution layer. This
|
||||
handles running the main loop, integrating with external data and
|
||||
|
@ -48,31 +48,25 @@ timing sources (the system clock, file descriptors, system signals),
|
|||
and producing an event queue, walking that queue and dispatching
|
||||
events to appropriate callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore Audio:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library provides an API for audio playback and recording. It uses
|
||||
pulse audio underneath to handle mixing and policies. The API for this
|
||||
should not be considered stable right now because it relies on EO and
|
||||
EO is not considered finalized yet.
|
||||
|
||||
|
||||
|
||||
**Ecore Cocoa:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
||||
Mac porting.
|
||||
|
||||
|
||||
|
||||
**Ecore Con:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This provides a completely event-based TCP/UDP and Unix domain socket
|
||||
API that integrates with the main-loop. This means no blocking to send
|
||||
|
@ -83,11 +77,9 @@ verification, CURL wrapping for HTTP connection usage (GETs, POSTs
|
|||
etc.), asynchronous DNS lookups and provides the ability to also be a
|
||||
server, not just a client, with the same event-based API.
|
||||
|
||||
|
||||
|
||||
**Ecore Evas:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This acts as glue between the display target (X11, Wayland,
|
||||
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
||||
|
@ -96,69 +88,55 @@ input events (Keyboard, Mouse, Multi-touch) into Evas, which then
|
|||
selects the target object and calls the callbacks. It also provides
|
||||
wrappers/glue for manipulating the Window/Surface.
|
||||
|
||||
|
||||
|
||||
**Ecore Fb:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This provides virtual terminal allocation, access and handling,
|
||||
frame buffer information, raw input handling for keyboard, mouse and
|
||||
touch (via tslib).
|
||||
|
||||
|
||||
|
||||
**Ecore File:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This provides file access convenience APIs for doing simple file
|
||||
operations like renames, copies, listing directories and more. It also
|
||||
supports file change monitoring and URL downloads.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is an input method abstraction framework to allow EFL to talk to
|
||||
things like SCIM, IBus, Wayland and XIM. This allows for complex text
|
||||
entry in languages such as Chinese, Japanese and Korean.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF Evas:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library glues Input method support from Ecore IMF and Evas
|
||||
together.
|
||||
|
||||
|
||||
|
||||
**Ecore Input:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This acts as a generic input layer where multiple display systems can
|
||||
post events in the same format to the event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Input Evas:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This Routes events from Ecore Input into a given Evas canvas which
|
||||
will then route the event further to the destination object and
|
||||
callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore IPC:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This acts as a layer on top of Ecore Con which handles entire IPC
|
||||
message packets, dealing with header delta compression and
|
||||
|
@ -167,59 +145,39 @@ go as a single IPC message, regardless of payload data size. The
|
|||
entire API is event based almost exactly like Ecore Con and thus it
|
||||
supports all the transport layers Ecore Con supports.
|
||||
|
||||
|
||||
|
||||
|
||||
**Ecore SDL:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This acts as a wrapper/glue around SDL to handle SDL Windows as well
|
||||
as input events from SDL and tie them to the Ecore main-loop and event
|
||||
queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Wayland:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is a glue/wrapper library to interface EFL to Wayland libraries
|
||||
to tie them into the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Win32:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
||||
the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore WinCE:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue/wrapper around Windows CE APIs to tie them into the
|
||||
Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore X:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is a library to wrap/deal with Xlib make dealing with X11 less painful
|
||||
and less footwork as well as being glue to tie these into the Ecore main-loop
|
||||
and event queue.
|
||||
|
||||
|
||||
|
||||
**Edje:**
|
||||
|
||||
//BSD 2-Clause license// (except the epp binary which is GPLv2)
|
||||
*BSD 2-Clause license* (except the epp binary which is GPLv2)
|
||||
|
||||
This is a graphics event, input, theme, animation and theme
|
||||
abstraction library used to place many UI/UX elements into data files
|
||||
|
@ -231,11 +189,9 @@ data files managed by Eet). These "edj" files are fully portable and
|
|||
can work on any OS/Architecture just like a JPEG or PNG might be
|
||||
portable.
|
||||
|
||||
|
||||
|
||||
**Eet:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library is a data storage, encoding and decoding library
|
||||
designed to be extremely compact, fast and easy to use. It can take
|
||||
|
@ -250,29 +206,23 @@ Terminology. It supports encryption of data too via SSL, signing of
|
|||
files, as well as various compression techniques. It also supports
|
||||
encoding and decoding of image data in lossless or lossy form.
|
||||
|
||||
|
||||
|
||||
**Eeze:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library acts as an abstraction to discovering hardware interfaces
|
||||
for sensors as well as removable media and much more.
|
||||
|
||||
|
||||
|
||||
**EFL:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is just some core common header data like a common version number
|
||||
for EFL and how to expose the EO API.
|
||||
|
||||
|
||||
|
||||
**Efreet:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library provides code for handling Freedesktop.org standards such
|
||||
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
||||
|
@ -280,11 +230,9 @@ a central daemon to handle monitoring for changes that the library
|
|||
talks to, and the daemon handles updating local cache files the
|
||||
library reads.
|
||||
|
||||
|
||||
|
||||
**Eina:**
|
||||
|
||||
//LGPL v2 license//
|
||||
*LGPL v2 license*
|
||||
|
||||
This library provides low-level routines for common things like linked
|
||||
lists, hash tables, growable arrays, basic string buffers, shared
|
||||
|
@ -293,29 +241,23 @@ memory pools, copy-on-write segments, iterators, matrices, general
|
|||
data models, red/black trees, quad-trees, a simple SAX XML parser and
|
||||
more.
|
||||
|
||||
|
||||
|
||||
**EIO:**
|
||||
|
||||
//LGPL v2 license//
|
||||
*LGPL v2 license*
|
||||
|
||||
This is an asynchronous I/O library for doing disk I/O without blocking.
|
||||
|
||||
|
||||
|
||||
**ElDBus:**
|
||||
|
||||
//LGPL v2 license//
|
||||
*LGPL v2 license*
|
||||
|
||||
This is a DBus access library to allow you to create DBus services as
|
||||
well as clients. This glues in DBus into the main-loop so all access is
|
||||
asynchronous.
|
||||
|
||||
|
||||
|
||||
**Embryo:**
|
||||
|
||||
//Small license (same as ZLib license)//
|
||||
*Small license (same as ZLib license)*
|
||||
|
||||
This is a small C-like language compiler and byte-code interpreter
|
||||
library. This is used for scripting in Edje. The code is based on
|
||||
|
@ -323,11 +265,9 @@ original source from the Pawn/Small Language but has been made
|
|||
portable (endianness issues fixed) and 64bit issues fixed, with the
|
||||
runtime library being refactored to be extremely small.
|
||||
|
||||
|
||||
|
||||
**Emotion:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is a wrapper around Gstreamer 1.x pluggable decoder libraries
|
||||
This glues in the decoder library, and its output into a smart Evas object
|
||||
|
@ -335,11 +275,9 @@ that will display the playback for you as the video plays, as well as
|
|||
providing higher level controls to seek, play, pause and query the stream
|
||||
regardless of the back-end used.
|
||||
|
||||
|
||||
|
||||
**EO:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is a core object system API that EFL 1.8 and on depend on. The
|
||||
API is not finalized, so do not depend on it yet in EFL 1.8, but
|
||||
|
@ -350,43 +288,35 @@ strong and weak references, auto-deletion of child objects, unifies
|
|||
callback handling with a single path, and also abstracts object
|
||||
pointers to be indirect table lookups for increased safety at runtime.
|
||||
|
||||
|
||||
|
||||
**EPhysics:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library provides a wrapper around the Bullet physics library,
|
||||
allowing for it to be linked directly with Evas objects and control
|
||||
their behavior as if they were real physical objects. This is now
|
||||
disabled by default as it's rarely if ever used by anything.
|
||||
|
||||
|
||||
|
||||
**Ethumb:**
|
||||
|
||||
//LGPL v2 license//
|
||||
*LGPL v2 license*
|
||||
|
||||
This library provides core API for a thumbnailing daemon as well as
|
||||
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
||||
off thumbnail generation to a central location to be done
|
||||
asynchronously.
|
||||
|
||||
|
||||
|
||||
**Ethumb Client:**
|
||||
|
||||
//LGPL v2 license//
|
||||
*LGPL v2 license*
|
||||
|
||||
This is the client-side part of Ethumb that provides an API for
|
||||
clients to request the Ethumb thumbnailer to generate or find cached
|
||||
thumbnails of files.
|
||||
|
||||
|
||||
|
||||
**Evas:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This is the core rendering and scene graph abstraction library for
|
||||
EFL. It manages a stateful 2D scene graph that defines the entire
|
||||
|
@ -395,124 +325,108 @@ display systems like X11, Windows, Wayland, Frame-buffer etc. and via
|
|||
many rendering APIs like OpenGL, OpenGL-ES 2, and pure software
|
||||
implementations that are fast and accurate.
|
||||
|
||||
|
||||
|
||||
**Evil:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
*BSD 2-Clause license*
|
||||
|
||||
This library acts as a porting library for Windows to provide missing
|
||||
libc calls not in Mingw32 that EFL needs.
|
||||
libc calls not in Mingw32 that EFL needs. It is used internally and
|
||||
no symbol is public.
|
||||
|
||||
-----
|
||||
|
||||
**Heif:**
|
||||
|
||||
//LGPL v3 license//
|
||||
|
||||
The license doesnt affect efl or apps using efl, but gpl3 or lgpl3
|
||||
affects the entire os requiring any gpl/lgpl3 component be
|
||||
user-replacable.
|
||||
The end user must be able to modify the libheif code and still be
|
||||
able to use the efl.
|
||||
|
||||
|
||||
COMPILING AND INSTALLING
|
||||
------------------------
|
||||
|
||||
For sample configuration options please look in the ./confs/ directory
|
||||
for scripts that pass in commonly used options.
|
||||
|
||||
See the INSTALL file: https://git.enlightenment.org/core/efl.git/tree/INSTALL
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
EFL requires a C and C++ compiler by default. C++ exists mostly to interface
|
||||
to C++ libraries like Bullet and our C++ bindings.
|
||||
|
||||
Required by default:
|
||||
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* luajit (lua 5.1 or 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* luajit (lua 5.1 or 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
|
||||
Wayland support:
|
||||
|
||||
### Wayland support
|
||||
|
||||
You may also want wayland support when on Linux. This enables support
|
||||
for EFL to trget wayland support for client applications. To do this
|
||||
for EFL to target wayland support for client applications. To do this
|
||||
supply:
|
||||
``` sh
|
||||
-Dwl=true
|
||||
```
|
||||
|
||||
-Dwl=true
|
||||
|
||||
Framebuffer support:
|
||||
|
||||
This requires linux frame-buffer support, headers etc. This supports
|
||||
basic frame-buffers like /dev/fb as well as input via /dev/input for
|
||||
keyboards and mice in a basic way. Enable this with:
|
||||
|
||||
-Dfb=true
|
||||
### Framebuffer support
|
||||
|
||||
For more modern framebuffer support you may want drm/kms rendering
|
||||
support so enable this. This is what you also want for wayland
|
||||
compositor support in enlightenment as it will want to be able to
|
||||
render to a moder framebuffer tarbet with atomic buffer swapping. To
|
||||
render to a modern framebuffer target with atomic buffer swapping. To
|
||||
do this provide:
|
||||
``` sh
|
||||
-Ddrm=true
|
||||
```
|
||||
|
||||
-Ddrm=true
|
||||
Legacy fbcon support also exists, but you probably no longer want to
|
||||
use this as it is not maintained anymore. This supports basic frame-buffers
|
||||
like /dev/fb as well as input via /dev/input for keyboards and mice in a
|
||||
basic way. Enable this with:
|
||||
``` sh
|
||||
-Dfb=true
|
||||
```
|
||||
|
||||
You may want to change the install prefix for EFL with:
|
||||
|
||||
--prefix=/path/to/prefix
|
||||
``` sh
|
||||
--prefix=/path/to/prefix
|
||||
```
|
||||
|
||||
The default prefix if not given is "/usr/local". Many people like to
|
||||
use prefixes like /opt/e or /opt/efl or /home/USERNAME/software etc.
|
||||
|
||||
COMPILER FLAGS
|
||||
--------------
|
||||
### Compiler flags
|
||||
|
||||
You can affect compilation optimization, debugging and other factors
|
||||
by setting your CFLAGS environment variable (and CXXFLAGS). Be aware
|
||||
that to ensure ABI stability you should use the exact same CFLAGS /
|
||||
CXXFLAGS for all the build of EFL and any applications/libraries that
|
||||
by setting your `CFLAGS` environment variable (and `CXXFLAGS`). Be aware
|
||||
that to ensure ABI stability you should use the exact same `CFLAGS` /
|
||||
`CXXFLAGS` for all the build of EFL and any applications/libraries that
|
||||
depend on them.
|
||||
|
||||
There are many other configure options that can be used, but in
|
||||
|
@ -525,13 +439,108 @@ these without understanding the implications. The defaults
|
|||
have been carefully considered to provide full functionality so users
|
||||
will not be missing anything.
|
||||
|
||||
|
||||
CRYPTOGRAPHY
|
||||
------------
|
||||
### Cryptography
|
||||
|
||||
EFL officially offers openssl or gnutls as cryptography backends. By
|
||||
default it uses "openssl" to do signature, cipher and related. Alternatively
|
||||
one can use "gnutls" (some distros are strict about licenses and want gnutls
|
||||
instead of openssl) You can switch to gnutls with:
|
||||
``` sh
|
||||
-Dcrypto=gnutls
|
||||
```
|
||||
|
||||
-Dcrypto=gnutls
|
||||
-----
|
||||
|
||||
## Compiling and Installing
|
||||
|
||||
Meson is the build system used for this project. For more information
|
||||
please see [mesonbuild.com](https://mesonbuild.com)
|
||||
|
||||
You will need normal build tooling installed such as a compiler (gcc
|
||||
or clang for example), pkg-config, ninja, any relevant package-dev or
|
||||
package-devel packages if your distribution splits out development
|
||||
headers (e.g. libc6-dev) etc.
|
||||
|
||||
Depending on where dependencies, you might have to set your
|
||||
`PKG_CONFIG_PATH` environment variable like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
|
||||
```
|
||||
|
||||
Also note that some distributions like to add extra arch directories
|
||||
to your library locations so you might have to have more like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
|
||||
```
|
||||
|
||||
You will need to ensure that the destination library directory (e.g.
|
||||
`/usr/local/lib` is in your /etc/ld.so.conf or /etc/ld.so.conf.d/
|
||||
files and after installing anything that installs libraries you
|
||||
re-run `ldconfig`. Please see relevant documentation on ldconfig and
|
||||
ld.so.conf for your distribution.
|
||||
|
||||
You might also want to add the destination bin dir to your environment
|
||||
variable PATH (see documentation on your shell PATH variable) such as:
|
||||
```sh
|
||||
export PATH=/usr/local/bin:/usr/bin:/bin
|
||||
```
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
```sh
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
For meson build generic options:
|
||||
```sh
|
||||
meson --help
|
||||
```
|
||||
|
||||
For a list of project specific options supported:
|
||||
```sh
|
||||
cat meson_options.txt
|
||||
```
|
||||
|
||||
To set 1 or more project specific options:
|
||||
```sh
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
```
|
||||
|
||||
To display current configuration:
|
||||
```sh
|
||||
meson configure build
|
||||
```
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
```sh
|
||||
meson . build
|
||||
```
|
||||
|
||||
### Quick build help
|
||||
|
||||
How to clean out the build and config and start fresh:
|
||||
```sh
|
||||
rm -rf build
|
||||
```
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
```sh
|
||||
ninja -C build dist
|
||||
```
|
||||
|
||||
How to change prefix:
|
||||
```sh
|
||||
meson --prefix=/path/to/prefix . build
|
||||
```
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
```sh
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
```
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
```sh
|
||||
ninja -C build -v
|
||||
```
|
|
@ -0,0 +1,3 @@
|
|||
group "Elm_Palette" struct {
|
||||
value "version" int: 1000;
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
pals = [
|
||||
'default',
|
||||
'empty',
|
||||
'light',
|
||||
'mauve-sunset',
|
||||
'candy-mint',
|
||||
|
|
|
@ -172,6 +172,7 @@ color_tree {
|
|||
"/fg/normal/spinner/arrow";
|
||||
"/fg/normal/spinner/text";
|
||||
"/fg/normal/notification/text";
|
||||
"/fg/pressed/notification/text/title";
|
||||
"/fg/selected/winlist/item/text/iconified";
|
||||
"/fg/pressed/gadgets/tasks/text/iconified";
|
||||
"/fg/normal/gadgets/battery/level/discharge";
|
||||
|
@ -496,6 +497,7 @@ color_tree {
|
|||
}
|
||||
":dim-lighter" {
|
||||
"/dim/normal/hover";
|
||||
"/dim/normal/inwin";
|
||||
"/bg/normal/multibuttonentry/button";
|
||||
"/bg/normal/calendar/day/today";
|
||||
"/fg/normal/text-subtle";
|
||||
|
|
|
@ -433,9 +433,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "top";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -447,9 +447,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.to: "e.event.resize.tl";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.to: "e.event.resize.tr";
|
||||
min: 0 6;
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
|
@ -461,9 +461,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -506,9 +506,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "bottom";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -530,9 +530,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "e.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -553,9 +553,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "bottom";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -590,9 +590,8 @@ group { name: "e/widgets/border/default/border";
|
|||
repeat_events: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 0;
|
||||
rel1.to: "e.swallow.volume";
|
||||
rel.to: "e.event.icon";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "e.swallow.volume";
|
||||
rel2.relative: 1.0 1.0;
|
||||
rel2.offset: 0 -1;
|
||||
align: 0.0 0.5;
|
||||
|
@ -607,14 +606,20 @@ group { name: "e/widgets/border/default/border";
|
|||
source: "e/widgets/border/volume";
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 0;
|
||||
rel1.to: "e.event.icon";
|
||||
rel1.to_x: "e.event.icon";
|
||||
rel2.to_x: "e.event.icon";
|
||||
rel1.to_y: "top";
|
||||
rel2.to_y: "top";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "e.event.icon";
|
||||
rel2.relative: 1.0 1.0;
|
||||
rel2.offset: 0 -1;
|
||||
align: 0.0 0.5;
|
||||
aspect: 1.0 1.0; aspect_preference: VERTICAL;
|
||||
}
|
||||
description { state: "visible";
|
||||
inherit: "default" 0.0;
|
||||
rel.to_x: "e.procstats.swallow";
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
|
@ -709,11 +714,13 @@ group { name: "e/widgets/border/default/border";
|
|||
program { signal: "e,state,procstats,on"; source: "e";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "e.procstats.swallow";
|
||||
target: "e.swallow.volume";
|
||||
target: "procstats";
|
||||
}
|
||||
program { signal: "e,state,procstats,off"; source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.procstats.swallow";
|
||||
target: "e.swallow.volume";
|
||||
target: "procstats";
|
||||
}
|
||||
// program {
|
||||
|
|
|
@ -549,7 +549,7 @@ group { name: "e/comp/frame/fullscreen";
|
|||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "scr_shade"; type: RECT;
|
||||
part { name: "scr_shade"; type: RECT; mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
visible: 0;
|
||||
|
@ -584,7 +584,7 @@ group { name: "e/comp/frame/fullscreen";
|
|||
rel.to: "shower";
|
||||
}
|
||||
}
|
||||
part { name: "fader"; type: RECT;
|
||||
part { name: "fader"; type: RECT; mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "e.swallow.content";
|
||||
color: 255 255 255 0; // no cc
|
||||
|
|
|
@ -319,7 +319,7 @@ group { name: "e/comp/border/fullscreen";
|
|||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "scr_shade"; type: RECT;
|
||||
part { name: "scr_shade"; type: RECT; mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
visible: 0;
|
||||
|
@ -355,7 +355,7 @@ group { name: "e/comp/border/fullscreen";
|
|||
rel2.to: "shower";
|
||||
}
|
||||
}
|
||||
part { name: "fader"; type: RECT;
|
||||
part { name: "fader"; type: RECT; mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "e.swallow.content";
|
||||
color: 255 255 255 0; // no cc
|
||||
|
|
|
@ -490,9 +490,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "top_clip";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -505,9 +505,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "efl.event.resize.tr";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 6;
|
||||
align: 0.5 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 0 RSZMINH;
|
||||
align: 1.0 1.0;
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -521,9 +521,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -573,9 +573,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "bottom_clip";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -589,9 +589,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "efl.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -604,9 +604,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "bottom_clip";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ group { "efl/win";
|
|||
swallow { "efl.menu";
|
||||
clip_to: "client_clip";
|
||||
desc { "default";
|
||||
rel2.relative: 1 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
link.base: "efl,action,hide" "efl";
|
||||
align: 0.5 0.0;
|
||||
hid;
|
||||
|
@ -23,7 +23,7 @@ group { "efl/win";
|
|||
}
|
||||
desc { "with_menu";
|
||||
rel1.to: "efl.menu";
|
||||
rel1.relative: 0 1;
|
||||
rel1.relative: 0.0 1.0;
|
||||
link.base: "efl,action,show_menu" "efl";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -497,9 +497,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "top_clip";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -512,9 +512,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "elm.event.resize.tr";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 6;
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -528,9 +528,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: 40 6;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -556,7 +556,7 @@ group { name: "elm/border/base/default";
|
|||
desc { "hidden";
|
||||
inherit: "default";
|
||||
rel1 { relative: 0.0 1.0; offset: 0 0; }
|
||||
rel2 { relative: 1.0 1.0; offset: 0 0; }
|
||||
rel2 { relative: 1.0 1.0; offset: -1 0; }
|
||||
min: 0 0;
|
||||
hid;
|
||||
}
|
||||
|
@ -580,9 +580,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "bottom_clip";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -596,9 +596,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "elm.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -611,9 +611,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "bottom_clip";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ group { name: "elm/win/inwin/default";
|
|||
parts {
|
||||
part { name: "bg"; type: RECT; mouse_events: 1;
|
||||
description { state: "default" 0.0;
|
||||
color_class: "dim/normal/inwin";
|
||||
color_class: "/dim/normal/inwin";
|
||||
color: 255 255 255 0; // no cc
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
|
|
|
@ -7,6 +7,7 @@ group { name: "elm/notify/block_events/default";
|
|||
color: 255 255 255 0; // no cc
|
||||
}
|
||||
desc { "visible";
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 255; // no cc
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,17 +7,17 @@ group { name: "elm/win/base/default";
|
|||
clip_to: "client_clip";
|
||||
desc { "default";
|
||||
rel1.offset: 0 -1;
|
||||
rel2.relative: 1 0;
|
||||
rel2.relative: -1 -1;
|
||||
align: 0.5 0.0;
|
||||
hid;
|
||||
link.base: "elm,action,hide" "elm";
|
||||
min: 0 20;
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "visible";
|
||||
inherit: "default";
|
||||
rel1.offset: 0 0;
|
||||
rel2.offset: -1 0;
|
||||
fixed: 0 1;
|
||||
vis;
|
||||
link.base: "elm,action,show_menu" "elm";
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ group { name: "elm/win/base/default";
|
|||
desc { "default"; }
|
||||
desc { "with_menu";
|
||||
rel1.to: "elm.swallow.menu";
|
||||
rel1.relative: 0 1;
|
||||
rel1.relative: 0.0 1.0;
|
||||
link.base: "elm,action,show_menu" "elm";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -403,29 +403,6 @@ group { name: "e/modules/ibox/icon_overlay";
|
|||
rel.to: "background";
|
||||
}
|
||||
}
|
||||
text { name: "spacer"; scale: 1;
|
||||
desc {
|
||||
color: 0 0 0 0; // no cc
|
||||
rel1.relative: 1 0;
|
||||
rel2.relative: 0 1;
|
||||
text {
|
||||
source: "e.text.label";
|
||||
text_source: "e.text.label";
|
||||
}
|
||||
link.base: "e,origin,center" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
}
|
||||
desc { "left"; inherit: "default";
|
||||
align: 0.0 0.5;
|
||||
link.base: "e,origin,left" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
}
|
||||
desc { "right"; inherit: "default";
|
||||
align: 1.0 0.5;
|
||||
link.base: "e,origin,right" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
}
|
||||
}
|
||||
part { name: "bg"; type: RECT; mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -469,6 +446,32 @@ group { name: "e/modules/ibox/icon_overlay";
|
|||
visible: 1;
|
||||
}
|
||||
}
|
||||
text { name: "spacer"; scale: 1;
|
||||
desc {
|
||||
visible: 0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -5 -5;
|
||||
offscale;
|
||||
text {
|
||||
source: "e.text.label";
|
||||
text_source: "e.text.label";
|
||||
min: 1 1;
|
||||
}
|
||||
link.base: "e,origin,center" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
color: 255 0 0 255;
|
||||
}
|
||||
desc { "left"; inherit: "default";
|
||||
align: 0.0 0.5;
|
||||
link.base: "e,origin,left" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
}
|
||||
desc { "right"; inherit: "default";
|
||||
align: 1.0 0.5;
|
||||
link.base: "e,origin,right" "e";
|
||||
link.transition: SINUSOIDAL 0.1 CURRENT USE_DURATION_FACTOR 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
// program {
|
||||
|
|
|
@ -21,6 +21,7 @@ group { name: "e/ilist";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
alias: "e.text.typebuf_label" "e.text.label";
|
||||
part { name: "e.text.label"; type: TEXT; mouse_events: 0;
|
||||
clip_to: "typebuf_clip";
|
||||
scale: 1;
|
||||
|
|
|
@ -33,8 +33,7 @@ group { name: "e/modules/notification/main";
|
|||
tag: "b" "+ font="FNBD" text_class=module_bold color=cc:/fg/normal/notification/text/bold";
|
||||
tag: "i" "+ font="FNIT" text_class=module_italic";
|
||||
tag: "u" "+ underline=on underline_color=cc:/fg/normal/notification/text/underline";
|
||||
tag: "img" ""; // images not supported
|
||||
tag: "a" ""; // links not supported
|
||||
tag: "link" "+ color=cc:/fg/normal/text-link underline=on underline_color=cc:/fg/normal/text-link";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,10 +71,10 @@ group { name: "e/modules/notification/main";
|
|||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.5;
|
||||
aspect: 1.0 1.0;
|
||||
aspect_preference: BOTH;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
rel.to: "base";
|
||||
rel1.offset: 12 12;
|
||||
rel1.to_y: "notification.textblock.message";
|
||||
rel1.offset: 12 0;
|
||||
rel2.offset: 12 -13;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 24 24;
|
||||
|
@ -83,26 +82,11 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -13;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
min: 200 20;
|
||||
|
@ -112,7 +96,9 @@ group { name: "e/modules/notification/main";
|
|||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -13;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
text { style: "notification_style";
|
||||
text_source: "notification.textblock.message";
|
||||
min: 0 1;
|
||||
|
@ -121,6 +107,45 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.swallow.desktop_icon"; type: SWALLOW; mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
rel1.to_x: "base";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.offset: 12 0;
|
||||
rel2.to: "notification.text.title";
|
||||
rel2.offset: 12 -1;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 15 15;
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.text.title"; type: TEXT; mouse_events: 0;
|
||||
clip_to: "titleclip";
|
||||
scale: 1;
|
||||
|
@ -144,6 +169,24 @@ group { name: "e/modules/notification/main";
|
|||
}
|
||||
}
|
||||
|
||||
part { name: "notification.swallow.actions"; type: SWALLOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.5 1.0;
|
||||
rel.to: "base";
|
||||
rel1.relative: 0.0 1.0;
|
||||
rel1.offset: 12 -13;
|
||||
rel2.offset: -13 -13;
|
||||
offscale;
|
||||
visible: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
min: 40 20;
|
||||
}
|
||||
}
|
||||
|
||||
part { name: "close";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -190,14 +233,81 @@ group { name: "e/modules/notification/main";
|
|||
program { signal: "mouse,clicked,1"; source: "base";
|
||||
action: SIGNAL_EMIT "notification,find" "theme";
|
||||
}
|
||||
// program {
|
||||
// signal: "notification,new"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,del"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,deleted"; source: "notification";
|
||||
// }
|
||||
program { signal: "e,state,actions,show"; source: "e";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
program { signal: "e,state,actions,hide"; source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
// program { signal: "e,category,device"; source: "e"; }
|
||||
// program { signal: "e,category,device.added"; source: "e"; }
|
||||
// program { signal: "e,category,device.error"; source: "e"; }
|
||||
// program { signal: "e,category,device.removed"; source: "e"; }
|
||||
// program { signal: "e,category,email"; source: "e"; }
|
||||
// program { signal: "e,category,email.arrived"; source: "e"; }
|
||||
// program { signal: "e,category,email.bounced"; source: "e"; }
|
||||
// program { signal: "e,category,im"; source: "e"; }
|
||||
// program { signal: "e,category,im.error"; source: "e"; }
|
||||
// program { signal: "e,category,im.received"; source: "e"; }
|
||||
// program { signal: "e,category,network"; source: "e"; }
|
||||
// program { signal: "e,category,network.connected"; source: "e"; }
|
||||
// program { signal: "e,category,network.disconnected"; source: "e"; }
|
||||
// program { signal: "e,category,network.error"; source: "e"; }
|
||||
// program { signal: "e,category,presence"; source: "e"; }
|
||||
// program { signal: "e,category,presence.offline"; source: "e"; }
|
||||
// program { signal: "e,category,presence.online"; source: "e"; }
|
||||
// program { signal: "e,category,transfer"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.complete"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.error"; source: "e"; }
|
||||
// program { signal: "e,urgency,low"; source: "e"; }
|
||||
// program { signal: "e,urgency,normal"; source: "e"; }
|
||||
// program { signal: "e,urgency,critical"; source: "e"; }
|
||||
// program { signal: "notification,new"; source: "notification"; }
|
||||
// program { signal: "notification,del"; source: "notification"; }
|
||||
// program { signal: "notification,deleted"; source: "notification"; }
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "e/modules/notification/action";
|
||||
parts {
|
||||
part { name: "e.text.label"; type: TEXT;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -5 -5;
|
||||
color_class: "/fg/normal/notification/text/title";
|
||||
text { font: FNBD; size: 10;
|
||||
min: 1 1;
|
||||
text_class: "notification_title";
|
||||
}
|
||||
offscale;
|
||||
}
|
||||
description { state: "selected" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color_class: "/fg/pressed/notification/text/title";
|
||||
}
|
||||
}
|
||||
part { name: "event"; type: RECT;
|
||||
scale : 1;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 40 20;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { signal: "mouse,down,1"; source: "event";
|
||||
action: STATE_SET "selected" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,up,1"; source: "event";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,clicked,1"; source: "event";
|
||||
action: SIGNAL_EMIT "e,action,clicked" "e";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ group { name: "e/pointer/enlightenment/default/color";
|
|||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
color: 255 255 255 255; // no cc
|
||||
FIXED_SIZE(32, 32)
|
||||
// FIXED_SIZE(32, 32)
|
||||
}
|
||||
description { state: "suspend" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
|
||||
#define SHELFPAD 3
|
||||
#define ICMIN 15
|
||||
#define RSZCOL 0 0 0 0
|
||||
#define RSZCOL2 0 0 0 0
|
||||
#define RSZMINW 44
|
||||
#define RSZMINH 10
|
||||
|
||||
#define SPACER_TEXT "NN";
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
checkme_files = ['ecore', 'ecore_imf', 'ecore_x', 'eeze', 'efreet', 'elua', 'emotion', 'ethumb', 'ethumb_client']
|
||||
checkme_files = ['ecore', 'ecore_imf', 'ecore_x', 'eeze', 'efreet', 'elua', 'emotion', 'ethumb', 'ethumb_client', 'evas']
|
||||
foreach checkme : checkme_files
|
||||
install_data(join_paths(checkme, 'checkme'),
|
||||
install_dir : join_paths(dir_data, checkme)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
|
@ -1,6 +1,6 @@
|
|||
project('efl', ['c','cpp'],
|
||||
version: '1.25.99',
|
||||
default_options : ['buildtype=plain', 'cpp_std=c++11'],
|
||||
version: '1.26.99',
|
||||
default_options : ['buildtype=plain', 'warning_level=1', 'cpp_std=c++11'],
|
||||
meson_version : '>=0.50'
|
||||
)
|
||||
|
||||
|
@ -73,7 +73,6 @@ local_scripts = join_paths('src', 'scripts')
|
|||
dev_cflags = []
|
||||
dev_cflags_try = [
|
||||
'-fvisibility=hidden',
|
||||
'-Wall',
|
||||
'-Wfloat-compare',
|
||||
'-Wpointer-arith',
|
||||
'-Wunused-parameter',
|
||||
|
|
|
@ -195,8 +195,8 @@ option('unmount-path',
|
|||
option('evas-loaders-disabler',
|
||||
type : 'array',
|
||||
description : 'List of modular image/vector loaders to disable in efl',
|
||||
choices : ['', 'gst', 'pdf', 'ps', 'raw', 'svg', 'rsvg', 'xcf', 'bmp', 'dds', 'eet', 'generic', 'gif', 'ico', 'jp2k', 'jpeg', 'pmaps', 'png', 'psd', 'tga', 'tgv', 'tiff', 'wbmp', 'webp', 'xpm', 'json', 'avif', 'heif'],
|
||||
value : ['json', 'avif', 'heif']
|
||||
choices : ['', 'gst', 'pdf', 'ps', 'raw', 'svg', 'rsvg', 'xcf', 'bmp', 'dds', 'eet', 'generic', 'gif', 'ico', 'jp2k', 'jpeg', 'pmaps', 'png', 'psd', 'tga', 'tgv', 'tiff', 'wbmp', 'webp', 'xpm', 'json', 'avif', 'heif', 'jxl'],
|
||||
value : ['json', 'avif', 'heif', 'jxl']
|
||||
)
|
||||
|
||||
option('ecore-imf-loaders-disabler',
|
||||
|
|
|
@ -3164,6 +3164,7 @@ src/modules/evas/image_loaders/heif/evas_image_load_heif.c
|
|||
src/modules/evas/image_loaders/ico/evas_image_load_ico.c
|
||||
src/modules/evas/image_loaders/jp2k/evas_image_load_jp2k.c
|
||||
src/modules/evas/image_loaders/jpeg/evas_image_load_jpeg.c
|
||||
src/modules/evas/image_loaders/jxl/evas_image_load_jxl.c
|
||||
src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
|
||||
src/modules/evas/image_loaders/png/evas_image_load_png.c
|
||||
src/modules/evas/image_loaders/psd/evas_image_load_psd.c
|
||||
|
|
112
po/ru.po
112
po/ru.po
|
@ -3,15 +3,15 @@
|
|||
# This file is put in the public domain.
|
||||
# Danny Moshnakov <dm@agent.co.il>, 2012.
|
||||
# Igor Murzov <garik@efl.so>, 2015.
|
||||
# Dmitri Chudinov <dmitri.chudinov@gmail.com>, 2022.
|
||||
#
|
||||
#: src/lib/elementary/elm_config.c:4267
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: elementary 1.11\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||
"PO-Revision-Date: 2015-02-07 15:16+0300\n"
|
||||
"Last-Translator: Игорь Мурзов <garik@efl.so>\n"
|
||||
"PO-Revision-Date: 2022-06-07 11:55+0500\n"
|
||||
"Last-Translator: Дмитрий Чудинов <dmitri.chudinov@gmail.com>\n"
|
||||
"Language-Team: ru <enlightenment-intl@lists.sourceforge.net>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -22,191 +22,192 @@ msgstr ""
|
|||
|
||||
#: src/lib/ecore/ecore_getopt.c:85
|
||||
msgid "Version:"
|
||||
msgstr ""
|
||||
msgstr "Версия:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:94
|
||||
msgid "Usage:"
|
||||
msgstr ""
|
||||
msgstr "Пример использования:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:101
|
||||
#, c-format
|
||||
msgid "%s [options]"
|
||||
msgstr ""
|
||||
msgstr "%s [опций]"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:301
|
||||
msgid "Copyright:"
|
||||
msgstr ""
|
||||
msgstr "Копирайт:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:313
|
||||
msgid "License:"
|
||||
msgstr ""
|
||||
msgstr "Лицензия:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:499
|
||||
msgid "Type: "
|
||||
msgstr ""
|
||||
msgstr "Тип: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:575
|
||||
msgid "Default: "
|
||||
msgstr ""
|
||||
msgstr "По умолчанию: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:602
|
||||
msgid "Choices: "
|
||||
msgstr ""
|
||||
msgstr "Варианты: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||
msgid "No categories available."
|
||||
msgstr ""
|
||||
msgstr "Нет доступных категорий."
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:645
|
||||
msgid "Categories: "
|
||||
msgstr ""
|
||||
msgstr "Категории: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:767
|
||||
msgid "Options:\n"
|
||||
msgstr ""
|
||||
msgstr "Опции:\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:776
|
||||
msgid "Positional arguments:\n"
|
||||
msgstr ""
|
||||
msgstr "Позиционные аргументы:\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:843
|
||||
#, c-format
|
||||
msgid "ERROR: unknown category '%s'.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: неизвестная категория '%s'.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:947
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: неизвестная опция --%s.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:949
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: неизвестная опция -%c.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1012
|
||||
msgid "ERROR: "
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1108 src/lib/ecore/ecore_getopt.c:1245
|
||||
#: src/lib/ecore/ecore_getopt.c:1261 src/lib/ecore/ecore_getopt.c:1276
|
||||
#: src/lib/ecore/ecore_getopt.c:1296 src/lib/ecore/ecore_getopt.c:1343
|
||||
#: src/lib/ecore/ecore_getopt.c:1463 src/lib/ecore/ecore_getopt.c:1504
|
||||
msgid "value has no pointer set.\n"
|
||||
msgstr ""
|
||||
msgstr "значение не имеет установленного указателя.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
|
||||
#, c-format
|
||||
msgid "unknown boolean value %s.\n"
|
||||
msgstr ""
|
||||
msgstr "неизвестное булево значение %s.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
|
||||
#, c-format
|
||||
msgid "invalid number format %s\n"
|
||||
msgstr ""
|
||||
msgstr "неверный формат числа %s\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1309
|
||||
#, c-format
|
||||
msgid "invalid choice \"%s\". Valid values are: "
|
||||
msgstr ""
|
||||
msgstr "недопустимый выбор \"%s\". Допустимыми значениями являются: "
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1337
|
||||
msgid "missing parameter to append.\n"
|
||||
msgstr ""
|
||||
msgstr "недостающий параметр для добавления.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1441
|
||||
msgid "could not parse value.\n"
|
||||
msgstr ""
|
||||
msgstr "не удалось разобрать значение.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1498
|
||||
msgid "missing parameter.\n"
|
||||
msgstr ""
|
||||
msgstr "отсутствует параметр\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1511
|
||||
msgid "missing callback function!\n"
|
||||
msgstr ""
|
||||
msgstr "отсутствует функция вызова (callback)\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1542
|
||||
msgid "no version was defined.\n"
|
||||
msgstr ""
|
||||
msgstr "версия не определена\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1559
|
||||
msgid "no copyright was defined.\n"
|
||||
msgstr ""
|
||||
msgstr "копирайт не определен\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1576
|
||||
msgid "no license was defined.\n"
|
||||
msgstr ""
|
||||
msgstr "лицензия не определена\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1666
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s, ignored.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: неизвестная опция --%s, проигнорировано\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1706
|
||||
#, c-format
|
||||
msgid "ERROR: option --%s requires an argument!\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: для опции --%s требуется указать аргумент!\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1748
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c, ignored.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: неизвестная опция -%c, проигнорировано.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1793
|
||||
#, c-format
|
||||
msgid "ERROR: option -%c requires an argument!\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: для опции -%c требуется указать аргумент!\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1888
|
||||
#, c-format
|
||||
msgid "ERROR: missing required positional argument %s.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: отсутствует необходимый позиционный аргумент %s.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1920
|
||||
#, c-format
|
||||
msgid "ERROR: unsupported action type %d for positional argument %s\n"
|
||||
msgstr ""
|
||||
"ОШИБКА: неподдерживаемый тип действия %d для позиционного аргумента %s\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
|
||||
msgid "ERROR: no parser provided.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: не предоставлен анализатор (parser).\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
||||
msgid "ERROR: no values provided.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: не предоставлены значения.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
||||
msgid "ERROR: no arguments provided.\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: не предоставлены аргументы.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2081
|
||||
msgid "ERROR: invalid options found."
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: обнаружены недопустимые опции."
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
||||
#, c-format
|
||||
msgid " See --%s.\n"
|
||||
msgstr ""
|
||||
msgstr " Смотри --%s.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
||||
#, c-format
|
||||
msgid " See -%c.\n"
|
||||
msgstr ""
|
||||
msgstr " Смотри --%c.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2148
|
||||
msgid "ERROR: invalid positional arguments found."
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: найдены недопустимые позиционные аргументы."
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2183
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect geometry value '%s'\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: некорректное значение геометрии '%s'\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2201
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect size value '%s'\n"
|
||||
msgstr ""
|
||||
msgstr "ОШИБКА: некорректное значение размера '%s'\n"
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:127
|
||||
msgid "Desktop"
|
||||
|
@ -222,7 +223,7 @@ msgstr "Шаблоны"
|
|||
|
||||
#: src/lib/efreet/efreet_base.c:153
|
||||
msgid "Public"
|
||||
msgstr "Общий каталог"
|
||||
msgstr "Открытый"
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:162
|
||||
msgid "Documents"
|
||||
|
@ -249,9 +250,8 @@ msgid "Title"
|
|||
msgstr "Заголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:415
|
||||
#, fuzzy
|
||||
msgid "Subtitle"
|
||||
msgstr "Заголовок"
|
||||
msgstr "Подзаголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:966
|
||||
msgid "Back"
|
||||
|
@ -263,7 +263,7 @@ msgstr "Вверх"
|
|||
|
||||
#: src/lib/elementary/elc_fileselector.c:1769
|
||||
msgid "Home"
|
||||
msgstr "Дом"
|
||||
msgstr "Главная"
|
||||
|
||||
#: src/lib/elementary/elc_fileselector.c:1787
|
||||
msgid "Search"
|
||||
|
@ -281,16 +281,16 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Отключено"
|
||||
|
||||
#~ msgid "multi button entry label"
|
||||
#~ msgstr "метка многокопочного элемента"
|
||||
#~ msgstr "метка многокнопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry item"
|
||||
#~ msgstr "кнопка многокопочного элемента"
|
||||
#~ msgstr "кнопка многокнопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry"
|
||||
#~ msgstr "многокнопочный элемент"
|
||||
|
||||
#~ msgid "Next"
|
||||
#~ msgstr "Вперёд"
|
||||
#~ msgstr "Далее"
|
||||
|
||||
#~ msgid "Popup Title"
|
||||
#~ msgstr "Заголовок всплывающего окна"
|
||||
|
@ -368,7 +368,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "элемент выбора дня"
|
||||
|
||||
#~ msgid "diskselector item"
|
||||
#~ msgstr "элемент диска выбора"
|
||||
#~ msgstr "элемент выбора диска"
|
||||
|
||||
#~ msgid "Cut"
|
||||
#~ msgstr "Вырезать"
|
||||
|
@ -383,7 +383,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Выбрать"
|
||||
|
||||
#~ msgid "Entry"
|
||||
#~ msgstr "Запись"
|
||||
#~ msgstr "Ввод"
|
||||
|
||||
#~ msgid "Index"
|
||||
#~ msgstr "Алфавитный указатель"
|
||||
|
@ -419,7 +419,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Выбрано"
|
||||
|
||||
#~ msgid "State: Unselected"
|
||||
#~ msgstr "Состояние: Невыбрано"
|
||||
#~ msgstr "Состояние: Не выбрано"
|
||||
|
||||
#~ msgid "Segment Control Item"
|
||||
#~ msgstr "Элемент сегментного элемента управления"
|
||||
|
@ -438,7 +438,7 @@ msgstr "Отмена"
|
|||
|
||||
#, fuzzy
|
||||
#~ msgid "spinner text"
|
||||
#~ msgstr "счётчик"
|
||||
#~ msgstr "текст счётчика"
|
||||
|
||||
#~ msgid "Selected"
|
||||
#~ msgstr "Выбрано"
|
||||
|
@ -450,7 +450,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "С меню"
|
||||
|
||||
#~ msgid "Unselected"
|
||||
#~ msgstr "Невыбрано"
|
||||
#~ msgstr "Не выбраноы"
|
||||
|
||||
#~ msgid "Toolbar Item"
|
||||
#~ msgstr "Элемент панели инструментов"
|
||||
|
|
|
@ -2,10 +2,6 @@
|
|||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <evil_private.h> /* setenv */
|
||||
#endif
|
||||
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_Ipc.h>
|
||||
|
||||
|
@ -155,7 +151,16 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
|||
fflush(efreetd_log_file);
|
||||
if ((s = _parse_str(e->data, e->size)))
|
||||
{
|
||||
setenv("LANG", s, 1);
|
||||
char envlang[128], *env;
|
||||
|
||||
env = getenv("LANG");
|
||||
if (!((env) && (!strcmp(env, s))))
|
||||
{
|
||||
snprintf(envlang, sizeof(envlang), "LANG=%s", s);
|
||||
env = strdup(envlang);
|
||||
putenv(env);
|
||||
/* leak env intentionnally */
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
// return if desktop cache exists (bool as minor)
|
||||
|
@ -179,7 +184,16 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
|||
fflush(efreetd_log_file);
|
||||
if ((s = _parse_str(e->data, e->size)))
|
||||
{
|
||||
setenv("LANG", s, 1);
|
||||
char envlang[128], *env;
|
||||
|
||||
env = getenv("LANG");
|
||||
if (!((env) && (!strcmp(env, s))))
|
||||
{
|
||||
snprintf(envlang, sizeof(envlang), "LANG=%s", s);
|
||||
env = strdup(envlang);
|
||||
putenv(env);
|
||||
/* leak env intentionnally */
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
cache_desktop_update();
|
||||
|
|
|
@ -31,6 +31,7 @@ _selection(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data *ev)
|
|||
case ELM_SEL_FORMAT_IMAGE: fmt = "IMAGE"; break;
|
||||
case ELM_SEL_FORMAT_VCARD: fmt = "VCARD"; break;
|
||||
case ELM_SEL_FORMAT_HTML: fmt = "HTML"; break;
|
||||
case ELM_SEL_FORMAT_URILIST: fmt = "URILIST"; break;
|
||||
}
|
||||
fprintf(stderr, "got selection type '%s': length %zu\n", fmt, ev->len);
|
||||
|
||||
|
|
|
@ -475,7 +475,7 @@ _list_item_cb11(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_
|
|||
{
|
||||
Evas_Object *ctxpopup;
|
||||
Evas_Coord x,y;
|
||||
char label[16];
|
||||
char label[18];
|
||||
int i = 0;
|
||||
|
||||
if (list_mouse_down > 0) return;
|
||||
|
|
|
@ -3816,6 +3816,19 @@ typedef void (*Ecore_Evas_Drag_Finished_Cb)(Ecore_Evas *ee, unsigned int seat, v
|
|||
*/
|
||||
EAPI Eina_Bool ecore_evas_drag_start(Ecore_Evas *ee, unsigned int seat, Eina_Content *content, Ecore_Evas *drag_rep,
|
||||
const char* action, Ecore_Evas_Drag_Finished_Cb terminate_cb, void *data);
|
||||
/**
|
||||
* @brief Set the offset of the dragged symbol. Only valid during a drag
|
||||
*
|
||||
* @param[in] ee The Ecore Evas the drag operation started on.
|
||||
* @param[in] seat The seat to use
|
||||
* @param[in] offset The offset to apply to the upper left corner ofthe dragged window
|
||||
*
|
||||
* This must be called on the ee where ecore_evas_drag_start is called on, NOT on the drag representation
|
||||
*
|
||||
* @since 1.24
|
||||
*/
|
||||
EAPI void ecore_evas_drag_offset_set(Ecore_Evas *ee, unsigned int seat, Eina_Size2D offset);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Cancels an ongoing drag operation.
|
||||
|
|
|
@ -5645,10 +5645,28 @@ ecore_evas_drag_start(Ecore_Evas *ee, unsigned int seat, Eina_Content *content,
|
|||
ee->drag.free = terminate_cb;
|
||||
ee->drag.data = data;
|
||||
ee->drag.accepted = EINA_FALSE;
|
||||
ee->drag.offset = EINA_SIZE2D(INT_MAX, INT_MAX);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_evas_drag_offset_set(Ecore_Evas *ee, unsigned int seat, Eina_Size2D offset) {
|
||||
Ecore_Evas_Selection_Seat_Buffers *buffers;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(ee);
|
||||
buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN(buffers);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(buffers->selection_buffer[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER] == NULL);
|
||||
if (offset.w == INT_MAX || offset.h == INT_MAX)
|
||||
{
|
||||
ERR("Offset is INT_MAX, this is a reserved value! Executing Fallback!");
|
||||
}
|
||||
|
||||
INF("Set offset to %d %d", offset.w, offset.h);
|
||||
ee->drag.offset = offset;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
ecore_evas_drag_cancel(Ecore_Evas *ee, unsigned int seat)
|
||||
{
|
||||
|
|
|
@ -404,6 +404,7 @@ struct _Ecore_Evas
|
|||
struct
|
||||
{
|
||||
Ecore_Evas *rep;
|
||||
Eina_Size2D offset;
|
||||
void *data;
|
||||
Ecore_Evas_Drag_Finished_Cb free;
|
||||
Eina_Bool accepted;
|
||||
|
|
|
@ -2,17 +2,15 @@
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
/*FIXME: change OS specific value */
|
||||
#if defined(__linux__) || defined(__FreeBSD__)
|
||||
# include <linux/joystick.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef HAVE_EEZE
|
||||
#include "Eeze.h"
|
||||
# if defined(__linux__)
|
||||
# include <linux/joystick.h>
|
||||
# endif
|
||||
# include "Eeze.h"
|
||||
#endif
|
||||
#include "Ecore.h"
|
||||
#include "Ecore_Input.h"
|
||||
|
|
|
@ -2530,10 +2530,11 @@ struct _Ecore_X_Event_Xkb
|
|||
int base_group; /** @since 1.21 */
|
||||
int latched_group; /** @since 1.21 */
|
||||
int locked_group; /** @since 1.21 */
|
||||
unsigned int mods; /** @since 1.21 */
|
||||
unsigned int mods; /** @since 1.21 */
|
||||
unsigned int base_mods; /** @since 1.21 */
|
||||
unsigned int latched_mods; /** @since 1.21 */
|
||||
unsigned int locked_mods; /** @since 1.21 */
|
||||
unsigned int latched_mods; /** @since 1.21 */
|
||||
unsigned int locked_mods; /** @since 1.21 */
|
||||
Eina_Bool map_notify; /** @since 1.27 */
|
||||
};
|
||||
typedef struct _Ecore_X_Event_Xkb Ecore_X_Event_Xkb; /** @since 1.7 */
|
||||
typedef struct _Ecore_X_Event_Xkb Ecore_X_Xkb_State; /** @since 1.21 */
|
||||
|
|
|
@ -2470,28 +2470,24 @@ _ecore_x_event_handle_generic_event(XEvent *event)
|
|||
#ifdef ECORE_XKB
|
||||
|
||||
void
|
||||
free_hash(void *userdata EINA_UNUSED, void *funcdata EINA_UNUSED)
|
||||
free_hash(void *data, void *ev)
|
||||
{
|
||||
eina_hash_del_by_data(emitted_events, (void*) 1);
|
||||
eina_hash_del_by_key(emitted_events, (void *)&data);
|
||||
if (ev) free(ev);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_x_event_handle_xkb(XEvent *xevent)
|
||||
{
|
||||
XkbEvent *xkbev;
|
||||
|
||||
xkbev = (XkbEvent *) xevent;
|
||||
|
||||
XkbEvent *xkbev = (XkbEvent *)xevent;
|
||||
Ecore_X_Event_Xkb *e;
|
||||
|
||||
if (xkbev->any.xkb_type == XkbStateNotify)
|
||||
{
|
||||
Ecore_X_Event_Xkb *e;
|
||||
|
||||
if (eina_hash_find(emitted_events, &xkbev->state.serial)) return;
|
||||
|
||||
e = calloc(1, sizeof(Ecore_X_Event_Xkb));
|
||||
if (!e)
|
||||
return;
|
||||
if (!e) return;
|
||||
|
||||
e->group = xkbev->state.group;
|
||||
e->base_group = xkbev->state.base_group;
|
||||
|
@ -2502,14 +2498,18 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
|
|||
e->base_mods = xkbev->state.base_mods;
|
||||
e->latched_mods = xkbev->state.latched_mods;
|
||||
e->locked_mods = xkbev->state.locked_mods;
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_STATE_NOTIFY, e, free_hash, NULL);
|
||||
eina_hash_add(emitted_events, &xkbev->state.serial, (void*) 1);
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_STATE_NOTIFY, e, free_hash,
|
||||
(void *)(intptr_t)xkbev->new_kbd.serial);
|
||||
eina_hash_add(emitted_events, &xkbev->state.serial, (void *)1);
|
||||
}
|
||||
else if ((xkbev->any.xkb_type == XkbNewKeyboardNotify) ||
|
||||
(xkbev->any.xkb_type == XkbMapNotify))
|
||||
{
|
||||
if (eina_hash_find(emitted_events, &xkbev->state.serial)) return;
|
||||
|
||||
e = calloc(1, sizeof(Ecore_X_Event_Xkb));
|
||||
if (!e) return;
|
||||
|
||||
if (xkbev->any.xkb_type == XkbMapNotify)
|
||||
{
|
||||
XkbMapNotifyEvent *xkbmapping = (XkbMapNotifyEvent *)xkbev;
|
||||
|
@ -2522,14 +2522,16 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
|
|||
_ecore_x_modifiers_get();
|
||||
_ecore_x_window_grab_resume();
|
||||
_ecore_x_key_grab_resume();
|
||||
e->map_notify = EINA_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
XkbNewKeyboardNotifyEvent *xkbnkn = (void*)xkbev;
|
||||
if (!(xkbnkn->changed & XkbNKN_KeycodesMask)) return;
|
||||
}
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_NEWKBD_NOTIFY, NULL, free_hash, NULL);
|
||||
eina_hash_add(emitted_events, &xkbev->new_kbd.serial, (void*) 1);
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_NEWKBD_NOTIFY, e, free_hash,
|
||||
(void *)(intptr_t)xkbev->new_kbd.serial);
|
||||
eina_hash_add(emitted_events, &xkbev->new_kbd.serial, (void *)1);
|
||||
}
|
||||
}
|
||||
#endif /* ifdef ECORE_XKB */
|
||||
|
|
|
@ -465,7 +465,14 @@ ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
|
|||
static int bar_num = 0;
|
||||
static int bar_alloc = 0;
|
||||
Region reg, reg2, reg3;
|
||||
Window rwin, cwin;
|
||||
int rx, ry, wx, wy;
|
||||
int i, j;
|
||||
int closest_dist, dist;
|
||||
int sx, sy, dx, dy;
|
||||
unsigned int mask;
|
||||
Eina_Bool inside = EINA_FALSE;
|
||||
Ecore_X_Rectangle *closest_screen = NULL;
|
||||
|
||||
// clear out old root screen barriers....
|
||||
if (bar)
|
||||
|
@ -476,6 +483,55 @@ ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
|
|||
}
|
||||
free(bar);
|
||||
}
|
||||
// ensure mouse pointer is insude the new set of screens if it is not
|
||||
// inside them right now
|
||||
XQueryPointer(_ecore_x_disp, DefaultRootWindow(_ecore_x_disp),
|
||||
&rwin, &cwin, &rx, &ry, &wx, &wy, &mask);
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
if ((rx >= screens[i].x) &&
|
||||
(rx < (screens[i].x + (int)screens[i].width)) &&
|
||||
(ry >= screens[i].y) &&
|
||||
(ry < (screens[i].y + (int)screens[i].height)))
|
||||
{
|
||||
inside = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
if (!closest_screen) closest_screen = &(screens[i]);
|
||||
else
|
||||
{
|
||||
// screen center
|
||||
sx = closest_screen->x + (closest_screen->width / 2);
|
||||
sy = closest_screen->y + (closest_screen->height / 2);
|
||||
dx = rx - sx;
|
||||
dy = ry - sy;
|
||||
// square dist to center
|
||||
closest_dist = ((dx * dx) + (dy * dy));
|
||||
// screen center
|
||||
sx = screens[i].x + (screens[i].width / 2);
|
||||
sy = screens[i].y + (screens[i].height / 2);
|
||||
dx = rx - sx;
|
||||
dy = ry - sy;
|
||||
// square dist to center
|
||||
dist = ((dx * dx) + (dy * dy));
|
||||
// if closer than previous closest, then this screen is closer
|
||||
if (dist < closest_dist) closest_screen = &(screens[i]);
|
||||
}
|
||||
}
|
||||
// if the pointer is not inside oneof the new screen areas then
|
||||
// move it to the center of the closest one to ensure it doesn't get
|
||||
// stuck outside
|
||||
if ((!inside) && (closest_screen))
|
||||
{
|
||||
// screen center
|
||||
sx = closest_screen->x + (closest_screen->width / 2);
|
||||
sy = closest_screen->y + (closest_screen->height / 2);
|
||||
// move pointer there
|
||||
XWarpPointer(_ecore_x_disp, None,
|
||||
DefaultRootWindow(_ecore_x_disp),
|
||||
0, 0, 0, 0, sx, sy);
|
||||
}
|
||||
|
||||
bar = NULL;
|
||||
bar_num = 0;
|
||||
bar_alloc = 0;
|
||||
|
|
|
@ -1636,7 +1636,7 @@ ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
|
|||
xev.xclient.data.l[3] = button;
|
||||
xev.xclient.data.l[4] = 1;
|
||||
|
||||
XSendEvent(_ecore_x_disp, win, False,
|
||||
XSendEvent(_ecore_x_disp, DefaultRootWindow(_ecore_x_disp), False,
|
||||
SubstructureNotifyMask | SubstructureRedirectMask, &xev);
|
||||
if (_ecore_xlib_sync) ecore_x_sync();
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ _drm_vblank_handler(int fd EINA_UNUSED,
|
|||
D(" @%1.5f vblank %i\n", ecore_time_get(), frame);
|
||||
if (pframe != frame)
|
||||
{
|
||||
#define DELTA_COUNT 10
|
||||
#if 0 // disable timestamp from vblank and use time event arrived
|
||||
double t = (double)sec + ((double)usec / 1000000);
|
||||
unsigned long long tusec, ptusec, tdelt = 0;
|
||||
static unsigned int psec = 0, pusec = 0;
|
||||
|
@ -411,10 +411,15 @@ _drm_vblank_handler(int fd EINA_UNUSED,
|
|||
}
|
||||
}
|
||||
_drm_fail_count = 0;
|
||||
_drm_send_time(t);
|
||||
pframe = frame;
|
||||
psec = sec;
|
||||
pusec = usec;
|
||||
psec = sec;
|
||||
#else
|
||||
double t = ecore_time_get();
|
||||
_drm_send_time(t);
|
||||
sec = 0;
|
||||
usec = 0;
|
||||
#endif
|
||||
pframe = frame;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -4082,10 +4082,8 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
|
|||
}
|
||||
if (edje_object_update_hints_get(ep->typedata.swallow->swallowed_object))
|
||||
{
|
||||
Edje *ted;
|
||||
|
||||
ted = _edje_fetch(ep->typedata.swallow->swallowed_object);
|
||||
_edje_recalc_do(ted);
|
||||
Edje *ted = _edje_fetch(ep->typedata.swallow->swallowed_object);
|
||||
if (ted) _edje_recalc_do(ted);
|
||||
}
|
||||
|
||||
Edje_Size *min = NULL, *max = NULL;
|
||||
|
|
|
@ -13731,6 +13731,21 @@ _edje_source_with_double_values_append(const char *param_name, char val_num, dou
|
|||
|
||||
#define INHERIT_CHECK_STRING(ATTRIBUTE_STR) (strcmp(inherit_pd->ATTRIBUTE_STR, pd->ATTRIBUTE_STR))
|
||||
|
||||
static inline char *
|
||||
gen_indent_relative_str(int indent_space)
|
||||
{
|
||||
size_t str_len = strlen("relative") + indent_space + 1;
|
||||
char *relative_str = malloc(str_len);
|
||||
|
||||
if (!relative_str)
|
||||
{
|
||||
ERR("Out of memory");
|
||||
abort();
|
||||
}
|
||||
snprintf(relative_str, str_len, "%*srelative", indent_space, "");
|
||||
return relative_str;
|
||||
}
|
||||
|
||||
static void
|
||||
_edje_generate_source_state_relative(Edje *ed,
|
||||
Edje_Part_Description_Common *pd,
|
||||
|
@ -13826,13 +13841,14 @@ _edje_generate_source_state_relative(Edje *ed,
|
|||
|
||||
if (relative)
|
||||
{
|
||||
char relative_str[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative_str, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel1.relative_x),
|
||||
TO_DOUBLE(pd->rel1.relative_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel1.relative_x),
|
||||
TO_DOUBLE(pd->rel1.relative_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (offset)
|
||||
|
@ -13945,13 +13961,14 @@ _edje_generate_source_state_relative(Edje *ed,
|
|||
|
||||
if (relative)
|
||||
{
|
||||
char relative_str[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative_str, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel2.relative_x),
|
||||
TO_DOUBLE(pd->rel2.relative_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel2.relative_x),
|
||||
TO_DOUBLE(pd->rel2.relative_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (offset)
|
||||
|
@ -14196,13 +14213,14 @@ fill:
|
|||
|
||||
if (orig_rel)
|
||||
{
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(img->image.fill.pos_rel_x),
|
||||
TO_DOUBLE(img->image.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(img->image.fill.pos_rel_x),
|
||||
TO_DOUBLE(img->image.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (orig_abs)
|
||||
|
@ -14226,13 +14244,14 @@ fill:
|
|||
|
||||
if (size_rel)
|
||||
{
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(img->image.fill.rel_x),
|
||||
TO_DOUBLE(img->image.fill.rel_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(img->image.fill.rel_x),
|
||||
TO_DOUBLE(img->image.fill.rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (size_abs)
|
||||
|
@ -14539,13 +14558,14 @@ fill_proxy:
|
|||
|
||||
if (orig_rel)
|
||||
{
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (orig_abs)
|
||||
|
@ -14569,13 +14589,14 @@ fill_proxy:
|
|||
|
||||
if (size_rel)
|
||||
{
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.rel_y),
|
||||
buf, &ret);
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
}
|
||||
|
||||
if (size_abs)
|
||||
|
|
|
@ -2002,8 +2002,8 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
_edje_emit(ed, "entry,key,backspace", rp->part->name);
|
||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
else if (!strcmp(ev->key, "Delete") ||
|
||||
(!strcmp(ev->key, "KP_Delete") && !ev->string))
|
||||
else if ((!strcmp(ev->key, "Delete") ||
|
||||
(!strcmp(ev->key, "KP_Delete") && !ev->string)) && (!shift))
|
||||
{
|
||||
_compose_seq_reset(en);
|
||||
if (control)
|
||||
|
@ -2083,9 +2083,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
else if ((super) && (!shift) && (!strcmp(ev->key, "v")))
|
||||
else if (((super) && (!shift) && (!strcmp(ev->key, "v"))) || ((shift) && (!super) && (!strcmp(ev->key, "Insert"))))
|
||||
#else
|
||||
else if ((control) && (!shift) && (!strcmp(ev->key, "v")))
|
||||
else if (((control) && (!shift) && (!strcmp(ev->key, "v"))) || ((shift) && (!control) && (!strcmp(ev->key, "Insert"))))
|
||||
#endif
|
||||
{
|
||||
_compose_seq_reset(en);
|
||||
|
@ -2131,6 +2131,13 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
_edje_emit(ed, "entry,cut,notify", rp->part->name);
|
||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
else if ((!strcmp(ev->key, "Delete") ||
|
||||
(!strcmp(ev->key, "KP_Delete") && !ev->string)) && (shift))
|
||||
{
|
||||
_compose_seq_reset(en);
|
||||
_edje_emit(ed, "entry,cut,notify", rp->part->name);
|
||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
else if ((super) && (!strcmp(ev->key, "z")))
|
||||
#else
|
||||
|
|
|
@ -511,7 +511,7 @@ _edje_message_propagate_send(Edje *ed, Edje_Queue queue, Edje_Message_Type type,
|
|||
if (_injob > 0)
|
||||
{
|
||||
if (!_job_loss_timer)
|
||||
_job_loss_timer = ecore_timer_add(0.001, _edje_job_loss_timer, NULL);
|
||||
_job_loss_timer = ecore_timer_add(0.000, _edje_job_loss_timer, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -691,6 +691,23 @@ eet_close(Eet_File *ef);
|
|||
EAPI Eet_Error
|
||||
eet_sync(Eet_File *ef);
|
||||
|
||||
/**
|
||||
* @ingroup Eet_File_Group
|
||||
* @brief does exactly what eet_xunc() does but also fsyncs file data
|
||||
* @param ef A valid eet file handle.
|
||||
* @return An eet error identifier.
|
||||
*
|
||||
* This function does everything eet_xunc() does with one addition - it
|
||||
* ensures data is written to/synced to disk (as best is possible) by
|
||||
* calling fdatasync() on the file before writes are all queued/done.
|
||||
*
|
||||
* If the eet file handle is not valid nothing will be done.
|
||||
*
|
||||
* @since 1.27
|
||||
*/
|
||||
EAPI Eet_Error
|
||||
eet_sync_sync(Eet_File *ef);
|
||||
|
||||
/**
|
||||
* @ingroup Eet_File_Group
|
||||
* @brief Returns a handle to the shared string dictionary of the Eet file
|
||||
|
|
|
@ -289,6 +289,8 @@ int
|
|||
eet_dictionary_string_get_hash(Eet_Dictionary *ed,
|
||||
int index);
|
||||
|
||||
void
|
||||
eet_dictionary_write_prepare_unlocked(Eet_Dictionary *ed);
|
||||
void
|
||||
eet_dictionary_write_prepare(Eet_Dictionary *ed);
|
||||
|
||||
|
|
|
@ -3481,6 +3481,8 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
|||
Eet_Data_Chunk chnk;
|
||||
Eina_Bool need_free = EINA_FALSE;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
if (_eet_data_words_bigendian == -1)
|
||||
{
|
||||
unsigned long int v;
|
||||
|
@ -3732,6 +3734,8 @@ eet_data_get_list(Eet_Free_Context *context,
|
|||
list = *ptr;
|
||||
data_ret = NULL;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
if (IS_POINTER_TYPE(type))
|
||||
POINTER_TYPE_DECODE(context,
|
||||
ed,
|
||||
|
@ -3797,6 +3801,8 @@ eet_data_get_hash(Eet_Free_Context *context,
|
|||
ptr = (void **)data;
|
||||
hash = *ptr;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
/* Read key */
|
||||
ret = eet_data_get_type(ed,
|
||||
EET_T_STRING,
|
||||
|
@ -3899,6 +3905,8 @@ eet_data_get_array(Eet_Free_Context *context,
|
|||
|
||||
EET_ASSERT(!((type > EET_T_UNKNOW) && (type < EET_T_STRING)), return 0);
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
ptr = data;
|
||||
/* read the number of elements */
|
||||
ret = eet_data_get_type(ed,
|
||||
|
@ -4117,6 +4125,8 @@ eet_data_get_union(Eet_Free_Context *context,
|
|||
int ret = 0;
|
||||
int i;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
/* Read type */
|
||||
ret = eet_data_get_type(ed,
|
||||
EET_T_STRING,
|
||||
|
@ -4344,6 +4354,8 @@ eet_data_get_variant(Eet_Free_Context *context,
|
|||
int ret = 0;
|
||||
int i;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
/* Read type */
|
||||
ret = eet_data_get_type(ed,
|
||||
EET_T_STRING,
|
||||
|
@ -4532,6 +4544,8 @@ eet_data_get_unknown(Eet_Free_Context *context,
|
|||
int ret;
|
||||
void *data_ret;
|
||||
|
||||
if (ed) eet_dictionary_write_prepare_unlocked((Eet_Dictionary *)ed);
|
||||
|
||||
if (IS_SIMPLE_TYPE(type))
|
||||
{
|
||||
unsigned long long dd[128];
|
||||
|
@ -4830,6 +4844,8 @@ eet_data_dump_cipher(Eet_File *ef,
|
|||
|
||||
ed = eet_dictionary_get(ef);
|
||||
|
||||
if (ed) eet_dictionary_write_prepare((Eet_Dictionary *)ed);
|
||||
|
||||
if (!cipher_key)
|
||||
data = eet_read_direct(ef, name, &size);
|
||||
|
||||
|
|
|
@ -95,14 +95,9 @@ on_error:
|
|||
}
|
||||
|
||||
void
|
||||
eet_dictionary_write_prepare(Eet_Dictionary *ed)
|
||||
eet_dictionary_write_prepare_unlocked(Eet_Dictionary *ed)
|
||||
{
|
||||
eina_rwlock_take_write(&ed->rwlock);
|
||||
if (!ed->add_hash)
|
||||
{
|
||||
eina_rwlock_release(&ed->rwlock);
|
||||
return;
|
||||
}
|
||||
if (!ed->add_hash) return;
|
||||
|
||||
ed->total = ed->count;
|
||||
|
||||
|
@ -113,6 +108,13 @@ eet_dictionary_write_prepare(Eet_Dictionary *ed)
|
|||
eina_hash_foreach(ed->add_hash, _eet_dictionary_write_prepare_hash_cb, ed);
|
||||
eina_hash_free(ed->add_hash);
|
||||
ed->add_hash = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
eet_dictionary_write_prepare(Eet_Dictionary *ed)
|
||||
{
|
||||
eina_rwlock_take_write(&ed->rwlock);
|
||||
eet_dictionary_write_prepare_unlocked(ed);
|
||||
eina_rwlock_release(&ed->rwlock);
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ static Eet_Error
|
|||
eet_flush(Eet_File *ef);
|
||||
#endif /* if 0 */
|
||||
static Eet_Error
|
||||
eet_flush2(Eet_File *ef);
|
||||
eet_flush2(Eet_File *ef, Eina_Bool sync);
|
||||
static Eet_File_Node *
|
||||
find_node_by_name(Eet_File *ef,
|
||||
const char *name);
|
||||
|
@ -288,7 +288,7 @@ eet_string_match(const char *s1,
|
|||
|
||||
/* flush out writes to a v2 eet file */
|
||||
static Eet_Error
|
||||
eet_flush2(Eet_File *ef)
|
||||
eet_flush2(Eet_File *ef, Eina_Bool sync)
|
||||
{
|
||||
Eet_File_Node *efn;
|
||||
FILE *fp;
|
||||
|
@ -509,6 +509,9 @@ eet_flush2(Eet_File *ef)
|
|||
/* no more writes pending */
|
||||
ef->writes_pending = 0;
|
||||
|
||||
#ifndef _WIN32
|
||||
if (sync) fdatasync(fileno(fp));
|
||||
#endif
|
||||
fclose(fp);
|
||||
|
||||
return EET_ERROR_NONE;
|
||||
|
@ -664,7 +667,30 @@ eet_sync(Eet_File *ef)
|
|||
|
||||
LOCK_FILE(ef);
|
||||
|
||||
ret = eet_flush2(ef);
|
||||
ret = eet_flush2(ef, EINA_FALSE);
|
||||
|
||||
UNLOCK_FILE(ef);
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eet_Error
|
||||
eet_sync_sync(Eet_File *ef)
|
||||
{
|
||||
Eet_Error ret;
|
||||
|
||||
if (eet_check_pointer(ef))
|
||||
return EET_ERROR_BAD_OBJECT;
|
||||
|
||||
if ((ef->mode != EET_FILE_MODE_WRITE) &&
|
||||
(ef->mode != EET_FILE_MODE_READ_WRITE))
|
||||
return EET_ERROR_NOT_WRITABLE;
|
||||
|
||||
if (!ef->writes_pending)
|
||||
return EET_ERROR_NONE;
|
||||
|
||||
LOCK_FILE(ef);
|
||||
|
||||
ret = eet_flush2(ef, EINA_TRUE);
|
||||
|
||||
UNLOCK_FILE(ef);
|
||||
return ret;
|
||||
|
@ -1283,7 +1309,7 @@ eet_internal_close(Eet_File *ef,
|
|||
goto on_error;
|
||||
}
|
||||
|
||||
err = eet_flush2(ef);
|
||||
err = eet_flush2(ef, EINA_FALSE);
|
||||
|
||||
eet_identity_unref(ef->key);
|
||||
ef->key = NULL;
|
||||
|
|
|
@ -607,11 +607,6 @@ _efl_gfx_path_append_arc_to(Eo *obj, Efl_Gfx_Path_Data *pd,
|
|||
// Correction of out-of-range radii, see F6.6.1 (step 2)
|
||||
rx = fabs(rx);
|
||||
ry = fabs(ry);
|
||||
if ((rx < 0.5) || (ry < 0.5))
|
||||
{
|
||||
_efl_gfx_path_append_line_to(obj, pd, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
angle = angle * M_PI / 180.0;
|
||||
cos_phi = cos(angle);
|
||||
|
|
|
@ -2197,7 +2197,7 @@ comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, vo
|
|||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
Comp_Surface *cs = data;
|
||||
Eina_List *l = NULL, *ll;
|
||||
struct wl_resource *res;
|
||||
struct wl_resource *res = NULL;
|
||||
int x, y;
|
||||
Comp_Seat *s;
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ static const char *xdg_pictures_dir = NULL;
|
|||
static const char *xdg_videos_dir = NULL;
|
||||
static const char *hostname = NULL;
|
||||
|
||||
static Eina_Prefix *pfx= NULL;
|
||||
Eina_Prefix *_efreet_pfx= NULL;
|
||||
|
||||
static void efreet_dirs_init(void);
|
||||
static const char *efreet_dir_get(const char *key, const char *fallback);
|
||||
|
@ -74,7 +74,7 @@ efreet_base_init(void)
|
|||
EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_base.\n");
|
||||
return 0;
|
||||
}
|
||||
if (!pfx) pfx = eina_prefix_new
|
||||
if (!_efreet_pfx) _efreet_pfx = eina_prefix_new
|
||||
(NULL, efreet_init, "EFREET", "efreet", "checkme",
|
||||
PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, PACKAGE_DATA_DIR, PACKAGE_DATA_DIR);
|
||||
efreet_dirs_init();
|
||||
|
@ -110,10 +110,10 @@ efreet_base_shutdown(void)
|
|||
|
||||
IF_RELEASE(hostname);
|
||||
|
||||
if (pfx)
|
||||
if (_efreet_pfx)
|
||||
{
|
||||
eina_prefix_free(pfx);
|
||||
pfx = NULL;
|
||||
eina_prefix_free(_efreet_pfx);
|
||||
_efreet_pfx = NULL;
|
||||
}
|
||||
eina_log_domain_unregister(_efreet_base_log_dom);
|
||||
_efreet_base_log_dom = -1;
|
||||
|
@ -340,9 +340,9 @@ efreet_dirs_init(void)
|
|||
xdg_cache_home = efreet_dir_get("XDG_CACHE_HOME", "/.cache");
|
||||
|
||||
/* xdg_data_dirs */
|
||||
if (pfx)
|
||||
if (_efreet_pfx)
|
||||
{
|
||||
const char *dir = eina_prefix_get(pfx);
|
||||
const char *dir = eina_prefix_get(_efreet_pfx);
|
||||
if (dir)
|
||||
{
|
||||
size_t len = strlen(dir);
|
||||
|
|
|
@ -108,6 +108,8 @@ EAPI int EFREET_EVENT_ICON_CACHE_UPDATE = 0;
|
|||
EAPI int EFREET_EVENT_DESKTOP_CACHE_UPDATE = 0;
|
||||
EAPI int EFREET_EVENT_DESKTOP_CACHE_BUILD = 0;
|
||||
|
||||
extern Eina_Prefix *_efreet_pfx;
|
||||
|
||||
#define IPC_HEAD(_type) \
|
||||
Ecore_Ipc_Event_Server_##_type *e = event; \
|
||||
if (e->server != ipc) \
|
||||
|
@ -147,7 +149,13 @@ _ipc_launch(void)
|
|||
if (run_in_tree)
|
||||
bs_binary_get(buf, sizeof(buf), "efreet", "efreetd");
|
||||
else
|
||||
snprintf(buf, sizeof(buf), PACKAGE_BIN_DIR "/efreetd");
|
||||
{
|
||||
const char *bindir = NULL;
|
||||
|
||||
if (_efreet_pfx) bindir = eina_prefix_bin_get(_efreet_pfx);
|
||||
if (bindir) snprintf(buf, sizeof(buf), "%s/efreetd", bindir);
|
||||
else snprintf(buf, sizeof(buf), PACKAGE_BIN_DIR "/efreetd");
|
||||
}
|
||||
ecore_exe_run(buf, NULL);
|
||||
num = 0;
|
||||
while ((!ipc) && (num < tries))
|
||||
|
|
|
@ -138,8 +138,8 @@ _eina_debug_dump_fhandle_bt(FILE *f, void **bt, int btlen)
|
|||
}
|
||||
// rely on normal libc buffering for file ops to avoid syscalls.
|
||||
// may or may not be a good idea. good enough for now.
|
||||
if (file) fprintf(f, "%s\t 0x%llx 0x%llx\n", file, offset, base);
|
||||
else fprintf(f, "??\t -\n");
|
||||
if (file) fprintf(f, "%s 0x%llx 0x%llx\n", file, offset, base);
|
||||
else fprintf(f, "?? -\n");
|
||||
}
|
||||
#else
|
||||
(void)f;
|
||||
|
|
|
@ -316,9 +316,9 @@ void eio_monitor_backend_del(Eio_Monitor *monitor)
|
|||
eio_monitor_fallback_del(monitor);
|
||||
}
|
||||
|
||||
Eina_Bool eio_monitor_content_check(const Eio_Monitor *monitor, const char *path)
|
||||
Eina_Bool eio_monitor_context_check(const Eio_Monitor *monitor, const char *path)
|
||||
{
|
||||
return eio_monitor_fallback_content_check(monitor, path);
|
||||
return eio_monitor_fallback_context_check(monitor, path);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -274,7 +274,7 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter)
|
|||
Eina_Value *value_st = NULL;
|
||||
Eina_Array *st_members = eina_array_new(1);
|
||||
unsigned int offset = 0, z;
|
||||
char name[7];//arg000 + \0
|
||||
char name[16];//arg000 + \0
|
||||
Eina_Value_Struct_Member *members;
|
||||
Eldbus_Struct_Desc *st_desc;
|
||||
Eina_Array *st_values = eina_array_new(1);
|
||||
|
|
|
@ -64,6 +64,12 @@ _efl_ui_dnd_drag_start(Eo *obj, Efl_Ui_Dnd_Data *pd, Eina_Content *content, cons
|
|||
return drag_win;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_dnd_drag_offset_set(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat, Eina_Size2D size)
|
||||
{
|
||||
ecore_evas_drag_offset_set(pd->ee, seat, size);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_dnd_drag_cancel(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat)
|
||||
{
|
||||
|
|
|
@ -53,6 +53,17 @@ mixin @beta Efl.Ui.Dnd requires Efl.Object {
|
|||
of the content being dragged (like a thumbnail, for example).
|
||||
Use @Efl.Content.content.set on it to do so.]]
|
||||
}
|
||||
@property drag_offset {
|
||||
[[Set the offset during a drag that was initiated through drag_start]]
|
||||
keys {
|
||||
seat: uint; [[Seat setting the offset on.]]
|
||||
}
|
||||
values {
|
||||
offset : Eina.Size2D; [[The offset for which the window will be shifted. The upper left of the window is
|
||||
calculated by adding this offset to the cursor position]]
|
||||
}
|
||||
set {}
|
||||
}
|
||||
drag_cancel {
|
||||
[[Cancels an on-going drag operation.]]
|
||||
params {
|
||||
|
|
|
@ -3712,8 +3712,13 @@ _elm_win_xwin_update(Efl_Ui_Win_Data *sd)
|
|||
sd->wm_rot.preferred_rot);
|
||||
|
||||
#ifdef HAVE_ELEMENTARY_X
|
||||
const char *engine_name = ecore_evas_engine_name_get(sd->ee);
|
||||
if (engine_name) _elm_win_need_frame_adjust(sd, engine_name);
|
||||
if (sd->csd.need && sd->x.xwin)
|
||||
TRAP(sd, borderless_set, EINA_TRUE);
|
||||
{
|
||||
TRAP(sd, borderless_set, EINA_TRUE);
|
||||
ecore_x_mwm_borderless_set(sd->x.xwin, EINA_TRUE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -9221,6 +9226,7 @@ _ui_buffer_get(Ecore_Evas_Selection_Buffer buffer)
|
|||
void
|
||||
_register_selection_changed(Efl_Ui_Selection *selection)
|
||||
{
|
||||
if (!selection) return;
|
||||
ELM_WIN_DATA_GET(efl_provider_find(selection, EFL_UI_WIN_CLASS), pd);
|
||||
|
||||
eina_array_push(pd->planned_changes, selection);
|
||||
|
@ -9303,7 +9309,7 @@ _enter_state_change_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Posit
|
|||
target->currently_inside = EINA_TRUE;
|
||||
efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_ENTERED, &ev);
|
||||
}
|
||||
else if (!move_inside && !target->currently_inside)
|
||||
else if (!move_inside && target->currently_inside)
|
||||
{
|
||||
target->currently_inside = EINA_FALSE;
|
||||
efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_LEFT, &ev);
|
||||
|
|
|
@ -24,6 +24,8 @@ static inline Eina_Array*
|
|||
_elm_sel_format_to_mime_type(Elm_Sel_Format format)
|
||||
{
|
||||
Eina_Array *ret = eina_array_new(10);
|
||||
if (format & ELM_SEL_FORMAT_URILIST)
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
if (format & ELM_SEL_FORMAT_TEXT)
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
if (format & ELM_SEL_FORMAT_MARKUP)
|
||||
|
@ -101,6 +103,8 @@ _mime_type_to_elm_sel_format(const char *mime_type)
|
|||
return ELM_SEL_FORMAT_MARKUP;
|
||||
else if (eina_streq(mime_type, "application/xhtml+xml"))
|
||||
return ELM_SEL_FORMAT_HTML;
|
||||
else if (eina_streq(mime_type, "text/uri-list"))
|
||||
return ELM_SEL_FORMAT_URILIST;
|
||||
else if (!strncmp(mime_type, "text/", strlen("text/")))
|
||||
return ELM_SEL_FORMAT_TEXT;
|
||||
else if (!strncmp(mime_type, "image/", strlen("image/")))
|
||||
|
@ -127,7 +131,20 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection,
|
|||
Eina_Array *tmp;
|
||||
unsigned char *mem_buf = NULL;
|
||||
|
||||
if (format == ELM_SEL_FORMAT_TEXT && ((char*)buf)[buflen - 1] != '\0')
|
||||
if (!obj)
|
||||
{
|
||||
ERR("elm_cnp_selection_set() passed NULL object");
|
||||
return EINA_FALSE;
|
||||
}
|
||||
ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
|
||||
if (!ee)
|
||||
{
|
||||
ERR("elm_cnp_selection_set() can't fine ecore_evas for obj %p", obj);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
if (((format == ELM_SEL_FORMAT_TEXT) && ((char *)buf)[buflen - 1] != '\0') ||
|
||||
((format == ELM_SEL_FORMAT_URILIST) && ((char *)buf)[buflen - 1] != '\0'))
|
||||
{
|
||||
mem_buf = eina_memdup((unsigned char *)buf, buflen, EINA_TRUE);
|
||||
data.mem = mem_buf;
|
||||
|
@ -139,8 +156,6 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection,
|
|||
data.len = buflen;
|
||||
}
|
||||
|
||||
ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
|
||||
|
||||
if (format == ELM_SEL_FORMAT_IMAGE)
|
||||
{
|
||||
tmp = _elm_sel_from_content_to_mime_type(buf, buflen);
|
||||
|
|
|
@ -80,7 +80,8 @@ typedef enum
|
|||
* inline images */
|
||||
ELM_SEL_FORMAT_IMAGE = 4, /**< Images */
|
||||
ELM_SEL_FORMAT_VCARD = 8, /**< Vcards */
|
||||
ELM_SEL_FORMAT_HTML = 16 /**< Raw HTML-like data (eg. webkit) */
|
||||
ELM_SEL_FORMAT_HTML = 16, /**< Raw HTML-like data (eg. webkit) */
|
||||
ELM_SEL_FORMAT_URILIST = 32 /**< URI List for file DND @since 1.27 */
|
||||
} Elm_Sel_Format;
|
||||
|
||||
/**
|
||||
|
|
|
@ -132,11 +132,14 @@ _format_to_mime_array(Elm_Sel_Format format)
|
|||
{
|
||||
Eina_Array *ret = eina_array_new(10);
|
||||
|
||||
if (format & ELM_SEL_FORMAT_URILIST)
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
if (format & ELM_SEL_FORMAT_TEXT)
|
||||
{
|
||||
eina_array_push(ret, "text/plain");
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
if (!(format & ELM_SEL_FORMAT_URILIST))
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
}
|
||||
if (format & ELM_SEL_FORMAT_MARKUP)
|
||||
eina_array_push(ret, "application/x-elementary-markup");
|
||||
|
@ -773,10 +776,11 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format,
|
|||
Eina_Array *mime_types;
|
||||
Eina_Content *content;
|
||||
Efl_Content *ui;
|
||||
int x, y, w, h;
|
||||
int x = 0, y = 0, w, h;
|
||||
Efl_Ui_Widget *widget;
|
||||
Elm_Drag_Data *dd;
|
||||
const char *str_action;
|
||||
Eina_Position2D pointer;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
|
||||
|
||||
|
@ -800,6 +804,9 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format,
|
|||
content = eina_content_new((Eina_Slice) EINA_SLICE_STR_FULL(data), eina_array_data_get(mime_types, 0));
|
||||
ui = efl_ui_dnd_drag_start(obj, content, str_action, _default_seat(obj));
|
||||
widget = createicon(createdata, ui, &x, &y);
|
||||
|
||||
evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &pointer.x, &pointer.y);
|
||||
efl_ui_dnd_drag_offset_set(obj, _default_seat(obj), EINA_SIZE2D(x - pointer.x, y - pointer.y));
|
||||
evas_object_geometry_get(widget, NULL, NULL, &w, &h);
|
||||
evas_object_show(widget);
|
||||
efl_content_set(ui, widget);
|
||||
|
|
|
@ -44,6 +44,7 @@ emile_compress(const Eina_Binbuf *data,
|
|||
Eina_Bool ok = EINA_FALSE;
|
||||
|
||||
length = _emile_compress_buffer_size(data, t);
|
||||
if (length < 0) return NULL;
|
||||
|
||||
compact = malloc(length);
|
||||
if (!compact)
|
||||
|
|
|
@ -1462,6 +1462,7 @@ evas_object_smart_del(Evas_Object *eo_obj)
|
|||
free(sobj->interface_privates);
|
||||
sobj->interface_privates = NULL;
|
||||
|
||||
sobj->data = NULL;
|
||||
if (s) evas_object_smart_unuse(s);
|
||||
}
|
||||
|
||||
|
@ -1673,6 +1674,12 @@ evas_object_smart_cleanup(Evas_Object *eo_obj)
|
|||
}
|
||||
}
|
||||
else evas_object_smart_member_del(contained_obj);
|
||||
// EEK ... it qasn't removed? remove it forcibly...
|
||||
if ((Evas_Object_Protected_Data *)o->contained == contained)
|
||||
{
|
||||
o->contained = eina_inlist_remove
|
||||
(o->contained, EINA_INLIST_GET(contained));
|
||||
}
|
||||
}
|
||||
|
||||
while (o->callbacks)
|
||||
|
|
|
@ -18016,7 +18016,7 @@ EVAS_API int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int st
|
|||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
|
||||
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
|
||||
TEXT_FIT_CONTENT_CONFIG * fc = &o->fit_content_config;
|
||||
TEXT_FIT_CONTENT_CONFIG *fc = &o->fit_content_config;
|
||||
if (fc->step_size == step_size)
|
||||
return EVAS_ERROR_SUCCESS;
|
||||
|
||||
|
|
|
@ -379,7 +379,8 @@ _drop_glyphs_ref(const void *container EINA_UNUSED, void *data, void *fdata)
|
|||
Evas_Font_Array_Data *fad = data;
|
||||
Evas_Public_Data *pd = fdata;
|
||||
|
||||
evas_common_font_glyphs_unref(fad->glyphs);
|
||||
if (fad->glyphs)
|
||||
evas_common_font_glyphs_unref(fad->glyphs);
|
||||
eina_array_pop(&pd->glyph_unref_queue);
|
||||
|
||||
return EINA_TRUE;
|
||||
|
@ -553,10 +554,12 @@ evas_object_textgrid_render(Evas_Object *eo_obj EINA_UNUSED,
|
|||
|
||||
props = &text->text_props;
|
||||
evas_common_font_draw_prepare(props);
|
||||
|
||||
evas_common_font_glyphs_ref(props->glyphs);
|
||||
evas_unref_queue_glyph_put(obj->layer->evas,
|
||||
props->glyphs);
|
||||
if (props->glyphs)
|
||||
{
|
||||
evas_common_font_glyphs_ref(props->glyphs);
|
||||
evas_unref_queue_glyph_put(obj->layer->evas,
|
||||
props->glyphs);
|
||||
}
|
||||
|
||||
fad = eina_inarray_grow(texts->array, 1);
|
||||
if (!fad)
|
||||
|
|
|
@ -66,6 +66,8 @@ static const struct ext_loader_s loaders[] =
|
|||
|
||||
MATCHING(".dds", "dds"),
|
||||
|
||||
MATCHING(".jxl", "jxl"),
|
||||
|
||||
MATCHING(".avif", "avif"),
|
||||
MATCHING(".avifs", "avif"),
|
||||
|
||||
|
@ -193,7 +195,7 @@ static const struct ext_loader_s loaders[] =
|
|||
static const char *loaders_name[] =
|
||||
{ /* in order of most likely needed */
|
||||
"png", "jpeg", "eet", "xpm", "tiff", "gif", "svg", "webp", "pmaps",
|
||||
"bmp", "tga", "wbmp", "ico", "psd", "jp2k", "dds", "avif", "heif",
|
||||
"bmp", "tga", "wbmp", "ico", "psd", "jp2k", "dds", "jxl", "avif", "heif",
|
||||
"generic"
|
||||
};
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ evas_common_save_image_to_file(RGBA_Image *im, const char *file, const char *key
|
|||
saver = "tgv";
|
||||
if (!strcasecmp(p, "avif"))
|
||||
saver = "avif";
|
||||
if (!strcasecmp(p, "jxl"))
|
||||
saver = "jxl";
|
||||
}
|
||||
|
||||
if (saver)
|
||||
|
|
|
@ -206,6 +206,7 @@ EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, heif);
|
|||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, ico);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jpeg);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jp2k);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jxl);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, pmaps);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, png);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, psd);
|
||||
|
@ -227,6 +228,7 @@ EVAS_EINA_STATIC_MODULE_DEFINE(vg_saver, svg);
|
|||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, avif);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, eet);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, jpeg);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, jxl);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, png);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, tiff);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, webp);
|
||||
|
@ -320,6 +322,9 @@ static const struct {
|
|||
#ifdef EVAS_STATIC_BUILD_JP2K
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, jp2k),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, jxl),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_PMAPS
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, pmaps),
|
||||
#endif
|
||||
|
@ -369,6 +374,9 @@ static const struct {
|
|||
#ifdef EVAS_STATIC_BUILD_JPEG
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, jpeg),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, jxl),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_PNG
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, png),
|
||||
#endif
|
||||
|
|
|
@ -12,6 +12,8 @@ webpdemux = dependency('libwebpdemux', version: ['>=0.5.0'], required: get_optio
|
|||
libopenjp2 = dependency('libopenjp2', required: get_option('evas-loaders-disabler').contains('jp2k') == false)
|
||||
libavif = dependency('libavif', required: get_option('evas-loaders-disabler').contains('avif') == false, version: '>= 0.8.2')
|
||||
heif= dependency('libheif', required: get_option('evas-loaders-disabler').contains('heif') == false)
|
||||
libjxl = dependency('libjxl', required: get_option('evas-loaders-disabler').contains('jxl') == false, version: '>= 0.6.2')
|
||||
libjxl_threads = dependency('libjxl_threads', required: get_option('evas-loaders-disabler').contains('jxl') == false, version: '>= 0.6.2')
|
||||
|
||||
evas_image_loaders_file = [
|
||||
['avif', 'shared', [libavif]],
|
||||
|
@ -23,6 +25,7 @@ evas_image_loaders_file = [
|
|||
['ico', 'shared', []],
|
||||
['jpeg', 'static', [jpeg]],
|
||||
['jp2k', 'shared', [libopenjp2]],
|
||||
['jxl', 'shared', [libjxl, libjxl_threads]],
|
||||
['pmaps', 'shared', []],
|
||||
['png', 'static', [png]],
|
||||
['psd', 'shared', []],
|
||||
|
@ -38,6 +41,7 @@ evas_image_savers_file = [
|
|||
['avif', 'shared', [libavif]],
|
||||
['eet', 'static', [eet]],
|
||||
['jpeg', 'static', [jpeg]],
|
||||
['jxl' , 'shared', [libjxl, libjxl_threads]],
|
||||
['png', 'static', [png]],
|
||||
['tgv', 'shared', [rg_etc, lz4]],
|
||||
['tiff', 'shared', [tiff]],
|
||||
|
|
|
@ -331,11 +331,9 @@ _dri3_pixmap_from_fd(Ecore_X_Display *dpy, Ecore_X_Drawable draw, int width, int
|
|||
if (!dpy)
|
||||
return 0;
|
||||
|
||||
c = XGetXCBConnection(dpy);
|
||||
if (!c)
|
||||
return 0;
|
||||
|
||||
pixmap = xcb_generate_id(c);
|
||||
if (!pixmap)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -173,6 +173,9 @@ _ecore_evas_drm_init(Ecore_Evas *ee, Ecore_Evas_Engine_Drm_Data *edata, const ch
|
|||
if (edata->output) ecore_drm2_output_user_data_set(edata->output, ee);
|
||||
else WRN("Could not find output at %d %d", edata->x, edata->y);
|
||||
|
||||
ecore_drm2_device_preferred_depth_get(edata->dev,
|
||||
&edata->depth, &edata->bpp);
|
||||
|
||||
ecore_event_evas_init();
|
||||
if (!handlers)
|
||||
{
|
||||
|
@ -1017,12 +1020,11 @@ _ecore_evas_new_internal(const char *device, int x, int y, int w, int h, Eina_Bo
|
|||
edata->once = EINA_TRUE;
|
||||
edata->offset = 0.0;
|
||||
}
|
||||
|
||||
edata->x = x;
|
||||
edata->y = y;
|
||||
edata->w = w;
|
||||
edata->h = h;
|
||||
edata->depth = 24; // FIXME: Remove hardcode
|
||||
edata->bpp = 32; // FIXME: Remove hardcode
|
||||
edata->format = DRM_FORMAT_XRGB8888;
|
||||
|
||||
if (_ecore_evas_drm_init(ee, edata, device) < 1)
|
||||
|
|
|
@ -4038,7 +4038,10 @@ _force_stop_self_dnd(Ecore_Evas *ee)
|
|||
//Selection buffer is freed as a response to the FINISHED event.
|
||||
ecore_x_pointer_ungrab();
|
||||
ecore_x_dnd_self_drop();
|
||||
ecore_x_dnd_aware_set(ee->prop.window, EINA_FALSE);
|
||||
if ((!ee->func.fn_dnd_drop) &&
|
||||
(!ee->func.fn_dnd_state_change) &&
|
||||
(!ee->func.fn_dnd_motion))
|
||||
ecore_x_dnd_aware_set(ee->prop.window, EINA_FALSE);
|
||||
ecore_event_handler_del(edata->mouse_up_handler);
|
||||
edata->mouse_up_handler = NULL;
|
||||
|
||||
|
@ -4448,11 +4451,22 @@ static void
|
|||
_x11_drag_move(void *data, Ecore_X_Xdnd_Position *pos)
|
||||
{
|
||||
Ecore_Evas *ee = data;
|
||||
Eina_Rect rect;
|
||||
Eina_Size2D offset;
|
||||
|
||||
Eina_Rect rect;
|
||||
ecore_evas_geometry_get(ee->drag.rep, &rect.x, &rect.y, &rect.w, &rect.h);
|
||||
|
||||
ecore_evas_move(ee->drag.rep, pos->position.x - rect.w / 2, pos->position.y - rect.h/2);
|
||||
if (ee->drag.offset.w == INT_MAX)
|
||||
offset.w = rect.size.w / -2;
|
||||
else
|
||||
offset.w = ee->drag.offset.w;
|
||||
|
||||
if (ee->drag.offset.h == INT_MAX)
|
||||
offset.h = rect.size.h / -2;
|
||||
else
|
||||
offset.h = ee->drag.offset.h;
|
||||
|
||||
ecore_evas_move(ee->drag.rep, pos->position.x + offset.w, pos->position.y + offset.h);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
|
|
@ -0,0 +1,521 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <jxl/decode.h>
|
||||
#include <jxl/resizable_parallel_runner.h>
|
||||
|
||||
#include <Ecore.h>
|
||||
#include "Evas_Loader.h"
|
||||
#include "evas_common_private.h"
|
||||
|
||||
typedef struct _Evas_Loader_Internal Evas_Loader_Internal;
|
||||
struct _Evas_Loader_Internal
|
||||
{
|
||||
Eina_File *f;
|
||||
Evas_Image_Load_Opts *opts;
|
||||
Evas_Image_Animated *animated;
|
||||
JxlParallelRunner *runner;
|
||||
JxlDecoder *decoder;
|
||||
double duration;
|
||||
};
|
||||
|
||||
static int _evas_loader_jxl_log_dom = -1;
|
||||
|
||||
#ifdef ERR
|
||||
# undef ERR
|
||||
#endif
|
||||
#define ERR(...) EINA_LOG_DOM_ERR(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
#ifdef WRN
|
||||
# undef WRN
|
||||
#endif
|
||||
#define WRN(...) EINA_LOG_DOM_WARN(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
#ifdef INF
|
||||
# undef INF
|
||||
#endif
|
||||
#define INF(...) EINA_LOG_DOM_INFO(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
void _rgba_to_bgra(void *pixels, int size /* in pixels */)
|
||||
{
|
||||
unsigned long long int *iter = pixels;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (size >> 1); i++, iter++)
|
||||
{
|
||||
*iter =
|
||||
/* we keep A and G */
|
||||
(*iter & 0xff00ff00ff00ff00) |
|
||||
/* we shift R */
|
||||
((*iter & 0x000000ff000000ff) << 16) |
|
||||
/* we shift B */
|
||||
((*iter & 0x00ff000000ff0000) >> 16);
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_head_jxl_internal(Evas_Loader_Internal *loader,
|
||||
Emile_Image_Property *prop,
|
||||
void *map, size_t length,
|
||||
int *error)
|
||||
{
|
||||
Evas_Image_Animated *animated;
|
||||
JxlBasicInfo basic_info;
|
||||
JxlFrameHeader frame_header;
|
||||
JxlDecoder *decoder;
|
||||
JxlDecoderStatus s;
|
||||
JxlDecoderStatus st;
|
||||
uint32_t frame_count = 0;
|
||||
Eina_Bool ret;
|
||||
|
||||
animated = loader->animated;
|
||||
|
||||
ret = EINA_FALSE;
|
||||
prop->w = 0;
|
||||
prop->h = 0;
|
||||
prop->alpha = EINA_FALSE;
|
||||
|
||||
decoder = JxlDecoderCreate(NULL);
|
||||
if (!decoder)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
return ret;
|
||||
}
|
||||
|
||||
JxlDecoderSetKeepOrientation(decoder, JXL_TRUE);
|
||||
|
||||
st = JxlDecoderSubscribeEvents(decoder,
|
||||
JXL_DEC_BASIC_INFO |
|
||||
JXL_DEC_FRAME);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not subscribe to JXL events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto destroy_decoder;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetInput(decoder, map, length);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto destroy_decoder;
|
||||
}
|
||||
|
||||
JxlDecoderCloseInput(decoder);
|
||||
|
||||
/* First, JXL_DEC_BASIC_INFO event */
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_BASIC_INFO)
|
||||
{
|
||||
ERR("Can not set JXL input (JXL_DEC_BASIC_INFO): %d", st);
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
s = JxlDecoderGetBasicInfo(decoder, &basic_info);
|
||||
if (s != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not retrieve basic info");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
prop->w = basic_info.xsize;
|
||||
prop->h = basic_info.ysize;
|
||||
/* if size is invalid, we exit */
|
||||
if ((prop->w < 1) ||
|
||||
(prop->h < 1) ||
|
||||
(prop->w > IMG_MAX_SIZE) ||
|
||||
(prop->h > IMG_MAX_SIZE) ||
|
||||
IMG_TOO_BIG(prop->w, prop->h))
|
||||
{
|
||||
if (IMG_TOO_BIG(prop->w, prop->h))
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
else
|
||||
*error= EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
prop->alpha = (basic_info.alpha_bits != 0);
|
||||
|
||||
/* Then, JXL_DEC_FRAME event */
|
||||
|
||||
if (basic_info.have_animation)
|
||||
{
|
||||
frame_count = 0;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st == JXL_DEC_FRAME)
|
||||
{
|
||||
JxlDecoderGetFrameHeader(decoder, &frame_header);
|
||||
frame_count++;
|
||||
if (frame_header.is_last)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Finally, JXL_DEC_SUCCESS event */
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input (JXL_DEC_SUCCESS)");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
if (basic_info.have_animation)
|
||||
{
|
||||
animated->loop_hint = basic_info.animation.num_loops ? EVAS_IMAGE_ANIMATED_HINT_NONE : EVAS_IMAGE_ANIMATED_HINT_LOOP;
|
||||
animated->frame_count = frame_count;
|
||||
animated->loop_count = basic_info.animation.num_loops;
|
||||
animated->animated = EINA_TRUE;
|
||||
loader->duration = ((double)frame_header.duration * (double)basic_info.animation.tps_denominator) / (double)basic_info.animation.tps_numerator;
|
||||
}
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
ret = EINA_TRUE;
|
||||
|
||||
release_input:
|
||||
JxlDecoderReleaseInput(decoder);
|
||||
destroy_decoder:
|
||||
JxlDecoderDestroy(decoder);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_data_jxl_internal(Evas_Loader_Internal *loader,
|
||||
Emile_Image_Property *prop,
|
||||
void *pixels,
|
||||
void *map, size_t length,
|
||||
int *error)
|
||||
{
|
||||
Evas_Image_Animated *animated;
|
||||
JxlParallelRunner *runner;
|
||||
JxlDecoder *decoder;
|
||||
JxlPixelFormat pixel_format;
|
||||
JxlDecoderStatus st;
|
||||
size_t buffer_size;
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
|
||||
animated = loader->animated;
|
||||
|
||||
runner = loader->runner;
|
||||
decoder = loader->decoder;
|
||||
if (!runner || !decoder)
|
||||
{
|
||||
runner = JxlResizableParallelRunnerCreate(NULL);
|
||||
if (!runner)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
decoder = JxlDecoderCreate(NULL);
|
||||
if (!decoder)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetParallelRunner(decoder,
|
||||
JxlResizableParallelRunner,
|
||||
runner);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL runner");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
JxlResizableParallelRunnerSetThreads(runner,
|
||||
JxlResizableParallelRunnerSuggestThreads(prop->w, prop->h));
|
||||
|
||||
JxlDecoderSetKeepOrientation(decoder, JXL_TRUE);
|
||||
|
||||
st = JxlDecoderSetInput(decoder, map, length);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
JxlDecoderCloseInput(decoder);
|
||||
|
||||
st = JxlDecoderSubscribeEvents(decoder,
|
||||
JXL_DEC_FULL_IMAGE);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not subscribe to JXL events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
}
|
||||
|
||||
pixel_format.num_channels = 4;
|
||||
pixel_format.data_type = JXL_TYPE_UINT8;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
pixel_format.endianness = JXL_BIG_ENDIAN;
|
||||
#else
|
||||
pixel_format.endianness = JXL_LITTLE_ENDIAN;
|
||||
#endif
|
||||
pixel_format.align = 0;
|
||||
|
||||
if (animated->animated)
|
||||
{
|
||||
/*
|
||||
* According to the libjxl devsn there is a better way than
|
||||
* JxlDecoderSkipFrames(), but i can't...
|
||||
*/
|
||||
JxlDecoderSkipFrames(decoder, animated->cur_frame);
|
||||
}
|
||||
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (animated->animated)
|
||||
{
|
||||
if (st == JXL_DEC_SUCCESS)
|
||||
goto on_success;
|
||||
}
|
||||
|
||||
if (st != JXL_DEC_NEED_IMAGE_OUT_BUFFER)
|
||||
{
|
||||
ERR("Can not process JXL_DEC_NEED_IMAGE_OUT_BUFFER events (st=%d)", st);
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderImageOutBufferSize(decoder,
|
||||
&pixel_format,
|
||||
&buffer_size);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("JxlDecoderImageOutBufferSize failed");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
if (buffer_size != (size_t)(prop->w * prop->h * 4))
|
||||
{
|
||||
ERR("buffer size does not match image size");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetImageOutBuffer(decoder,
|
||||
&pixel_format,
|
||||
pixels,
|
||||
buffer_size);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set image output buffer");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_FULL_IMAGE)
|
||||
{
|
||||
ERR("Can not process JXL_DEC_FULL_IMAGE events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
_rgba_to_bgra(pixels, prop->w * prop->h);
|
||||
|
||||
on_success:
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
ret = EINA_TRUE;
|
||||
|
||||
on_error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_image_load_file_open_jxl(Eina_File *f, Eina_Stringshare *key EINA_UNUSED,
|
||||
Evas_Image_Load_Opts *opts,
|
||||
Evas_Image_Animated *animated,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
|
||||
loader = calloc(1, sizeof (Evas_Loader_Internal));
|
||||
if (!loader)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
loader->f = f;
|
||||
loader->opts = opts;
|
||||
loader->animated = animated;
|
||||
|
||||
return loader;
|
||||
}
|
||||
|
||||
static void
|
||||
evas_image_load_file_close_jxl(void *loader_data)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
|
||||
loader = loader_data;
|
||||
if (loader->decoder)
|
||||
{
|
||||
JxlDecoderReleaseInput(loader->decoder);
|
||||
JxlDecoderDestroy(loader->decoder);
|
||||
/* if decoder is valid, runner is necessarly valid */
|
||||
JxlResizableParallelRunnerDestroy(loader->runner);
|
||||
}
|
||||
free(loader_data);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_head_jxl(void *loader_data,
|
||||
Evas_Image_Property *prop,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader = loader_data;
|
||||
Eina_File *f;
|
||||
void *map;
|
||||
Eina_Bool val;
|
||||
|
||||
f = loader->f;
|
||||
|
||||
map = eina_file_map_all(f, EINA_FILE_RANDOM);
|
||||
if (!map)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_DOES_NOT_EXIST;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
val = evas_image_load_file_head_jxl_internal(loader,
|
||||
(Emile_Image_Property *)prop,
|
||||
map, eina_file_size_get(f),
|
||||
error);
|
||||
|
||||
eina_file_map_free(f, map);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_data_jxl(void *loader_data,
|
||||
Evas_Image_Property *prop,
|
||||
void *pixels,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
Eina_File *f;
|
||||
void *map;
|
||||
Eina_Bool val = EINA_FALSE;
|
||||
|
||||
loader = (Evas_Loader_Internal *)loader_data;
|
||||
f = loader->f;
|
||||
|
||||
map = eina_file_map_all(f, EINA_FILE_WILLNEED);
|
||||
if (!map)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_DOES_NOT_EXIST;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
val = evas_image_load_file_data_jxl_internal(loader,
|
||||
(Emile_Image_Property *)prop,
|
||||
pixels,
|
||||
map, eina_file_size_get(f),
|
||||
error);
|
||||
|
||||
eina_file_map_free(f, map);
|
||||
|
||||
on_error:
|
||||
return val;
|
||||
}
|
||||
|
||||
static double
|
||||
evas_image_load_frame_duration_jxl(void *loader_data,
|
||||
int start_frame,
|
||||
int frame_num)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
Evas_Image_Animated *animated;
|
||||
|
||||
loader = (Evas_Loader_Internal *)loader_data;
|
||||
animated = loader->animated;
|
||||
|
||||
if (!animated->animated)
|
||||
return -1.0;
|
||||
|
||||
if (frame_num < 0)
|
||||
return -1.0;
|
||||
|
||||
if ((start_frame + frame_num) > animated->frame_count)
|
||||
return -1.0;
|
||||
|
||||
if (frame_num < 1)
|
||||
frame_num = 1;
|
||||
|
||||
return loader->duration;
|
||||
}
|
||||
|
||||
static Evas_Image_Load_Func evas_image_load_jxl_func =
|
||||
{
|
||||
EVAS_IMAGE_LOAD_VERSION,
|
||||
evas_image_load_file_open_jxl,
|
||||
evas_image_load_file_close_jxl,
|
||||
evas_image_load_file_head_jxl,
|
||||
NULL,
|
||||
evas_image_load_file_data_jxl,
|
||||
evas_image_load_frame_duration_jxl,
|
||||
EINA_TRUE,
|
||||
EINA_FALSE
|
||||
};
|
||||
|
||||
static int
|
||||
module_open(Evas_Module *em)
|
||||
{
|
||||
if (!em) return 0;
|
||||
|
||||
_evas_loader_jxl_log_dom = eina_log_domain_register("evas-jxl", EINA_COLOR_BLUE);
|
||||
if (_evas_loader_jxl_log_dom < 0)
|
||||
{
|
||||
EINA_LOG_ERR("Can not create a module log domain.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
em->functions = (void *)(&evas_image_load_jxl_func);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
module_close(Evas_Module *em EINA_UNUSED)
|
||||
{
|
||||
if (_evas_loader_jxl_log_dom >= 0)
|
||||
{
|
||||
eina_log_domain_unregister(_evas_loader_jxl_log_dom);
|
||||
_evas_loader_jxl_log_dom = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static Evas_Module_Api evas_modapi =
|
||||
{
|
||||
EVAS_MODULE_API_VERSION,
|
||||
"jxl",
|
||||
"none",
|
||||
{
|
||||
module_open,
|
||||
module_close
|
||||
}
|
||||
};
|
||||
|
||||
EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_LOADER, image_loader, jxl);
|
||||
|
||||
#ifndef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_MODULE_DEFINE(image_loader, jxl);
|
||||
#endif
|
|
@ -596,6 +596,17 @@ evas_image_load_file_head_with_data_png(void *loader_data,
|
|||
}
|
||||
free(pixels2);
|
||||
|
||||
if ((epi.hasa) && (pack_offset == sizeof(DATA32)))
|
||||
{
|
||||
DATA32 *dst_ptr = (DATA32 *) surface;
|
||||
int total = w * h;
|
||||
|
||||
for (i = 0; i < total; i++)
|
||||
{
|
||||
if (A_VAL(dst_ptr) == 0) *dst_ptr = 0;
|
||||
dst_ptr++;
|
||||
}
|
||||
}
|
||||
prop->info.premul = EINA_TRUE;
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
|
@ -882,6 +893,17 @@ evas_image_load_file_data_png(void *loader_data,
|
|||
}
|
||||
}
|
||||
|
||||
if ((epi.hasa) && (pack_offset == sizeof(DATA32)))
|
||||
{
|
||||
DATA32 *dst_ptr = (DATA32 *) surface;
|
||||
int total = w * h;
|
||||
|
||||
for (i = 0; i < total; i++)
|
||||
{
|
||||
if (A_VAL(dst_ptr) == 0) *dst_ptr = 0;
|
||||
dst_ptr++;
|
||||
}
|
||||
}
|
||||
prop->info.premul = EINA_TRUE;
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue