Compare commits
No commits in common. "master" and "master" have entirely different histories.
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"project_id" : "efl",
|
||||||
|
"projects" : "efl",
|
||||||
|
"conduit_uri" : "https://phab.enlightenment.org/",
|
||||||
|
"phabricator.uri" : "https://phab.enlightenment.org/",
|
||||||
|
"repository.callsign" : "EFL"
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/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
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/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
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
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
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,114 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/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
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/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
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/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
|
|
@ -0,0 +1,20 @@
|
||||||
|
[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']
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/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
|
|
@ -0,0 +1,13 @@
|
||||||
|
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')
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#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()
|
|
@ -0,0 +1,12 @@
|
||||||
|
src = files([
|
||||||
|
'main.c',
|
||||||
|
])
|
||||||
|
|
||||||
|
deps = [eina, efl, elm]
|
||||||
|
|
||||||
|
executable('efl_example', src,
|
||||||
|
dependencies : deps,
|
||||||
|
include_directories : inc,
|
||||||
|
install : true
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/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"
|
|
@ -0,0 +1,13 @@
|
||||||
|
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}
|
|
@ -0,0 +1 @@
|
||||||
|
geninfo_auto_base=1
|
|
@ -0,0 +1,7 @@
|
||||||
|
extraction:
|
||||||
|
python:
|
||||||
|
python_setup:
|
||||||
|
version: 3
|
||||||
|
queries:
|
||||||
|
-
|
||||||
|
exclude: cpp/fixme-comment
|
|
@ -0,0 +1,153 @@
|
||||||
|
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}"
|
|
@ -0,0 +1,10 @@
|
||||||
|
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
|
|
@ -0,0 +1,59 @@
|
||||||
|
** 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,12 +1,10 @@
|
||||||
![EFL](/data/readme/efl.png)
|
EFL
|
||||||
# EFL
|
===
|
||||||
|
|
||||||
-----
|
******************************************************************************
|
||||||
|
FOR ANY ISSUES PLEASE EMAIL:
|
||||||
*Please report bugs/issues at*
|
enlightenment-devel@lists.sourceforge.net
|
||||||
[git.enlightenment.org](https://git.enlightenment.org/enlightenment/efl/issues)
|
******************************************************************************
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
EFL is a collection of libraries for handling many common tasks a
|
EFL is a collection of libraries for handling many common tasks a
|
||||||
developer may have such as data structures, communication, rendering,
|
developer may have such as data structures, communication, rendering,
|
||||||
|
@ -26,21 +24,23 @@ Config files installed to help developers build against EFL.
|
||||||
|
|
||||||
For more documentation please see:
|
For more documentation please see:
|
||||||
|
|
||||||
[www.enlightenment.org/doc](https://www.enlightenment.org/docs)
|
https://www.enlightenment.org/docs
|
||||||
|
|
||||||
## Platforms
|
PLATFORMS
|
||||||
|
---------
|
||||||
|
|
||||||
EFL is primarily developed on Linux (GNU/Linux) and should work on
|
EFL is primarily developerd on Linux (GNU/Linux) and should work on
|
||||||
most distributions as long as dependencies are provided. It has been
|
most distributions as long as dependencies are provided. It has been
|
||||||
compiled and run also on Windows (using MSYS2 + mingw-w64) - please see
|
compiled and run also on Windows (using MSYS2 + mingw-w64 - please see
|
||||||
[windows docs](https://www.enlightenment.org/docs/distros/windows-start.md),
|
https://phab.enlightenment.org/w/windows/), Mac OS X, FreeBSD and
|
||||||
Mac OS X, FreeBSD and NetBSD.
|
NetBSD.
|
||||||
|
|
||||||
## Components
|
COMPONENTS
|
||||||
|
----------
|
||||||
|
|
||||||
**Ecore:**
|
**Ecore:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is the core main-loop, system events and execution layer. This
|
This is the core main-loop, system events and execution layer. This
|
||||||
handles running the main loop, integrating with external data and
|
handles running the main loop, integrating with external data and
|
||||||
|
@ -48,25 +48,31 @@ timing sources (the system clock, file descriptors, system signals),
|
||||||
and producing an event queue, walking that queue and dispatching
|
and producing an event queue, walking that queue and dispatching
|
||||||
events to appropriate callbacks.
|
events to appropriate callbacks.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Audio:**
|
**Ecore Audio:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library provides an API for audio playback and recording. It uses
|
This library provides an API for audio playback and recording. It uses
|
||||||
pulse audio underneath to handle mixing and policies. The API for this
|
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
|
should not be considered stable right now because it relies on EO and
|
||||||
EO is not considered finalized yet.
|
EO is not considered finalized yet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Cocoa:**
|
**Ecore Cocoa:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
||||||
Mac porting.
|
Mac porting.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Con:**
|
**Ecore Con:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This provides a completely event-based TCP/UDP and Unix domain socket
|
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
|
API that integrates with the main-loop. This means no blocking to send
|
||||||
|
@ -77,9 +83,11 @@ verification, CURL wrapping for HTTP connection usage (GETs, POSTs
|
||||||
etc.), asynchronous DNS lookups and provides the ability to also be a
|
etc.), asynchronous DNS lookups and provides the ability to also be a
|
||||||
server, not just a client, with the same event-based API.
|
server, not just a client, with the same event-based API.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Evas:**
|
**Ecore Evas:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This acts as glue between the display target (X11, Wayland,
|
This acts as glue between the display target (X11, Wayland,
|
||||||
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
||||||
|
@ -88,55 +96,69 @@ input events (Keyboard, Mouse, Multi-touch) into Evas, which then
|
||||||
selects the target object and calls the callbacks. It also provides
|
selects the target object and calls the callbacks. It also provides
|
||||||
wrappers/glue for manipulating the Window/Surface.
|
wrappers/glue for manipulating the Window/Surface.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Fb:**
|
**Ecore Fb:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This provides virtual terminal allocation, access and handling,
|
This provides virtual terminal allocation, access and handling,
|
||||||
frame buffer information, raw input handling for keyboard, mouse and
|
frame buffer information, raw input handling for keyboard, mouse and
|
||||||
touch (via tslib).
|
touch (via tslib).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore File:**
|
**Ecore File:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This provides file access convenience APIs for doing simple file
|
This provides file access convenience APIs for doing simple file
|
||||||
operations like renames, copies, listing directories and more. It also
|
operations like renames, copies, listing directories and more. It also
|
||||||
supports file change monitoring and URL downloads.
|
supports file change monitoring and URL downloads.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore IMF:**
|
**Ecore IMF:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is an input method abstraction framework to allow EFL to talk to
|
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
|
things like SCIM, IBus, Wayland and XIM. This allows for complex text
|
||||||
entry in languages such as Chinese, Japanese and Korean.
|
entry in languages such as Chinese, Japanese and Korean.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore IMF Evas:**
|
**Ecore IMF Evas:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library glues Input method support from Ecore IMF and Evas
|
This library glues Input method support from Ecore IMF and Evas
|
||||||
together.
|
together.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Input:**
|
**Ecore Input:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This acts as a generic input layer where multiple display systems can
|
This acts as a generic input layer where multiple display systems can
|
||||||
post events in the same format to the event queue.
|
post events in the same format to the event queue.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Input Evas:**
|
**Ecore Input Evas:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This Routes events from Ecore Input into a given Evas canvas which
|
This Routes events from Ecore Input into a given Evas canvas which
|
||||||
will then route the event further to the destination object and
|
will then route the event further to the destination object and
|
||||||
callbacks.
|
callbacks.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore IPC:**
|
**Ecore IPC:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This acts as a layer on top of Ecore Con which handles entire IPC
|
This acts as a layer on top of Ecore Con which handles entire IPC
|
||||||
message packets, dealing with header delta compression and
|
message packets, dealing with header delta compression and
|
||||||
|
@ -145,39 +167,50 @@ 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
|
entire API is event based almost exactly like Ecore Con and thus it
|
||||||
supports all the transport layers Ecore Con supports.
|
supports all the transport layers Ecore Con supports.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore SDL:**
|
**Ecore SDL:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This acts as a wrapper/glue around SDL to handle SDL Windows as well
|
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
|
as input events from SDL and tie them to the Ecore main-loop and event
|
||||||
queue.
|
queue.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Wayland:**
|
**Ecore Wayland:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is a glue/wrapper library to interface EFL to Wayland libraries
|
This is a glue/wrapper library to interface EFL to Wayland libraries
|
||||||
to tie them into the Ecore main-loop and event queue.
|
to tie them into the Ecore main-loop and event queue.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore Win32:**
|
**Ecore Win32:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
||||||
the Ecore main-loop and event queue.
|
the Ecore main-loop and event queue.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ecore X:**
|
**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
|
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 less footwork as well as being glue to tie these into the Ecore main-loop
|
||||||
and event queue.
|
and event queue.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Edje:**
|
**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
|
This is a graphics event, input, theme, animation and theme
|
||||||
abstraction library used to place many UI/UX elements into data files
|
abstraction library used to place many UI/UX elements into data files
|
||||||
|
@ -189,9 +222,11 @@ 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
|
can work on any OS/Architecture just like a JPEG or PNG might be
|
||||||
portable.
|
portable.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Eet:**
|
**Eet:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library is a data storage, encoding and decoding library
|
This library is a data storage, encoding and decoding library
|
||||||
designed to be extremely compact, fast and easy to use. It can take
|
designed to be extremely compact, fast and easy to use. It can take
|
||||||
|
@ -206,23 +241,29 @@ Terminology. It supports encryption of data too via SSL, signing of
|
||||||
files, as well as various compression techniques. It also supports
|
files, as well as various compression techniques. It also supports
|
||||||
encoding and decoding of image data in lossless or lossy form.
|
encoding and decoding of image data in lossless or lossy form.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Eeze:**
|
**Eeze:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library acts as an abstraction to discovering hardware interfaces
|
This library acts as an abstraction to discovering hardware interfaces
|
||||||
for sensors as well as removable media and much more.
|
for sensors as well as removable media and much more.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**EFL:**
|
**EFL:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is just some core common header data like a common version number
|
This is just some core common header data like a common version number
|
||||||
for EFL and how to expose the EO API.
|
for EFL and how to expose the EO API.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Efreet:**
|
**Efreet:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library provides code for handling Freedesktop.org standards such
|
This library provides code for handling Freedesktop.org standards such
|
||||||
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
||||||
|
@ -230,9 +271,11 @@ a central daemon to handle monitoring for changes that the library
|
||||||
talks to, and the daemon handles updating local cache files the
|
talks to, and the daemon handles updating local cache files the
|
||||||
library reads.
|
library reads.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Eina:**
|
**Eina:**
|
||||||
|
|
||||||
*LGPL v2 license*
|
//LGPL v2 license//
|
||||||
|
|
||||||
This library provides low-level routines for common things like linked
|
This library provides low-level routines for common things like linked
|
||||||
lists, hash tables, growable arrays, basic string buffers, shared
|
lists, hash tables, growable arrays, basic string buffers, shared
|
||||||
|
@ -241,23 +284,29 @@ memory pools, copy-on-write segments, iterators, matrices, general
|
||||||
data models, red/black trees, quad-trees, a simple SAX XML parser and
|
data models, red/black trees, quad-trees, a simple SAX XML parser and
|
||||||
more.
|
more.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**EIO:**
|
**EIO:**
|
||||||
|
|
||||||
*LGPL v2 license*
|
//LGPL v2 license//
|
||||||
|
|
||||||
This is an asynchronous I/O library for doing disk I/O without blocking.
|
This is an asynchronous I/O library for doing disk I/O without blocking.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**ElDBus:**
|
**ElDBus:**
|
||||||
|
|
||||||
*LGPL v2 license*
|
//LGPL v2 license//
|
||||||
|
|
||||||
This is a DBus access library to allow you to create DBus services as
|
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
|
well as clients. This glues in DBus into the main-loop so all access is
|
||||||
asynchronous.
|
asynchronous.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Embryo:**
|
**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
|
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
|
library. This is used for scripting in Edje. The code is based on
|
||||||
|
@ -265,9 +314,11 @@ original source from the Pawn/Small Language but has been made
|
||||||
portable (endianness issues fixed) and 64bit issues fixed, with the
|
portable (endianness issues fixed) and 64bit issues fixed, with the
|
||||||
runtime library being refactored to be extremely small.
|
runtime library being refactored to be extremely small.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Emotion:**
|
**Emotion:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is a wrapper around Gstreamer 1.x pluggable decoder libraries
|
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
|
This glues in the decoder library, and its output into a smart Evas object
|
||||||
|
@ -275,9 +326,11 @@ 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
|
providing higher level controls to seek, play, pause and query the stream
|
||||||
regardless of the back-end used.
|
regardless of the back-end used.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**EO:**
|
**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
|
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
|
API is not finalized, so do not depend on it yet in EFL 1.8, but
|
||||||
|
@ -288,35 +341,43 @@ strong and weak references, auto-deletion of child objects, unifies
|
||||||
callback handling with a single path, and also abstracts object
|
callback handling with a single path, and also abstracts object
|
||||||
pointers to be indirect table lookups for increased safety at runtime.
|
pointers to be indirect table lookups for increased safety at runtime.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**EPhysics:**
|
**EPhysics:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library provides a wrapper around the Bullet physics library,
|
This library provides a wrapper around the Bullet physics library,
|
||||||
allowing for it to be linked directly with Evas objects and control
|
allowing for it to be linked directly with Evas objects and control
|
||||||
their behavior as if they were real physical objects. This is now
|
their behavior as if they were real physical objects. This is now
|
||||||
disabled by default as it's rarely if ever used by anything.
|
disabled by default as it's rarely if ever used by anything.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ethumb:**
|
**Ethumb:**
|
||||||
|
|
||||||
*LGPL v2 license*
|
//LGPL v2 license//
|
||||||
|
|
||||||
This library provides core API for a thumbnailing daemon as well as
|
This library provides core API for a thumbnailing daemon as well as
|
||||||
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
||||||
off thumbnail generation to a central location to be done
|
off thumbnail generation to a central location to be done
|
||||||
asynchronously.
|
asynchronously.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Ethumb Client:**
|
**Ethumb Client:**
|
||||||
|
|
||||||
*LGPL v2 license*
|
//LGPL v2 license//
|
||||||
|
|
||||||
This is the client-side part of Ethumb that provides an API for
|
This is the client-side part of Ethumb that provides an API for
|
||||||
clients to request the Ethumb thumbnailer to generate or find cached
|
clients to request the Ethumb thumbnailer to generate or find cached
|
||||||
thumbnails of files.
|
thumbnails of files.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Evas:**
|
**Evas:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This is the core rendering and scene graph abstraction library for
|
This is the core rendering and scene graph abstraction library for
|
||||||
EFL. It manages a stateful 2D scene graph that defines the entire
|
EFL. It manages a stateful 2D scene graph that defines the entire
|
||||||
|
@ -325,108 +386,125 @@ display systems like X11, Windows, Wayland, Frame-buffer etc. and via
|
||||||
many rendering APIs like OpenGL, OpenGL-ES 2, and pure software
|
many rendering APIs like OpenGL, OpenGL-ES 2, and pure software
|
||||||
implementations that are fast and accurate.
|
implementations that are fast and accurate.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Evil:**
|
**Evil:**
|
||||||
|
|
||||||
*BSD 2-Clause license*
|
//BSD 2-Clause license//
|
||||||
|
|
||||||
This library acts as a porting library for Windows to provide missing
|
This library acts as a porting library for Windows to provide missing
|
||||||
libc calls not in Mingw32 that EFL needs. It is used internally and
|
libc calls not in Mingw32 that EFL needs. It is used internally and
|
||||||
no symbol is public.
|
no symbol is public.
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
## Requirements
|
**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
|
||||||
|
------------
|
||||||
|
|
||||||
EFL requires a C and C++ compiler by default. C++ exists mostly to interface
|
EFL requires a C and C++ compiler by default. C++ exists mostly to interface
|
||||||
to C++ libraries like Bullet and our C++ bindings.
|
to C++ libraries like Bullet and our C++ bindings.
|
||||||
|
|
||||||
Required by default:
|
Required by default:
|
||||||
|
|
||||||
* libpng
|
* libpng
|
||||||
* libjpeg
|
* libjpeg
|
||||||
* openjpeg2
|
* openjpeg2
|
||||||
* gstreamer (Ensure all codecs you want are installed.)
|
* gstreamer (Ensure all codecs you want are installed.)
|
||||||
* zlib
|
* zlib
|
||||||
* lua (lua 5.1, luajit or lua 5.2 support optional)
|
* luajit (lua 5.1 or 5.2 support optional)
|
||||||
* libtiff
|
* libtiff
|
||||||
* openssl
|
* openssl
|
||||||
* curl
|
* curl
|
||||||
* dbus
|
* dbus
|
||||||
* libc
|
* libc
|
||||||
* fontconfig
|
* fontconfig
|
||||||
* freetype2
|
* freetype2
|
||||||
* fribidi
|
* fribidi
|
||||||
* harfbuzz
|
* harfbuzz
|
||||||
* libpulse
|
* libpulse
|
||||||
* libsndfile
|
* libsndfile
|
||||||
* libx11
|
* libx11
|
||||||
* libxau
|
* libxau
|
||||||
* libxcomposite
|
* libxcomposite
|
||||||
* libxdamage
|
* libxdamage
|
||||||
* libxdmcp
|
* libxdmcp
|
||||||
* libxext
|
* libxext
|
||||||
* libxfixes
|
* libxfixes
|
||||||
* libxinerama
|
* libxinerama
|
||||||
* libxrandr
|
* libxrandr
|
||||||
* libxrender
|
* libxrender
|
||||||
* libxss
|
* libxss
|
||||||
* libxtst
|
* libxtst
|
||||||
* libxcursor
|
* libxcursor
|
||||||
* libxi (2.2 or newer)
|
* 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)
|
* 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
|
* giflib/libgif
|
||||||
* util-linux (limbount + libblkid)
|
* util-linux (limbount + libblkid)
|
||||||
* systemd / libudev
|
* systemd / libudev
|
||||||
* poppler / poppler-cpp
|
* poppler / poppler-cpp
|
||||||
* libraw
|
* libraw
|
||||||
* libspectre
|
* libspectre
|
||||||
* librsvg
|
* librsvg
|
||||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||||
* libwebp
|
* libwebp
|
||||||
|
|
||||||
|
Wayland support:
|
||||||
### Wayland support
|
|
||||||
|
|
||||||
You may also want wayland support when on Linux. This enables support
|
You may also want wayland support when on Linux. This enables support
|
||||||
for EFL to target wayland support for client applications. To do this
|
for EFL to trget wayland support for client applications. To do this
|
||||||
supply:
|
supply:
|
||||||
``` sh
|
|
||||||
-Dwl=true
|
|
||||||
```
|
|
||||||
|
|
||||||
### Framebuffer support
|
-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
|
||||||
|
|
||||||
For more modern framebuffer support you may want drm/kms rendering
|
For more modern framebuffer support you may want drm/kms rendering
|
||||||
support so enable this. This is what you also want for wayland
|
support so enable this. This is what you also want for wayland
|
||||||
compositor support in enlightenment as it will want to be able to
|
compositor support in enlightenment as it will want to be able to
|
||||||
render to a modern framebuffer target with atomic buffer swapping. To
|
render to a moder framebuffer tarbet with atomic buffer swapping. To
|
||||||
do this provide:
|
do this provide:
|
||||||
``` sh
|
|
||||||
-Ddrm=true
|
|
||||||
```
|
|
||||||
|
|
||||||
Legacy fbcon support also exists, but you probably no longer want to
|
-Ddrm=true
|
||||||
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:
|
You may want to change the install prefix for EFL with:
|
||||||
``` sh
|
|
||||||
--prefix=/path/to/prefix
|
--prefix=/path/to/prefix
|
||||||
```
|
|
||||||
|
|
||||||
The default prefix if not given is "/usr/local". Many people like to
|
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.
|
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
|
You can affect compilation optimization, debugging and other factors
|
||||||
by setting your `CFLAGS` environment variable (and `CXXFLAGS`). Be aware
|
by setting your CFLAGS environment variable (and CXXFLAGS). Be aware
|
||||||
that to ensure ABI stability you should use the exact same `CFLAGS` /
|
that to ensure ABI stability you should use the exact same CFLAGS /
|
||||||
`CXXFLAGS` for all the build of EFL and any applications/libraries that
|
CXXFLAGS for all the build of EFL and any applications/libraries that
|
||||||
depend on them.
|
depend on them.
|
||||||
|
|
||||||
There are many other configure options that can be used, but in
|
There are many other configure options that can be used, but in
|
||||||
|
@ -439,110 +517,13 @@ these without understanding the implications. The defaults
|
||||||
have been carefully considered to provide full functionality so users
|
have been carefully considered to provide full functionality so users
|
||||||
will not be missing anything.
|
will not be missing anything.
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
## Compiling and Installing
|
CRYPTOGRAPHY
|
||||||
|
------------
|
||||||
|
|
||||||
Meson is the build system used for this project. For more information
|
EFL officially offers openssl or gnutls as cryptography backends. By
|
||||||
please see [mesonbuild.com](https://mesonbuild.com)
|
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:
|
||||||
|
|
||||||
You will need normal build tooling installed such as a compiler (gcc
|
-Dcrypto=gnutls
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
**NOTE:** Nvidia OpenGL-ES/EGL seems to have bugs and performance issues.
|
|
||||||
All other drivers work just fine except Nvidia with OpenGL-ES/EGL. Users have
|
|
||||||
reported stuttering and graphical glitches and sometimes windows not
|
|
||||||
updating. If you want the best results and are stuck on Nvidia and unable to
|
|
||||||
change that, then:
|
|
||||||
|
|
||||||
* Make sure you do not enable **Wayland** i.e. Meson option `-Dwl=false` (this is default anyway if not provided)
|
|
||||||
* Make sure you do not enable **DRM** i.e. Meson option `-Ddrm=false` (this is default anyway if not provided)
|
|
||||||
* Make sure **OpenGL** is **full** i.e. Meson option `-Dopengl=full`
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
meson -Dsystemd=false -Dv4l2=false -Davahi=false -Deeze=false -Dx11=false \
|
meson -Dsystemd=false -Dv4l2=false -Davahi=false -Deeze=false -Dx11=false \
|
||||||
-Dopengl=full -Dcocoa=true -Dnls=false -Dinput=false \
|
-Dopengl=full -Dcocoa=true -Dnls=false \
|
||||||
|
-Demotion-loaders-disabler=gstreamer1,libvlc,xine \
|
||||||
-Decore-imf-loaders-disabler=scim,ibus \
|
-Decore-imf-loaders-disabler=scim,ibus \
|
||||||
$@ . build
|
$@ . build
|
||||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
||||||
value "config_version" int: 131096;
|
value "config_version" int: 131096;
|
||||||
value "entry_select_allow" uchar: 1;
|
value "entry_select_allow" uchar: 1;
|
||||||
value "engine" string: "";
|
value "engine" string: "";
|
||||||
value "vsync" uchar: 1;
|
value "vsync" uchar: 0;
|
||||||
//
|
//
|
||||||
value "thumbscroll_enable" uchar: 1;
|
value "thumbscroll_enable" uchar: 1;
|
||||||
value "thumbscroll_threshold" int: 24;
|
value "thumbscroll_threshold" int: 24;
|
||||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
||||||
value "config_version" int: 131096;
|
value "config_version" int: 131096;
|
||||||
value "entry_select_allow" uchar: 1;
|
value "entry_select_allow" uchar: 1;
|
||||||
value "engine" string: "";
|
value "engine" string: "";
|
||||||
value "vsync" uchar: 1;
|
value "vsync" uchar: 0;
|
||||||
value "thumbscroll_enable" uchar: 1;
|
value "thumbscroll_enable" uchar: 1;
|
||||||
value "thumbscroll_threshold" int: 24;
|
value "thumbscroll_threshold" int: 24;
|
||||||
value "thumbscroll_hold_threshold" int: 100;
|
value "thumbscroll_hold_threshold" int: 100;
|
||||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
||||||
value "config_version" int: 131096;
|
value "config_version" int: 131096;
|
||||||
value "entry_select_allow" uchar: 1;
|
value "entry_select_allow" uchar: 1;
|
||||||
value "engine" string: "";
|
value "engine" string: "";
|
||||||
value "vsync" uchar: 1;
|
value "vsync" uchar: 0;
|
||||||
value "thumbscroll_enable" uchar: 0;
|
value "thumbscroll_enable" uchar: 0;
|
||||||
value "thumbscroll_threshold" int: 4;
|
value "thumbscroll_threshold" int: 4;
|
||||||
value "thumbscroll_hold_threshold" int: 4;
|
value "thumbscroll_hold_threshold" int: 4;
|
||||||
|
|
|
@ -172,7 +172,6 @@ color_tree {
|
||||||
"/fg/normal/spinner/arrow";
|
"/fg/normal/spinner/arrow";
|
||||||
"/fg/normal/spinner/text";
|
"/fg/normal/spinner/text";
|
||||||
"/fg/normal/notification/text";
|
"/fg/normal/notification/text";
|
||||||
"/fg/pressed/notification/text/title";
|
|
||||||
"/fg/selected/winlist/item/text/iconified";
|
"/fg/selected/winlist/item/text/iconified";
|
||||||
"/fg/pressed/gadgets/tasks/text/iconified";
|
"/fg/pressed/gadgets/tasks/text/iconified";
|
||||||
"/fg/normal/gadgets/battery/level/discharge";
|
"/fg/normal/gadgets/battery/level/discharge";
|
||||||
|
@ -198,7 +197,6 @@ color_tree {
|
||||||
"/fg/selected/radio/radio";
|
"/fg/selected/radio/radio";
|
||||||
"/fg/normal/gadgets/backlight/base";
|
"/fg/normal/gadgets/backlight/base";
|
||||||
"/fg-alt";
|
"/fg-alt";
|
||||||
"/fg/normal/fileman/filesize/0";
|
|
||||||
}
|
}
|
||||||
":fg-prehigh" {
|
":fg-prehigh" {
|
||||||
"/fg/normal/flipselector/down";
|
"/fg/normal/flipselector/down";
|
||||||
|
@ -300,7 +298,6 @@ color_tree {
|
||||||
"/fg-alt/pressed";
|
"/fg-alt/pressed";
|
||||||
"/fg-alt/selected";
|
"/fg-alt/selected";
|
||||||
"/fg-alt/selected-pressed";
|
"/fg-alt/selected-pressed";
|
||||||
"/fg/selected/fileman/filesize/0";
|
|
||||||
}
|
}
|
||||||
":selected" {
|
":selected" {
|
||||||
"/bg/selected";
|
"/bg/selected";
|
||||||
|
@ -337,7 +334,7 @@ color_tree {
|
||||||
"/fg/normal/text-preedit";
|
"/fg/normal/text-preedit";
|
||||||
"/fg/normal/text-info";
|
"/fg/normal/text-info";
|
||||||
"/fg/normal/text-type";
|
"/fg/normal/text-type";
|
||||||
"/fg/normal/fileselector/pathsep";
|
"/fg/nmormal/fileselector/pathsep";
|
||||||
"/fg/selected/button/bar";
|
"/fg/selected/button/bar";
|
||||||
"/fg/normal/button-anchor";
|
"/fg/normal/button-anchor";
|
||||||
"/fg/selected/thumb/bar";
|
"/fg/selected/thumb/bar";
|
||||||
|
@ -363,7 +360,6 @@ color_tree {
|
||||||
"/fg/normal/gadgets/mixer/volume/normal";
|
"/fg/normal/gadgets/mixer/volume/normal";
|
||||||
"/fg/normal/gadgets/music_control/progress";
|
"/fg/normal/gadgets/music_control/progress";
|
||||||
"/fg/normal/gadgets/music_control/text/tag";
|
"/fg/normal/gadgets/music_control/text/tag";
|
||||||
"/fg/normal/fileman/filesize/1";
|
|
||||||
}
|
}
|
||||||
":selected-light" {
|
":selected-light" {
|
||||||
"/bg/normal/tiling/position/base";
|
"/bg/normal/tiling/position/base";
|
||||||
|
@ -403,10 +399,6 @@ color_tree {
|
||||||
"/fg/normal/gadgets/packagekit/pkg/bug";
|
"/fg/normal/gadgets/packagekit/pkg/bug";
|
||||||
"/fg/normal/gadgets/packagekit/pkg/enhancement";
|
"/fg/normal/gadgets/packagekit/pkg/enhancement";
|
||||||
"/fg/normal/gadgets/packagekit/pkg/security";
|
"/fg/normal/gadgets/packagekit/pkg/security";
|
||||||
"/fg/normal/fileman/filesize/2";
|
|
||||||
"/fg/selected/fileman/filesize/2";
|
|
||||||
"/fg/normal/fileperm/execute";
|
|
||||||
"/fg/normal/filegraph/bar";
|
|
||||||
}
|
}
|
||||||
":selected-alt-trans" {
|
":selected-alt-trans" {
|
||||||
"/bg/normal/access";
|
"/bg/normal/access";
|
||||||
|
@ -418,8 +410,6 @@ color_tree {
|
||||||
"/fg/normal/text-line-added";
|
"/fg/normal/text-line-added";
|
||||||
"/fg/normal/desklock/fprint/success";
|
"/fg/normal/desklock/fprint/success";
|
||||||
"/fg/normal/gadgets/procstats/mem/all";
|
"/fg/normal/gadgets/procstats/mem/all";
|
||||||
"/fg/normal/fileman/filesize/3";
|
|
||||||
"/fg/selected/fileman/filesize/3";
|
|
||||||
}
|
}
|
||||||
":selected2-dim" {
|
":selected2-dim" {
|
||||||
"/fg/disabled/text-line-added";
|
"/fg/disabled/text-line-added";
|
||||||
|
@ -428,8 +418,6 @@ color_tree {
|
||||||
"/fg/normal/gadgets/procstats/cpu/all";
|
"/fg/normal/gadgets/procstats/cpu/all";
|
||||||
"/fg/normal/gadgets/cpufreq/hands/max";
|
"/fg/normal/gadgets/cpufreq/hands/max";
|
||||||
"/fg/normal/gadgets/packagekit/pkg/important";
|
"/fg/normal/gadgets/packagekit/pkg/important";
|
||||||
"/fg/normal/fileman/filesize/4";
|
|
||||||
"/fg/selected/fileman/filesize/4";
|
|
||||||
}
|
}
|
||||||
":selected4" {
|
":selected4" {
|
||||||
"/fg/normal/text-urgent";
|
"/fg/normal/text-urgent";
|
||||||
|
@ -439,7 +427,6 @@ color_tree {
|
||||||
"/fg/normal/text-line-removed";
|
"/fg/normal/text-line-removed";
|
||||||
"/fg/normal/gadgets/temperature/hi";
|
"/fg/normal/gadgets/temperature/hi";
|
||||||
"/fg/normal/gadgets/clock/analog/hands/secs";
|
"/fg/normal/gadgets/clock/analog/hands/secs";
|
||||||
"/fg/normal/fileperm/write";
|
|
||||||
}
|
}
|
||||||
":selected4-dim" {
|
":selected4-dim" {
|
||||||
"/fg/disabled/text-warning";
|
"/fg/disabled/text-warning";
|
||||||
|
@ -458,7 +445,6 @@ color_tree {
|
||||||
}
|
}
|
||||||
":selected6" {
|
":selected6" {
|
||||||
"/fg/normal/text-string";
|
"/fg/normal/text-string";
|
||||||
"/fg/selected/fileman/filesize/1";
|
|
||||||
}
|
}
|
||||||
":selected6-dim" {
|
":selected6-dim" {
|
||||||
"/fg/disabled/text-string";
|
"/fg/disabled/text-string";
|
||||||
|
@ -476,7 +462,6 @@ color_tree {
|
||||||
"/fg/normal/fileman/mount/off";
|
"/fg/normal/fileman/mount/off";
|
||||||
"/fg/normal/progress/busy/2";
|
"/fg/normal/progress/busy/2";
|
||||||
"/fg/normal/gadgets/packagekit/pkg/low-priority";
|
"/fg/normal/gadgets/packagekit/pkg/low-priority";
|
||||||
"/fg/normal/filegraph/bartop";
|
|
||||||
}
|
}
|
||||||
":light-high" {
|
":light-high" {
|
||||||
"/fg/normal/naviframe/top/overlap";
|
"/fg/normal/naviframe/top/overlap";
|
||||||
|
@ -560,7 +545,6 @@ color_tree {
|
||||||
}
|
}
|
||||||
":success" {
|
":success" {
|
||||||
"/fg/normal/text-success";
|
"/fg/normal/text-success";
|
||||||
"/fg/normal/fileperm/read";
|
|
||||||
}
|
}
|
||||||
":success-dim" {
|
":success-dim" {
|
||||||
"/fg/disabled/text-success";
|
"/fg/disabled/text-success";
|
||||||
|
@ -585,7 +569,6 @@ color_tree {
|
||||||
}
|
}
|
||||||
":number" {
|
":number" {
|
||||||
"/fg/normal/text-number";
|
"/fg/normal/text-number";
|
||||||
"/fg/normal/fileperm/setuid";
|
|
||||||
}
|
}
|
||||||
":number-dim" {
|
":number-dim" {
|
||||||
"/fg/disabled/text-number";
|
"/fg/disabled/text-number";
|
||||||
|
@ -1294,7 +1277,7 @@ color_classes {
|
||||||
// color_class { name: "/fg/disabled/flipselector/up";
|
// color_class { name: "/fg/disabled/flipselector/up";
|
||||||
// color: 96 96 96 255; }
|
// color: 96 96 96 255; }
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// color_class { name: "/fg/normal/fileselector/pathsep";
|
// color_class { name: "/fg/nmormal/fileselector/pathsep";
|
||||||
// color: 51 153 255 255; }
|
// color: 51 153 255 255; }
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// color_class { name: "/bg/normal/button";
|
// color_class { name: "/bg/normal/button";
|
||||||
|
|
|
@ -1,13 +1,3 @@
|
||||||
// Define this to enable a demo title blur
|
|
||||||
//#define BLUR_TITLE 1
|
|
||||||
// Define this to enable a demo blue behind everythnig - conflicts with title
|
|
||||||
//#define BLUR_BEHIND 1
|
|
||||||
|
|
||||||
// Some values used if blur is enabled
|
|
||||||
#define BLUR_FORCE_ALPHA 160
|
|
||||||
#define BLUR_TITLE_AMOUNT "32"
|
|
||||||
#define BLUR_BEHIND_AMOUNT "32"
|
|
||||||
|
|
||||||
group { name: "e/widgets/border/volume";
|
group { name: "e/widgets/border/volume";
|
||||||
images.image: "shadow_circle_vert.png" COMP;
|
images.image: "shadow_circle_vert.png" COMP;
|
||||||
parts {
|
parts {
|
||||||
|
@ -174,15 +164,6 @@ group { name: "e/widgets/border/default/border";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WIN_SHAD("shadow_base", "shadow_clip", "win_shad_flat.png", 21, 21, 14, 28, 0.5)
|
WIN_SHAD("shadow_base", "shadow_clip", "win_shad_flat.png", 21, 21, 14, 28, 0.5)
|
||||||
#ifdef BLUR_BEHIND
|
|
||||||
snapshot { name: "title-blur"; mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
rel1.to: "top";
|
|
||||||
rel2.to: "bottom";
|
|
||||||
filter.code: "padding_set { 0 } blur { "BLUR_BEHIND_AMOUNT", color = '#ffff' }";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
part { name: "client_clip"; type: RECT; mouse_events: 0;
|
part { name: "client_clip"; type: RECT; mouse_events: 0;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel1.to_y: "e.swallow.client";
|
rel1.to_y: "e.swallow.client";
|
||||||
|
@ -212,23 +193,12 @@ group { name: "e/widgets/border/default/border";
|
||||||
rel2.offset: -1 -1;
|
rel2.offset: -1 -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef BLUR_TITLE
|
|
||||||
snapshot { name: "title-blur"; mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
rel.to: "top";
|
|
||||||
filter.code: "padding_set { 0 } blur { "BLUR_TITLE_AMOUNT", color = '#ffff' }";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
part { name: "top"; type: RECT; mouse_events: 0;
|
part { name: "top"; type: RECT; mouse_events: 0;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel2.to_y: "e.text.title";
|
rel2.to_y: "e.text.title";
|
||||||
rel2.offset: -1 2;
|
rel2.offset: -1 2;
|
||||||
color_class: "/bg/normal/titlebar";
|
color_class: "/bg/normal/titlebar";
|
||||||
#if defined(BLUR_TITLE) || defined(BLUR_BEHIND)
|
|
||||||
color: 255 255 255 BLUR_FORCE_ALPHA;
|
|
||||||
#endif
|
|
||||||
offscale;
|
offscale;
|
||||||
}
|
}
|
||||||
description { state: "focused" 0.0;
|
description { state: "focused" 0.0;
|
||||||
|
@ -524,9 +494,6 @@ group { name: "e/widgets/border/default/border";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
color_class: "/bg/normal/border";
|
color_class: "/bg/normal/border";
|
||||||
rel.to: "bottom";
|
rel.to: "bottom";
|
||||||
#if defined(BLUR_BEHIND)
|
|
||||||
color: 255 255 255 BLUR_FORCE_ALPHA;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
description { state: "focused" 0.0;
|
description { state: "focused" 0.0;
|
||||||
inherit: "default" 0.0;
|
inherit: "default" 0.0;
|
||||||
|
|
|
@ -267,70 +267,11 @@ group { name: "e/comp/frame/default";
|
||||||
color_class: "/bg/selected/comp/win";
|
color_class: "/bg/selected/comp/win";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#define FOCUSGLOWSZ 20
|
|
||||||
part { name: "focusglow"; type: RECT;
|
|
||||||
mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
rel.to: "e.swallow.content";
|
|
||||||
}
|
|
||||||
description { state: "active" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
offscale;
|
|
||||||
rel1.offset: (0-FOCUSGLOWSZ) (0-FOCUSGLOWSZ);
|
|
||||||
rel2.offset: (FOCUSGLOWSZ-1) (FOCUSGLOWSZ-1);
|
|
||||||
color: 255 255 255 0; // no cc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "focusglow1"; type: RECT;
|
|
||||||
mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
clip_to: "focusglow";
|
|
||||||
offscale;
|
|
||||||
rel2.relative: 1.0 0.0;
|
|
||||||
rel1.offset: (0-FOCUSGLOWSZ) (0-FOCUSGLOWSZ);
|
|
||||||
rel2.offset: (FOCUSGLOWSZ-1) -1;
|
|
||||||
color_class: "/bg/selected/comp/focusglow";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "focusglow2"; type: RECT;
|
|
||||||
mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
clip_to: "focusglow";
|
|
||||||
offscale;
|
|
||||||
rel1.relative: 0.0 1.0;
|
|
||||||
rel1.offset: (0-FOCUSGLOWSZ) 0;
|
|
||||||
rel2.offset: (FOCUSGLOWSZ-1) (FOCUSGLOWSZ-1);
|
|
||||||
color_class: "/bg/selected/comp/focusglow";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "focusglow3"; type: RECT;
|
|
||||||
mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
clip_to: "focusglow";
|
|
||||||
offscale;
|
|
||||||
rel2.relative: 0.0 1.0;
|
|
||||||
rel1.offset: (0-FOCUSGLOWSZ) 0;
|
|
||||||
rel2.offset: -1 -1;
|
|
||||||
color_class: "/bg/selected/comp/focusglow";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "focusglow4"; type: RECT;
|
|
||||||
mouse_events: 0;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
clip_to: "focusglow";
|
|
||||||
offscale;
|
|
||||||
rel1.relative: 1.0 0.0;
|
|
||||||
rel1.offset: 0 0;
|
|
||||||
rel2.offset: (FOCUSGLOWSZ-1) -1;
|
|
||||||
color_class: "/bg/selected/comp/focusglow";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#undef FOCUSGLOWSZ
|
|
||||||
part { name: "e.swallow.content"; type: SWALLOW;
|
part { name: "e.swallow.content"; type: SWALLOW;
|
||||||
clip_to: "focus-clipper";
|
clip_to: "focus-clipper";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel.to: "shower";
|
rel.to: "shower";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spacer { "gspacer";
|
spacer { "gspacer";
|
||||||
desc {
|
desc {
|
||||||
|
@ -385,21 +326,6 @@ group { name: "e/comp/frame/default";
|
||||||
transition: SINUSOIDAL 0.2 USE_DURATION_FACTOR 1;
|
transition: SINUSOIDAL 0.2 USE_DURATION_FACTOR 1;
|
||||||
targets: "focus-clipper" "focus-shadow";
|
targets: "focus-clipper" "focus-shadow";
|
||||||
}
|
}
|
||||||
program { name: "focusbounce";
|
|
||||||
signal: "e,state,focused"; source: "e";
|
|
||||||
action: STATE_SET "default" 0.0;
|
|
||||||
target: "focusglow";
|
|
||||||
sequence {
|
|
||||||
action: STATE_SET "active" 0.0;
|
|
||||||
target: "focusglow";
|
|
||||||
transition: DECELERATE 0.3 USE_DURATION_FACTOR 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
program { name: "focusbounceoff";
|
|
||||||
signal: "e,state,unfocused"; source: "e";
|
|
||||||
action: STATE_SET "default" 0.0;
|
|
||||||
target: "focusglow";
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
program { name: "urgent1";
|
program { name: "urgent1";
|
||||||
signal: "e,state,urgent"; source: "e";
|
signal: "e,state,urgent"; source: "e";
|
||||||
|
@ -435,15 +361,6 @@ group { name: "e/comp/frame/rotate";
|
||||||
alias: "e/comp/frame/rotate/fast"; // legacy
|
alias: "e/comp/frame/rotate/fast"; // legacy
|
||||||
inherit: "e/comp/frame/default";
|
inherit: "e/comp/frame/default";
|
||||||
parts {
|
parts {
|
||||||
part { name: "focusglow"; type: RECT;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "active" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "e.swallow.content";
|
part { name: "e.swallow.content";
|
||||||
description { state: "default";
|
description { state: "default";
|
||||||
map {
|
map {
|
||||||
|
@ -477,12 +394,6 @@ group { name: "e/comp/frame/rotate";
|
||||||
target: "e.swallow.content";
|
target: "e.swallow.content";
|
||||||
transition: LINEAR 0.3 USE_DURATION_FACTOR 1;
|
transition: LINEAR 0.3 USE_DURATION_FACTOR 1;
|
||||||
}
|
}
|
||||||
program { name: "focusbounce";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
program { name: "focusbounceoff";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,28 +427,11 @@ group { name: "e/comp/frame/popup";
|
||||||
alias: "e/comp/frame/popup/fast"; // legacy
|
alias: "e/comp/frame/popup/fast"; // legacy
|
||||||
inherit: "e/comp/frame/default";
|
inherit: "e/comp/frame/default";
|
||||||
parts {
|
parts {
|
||||||
part { name: "focusglow"; type: RECT;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "active" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "focus-clipper";
|
part { name: "focus-clipper";
|
||||||
description { state: "default";
|
description { state: "default";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
programs {
|
|
||||||
program { name: "focusbounce";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
program { name: "focusbounceoff";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group { name: "e/comp/frame/none";
|
group { name: "e/comp/frame/none";
|
||||||
|
@ -561,15 +455,6 @@ group { name: "e/comp/frame/still";
|
||||||
alias: "e/comp/frame/still/fast"; // legacy
|
alias: "e/comp/frame/still/fast"; // legacy
|
||||||
inherit: "e/comp/frame/default";
|
inherit: "e/comp/frame/default";
|
||||||
parts {
|
parts {
|
||||||
part { name: "focusglow"; type: RECT;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "active" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "shower";
|
part { name: "shower";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel1.relative: 0.0 0.0;
|
rel1.relative: 0.0 0.0;
|
||||||
|
@ -577,14 +462,6 @@ group { name: "e/comp/frame/still";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
programs {
|
|
||||||
program { name: "focusbounce";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
program { name: "focusbounceoff";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group { name: "e/comp/frame/menu";
|
group { name: "e/comp/frame/menu";
|
||||||
|
@ -611,15 +488,6 @@ group { name: "e/comp/frame/everything";
|
||||||
alias: "e/comp/frame/everything/fast"; // legacy
|
alias: "e/comp/frame/everything/fast"; // legacy
|
||||||
inherit: "e/comp/frame/popup";
|
inherit: "e/comp/frame/popup";
|
||||||
parts {
|
parts {
|
||||||
part { name: "focusglow"; type: RECT;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "active" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "shadow";
|
part { name: "shadow";
|
||||||
description { state: "hidden" 0.0;
|
description { state: "hidden" 0.0;
|
||||||
visible: 1;
|
visible: 1;
|
||||||
|
@ -632,14 +500,6 @@ group { name: "e/comp/frame/everything";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
programs {
|
|
||||||
program { name: "focusbounce";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
program { name: "focusbounceoff";
|
|
||||||
signal: "xxx";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group { name: "e/comp/frame/fullscreen";
|
group { name: "e/comp/frame/fullscreen";
|
||||||
|
|
|
@ -17,7 +17,7 @@ group { name: "e/desklock/background";
|
||||||
color_class: "/bg/normal/desklock/background";
|
color_class: "/bg/normal/desklock/background";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
program { name: "shower"; signal: "show"; source: "";
|
program { signal: "show"; source: "";
|
||||||
action: STATE_SET "visible" 0.0;
|
action: STATE_SET "visible" 0.0;
|
||||||
transition: SINUSOIDAL 0.5 USE_DURATION_FACTOR 1;
|
transition: SINUSOIDAL 0.5 USE_DURATION_FACTOR 1;
|
||||||
target: "clip";
|
target: "clip";
|
||||||
|
@ -30,14 +30,6 @@ group { name: "e/desklock/background";
|
||||||
action: SIGNAL_EMIT "e,action,hide,done" "e";
|
action: SIGNAL_EMIT "e,action,hide,done" "e";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
program { signal: "e,action,show,immediate"; source: "e";
|
|
||||||
action: ACTION_STOP;
|
|
||||||
target: "shower";
|
|
||||||
sequence {
|
|
||||||
action: STATE_SET "visible" 0.0;
|
|
||||||
target: "clip";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "e.swallow.login_box"; type: SWALLOW;
|
part { name: "e.swallow.login_box"; type: SWALLOW;
|
||||||
clip_to: "clip";
|
clip_to: "clip";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
|
|
@ -263,7 +263,7 @@ group { "efl/border"; data.item: "version" "123";
|
||||||
rel2.to_x: "event.minimize";
|
rel2.to_x: "event.minimize";
|
||||||
rel2.to_y: "shadow_base";
|
rel2.to_y: "shadow_base";
|
||||||
align: 0.5 0.0;
|
align: 0.5 0.0;
|
||||||
color_class: "/fg/normal/titlebar";
|
color_class: "/fg/noemal/titlebar";
|
||||||
min: 0 16;
|
min: 0 16;
|
||||||
text { font: FNBD; size: 10;
|
text { font: FNBD; size: 10;
|
||||||
text_class: "title_bar";
|
text_class: "title_bar";
|
||||||
|
@ -330,7 +330,7 @@ group { "efl/border"; data.item: "version" "123";
|
||||||
rel.to: "event.close";
|
rel.to: "event.close";
|
||||||
min: 15 15; max: 15 15;
|
min: 15 15; max: 15 15;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
color_class: "/fg/normal/titlebar/close";
|
color_class: "/fg/noemal/titlebar/close";
|
||||||
}
|
}
|
||||||
desc { "selected";
|
desc { "selected";
|
||||||
inherit: "default";
|
inherit: "default";
|
||||||
|
@ -345,7 +345,7 @@ group { "efl/border"; data.item: "version" "123";
|
||||||
rel.to: "event.maximize";
|
rel.to: "event.maximize";
|
||||||
min: 15 15; max: 15 15;
|
min: 15 15; max: 15 15;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
color_class: "/fg/normal/titlebar/maximize";
|
color_class: "/fg/noemal/titlebar/maximize";
|
||||||
}
|
}
|
||||||
desc { "selected";
|
desc { "selected";
|
||||||
inherit: "default";
|
inherit: "default";
|
||||||
|
|
|
@ -6,7 +6,7 @@ group { name: "elm/entry/path/separator/default";
|
||||||
image.normal: "i-arrow-r";
|
image.normal: "i-arrow-r";
|
||||||
FIXED_SIZE(15, 15)
|
FIXED_SIZE(15, 15)
|
||||||
aspect: 1.0 1.0;
|
aspect: 1.0 1.0;
|
||||||
color_class: "/fg/normal/fileselector/pathsep";
|
color_class: "/fg/nmormal/fileselector/pathsep";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -908,301 +908,3 @@ group { name: "elm/radio/base/icon";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group { name: "elm/radio/base/sort_header";
|
|
||||||
script {
|
|
||||||
BUTTONMODE_SCRIPT
|
|
||||||
public sel;
|
|
||||||
public eval_sel(m) {
|
|
||||||
if (m) {
|
|
||||||
set_state(PART:"ck_check", "selected", 0.0);
|
|
||||||
} else {
|
|
||||||
set_state(PART:"ck_check", "default", 0.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parts {
|
|
||||||
part { name: "shadow"; type: SPACER;
|
|
||||||
description { state: "default";
|
|
||||||
}
|
|
||||||
desc { "pressed"; inherit;
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
swallow { "elm.swallow.background"; nomouse;
|
|
||||||
desc { "default";
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
desc { "visible"; inherit;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rect { "icon_clip";
|
|
||||||
desc { "default";
|
|
||||||
color: 255 255 255 255; // no cc
|
|
||||||
}
|
|
||||||
desc { "pressed"; inherit;
|
|
||||||
color: 255 255 255 255; // no cc
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
color: 255 255 255 64; // no cc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
swallow { "elm.swallow.content"; nomouse;
|
|
||||||
clip_to: "icon_clip";
|
|
||||||
scale: 1;
|
|
||||||
desc { "default";
|
|
||||||
fixed: 1 0;
|
|
||||||
align: 0.0 0.5;
|
|
||||||
rel1.to_x: "base";
|
|
||||||
rel2.to_x: "base";
|
|
||||||
rel1.offset: 4 4;
|
|
||||||
rel1.relative: 1.0 0.0;
|
|
||||||
rel2.relative: 0.0 1.0;
|
|
||||||
rel2.offset: 4 -5;
|
|
||||||
visible: 0;
|
|
||||||
offscale;
|
|
||||||
}
|
|
||||||
desc { "visible"; inherit;
|
|
||||||
fixed: 1 0;
|
|
||||||
aspect: 1.0 1.0;
|
|
||||||
min: ICMIN ICMIN;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "icononly"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
align: 0.5 0.5;
|
|
||||||
rel2.relative: 1.0 1.0;
|
|
||||||
rel2.offset: -5 -5;
|
|
||||||
rel2.to_x: "";
|
|
||||||
visible: 1;
|
|
||||||
min: ICMIN ICMIN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "base"; type: RECT;
|
|
||||||
scale: 1;
|
|
||||||
description { state: "default";
|
|
||||||
fixed: 1 0;
|
|
||||||
align: 0.0 0.5;
|
|
||||||
min: 13 13;
|
|
||||||
max: 13 13;
|
|
||||||
rel1.offset: 4 4;
|
|
||||||
rel2.relative: 0.0 1.0;
|
|
||||||
rel2.offset: 4 -5;
|
|
||||||
aspect: 1.0 1.0; aspect_preference: VERTICAL;
|
|
||||||
offscale;
|
|
||||||
visible: 0;
|
|
||||||
offscale;
|
|
||||||
}
|
|
||||||
desc { "pressed"; inherit;
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "ck_bg";
|
|
||||||
scale: 1;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
fixed: 1 1;
|
|
||||||
rel.to: "base";
|
|
||||||
image.normal: "i-arrow-d";
|
|
||||||
min: 15 15;
|
|
||||||
max: 15 15;
|
|
||||||
color_class: "/bg/normal/radio/base";
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
color_class: "/bg/disabled/radio/base";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "ck_check";
|
|
||||||
scale: 1;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
color_class: "/fg/selected/radio/radio";
|
|
||||||
rel.to: "base";
|
|
||||||
image.normal: "i-arrow-d";
|
|
||||||
min: 15 15;
|
|
||||||
max: 15 15;
|
|
||||||
fixed: 1 1;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "selected" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "ck_press";
|
|
||||||
scale: 1;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
color_class: "/fg/pressed/radio/radio";
|
|
||||||
fixed: 1 1;
|
|
||||||
rel.to: "base";
|
|
||||||
image.normal: "i-arrow-d";
|
|
||||||
min: 15 15;
|
|
||||||
max: 15 15;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
description { state: "pressed" 0.0;
|
|
||||||
inherit: "default" 0.0;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text { "elm.text"; nomouse;
|
|
||||||
scale: 1;
|
|
||||||
desc { "default";
|
|
||||||
fixed: 0 1;
|
|
||||||
color_class: "/fg/normal/radio/text";
|
|
||||||
rel1.offset: 0 4;
|
|
||||||
rel1.relative: 1.0 0.0;
|
|
||||||
rel1.to_x: "elm.swallow.content";
|
|
||||||
rel2.offset: -5 -5;
|
|
||||||
text { font: FN; size: 10;
|
|
||||||
align: 0.0 0.5;
|
|
||||||
min: 0 0;
|
|
||||||
ellipsis: 0;
|
|
||||||
}
|
|
||||||
visible: 0;
|
|
||||||
offscale;
|
|
||||||
min: 0 ICMIN;
|
|
||||||
}
|
|
||||||
desc { "visible"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
rel1.offset: 4 4;
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "pressed_visible"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
color_class: "/fg/pressed/radio/text";
|
|
||||||
rel1.offset: 4 4;
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "textonly"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "pressed_textonly"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
color_class: "/fg/pressed/radio/text";
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "disabled_visible"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
color_class: "/fg/disabled/radio/text";
|
|
||||||
rel1.offset: 4 4;
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
desc { "disabled_textonly"; inherit;
|
|
||||||
fixed: 0 0;
|
|
||||||
color_class: "/fg/disabled/radio/text";
|
|
||||||
// text.min: 1 1;
|
|
||||||
// text.ellipsis: -1;
|
|
||||||
visible: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rect { "event";
|
|
||||||
ignore_flags: ON_HOLD;
|
|
||||||
desc { "default";
|
|
||||||
color: 0 0 0 0; // no cc
|
|
||||||
}
|
|
||||||
desc { "disabled"; inherit;
|
|
||||||
visible: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
programs {
|
|
||||||
program { signal: "mouse,clicked,1"; source: "event";
|
|
||||||
action: SIGNAL_EMIT "elm,action,radio,toggle" "elm";
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,radio,on"; source: "elm";
|
|
||||||
script {
|
|
||||||
new m = get_int(sel) | SELECTED;
|
|
||||||
set_int(sel, m);
|
|
||||||
eval_sel(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,radio,off"; source: "elm";
|
|
||||||
script {
|
|
||||||
new m = get_int(sel) & ~SELECTED;
|
|
||||||
set_int(sel, m);
|
|
||||||
eval_sel(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
program { signal: "mouse,down,1"; source: "event";
|
|
||||||
action: SIGNAL_EMIT "elm,action,press" "elm";
|
|
||||||
after: "button_click_anim";
|
|
||||||
}
|
|
||||||
program { name: "button_click_anim";
|
|
||||||
script { flag_set(PRESSED); }
|
|
||||||
}
|
|
||||||
program { signal: "mouse,down,1"; source: "event";
|
|
||||||
script { eval_sel(get_int(sel) | SELECTED); }
|
|
||||||
}
|
|
||||||
program { signal: "mouse,up,1"; source: "event";
|
|
||||||
action: SIGNAL_EMIT "elm,action,unpress" "elm";
|
|
||||||
after: "button_unclick_anim";
|
|
||||||
}
|
|
||||||
program { name: "button_unclick_anim";
|
|
||||||
script { flag_unset(PRESSED); }
|
|
||||||
}
|
|
||||||
program { signal: "mouse,up,1"; source: "event";
|
|
||||||
script { eval_sel(get_int(sel)); }
|
|
||||||
}
|
|
||||||
program { signal: "mouse,clicked,1"; source: "event";
|
|
||||||
action: SIGNAL_EMIT "elm,action,click" "elm";
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,text,visible"; source: "elm";
|
|
||||||
script { flag_set(LABEL); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,text,hidden"; source: "elm";
|
|
||||||
script { flag_unset(LABEL); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,icon,visible"; source: "elm";
|
|
||||||
script { flag_set(ICON); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,icon,hidden"; source: "elm";
|
|
||||||
script { flag_unset(ICON); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,background,visible"; source: "elm";
|
|
||||||
script { flag_set(BACKGROUND); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,background,hidden"; source: "elm";
|
|
||||||
script { flag_unset(BACKGROUND); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,disabled"; source: "elm";
|
|
||||||
script { flag_set(DISABLE); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,enabled"; source: "elm";
|
|
||||||
script { flag_unset(DISABLE); }
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,disabled"; source: "elm";
|
|
||||||
action: STATE_SET "disabled" 0.0;
|
|
||||||
target: "ck_check";
|
|
||||||
target: "ck_bg";
|
|
||||||
}
|
|
||||||
program { signal: "elm,state,enabled"; source: "elm";
|
|
||||||
action: STATE_SET "default" 0.0;
|
|
||||||
target: "ck_check";
|
|
||||||
target: "ck_bg";
|
|
||||||
}
|
|
||||||
program { signal: "mouse,down,1"; source: "event";
|
|
||||||
action: STATE_SET "pressed" 0.0;
|
|
||||||
target: "ck_press";
|
|
||||||
}
|
|
||||||
program { signal: "mouse,up,1"; source: "event";
|
|
||||||
action: STATE_SET "default" 0.0;
|
|
||||||
target: "ck_press";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -28,12 +28,16 @@ group { name: "elm/scroller/base/default";
|
||||||
}
|
}
|
||||||
part { name: "clipper"; type: RECT;
|
part { name: "clipper"; type: RECT;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel.to: "elm.swallow.content";
|
rel.to: "elm.swallow.background";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "elm.swallow.background"; type: SWALLOW;
|
part { name: "elm.swallow.background"; type: SWALLOW;
|
||||||
|
// scale: 1;
|
||||||
clip_to: "clipper";
|
clip_to: "clipper";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
// rel1.offset: 2 2;
|
||||||
|
// rel2.offset: -3 -3;
|
||||||
|
// offscale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "elm.swallow.content"; type: SWALLOW;
|
part { name: "elm.swallow.content"; type: SWALLOW;
|
||||||
|
@ -183,7 +187,7 @@ group { name: "elm/scroller/base/default";
|
||||||
|
|
||||||
part { name: "sh_clip"; type: RECT;
|
part { name: "sh_clip"; type: RECT;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel.to: "clipper";
|
rel.to: "elm.swallow.background";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -335,7 +335,7 @@ group { name: "elm/slider/horizontal/default";
|
||||||
rel2.to_x: "elm.swallow.bar";
|
rel2.to_x: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob"; mouse_events: 0;
|
part { name: "knob"; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
|
@ -354,7 +354,7 @@ group { name: "elm/slider/horizontal/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
dragable.events: "elm.dragable.slider";
|
dragable.events: "elm.dragable.slider";
|
||||||
|
@ -947,7 +947,7 @@ group { name: "elm/slider/vertical/default";
|
||||||
rel2.to_y: "elm.swallow.bar";
|
rel2.to_y: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob"; mouse_events: 0;
|
part { name: "knob"; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
|
@ -966,7 +966,7 @@ group { name: "elm/slider/vertical/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
dragable.events: "elm.dragable.slider";
|
dragable.events: "elm.dragable.slider";
|
||||||
|
@ -1614,7 +1614,7 @@ group { name: "elm/slider/range/horizontal/default";
|
||||||
rel2.to_x: "elm.swallow.bar";
|
rel2.to_x: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob"; mouse_events: 0;
|
part { name: "knob"; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
|
@ -1633,7 +1633,7 @@ group { name: "elm/slider/range/horizontal/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
dragable.events: "elm.dragable.slider";
|
dragable.events: "elm.dragable.slider";
|
||||||
|
@ -1677,7 +1677,7 @@ group { name: "elm/slider/range/horizontal/default";
|
||||||
rel2.to_x: "elm.swallow.bar";
|
rel2.to_x: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob2"; mouse_events: 0;
|
part { name: "knob2"; repeat_events: 1;
|
||||||
clip_to: "enable2";
|
clip_to: "enable2";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
@ -1698,7 +1698,7 @@ group { name: "elm/slider/range/horizontal/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent2"; type: RECT; repeat_events: 0;
|
part { name: "slideevent2"; type: RECT; repeat_events: 1;
|
||||||
clip_to: "enable2";
|
clip_to: "enable2";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
|
@ -2298,7 +2298,7 @@ group { name: "elm/slider/range/vertical/default";
|
||||||
rel2.to_y: "elm.swallow.bar";
|
rel2.to_y: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob"; mouse_events: 0;
|
part { name: "knob"; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
|
@ -2317,7 +2317,7 @@ group { name: "elm/slider/range/vertical/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
dragable.events: "elm.dragable.slider";
|
dragable.events: "elm.dragable.slider";
|
||||||
|
@ -2361,7 +2361,7 @@ group { name: "elm/slider/range/vertical/default";
|
||||||
rel2.to_y: "elm.swallow.bar";
|
rel2.to_y: "elm.swallow.bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "knob2"; mouse_events: 0;
|
part { name: "knob2"; repeat_events: 1;
|
||||||
clip_to: "enable2";
|
clip_to: "enable2";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
@ -2381,7 +2381,7 @@ group { name: "elm/slider/range/vertical/default";
|
||||||
color_class: "/fg/disabled/slider/knob";
|
color_class: "/fg/disabled/slider/knob";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
part { name: "slideevent2"; type: RECT; repeat_events: 0;
|
part { name: "slideevent2"; type: RECT; repeat_events: 1;
|
||||||
clip_to: "enable2";
|
clip_to: "enable2";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
ignore_flags: ON_HOLD;
|
ignore_flags: ON_HOLD;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -732,11 +732,6 @@ ICON("utilities-terminal", "i-termprompt")
|
||||||
|
|
||||||
ICON("fprint", "i-fingerprint")
|
ICON("fprint", "i-fingerprint")
|
||||||
|
|
||||||
ICON("person-bust", "i-person-bust")
|
|
||||||
|
|
||||||
ICON("state-radio", "i-radio")
|
|
||||||
ICON("state-check", "i-check")
|
|
||||||
|
|
||||||
#undef ICON
|
#undef ICON
|
||||||
|
|
||||||
// regular icons
|
// regular icons
|
||||||
|
@ -751,7 +746,6 @@ ICON("state-check", "i-check")
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
ICON("folder", "i-folder")
|
ICON("folder", "i-folder")
|
||||||
ICON("file", "i-file")
|
ICON("file", "i-file")
|
||||||
ICON("clock", "i-clock")
|
ICON("clock", "i-clock")
|
||||||
|
@ -889,7 +883,6 @@ ICON("preferences-desktop-screensaver", "i-screen")
|
||||||
ICON("preferences-desktop-wallpaper", "i-picture-landscape")
|
ICON("preferences-desktop-wallpaper", "i-picture-landscape")
|
||||||
ICON("preferences-system", "i-gear")
|
ICON("preferences-system", "i-gear")
|
||||||
ICON("preferences-other", "i-gear-spanner")
|
ICON("preferences-other", "i-gear-spanner")
|
||||||
ICON("preferences-etc", "i-utilities")
|
|
||||||
ICON("system-file-manager", "i-folder")
|
ICON("system-file-manager", "i-folder")
|
||||||
ICON("applications-accessories", "i-scissor-rule")
|
ICON("applications-accessories", "i-scissor-rule")
|
||||||
ICON("applications-development", "i-gear-curly-braces")
|
ICON("applications-development", "i-gear-curly-braces")
|
||||||
|
|
|
@ -33,7 +33,8 @@ group { name: "e/modules/notification/main";
|
||||||
tag: "b" "+ font="FNBD" text_class=module_bold color=cc:/fg/normal/notification/text/bold";
|
tag: "b" "+ font="FNBD" text_class=module_bold color=cc:/fg/normal/notification/text/bold";
|
||||||
tag: "i" "+ font="FNIT" text_class=module_italic";
|
tag: "i" "+ font="FNIT" text_class=module_italic";
|
||||||
tag: "u" "+ underline=on underline_color=cc:/fg/normal/notification/text/underline";
|
tag: "u" "+ underline=on underline_color=cc:/fg/normal/notification/text/underline";
|
||||||
tag: "link" "+ color=cc:/fg/normal/text-link underline=on underline_color=cc:/fg/normal/text-link";
|
tag: "img" ""; // images not supported
|
||||||
|
tag: "a" ""; // links not supported
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,10 +72,10 @@ group { name: "e/modules/notification/main";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
align: 0.0 0.5;
|
align: 0.0 0.5;
|
||||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
aspect: 1.0 1.0;
|
||||||
|
aspect_preference: BOTH;
|
||||||
rel.to: "base";
|
rel.to: "base";
|
||||||
rel1.to_y: "notification.textblock.message";
|
rel1.offset: 12 12;
|
||||||
rel1.offset: 12 0;
|
|
||||||
rel2.offset: 12 -13;
|
rel2.offset: 12 -13;
|
||||||
rel2.relative: 0.0 1.0;
|
rel2.relative: 0.0 1.0;
|
||||||
min: 24 24;
|
min: 24 24;
|
||||||
|
@ -82,11 +83,26 @@ group { name: "e/modules/notification/main";
|
||||||
offscale;
|
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;
|
part { name: "message"; type: TEXTBLOCK; mouse_events: 0;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
entry_mode: EDITABLE;
|
|
||||||
select_mode: EXPLICIT;
|
|
||||||
multiline: 1;
|
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
align: 0.0 0.0;
|
align: 0.0 0.0;
|
||||||
min: 200 20;
|
min: 200 20;
|
||||||
|
@ -96,9 +112,7 @@ group { name: "e/modules/notification/main";
|
||||||
rel1.to_y: "notification.text.title";
|
rel1.to_y: "notification.text.title";
|
||||||
rel1.relative: 1.0 1.0;
|
rel1.relative: 1.0 1.0;
|
||||||
rel1.offset: 4 4;
|
rel1.offset: 4 4;
|
||||||
rel2.offset: -27 -5;
|
rel2.offset: -27 -13;
|
||||||
rel2.to_y: "notification.swallow.actions";
|
|
||||||
rel2.relative: 1.0 0.0;
|
|
||||||
text { style: "notification_style";
|
text { style: "notification_style";
|
||||||
text_source: "notification.textblock.message";
|
text_source: "notification.textblock.message";
|
||||||
min: 0 1;
|
min: 0 1;
|
||||||
|
@ -107,45 +121,6 @@ group { name: "e/modules/notification/main";
|
||||||
offscale;
|
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;
|
part { name: "notification.text.title"; type: TEXT; mouse_events: 0;
|
||||||
clip_to: "titleclip";
|
clip_to: "titleclip";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
|
@ -169,24 +144,6 @@ 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";
|
part { name: "close";
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
@ -233,81 +190,14 @@ group { name: "e/modules/notification/main";
|
||||||
program { signal: "mouse,clicked,1"; source: "base";
|
program { signal: "mouse,clicked,1"; source: "base";
|
||||||
action: SIGNAL_EMIT "notification,find" "theme";
|
action: SIGNAL_EMIT "notification,find" "theme";
|
||||||
}
|
}
|
||||||
program { signal: "e,state,actions,show"; source: "e";
|
// program {
|
||||||
action: STATE_SET "visible" 0.0;
|
// signal: "notification,new"; source: "notification";
|
||||||
target: "notification.swallow.actions";
|
// }
|
||||||
}
|
// program {
|
||||||
program { signal: "e,state,actions,hide"; source: "e";
|
// signal: "notification,del"; source: "notification";
|
||||||
action: STATE_SET "default" 0.0;
|
// }
|
||||||
target: "notification.swallow.actions";
|
// program {
|
||||||
}
|
// signal: "notification,deleted"; source: "notification";
|
||||||
// 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";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
// Define this to enable blur background to winlist
|
|
||||||
//#define BLUR_WINLIST 1
|
|
||||||
|
|
||||||
// Some values used if blur is enabled
|
|
||||||
#define BLUR_WINLIST_AMOUNT "48"
|
|
||||||
|
|
||||||
group { name: "e/widgets/winlist/main";
|
group { name: "e/widgets/winlist/main";
|
||||||
parts {
|
parts {
|
||||||
part { name: "base"; type: RECT; mouse_events: 0;
|
part { name: "base"; type: RECT; mouse_events: 0;
|
||||||
|
@ -276,27 +270,27 @@ group { name: "e/widgets/winlist/large/bg";
|
||||||
color: 255 255 255 255; // no cc
|
color: 255 255 255 255; // no cc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef BLUR_WINLIST
|
/*
|
||||||
snapshot { "bg_blur";
|
snapshot { "bg_blur";
|
||||||
clip_to: "bg_clip";
|
clip_to: "bg_clip";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
filter.code: "padding_set { 0 } blur { state.pos * "BLUR_WINLIST_AMOUNT", color = '#ffff' }";
|
filter.code: "padding_set { 0 } blur { state.pos * 50, color = '#ffff' }";
|
||||||
visible: 0;
|
visible: 0;
|
||||||
}
|
}
|
||||||
desc { state: "visible" 0.0;
|
desc { state: "visible" 0.0;
|
||||||
inherit: "default" 0.0;
|
inherit: "default" 0.0;
|
||||||
filter.code: "padding_set { 0 } blur { (1.0 - state.pos) * "BLUR_WINLIST_AMOUNT", color = '#ffff' }";
|
filter.code: "padding_set { 0 } blur { (1.0 - state.pos) * 50, color = '#ffff' }";
|
||||||
visible: 1;
|
visible: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
*/
|
||||||
part { name: "bg_darken"; type: RECT;
|
part { name: "bg_darken"; type: RECT;
|
||||||
clip_to: "bg_clip";
|
clip_to: "bg_clip";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
color_class: "/dim/normal/winlist/base";
|
color_class: "/dim/normal/winlist/base";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef BLUR_WINLIST
|
/*
|
||||||
part { name: "shadow"; mouse_events: 0;
|
part { name: "shadow"; mouse_events: 0;
|
||||||
clip_to: "bg_clip";
|
clip_to: "bg_clip";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
@ -304,26 +298,26 @@ group { name: "e/widgets/winlist/large/bg";
|
||||||
rel2.relative: 2.0 2.0;
|
rel2.relative: 2.0 2.0;
|
||||||
image.normal: "screen_circular_shadow.png";
|
image.normal: "screen_circular_shadow.png";
|
||||||
fill.smooth: 0;
|
fill.smooth: 0;
|
||||||
|
color: 255 255 255 0; // no cc
|
||||||
visible: 0;
|
visible: 0;
|
||||||
}
|
}
|
||||||
description { state: "visible" 0.0;
|
description { state: "visible" 0.0;
|
||||||
inherit;
|
inherit;
|
||||||
rel1.relative: 0.0 0.0;
|
rel1.relative: 0.0 0.0;
|
||||||
rel2.relative: 1.0 1.0;
|
rel2.relative: 1.0 1.0;
|
||||||
|
color: 255 255 255 255; // no cc
|
||||||
visible: 1;
|
visible: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
*/
|
||||||
}
|
}
|
||||||
programs {
|
programs {
|
||||||
program { signal: "e,state,visible,on"; source: "e";
|
program { signal: "e,state,visible,on"; source: "e";
|
||||||
action: STATE_SET "visible" 0.0;
|
action: STATE_SET "visible" 0.0;
|
||||||
transition: DECELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
transition: DECELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
||||||
target: "bg_clip";
|
target: "bg_clip";
|
||||||
#ifdef BLUR_WINLIST
|
// target: "bg_blur";
|
||||||
target: "bg_blur";
|
// target: "shadow";
|
||||||
target: "shadow";
|
|
||||||
#endif
|
|
||||||
after: "show2";
|
after: "show2";
|
||||||
}
|
}
|
||||||
program { name: "show2";
|
program { name: "show2";
|
||||||
|
@ -333,10 +327,8 @@ group { name: "e/widgets/winlist/large/bg";
|
||||||
action: STATE_SET "default" 0.0;
|
action: STATE_SET "default" 0.0;
|
||||||
transition: ACCELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
transition: ACCELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
||||||
target: "bg_clip";
|
target: "bg_clip";
|
||||||
#ifdef BLUR_WINLIST
|
// target: "bg_blur";
|
||||||
target: "bg_blur";
|
// target: "shadow";
|
||||||
target: "shadow";
|
|
||||||
#endif
|
|
||||||
after: "hide2";
|
after: "hide2";
|
||||||
}
|
}
|
||||||
program { name: "hide2";
|
program { name: "hide2";
|
||||||
|
|
|
@ -152,7 +152,6 @@ I060("i-net-wifi-sig-3", "net-wifi-sig-3")
|
||||||
I060("i-net-wifi-sig-4", "net-wifi-sig-4")
|
I060("i-net-wifi-sig-4", "net-wifi-sig-4")
|
||||||
I060("i-star", "star")
|
I060("i-star", "star")
|
||||||
I060("i-star-off", "star-off")
|
I060("i-star-off", "star-off")
|
||||||
I060("i-person-bust", "person-bust")
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// larger color icons (mostly efm or settings)
|
// larger color icons (mostly efm or settings)
|
||||||
|
@ -360,7 +359,7 @@ I160("i-monitor-speakers", "monitor-speakers")
|
||||||
I160("i-briefcase", "briefcase")
|
I160("i-briefcase", "briefcase")
|
||||||
I160("i-app-window", "app-window")
|
I160("i-app-window", "app-window")
|
||||||
I160("i-beaker", "beaker")
|
I160("i-beaker", "beaker")
|
||||||
I160("i-utilities", "utilities")
|
// not used yet I160("i-utilities", "utilities")
|
||||||
I160("i-sun", "sun")
|
I160("i-sun", "sun")
|
||||||
I160("i-moon", "moon")
|
I160("i-moon", "moon")
|
||||||
I160("i-moon-clouds", "moon-clouds")
|
I160("i-moon-clouds", "moon-clouds")
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 249 B |
Binary file not shown.
Before Width: | Height: | Size: 338 B |
Binary file not shown.
Before Width: | Height: | Size: 625 B |
|
@ -1,100 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
version="1.1"
|
|
||||||
id="svg2"
|
|
||||||
width="15"
|
|
||||||
height="15"
|
|
||||||
viewBox="0 0 15 15"
|
|
||||||
sodipodi:docname="person-bust.svg"
|
|
||||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
|
|
||||||
inkscape:export-filename="/home/raster/C/th-efl/th/img/ic/stick-man-015.png"
|
|
||||||
inkscape:export-xdpi="96"
|
|
||||||
inkscape:export-ydpi="96"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
||||||
<metadata
|
|
||||||
id="metadata8">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<defs
|
|
||||||
id="defs6">
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient4128"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
id="stop4126"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#000000;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
inkscape:document-rotation="0"
|
|
||||||
pagecolor="#404040"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1377"
|
|
||||||
id="namedview4"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:zoom="75.133333"
|
|
||||||
inkscape:cx="7.5"
|
|
||||||
inkscape:cy="7.5"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="g10"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
inkscape:bbox-paths="false"
|
|
||||||
inkscape:bbox-nodes="true"
|
|
||||||
inkscape:snap-bbox-edge-midpoints="false"
|
|
||||||
inkscape:object-paths="true"
|
|
||||||
inkscape:snap-intersection-paths="true"
|
|
||||||
inkscape:snap-smooth-nodes="true"
|
|
||||||
inkscape:pagecheckerboard="0">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid837"
|
|
||||||
spacingx="0.5"
|
|
||||||
spacingy="0.5" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="Image"
|
|
||||||
id="g10">
|
|
||||||
<circle
|
|
||||||
r="2.5"
|
|
||||||
cy="4.5"
|
|
||||||
cx="7.5"
|
|
||||||
id="path4112"
|
|
||||||
style="fill:#fefefe;fill-opacity:1;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round" />
|
|
||||||
<rect
|
|
||||||
y="6.5"
|
|
||||||
x="6.5"
|
|
||||||
height="4"
|
|
||||||
width="2"
|
|
||||||
id="rect4116"
|
|
||||||
style="fill:#fdfdfd;fill-opacity:1;stroke-width:0.888936;stroke-linecap:round;stroke-linejoin:round" />
|
|
||||||
<path
|
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 3.5,13 h 8 v -3 c 0,-1 -1,-2 -2,-2 h -4 c -1,0 -2,1 -2,2 z"
|
|
||||||
id="path865"
|
|
||||||
sodipodi:nodetypes="ccccccc" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
|
@ -948,6 +948,11 @@
|
||||||
* @ref ecore_event_example_02_c "the explanation here".
|
* @ref ecore_event_example_02_c "the explanation here".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @example ecore_fd_handler_gnutls_example.c
|
||||||
|
* Shows how to use fd handlers.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @example ecore_con_lookup_example.c
|
* @example ecore_con_lookup_example.c
|
||||||
* Shows how to make a simple DNS lookup. See the complete example description
|
* Shows how to make a simple DNS lookup. See the complete example description
|
||||||
|
|
19
meson.build
19
meson.build
|
@ -1,5 +1,5 @@
|
||||||
project('efl', ['c','cpp'],
|
project('efl', ['c','cpp'],
|
||||||
version: '1.27.99',
|
version: '1.26.99',
|
||||||
default_options : ['buildtype=plain', 'warning_level=1', 'cpp_std=c++11'],
|
default_options : ['buildtype=plain', 'warning_level=1', 'cpp_std=c++11'],
|
||||||
meson_version : '>=0.50'
|
meson_version : '>=0.50'
|
||||||
)
|
)
|
||||||
|
@ -118,7 +118,6 @@ if sys_windows
|
||||||
error('Version of targetted Windows incorrect')
|
error('Version of targetted Windows incorrect')
|
||||||
endif
|
endif
|
||||||
add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: langs)
|
add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: langs)
|
||||||
add_global_arguments('-define:WIN32', language: 'cs')
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if sys_sun
|
if sys_sun
|
||||||
|
@ -219,15 +218,15 @@ else
|
||||||
error('System ' + host_machine.system() + ' not known')
|
error('System ' + host_machine.system() + ' not known')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if sys_linux or sys_bsd or sys_sun
|
|
||||||
config_h.set('_STAT_VER_LINUX', '1')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if host_os == 'freebsd' or host_os == 'dragonfly'
|
if host_os == 'freebsd' or host_os == 'dragonfly'
|
||||||
# This is necessary. We MUST use OpenSSL in base as bringing in from ports
|
# This is necessary. We MUST use OpenSSL in base as bringing in from ports
|
||||||
# can cause major issues (2 copies of the same library).
|
# can cause major issues (2 copies of the same library).
|
||||||
crypto = declare_dependency(link_args : [ '-lssl', '-lcrypto'])
|
crypto = declare_dependency(link_args : [ '-lssl', '-lcrypto'])
|
||||||
config_h.set('HAVE_OPENSSL', '1')
|
config_h.set('HAVE_OPENSSL', '1')
|
||||||
|
elif get_option('crypto') == 'gnutls'
|
||||||
|
# gcrypt does not want to provide a pkg config file so we try the lib
|
||||||
|
crypto = [dependency('gnutls'), cc.find_library('gcrypt')]
|
||||||
|
config_h.set('HAVE_GNUTLS', '1')
|
||||||
elif get_option('crypto') == 'openssl'
|
elif get_option('crypto') == 'openssl'
|
||||||
crypto = dependency('openssl')
|
crypto = dependency('openssl')
|
||||||
config_h.set('HAVE_OPENSSL', '1')
|
config_h.set('HAVE_OPENSSL', '1')
|
||||||
|
@ -618,11 +617,9 @@ foreach evas_loader_map_inst : evas_loader_map
|
||||||
meson.add_install_script('meson/evas_loader_conf.sh', evas_loader_original, evas_loader_link_types)
|
meson.add_install_script('meson/evas_loader_conf.sh', evas_loader_original, evas_loader_link_types)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
doxygen = find_program('doxygen', required : get_option('docs'))
|
doxygen = find_program('doxygen', required : false)
|
||||||
if get_option('docs')
|
|
||||||
if not doxygen.found()
|
if doxygen.found()
|
||||||
error('Need doxygen for docs')
|
|
||||||
endif
|
|
||||||
subdir('doc')
|
subdir('doc')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ option('debug-threads',
|
||||||
|
|
||||||
option('build-examples',
|
option('build-examples',
|
||||||
type : 'boolean',
|
type : 'boolean',
|
||||||
value : false,
|
value : true,
|
||||||
description : 'Compile examples'
|
description : 'Compile examples'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ option('build-tests',
|
||||||
|
|
||||||
option('crypto',
|
option('crypto',
|
||||||
type : 'combo',
|
type : 'combo',
|
||||||
choices : ['openssl'],
|
choices : ['gnutls', 'openssl'],
|
||||||
value : 'openssl',
|
value : 'openssl',
|
||||||
description : 'Which SSL Crypto library used in efl'
|
description : 'Which SSL Crypto library used in efl'
|
||||||
)
|
)
|
||||||
|
@ -330,7 +330,7 @@ option('dotnet',
|
||||||
option('lua-interpreter',
|
option('lua-interpreter',
|
||||||
type: 'combo',
|
type: 'combo',
|
||||||
choices: ['luajit', 'lua'],
|
choices: ['luajit', 'lua'],
|
||||||
value: 'lua',
|
value: 'luajit',
|
||||||
description: 'Which Lua back-end library to use in efl'
|
description: 'Which Lua back-end library to use in efl'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -382,15 +382,3 @@ option('max-fd-size',
|
||||||
value : '8192',
|
value : '8192',
|
||||||
description : 'This is the maximim set of fds and thus maximum fd value allowed +1 in the ecore main loop handler'
|
description : 'This is the maximim set of fds and thus maximum fd value allowed +1 in the ecore main loop handler'
|
||||||
)
|
)
|
||||||
|
|
||||||
option('docs',
|
|
||||||
type: 'boolean',
|
|
||||||
value: false,
|
|
||||||
description: 'Enable building C of documentation (Requires doxygen)'
|
|
||||||
)
|
|
||||||
|
|
||||||
option('embedded-libunibreak',
|
|
||||||
type : 'boolean',
|
|
||||||
value : true,
|
|
||||||
description : 'Use the embedded in-tree libunibreak instead of the system libunibreak.'
|
|
||||||
)
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
ar az_IR ca cs da de el eo es fa fi fr gl he hu it ja ka ko_KR ko lt nl pl ps pt ru sl sr tr ur vi yi zh_CN
|
ar az_IR ca cs da de el eo es fa fi fr gl he hu it ja ko_KR ko lt nl pl ps pt ru sl sr tr ur vi yi zh_CN
|
||||||
|
|
|
@ -406,6 +406,7 @@ src/examples/ecore/ecore_event_example_02.c
|
||||||
src/examples/ecore/ecore_exe_example.c
|
src/examples/ecore/ecore_exe_example.c
|
||||||
src/examples/ecore/ecore_exe_example_child.c
|
src/examples/ecore/ecore_exe_example_child.c
|
||||||
src/examples/ecore/ecore_fd_handler_example.c
|
src/examples/ecore/ecore_fd_handler_example.c
|
||||||
|
src/examples/ecore/ecore_fd_handler_gnutls_example.c
|
||||||
src/examples/ecore/ecore_file_download_example.c
|
src/examples/ecore/ecore_file_download_example.c
|
||||||
src/examples/ecore/ecore_getopt_example.c
|
src/examples/ecore/ecore_getopt_example.c
|
||||||
src/examples/ecore/ecore_idler_example.c
|
src/examples/ecore/ecore_idler_example.c
|
||||||
|
@ -860,9 +861,11 @@ src/lib/ecore_con/efl_net_socket_tcp.c
|
||||||
src/lib/ecore_con/efl_net_socket_udp.c
|
src/lib/ecore_con/efl_net_socket_udp.c
|
||||||
src/lib/ecore_con/efl_net_socket_unix.c
|
src/lib/ecore_con/efl_net_socket_unix.c
|
||||||
src/lib/ecore_con/efl_net_socket_windows.c
|
src/lib/ecore_con/efl_net_socket_windows.c
|
||||||
|
src/lib/ecore_con/efl_net_ssl_conn-gnutls.c
|
||||||
src/lib/ecore_con/efl_net_ssl_conn-none.c
|
src/lib/ecore_con/efl_net_ssl_conn-none.c
|
||||||
src/lib/ecore_con/efl_net_ssl_conn-openssl.c
|
src/lib/ecore_con/efl_net_ssl_conn-openssl.c
|
||||||
src/lib/ecore_con/efl_net_ssl_context.c
|
src/lib/ecore_con/efl_net_ssl_context.c
|
||||||
|
src/lib/ecore_con/efl_net_ssl_ctx-gnutls.c
|
||||||
src/lib/ecore_con/efl_net_ssl_ctx-none.c
|
src/lib/ecore_con/efl_net_ssl_ctx-none.c
|
||||||
src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
|
src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
|
||||||
src/lib/ecore_drm2/ecore_drm2.c
|
src/lib/ecore_drm2/ecore_drm2.c
|
||||||
|
@ -2481,6 +2484,7 @@ src/lib/embryo/embryo_time.c
|
||||||
src/lib/emile/emile_base64.c
|
src/lib/emile/emile_base64.c
|
||||||
src/lib/emile/emile_base64.h
|
src/lib/emile/emile_base64.h
|
||||||
src/lib/emile/emile_cipher.c
|
src/lib/emile/emile_cipher.c
|
||||||
|
src/lib/emile/emile_cipher_gnutls.c
|
||||||
src/lib/emile/emile_cipher.h
|
src/lib/emile/emile_cipher.h
|
||||||
src/lib/emile/emile_cipher_openssl.c
|
src/lib/emile/emile_cipher_openssl.c
|
||||||
src/lib/emile/emile_compress.c
|
src/lib/emile/emile_compress.c
|
||||||
|
|
276
po/ka.po
276
po/ka.po
|
@ -1,276 +0,0 @@
|
||||||
# Georgian translation for Efl.
|
|
||||||
# Copyright (C) 2022 Enlightenment development team
|
|
||||||
# This file is put in the public domain.
|
|
||||||
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
|
|
||||||
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: 2022-10-25 10:16+0200\n"
|
|
||||||
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
|
|
||||||
"Language-Team: Georgian <(nothing)>\n"
|
|
||||||
"Language: ka\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
||||||
"X-Generator: Poedit 3.2\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:85
|
|
||||||
msgid "Version:"
|
|
||||||
msgstr "ვერსია:"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:94
|
|
||||||
msgid "Usage:"
|
|
||||||
msgstr "გამოყენება:"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:101
|
|
||||||
#, c-format
|
|
||||||
msgid "%s [options]"
|
|
||||||
msgstr "%s [პარამეტრები]"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:301
|
|
||||||
msgid "Copyright:"
|
|
||||||
msgstr "უფლებები:"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:313
|
|
||||||
msgid "License:"
|
|
||||||
msgstr "ლიცენზია:"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:499
|
|
||||||
msgid "Type: "
|
|
||||||
msgstr "ტიპი: "
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:575
|
|
||||||
msgid "Default: "
|
|
||||||
msgstr "ნაგულისხმები: "
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:602
|
|
||||||
msgid "Choices: "
|
|
||||||
msgstr "არჩევანი: "
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
|
||||||
msgid "No categories available."
|
|
||||||
msgstr "კატეგორიები ხელმიუწვდომელია."
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:645
|
|
||||||
msgid "Categories: "
|
|
||||||
msgstr "კატეგორიები: "
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:767
|
|
||||||
msgid "Options:\n"
|
|
||||||
msgstr "პარამეტრები:\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:776
|
|
||||||
msgid "Positional arguments:\n"
|
|
||||||
msgstr "პოზიციური არგუმენტები:\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:843
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: unknown category '%s'.\n"
|
|
||||||
msgstr "შეცდომა: უცნობი კატეგორია '%s'.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:947
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: unknown option --%s.\n"
|
|
||||||
msgstr "შეცდომა: უცნობი პარამეტრი --%s.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:949
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: unknown option -%c.\n"
|
|
||||||
msgstr "შეცდომა: უცნობი პარამეტრი -%c.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1012
|
|
||||||
msgid "ERROR: "
|
|
||||||
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 "მნიშვნელობას მაჩვენებელი დაყენებული არ აქვს.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
|
|
||||||
#, c-format
|
|
||||||
msgid "unknown boolean value %s.\n"
|
|
||||||
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 "რიცხვის არასწორი ფორმატი %s\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1309
|
|
||||||
#, c-format
|
|
||||||
msgid "invalid choice \"%s\". Valid values are: "
|
|
||||||
msgstr "არასწორი არჩევანი \"%s\". სწორი მნიშვნელობებია: "
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1337
|
|
||||||
msgid "missing parameter to append.\n"
|
|
||||||
msgstr "მისაწერი გამორჩენილი პარამეტრი.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1441
|
|
||||||
msgid "could not parse value.\n"
|
|
||||||
msgstr "მნიშვნელობის დამუშავების შეცდომა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1498
|
|
||||||
msgid "missing parameter.\n"
|
|
||||||
msgstr "ნაკლული პარამეტრი.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1511
|
|
||||||
msgid "missing callback function!\n"
|
|
||||||
msgstr "ნაკლული უკუგამოძახების ფუნქცია!\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1542
|
|
||||||
msgid "no version was defined.\n"
|
|
||||||
msgstr "ვერსია აღწერილი არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1559
|
|
||||||
msgid "no copyright was defined.\n"
|
|
||||||
msgstr "საავტორო უფლებები აღწერილი არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1576
|
|
||||||
msgid "no license was defined.\n"
|
|
||||||
msgstr "ლიცენზია აღწერილი არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1666
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: unknown option --%s, ignored.\n"
|
|
||||||
msgstr "შეცდომა: უცნობი პარამეტრი --%s. იგნორირებულია.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1706
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: option --%s requires an argument!\n"
|
|
||||||
msgstr "შეცდომა: პარამეტრისთვის --%s არგუმენტი აუცილებელია!\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1748
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: unknown option -%c, ignored.\n"
|
|
||||||
msgstr "შეცდომა: უცნობი პარამეტრი -%c, იგნორირებულია.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1793
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: option -%c requires an argument!\n"
|
|
||||||
msgstr "შეცდომა: პარამეტრისთვის -%c არგუმენტი აუცილებელია!\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1888
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: missing required positional argument %s.\n"
|
|
||||||
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 "შეცდომა: დამმუშავებელი მოწოდებული არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
|
||||||
msgid "ERROR: no values provided.\n"
|
|
||||||
msgstr "შეცდომა: მნიშვნელობები მითითებული არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
|
||||||
msgid "ERROR: no arguments provided.\n"
|
|
||||||
msgstr "შეცდომა: არგუმენტები მითითებული არაა.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2081
|
|
||||||
msgid "ERROR: invalid options found."
|
|
||||||
msgstr "შეცდომა: აღმოჩენილია არასწორი პარამეტრები."
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
|
||||||
#, c-format
|
|
||||||
msgid " See --%s.\n"
|
|
||||||
msgstr " იხილეთ --%s.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
|
||||||
#, c-format
|
|
||||||
msgid " See -%c.\n"
|
|
||||||
msgstr " იხილეთ -%c.\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2148
|
|
||||||
msgid "ERROR: invalid positional arguments found."
|
|
||||||
msgstr "შეცდომა: ნაპოვნია არასწორი პოზიციური არგუმენტები."
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2183
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: incorrect geometry value '%s'\n"
|
|
||||||
msgstr "შეცდომა: გეომეტრიის არასწორი მნიშვნელობა '%s'\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2201
|
|
||||||
#, c-format
|
|
||||||
msgid "ERROR: incorrect size value '%s'\n"
|
|
||||||
msgstr "შეცდომა: ზომის არასწორი მნიშვნელობა '%s'\n"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:127
|
|
||||||
msgid "Desktop"
|
|
||||||
msgstr "სამუშაო მაგიდა"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:135
|
|
||||||
msgid "Downloads"
|
|
||||||
msgstr "გადმოწერები"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:144
|
|
||||||
msgid "Templates"
|
|
||||||
msgstr "შაბლონები"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:153
|
|
||||||
msgid "Public"
|
|
||||||
msgstr "საჯარო"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:162
|
|
||||||
msgid "Documents"
|
|
||||||
msgstr "დოკუმენტები"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:170
|
|
||||||
msgid "Music"
|
|
||||||
msgstr "მუსიკა"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:178
|
|
||||||
msgid "Pictures"
|
|
||||||
msgstr "სურათები"
|
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:186
|
|
||||||
msgid "Videos"
|
|
||||||
msgstr "ვიდეო"
|
|
||||||
|
|
||||||
#: src/lib/evas/common/language/evas_language_utils.c:205
|
|
||||||
msgid "default:LTR"
|
|
||||||
msgstr "default:LTR"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:408
|
|
||||||
msgid "Title"
|
|
||||||
msgstr "სათაური"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:415
|
|
||||||
msgid "Subtitle"
|
|
||||||
msgstr "სუბტიტრები"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:966
|
|
||||||
msgid "Back"
|
|
||||||
msgstr "უკან"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1755
|
|
||||||
msgid "Up"
|
|
||||||
msgstr "მაღლა"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1769
|
|
||||||
msgid "Home"
|
|
||||||
msgstr "საწყისი"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1787
|
|
||||||
msgid "Search"
|
|
||||||
msgstr "ძებნა"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:2061
|
|
||||||
msgid "OK"
|
|
||||||
msgstr "დიახ"
|
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:2070
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr "გაუქმება"
|
|
||||||
|
|
38
po/pt.po
38
po/pt.po
|
@ -1,23 +1,22 @@
|
||||||
# Portuguese translation for Efl.
|
# Portuguese translation for Efl.
|
||||||
# Copyright (C) 2012 Enlightenment development team
|
# Copyright (C) 2012 Enlightenment development team
|
||||||
# This file is public domain.
|
# This file is public domain.
|
||||||
# Sérgio Marques <smarquespt@gmail.com>, 2010-2014.
|
# Sérgio Marques <smarquespt@gmail.com>, 2010-2014
|
||||||
# Hugo Carvalho <hugokarvalho@hotmail.com> 2021-2022.
|
|
||||||
#
|
#
|
||||||
|
#: src/lib/elementary/elm_config.c:4267
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Elementary\n"
|
"Project-Id-Version: Elementary\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||||
"PO-Revision-Date: 2022-10-02 22:21+0100\n"
|
"PO-Revision-Date: 2013-11-05 14:11-0000\n"
|
||||||
"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
|
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
|
||||||
"Language-Team: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
|
"Language-Team: General\n"
|
||||||
"Language: pt\n"
|
"Language: pt\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"X-Generator: Poedit 1.6.4\n"
|
||||||
"X-Generator: Poedit 3.1.1\n"
|
|
||||||
"X-Launchpad-Export-Date: 2012-12-07 16:20+0000\n"
|
"X-Launchpad-Export-Date: 2012-12-07 16:20+0000\n"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:85
|
#: src/lib/ecore/ecore_getopt.c:85
|
||||||
|
@ -31,7 +30,7 @@ msgstr "Utilização:"
|
||||||
#: src/lib/ecore/ecore_getopt.c:101
|
#: src/lib/ecore/ecore_getopt.c:101
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s [options]"
|
msgid "%s [options]"
|
||||||
msgstr "%s [options]"
|
msgstr "%s [opções]"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:301
|
#: src/lib/ecore/ecore_getopt.c:301
|
||||||
msgid "Copyright:"
|
msgid "Copyright:"
|
||||||
|
@ -43,15 +42,15 @@ msgstr "Licença:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:499
|
#: src/lib/ecore/ecore_getopt.c:499
|
||||||
msgid "Type: "
|
msgid "Type: "
|
||||||
msgstr "Tipo: "
|
msgstr "Tipo:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:575
|
#: src/lib/ecore/ecore_getopt.c:575
|
||||||
msgid "Default: "
|
msgid "Default: "
|
||||||
msgstr "Padrão: "
|
msgstr "Padrão:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:602
|
#: src/lib/ecore/ecore_getopt.c:602
|
||||||
msgid "Choices: "
|
msgid "Choices: "
|
||||||
msgstr "Escolhas: "
|
msgstr "Escolhas:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||||
msgid "No categories available."
|
msgid "No categories available."
|
||||||
|
@ -59,7 +58,7 @@ msgstr "Nenhuma categoria disponível."
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:645
|
#: src/lib/ecore/ecore_getopt.c:645
|
||||||
msgid "Categories: "
|
msgid "Categories: "
|
||||||
msgstr "Categorias: "
|
msgstr "Categorias:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:767
|
#: src/lib/ecore/ecore_getopt.c:767
|
||||||
msgid "Options:\n"
|
msgid "Options:\n"
|
||||||
|
@ -108,7 +107,7 @@ msgstr "formato numérico inválido %s\n"
|
||||||
#: src/lib/ecore/ecore_getopt.c:1309
|
#: src/lib/ecore/ecore_getopt.c:1309
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "invalid choice \"%s\". Valid values are: "
|
msgid "invalid choice \"%s\". Valid values are: "
|
||||||
msgstr "escolha inválida \"%s\". O valores possíveis são: "
|
msgstr "escolha inválida \"%s\". O valores possíveis são:"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1337
|
#: src/lib/ecore/ecore_getopt.c:1337
|
||||||
msgid "missing parameter to append.\n"
|
msgid "missing parameter to append.\n"
|
||||||
|
@ -187,12 +186,12 @@ msgstr "ERRO: encontradas opções inválidas."
|
||||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid " See --%s.\n"
|
msgid " See --%s.\n"
|
||||||
msgstr " Veja --%s.\n"
|
msgstr "Consulte --%s.\n"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid " See -%c.\n"
|
msgid " See -%c.\n"
|
||||||
msgstr " Veja -%c.\n"
|
msgstr "Consulte -%c.\n"
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2148
|
#: src/lib/ecore/ecore_getopt.c:2148
|
||||||
msgid "ERROR: invalid positional arguments found."
|
msgid "ERROR: invalid positional arguments found."
|
||||||
|
@ -242,19 +241,20 @@ msgstr "Vídeos"
|
||||||
|
|
||||||
#: src/lib/evas/common/language/evas_language_utils.c:205
|
#: src/lib/evas/common/language/evas_language_utils.c:205
|
||||||
msgid "default:LTR"
|
msgid "default:LTR"
|
||||||
msgstr "padrão: LTR (da esquerda para a direita)"
|
msgstr "default:LTR"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:408
|
#: src/lib/elementary/elc_naviframe.c:408
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:415
|
#: src/lib/elementary/elc_naviframe.c:415
|
||||||
|
#, fuzzy
|
||||||
msgid "Subtitle"
|
msgid "Subtitle"
|
||||||
msgstr "Legenda"
|
msgstr "Título"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:966
|
#: src/lib/elementary/elc_naviframe.c:966
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr "Voltar"
|
msgstr "Recuar"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1755
|
#: src/lib/elementary/elc_fileselector.c:1755
|
||||||
msgid "Up"
|
msgid "Up"
|
||||||
|
@ -266,7 +266,7 @@ msgstr "Pasta pessoal"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1787
|
#: src/lib/elementary/elc_fileselector.c:1787
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Procurar"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:2061
|
#: src/lib/elementary/elc_fileselector.c:2061
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
|
|
112
po/ru.po
112
po/ru.po
|
@ -3,15 +3,15 @@
|
||||||
# This file is put in the public domain.
|
# This file is put in the public domain.
|
||||||
# Danny Moshnakov <dm@agent.co.il>, 2012.
|
# Danny Moshnakov <dm@agent.co.il>, 2012.
|
||||||
# Igor Murzov <garik@efl.so>, 2015.
|
# Igor Murzov <garik@efl.so>, 2015.
|
||||||
# Dmitri Chudinov <dmitri.chudinov@gmail.com>, 2022.
|
|
||||||
#
|
#
|
||||||
|
#: src/lib/elementary/elm_config.c:4267
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: elementary 1.11\n"
|
"Project-Id-Version: elementary 1.11\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||||
"PO-Revision-Date: 2022-06-07 11:55+0500\n"
|
"PO-Revision-Date: 2015-02-07 15:16+0300\n"
|
||||||
"Last-Translator: Дмитрий Чудинов <dmitri.chudinov@gmail.com>\n"
|
"Last-Translator: Игорь Мурзов <garik@efl.so>\n"
|
||||||
"Language-Team: ru <enlightenment-intl@lists.sourceforge.net>\n"
|
"Language-Team: ru <enlightenment-intl@lists.sourceforge.net>\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -22,192 +22,191 @@ msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:85
|
#: src/lib/ecore/ecore_getopt.c:85
|
||||||
msgid "Version:"
|
msgid "Version:"
|
||||||
msgstr "Версия:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:94
|
#: src/lib/ecore/ecore_getopt.c:94
|
||||||
msgid "Usage:"
|
msgid "Usage:"
|
||||||
msgstr "Пример использования:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:101
|
#: src/lib/ecore/ecore_getopt.c:101
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s [options]"
|
msgid "%s [options]"
|
||||||
msgstr "%s [опций]"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:301
|
#: src/lib/ecore/ecore_getopt.c:301
|
||||||
msgid "Copyright:"
|
msgid "Copyright:"
|
||||||
msgstr "Копирайт:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:313
|
#: src/lib/ecore/ecore_getopt.c:313
|
||||||
msgid "License:"
|
msgid "License:"
|
||||||
msgstr "Лицензия:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:499
|
#: src/lib/ecore/ecore_getopt.c:499
|
||||||
msgid "Type: "
|
msgid "Type: "
|
||||||
msgstr "Тип: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:575
|
#: src/lib/ecore/ecore_getopt.c:575
|
||||||
msgid "Default: "
|
msgid "Default: "
|
||||||
msgstr "По умолчанию: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:602
|
#: src/lib/ecore/ecore_getopt.c:602
|
||||||
msgid "Choices: "
|
msgid "Choices: "
|
||||||
msgstr "Варианты: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||||
msgid "No categories available."
|
msgid "No categories available."
|
||||||
msgstr "Нет доступных категорий."
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:645
|
#: src/lib/ecore/ecore_getopt.c:645
|
||||||
msgid "Categories: "
|
msgid "Categories: "
|
||||||
msgstr "Категории: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:767
|
#: src/lib/ecore/ecore_getopt.c:767
|
||||||
msgid "Options:\n"
|
msgid "Options:\n"
|
||||||
msgstr "Опции:\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:776
|
#: src/lib/ecore/ecore_getopt.c:776
|
||||||
msgid "Positional arguments:\n"
|
msgid "Positional arguments:\n"
|
||||||
msgstr "Позиционные аргументы:\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:843
|
#: src/lib/ecore/ecore_getopt.c:843
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unknown category '%s'.\n"
|
msgid "ERROR: unknown category '%s'.\n"
|
||||||
msgstr "ОШИБКА: неизвестная категория '%s'.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:947
|
#: src/lib/ecore/ecore_getopt.c:947
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unknown option --%s.\n"
|
msgid "ERROR: unknown option --%s.\n"
|
||||||
msgstr "ОШИБКА: неизвестная опция --%s.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:949
|
#: src/lib/ecore/ecore_getopt.c:949
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unknown option -%c.\n"
|
msgid "ERROR: unknown option -%c.\n"
|
||||||
msgstr "ОШИБКА: неизвестная опция -%c.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1012
|
#: src/lib/ecore/ecore_getopt.c:1012
|
||||||
msgid "ERROR: "
|
msgid "ERROR: "
|
||||||
msgstr "ОШИБКА: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1108 src/lib/ecore/ecore_getopt.c:1245
|
#: 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: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:1296 src/lib/ecore/ecore_getopt.c:1343
|
||||||
#: src/lib/ecore/ecore_getopt.c:1463 src/lib/ecore/ecore_getopt.c:1504
|
#: src/lib/ecore/ecore_getopt.c:1463 src/lib/ecore/ecore_getopt.c:1504
|
||||||
msgid "value has no pointer set.\n"
|
msgid "value has no pointer set.\n"
|
||||||
msgstr "значение не имеет установленного указателя.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
|
#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "unknown boolean value %s.\n"
|
msgid "unknown boolean value %s.\n"
|
||||||
msgstr "неизвестное булево значение %s.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
|
#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "invalid number format %s\n"
|
msgid "invalid number format %s\n"
|
||||||
msgstr "неверный формат числа %s\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1309
|
#: src/lib/ecore/ecore_getopt.c:1309
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "invalid choice \"%s\". Valid values are: "
|
msgid "invalid choice \"%s\". Valid values are: "
|
||||||
msgstr "недопустимый выбор \"%s\". Допустимыми значениями являются: "
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1337
|
#: src/lib/ecore/ecore_getopt.c:1337
|
||||||
msgid "missing parameter to append.\n"
|
msgid "missing parameter to append.\n"
|
||||||
msgstr "недостающий параметр для добавления.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1441
|
#: src/lib/ecore/ecore_getopt.c:1441
|
||||||
msgid "could not parse value.\n"
|
msgid "could not parse value.\n"
|
||||||
msgstr "не удалось разобрать значение.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1498
|
#: src/lib/ecore/ecore_getopt.c:1498
|
||||||
msgid "missing parameter.\n"
|
msgid "missing parameter.\n"
|
||||||
msgstr "отсутствует параметр\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1511
|
#: src/lib/ecore/ecore_getopt.c:1511
|
||||||
msgid "missing callback function!\n"
|
msgid "missing callback function!\n"
|
||||||
msgstr "отсутствует функция вызова (callback)\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1542
|
#: src/lib/ecore/ecore_getopt.c:1542
|
||||||
msgid "no version was defined.\n"
|
msgid "no version was defined.\n"
|
||||||
msgstr "версия не определена\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1559
|
#: src/lib/ecore/ecore_getopt.c:1559
|
||||||
msgid "no copyright was defined.\n"
|
msgid "no copyright was defined.\n"
|
||||||
msgstr "копирайт не определен\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1576
|
#: src/lib/ecore/ecore_getopt.c:1576
|
||||||
msgid "no license was defined.\n"
|
msgid "no license was defined.\n"
|
||||||
msgstr "лицензия не определена\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1666
|
#: src/lib/ecore/ecore_getopt.c:1666
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unknown option --%s, ignored.\n"
|
msgid "ERROR: unknown option --%s, ignored.\n"
|
||||||
msgstr "ОШИБКА: неизвестная опция --%s, проигнорировано\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1706
|
#: src/lib/ecore/ecore_getopt.c:1706
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: option --%s requires an argument!\n"
|
msgid "ERROR: option --%s requires an argument!\n"
|
||||||
msgstr "ОШИБКА: для опции --%s требуется указать аргумент!\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1748
|
#: src/lib/ecore/ecore_getopt.c:1748
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unknown option -%c, ignored.\n"
|
msgid "ERROR: unknown option -%c, ignored.\n"
|
||||||
msgstr "ОШИБКА: неизвестная опция -%c, проигнорировано.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1793
|
#: src/lib/ecore/ecore_getopt.c:1793
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: option -%c requires an argument!\n"
|
msgid "ERROR: option -%c requires an argument!\n"
|
||||||
msgstr "ОШИБКА: для опции -%c требуется указать аргумент!\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1888
|
#: src/lib/ecore/ecore_getopt.c:1888
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: missing required positional argument %s.\n"
|
msgid "ERROR: missing required positional argument %s.\n"
|
||||||
msgstr "ОШИБКА: отсутствует необходимый позиционный аргумент %s.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:1920
|
#: src/lib/ecore/ecore_getopt.c:1920
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: unsupported action type %d for positional argument %s\n"
|
msgid "ERROR: unsupported action type %d for positional argument %s\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"ОШИБКА: неподдерживаемый тип действия %d для позиционного аргумента %s\n"
|
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
|
#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
|
||||||
msgid "ERROR: no parser provided.\n"
|
msgid "ERROR: no parser provided.\n"
|
||||||
msgstr "ОШИБКА: не предоставлен анализатор (parser).\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
||||||
msgid "ERROR: no values provided.\n"
|
msgid "ERROR: no values provided.\n"
|
||||||
msgstr "ОШИБКА: не предоставлены значения.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
||||||
msgid "ERROR: no arguments provided.\n"
|
msgid "ERROR: no arguments provided.\n"
|
||||||
msgstr "ОШИБКА: не предоставлены аргументы.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2081
|
#: src/lib/ecore/ecore_getopt.c:2081
|
||||||
msgid "ERROR: invalid options found."
|
msgid "ERROR: invalid options found."
|
||||||
msgstr "ОШИБКА: обнаружены недопустимые опции."
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid " See --%s.\n"
|
msgid " See --%s.\n"
|
||||||
msgstr " Смотри --%s.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid " See -%c.\n"
|
msgid " See -%c.\n"
|
||||||
msgstr " Смотри --%c.\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2148
|
#: src/lib/ecore/ecore_getopt.c:2148
|
||||||
msgid "ERROR: invalid positional arguments found."
|
msgid "ERROR: invalid positional arguments found."
|
||||||
msgstr "ОШИБКА: найдены недопустимые позиционные аргументы."
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2183
|
#: src/lib/ecore/ecore_getopt.c:2183
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: incorrect geometry value '%s'\n"
|
msgid "ERROR: incorrect geometry value '%s'\n"
|
||||||
msgstr "ОШИБКА: некорректное значение геометрии '%s'\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/ecore/ecore_getopt.c:2201
|
#: src/lib/ecore/ecore_getopt.c:2201
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ERROR: incorrect size value '%s'\n"
|
msgid "ERROR: incorrect size value '%s'\n"
|
||||||
msgstr "ОШИБКА: некорректное значение размера '%s'\n"
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:127
|
#: src/lib/efreet/efreet_base.c:127
|
||||||
msgid "Desktop"
|
msgid "Desktop"
|
||||||
|
@ -223,7 +222,7 @@ msgstr "Шаблоны"
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:153
|
#: src/lib/efreet/efreet_base.c:153
|
||||||
msgid "Public"
|
msgid "Public"
|
||||||
msgstr "Открытый"
|
msgstr "Общий каталог"
|
||||||
|
|
||||||
#: src/lib/efreet/efreet_base.c:162
|
#: src/lib/efreet/efreet_base.c:162
|
||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
|
@ -250,8 +249,9 @@ msgid "Title"
|
||||||
msgstr "Заголовок"
|
msgstr "Заголовок"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:415
|
#: src/lib/elementary/elc_naviframe.c:415
|
||||||
|
#, fuzzy
|
||||||
msgid "Subtitle"
|
msgid "Subtitle"
|
||||||
msgstr "Подзаголовок"
|
msgstr "Заголовок"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_naviframe.c:966
|
#: src/lib/elementary/elc_naviframe.c:966
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
|
@ -263,7 +263,7 @@ msgstr "Вверх"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1769
|
#: src/lib/elementary/elc_fileselector.c:1769
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Главная"
|
msgstr "Дом"
|
||||||
|
|
||||||
#: src/lib/elementary/elc_fileselector.c:1787
|
#: src/lib/elementary/elc_fileselector.c:1787
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
|
@ -281,16 +281,16 @@ msgstr "Отмена"
|
||||||
#~ msgstr "Состояние: Отключено"
|
#~ msgstr "Состояние: Отключено"
|
||||||
|
|
||||||
#~ msgid "multi button entry label"
|
#~ msgid "multi button entry label"
|
||||||
#~ msgstr "метка многокнопочного элемента"
|
#~ msgstr "метка многокопочного элемента"
|
||||||
|
|
||||||
#~ msgid "multi button entry item"
|
#~ msgid "multi button entry item"
|
||||||
#~ msgstr "кнопка многокнопочного элемента"
|
#~ msgstr "кнопка многокопочного элемента"
|
||||||
|
|
||||||
#~ msgid "multi button entry"
|
#~ msgid "multi button entry"
|
||||||
#~ msgstr "многокнопочный элемент"
|
#~ msgstr "многокнопочный элемент"
|
||||||
|
|
||||||
#~ msgid "Next"
|
#~ msgid "Next"
|
||||||
#~ msgstr "Далее"
|
#~ msgstr "Вперёд"
|
||||||
|
|
||||||
#~ msgid "Popup Title"
|
#~ msgid "Popup Title"
|
||||||
#~ msgstr "Заголовок всплывающего окна"
|
#~ msgstr "Заголовок всплывающего окна"
|
||||||
|
@ -368,7 +368,7 @@ msgstr "Отмена"
|
||||||
#~ msgstr "элемент выбора дня"
|
#~ msgstr "элемент выбора дня"
|
||||||
|
|
||||||
#~ msgid "diskselector item"
|
#~ msgid "diskselector item"
|
||||||
#~ msgstr "элемент выбора диска"
|
#~ msgstr "элемент диска выбора"
|
||||||
|
|
||||||
#~ msgid "Cut"
|
#~ msgid "Cut"
|
||||||
#~ msgstr "Вырезать"
|
#~ msgstr "Вырезать"
|
||||||
|
@ -383,7 +383,7 @@ msgstr "Отмена"
|
||||||
#~ msgstr "Выбрать"
|
#~ msgstr "Выбрать"
|
||||||
|
|
||||||
#~ msgid "Entry"
|
#~ msgid "Entry"
|
||||||
#~ msgstr "Ввод"
|
#~ msgstr "Запись"
|
||||||
|
|
||||||
#~ msgid "Index"
|
#~ msgid "Index"
|
||||||
#~ msgstr "Алфавитный указатель"
|
#~ msgstr "Алфавитный указатель"
|
||||||
|
@ -419,7 +419,7 @@ msgstr "Отмена"
|
||||||
#~ msgstr "Состояние: Выбрано"
|
#~ msgstr "Состояние: Выбрано"
|
||||||
|
|
||||||
#~ msgid "State: Unselected"
|
#~ msgid "State: Unselected"
|
||||||
#~ msgstr "Состояние: Не выбрано"
|
#~ msgstr "Состояние: Невыбрано"
|
||||||
|
|
||||||
#~ msgid "Segment Control Item"
|
#~ msgid "Segment Control Item"
|
||||||
#~ msgstr "Элемент сегментного элемента управления"
|
#~ msgstr "Элемент сегментного элемента управления"
|
||||||
|
@ -438,7 +438,7 @@ msgstr "Отмена"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "spinner text"
|
#~ msgid "spinner text"
|
||||||
#~ msgstr "текст счётчика"
|
#~ msgstr "счётчик"
|
||||||
|
|
||||||
#~ msgid "Selected"
|
#~ msgid "Selected"
|
||||||
#~ msgstr "Выбрано"
|
#~ msgstr "Выбрано"
|
||||||
|
@ -450,7 +450,7 @@ msgstr "Отмена"
|
||||||
#~ msgstr "С меню"
|
#~ msgstr "С меню"
|
||||||
|
|
||||||
#~ msgid "Unselected"
|
#~ msgid "Unselected"
|
||||||
#~ msgstr "Не выбраноы"
|
#~ msgstr "Невыбрано"
|
||||||
|
|
||||||
#~ msgid "Toolbar Item"
|
#~ msgid "Toolbar Item"
|
||||||
#~ msgstr "Элемент панели инструментов"
|
#~ msgstr "Элемент панели инструментов"
|
||||||
|
|
|
@ -4151,7 +4151,7 @@ do_xifdef(cpp_reader * pfile, struct directive *keyword,
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
/* Detect a #ifndef at start of file (not counting comments). */
|
/* Detect a #ifndef at start of file (not counting comments). */
|
||||||
if (ip->fname != NULL && keyword->type == T_IFNDEF)
|
if (ip->fname != 0 && keyword->type == T_IFNDEF)
|
||||||
start_of_file = pfile->only_seen_white == 2;
|
start_of_file = pfile->only_seen_white == 2;
|
||||||
|
|
||||||
pfile->no_macro_expand++;
|
pfile->no_macro_expand++;
|
||||||
|
|
|
@ -43,9 +43,9 @@ if meson.is_cross_build()
|
||||||
edje_depends = []
|
edje_depends = []
|
||||||
else
|
else
|
||||||
if sys_windows == true
|
if sys_windows == true
|
||||||
edje_cc_exe = [edje_cc]
|
edje_cc_exe = [edje_cc.full_path()]
|
||||||
else
|
else
|
||||||
edje_cc_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_cc]
|
edje_cc_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_cc.full_path()]
|
||||||
endif
|
endif
|
||||||
edje_depends = [edje_cc, epp, evas_engine_buffer_mod, embryo_cc]
|
edje_depends = [edje_cc, epp, evas_engine_buffer_mod, embryo_cc]
|
||||||
endif
|
endif
|
||||||
|
@ -97,7 +97,7 @@ if meson.is_cross_build()
|
||||||
edje_codegen_path = _edje_codegen.path()
|
edje_codegen_path = _edje_codegen.path()
|
||||||
edje_codegen_exe = [_edje_codegen]
|
edje_codegen_exe = [_edje_codegen]
|
||||||
else
|
else
|
||||||
edje_codegen_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_codegen]
|
edje_codegen_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_codegen.full_path()]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
edje_pick = executable('edje_pick',
|
edje_pick = executable('edje_pick',
|
||||||
|
|
|
@ -68,7 +68,7 @@ do
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Failed compiling eet file."
|
echo "Failed compiling eet file."
|
||||||
echo "Press 'Return' to reopen the editor, or ^C to abort."
|
echo "Press 'Return' to reopen the editor, or ^C to abort."
|
||||||
read _dummy
|
read
|
||||||
else
|
else
|
||||||
DONE=1
|
DONE=1
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2029,7 +2029,7 @@ _status_config_etc(Evas_Object *win,
|
||||||
elm_check_state_set(ck, elm_config_desktop_entry_get());
|
elm_check_state_set(ck, elm_config_desktop_entry_get());
|
||||||
|
|
||||||
// desktop_entry
|
// desktop_entry
|
||||||
CHECK_ADD("Entry Magnifiers", "Set popup magnifiers on start/end selection handles in entries", mag_change, NULL);
|
CHECK_ADD("Entry Mangifiers", "Set popup magnifiers on start/end selection handles in entries", mag_change, NULL);
|
||||||
elm_check_state_set(ck, elm_config_magnifier_enable_get());
|
elm_check_state_set(ck, elm_config_magnifier_enable_get());
|
||||||
|
|
||||||
// access
|
// access
|
||||||
|
@ -2455,8 +2455,7 @@ _status_config_icons(Evas_Object *win,
|
||||||
ic = elm_icon_add(li);
|
ic = elm_icon_add(li);
|
||||||
elm_image_file_set(ic, efreet_icon_path_find(th->name.internal, "folder", 48), NULL);
|
elm_image_file_set(ic, efreet_icon_path_find(th->name.internal, "folder", 48), NULL);
|
||||||
list_it = elm_list_item_append(li, th->name.name, ic, NULL,
|
list_it = elm_list_item_append(li, th->name.name, ic, NULL,
|
||||||
_icon_theme_sel,
|
_icon_theme_sel, th->name.internal);
|
||||||
eina_stringshare_add(th->name.internal));
|
|
||||||
|
|
||||||
if (!strcmp(th->name.internal, "hicolor"))
|
if (!strcmp(th->name.internal, "hicolor"))
|
||||||
def_it = list_it;
|
def_it = list_it;
|
||||||
|
@ -3376,7 +3375,7 @@ _profiles_list_unselect_cb(void *data EINA_UNUSED,
|
||||||
Evas_Object *obj,
|
Evas_Object *obj,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
if (!elm_list_selected_item_get(obj)) return;
|
if (elm_list_selected_item_get(obj)) return;
|
||||||
elm_object_disabled_set(evas_object_data_get(obj, "prof_del_btn"),
|
elm_object_disabled_set(evas_object_data_get(obj, "prof_del_btn"),
|
||||||
EINA_TRUE);
|
EINA_TRUE);
|
||||||
elm_object_disabled_set(evas_object_data_get(obj, "prof_reset_btn"),
|
elm_object_disabled_set(evas_object_data_get(obj, "prof_reset_btn"),
|
||||||
|
@ -4086,9 +4085,9 @@ _status_config_scrolling(Evas_Object *win,
|
||||||
evas_object_smart_callback_add(sl, "delay,changed", smooth_win_change, NULL);
|
evas_object_smart_callback_add(sl, "delay,changed", smooth_win_change, NULL);
|
||||||
|
|
||||||
|
|
||||||
evas_object_data_set(win, "scrolling", bx);
|
evas_object_data_set(win, "scrolling", sc);
|
||||||
|
|
||||||
elm_naviframe_item_simple_push(naviframe, bx);
|
elm_naviframe_item_simple_push(naviframe, sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -4383,16 +4382,11 @@ _status_config_full(Evas_Object *win,
|
||||||
"Audio", _cf_audio, win);
|
"Audio", _cf_audio, win);
|
||||||
elm_toolbar_item_append(tb, "preferences-profile",
|
elm_toolbar_item_append(tb, "preferences-profile",
|
||||||
"Profiles", _cf_profiles, win);
|
"Profiles", _cf_profiles, win);
|
||||||
elm_toolbar_item_append(tb, "system-run",
|
elm_toolbar_item_append(tb, NULL, "Scrolling", _cf_scrolling, win);
|
||||||
"Scrolling", _cf_scrolling, win);
|
elm_toolbar_item_append(tb, NULL, "Rendering", _cf_rendering, win);
|
||||||
elm_toolbar_item_append(tb, "preferences-desktop",
|
elm_toolbar_item_append(tb, NULL, "Caches", _cf_caches, win);
|
||||||
"Rendering", _cf_rendering, win);
|
elm_toolbar_item_append(tb, NULL, "Focus", _cf_focus, win);
|
||||||
elm_toolbar_item_append(tb, "appointment-new",
|
elm_toolbar_item_append(tb, NULL, "Etc", _cf_etc, win);
|
||||||
"Caches", _cf_caches, win);
|
|
||||||
elm_toolbar_item_append(tb, "magnifying-glass",
|
|
||||||
"Focus", _cf_focus, win);
|
|
||||||
elm_toolbar_item_append(tb, "preferences-etc",
|
|
||||||
"Etc", _cf_etc, win);
|
|
||||||
|
|
||||||
elm_box_pack_end(bx0, tb);
|
elm_box_pack_end(bx0, tb);
|
||||||
evas_object_show(tb);
|
evas_object_show(tb);
|
||||||
|
|
|
@ -497,7 +497,7 @@ test_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Evas_Object *rd, *rdg = NULL;
|
Evas_Object *rd, *rdg;
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,8 +36,7 @@ _group_1_create(Evas_Object *bx, const char *style)
|
||||||
|
|
||||||
// radio 1
|
// radio 1
|
||||||
ic = elm_icon_add(bx2);
|
ic = elm_icon_add(bx2);
|
||||||
elm_icon_standard_set(ic, "menu/folder");
|
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
|
||||||
// snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
|
|
||||||
elm_image_file_set(ic, buf, NULL);
|
elm_image_file_set(ic, buf, NULL);
|
||||||
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
||||||
|
|
||||||
|
@ -218,14 +217,5 @@ test_radio(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
||||||
_group_1_create(bx, "icon");
|
_group_1_create(bx, "icon");
|
||||||
_group_2_create(bx, "icon");
|
_group_2_create(bx, "icon");
|
||||||
|
|
||||||
bx = elm_box_add(win);
|
|
||||||
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
||||||
elm_box_horizontal_set(bx, EINA_TRUE);
|
|
||||||
elm_box_pack_end(bx0, bx);
|
|
||||||
evas_object_show(bx);
|
|
||||||
|
|
||||||
_group_1_create(bx, "sort_header");
|
|
||||||
_group_2_create(bx, "sort_header");
|
|
||||||
|
|
||||||
evas_object_show(win);
|
evas_object_show(win);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,25 +14,17 @@ map = run_command('map_generate.sh').stdout()
|
||||||
|
|
||||||
efl_libs = configuration_data()
|
efl_libs = configuration_data()
|
||||||
efl_libs.set('EFL_MONO_LIBRARY_MAP', map)
|
efl_libs.set('EFL_MONO_LIBRARY_MAP', map)
|
||||||
|
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
|
||||||
efl_libs.set('EVIL_DL_MONO', 'dl')
|
efl_libs.set('EVIL_DL_MONO', 'dl')
|
||||||
if sys_osx
|
if sys_osx
|
||||||
efl_libs.set('LIBDL_DL_MONO', 'dl.dylib')
|
efl_libs.set('LIBDL_DL_MONO', 'dl.dylib')
|
||||||
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
|
|
||||||
elif sys_windows
|
|
||||||
efl_libs.set('LIBDL_DL_MONO', 'libdl.dll')
|
|
||||||
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'libeflcustomexportsmono' + '-' + version_major)
|
|
||||||
else
|
else
|
||||||
efl_libs.set('LIBDL_DL_MONO', 'libdl.so')
|
efl_libs.set('LIBDL_DL_MONO', 'libdl.so')
|
||||||
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
foreach mono_libs : mono_sublibs
|
foreach mono_libs : mono_sublibs
|
||||||
key = mono_libs[0].to_upper()+'_DL_MONO'
|
key = mono_libs[0].to_upper()+'_DL_MONO'
|
||||||
if target_machine.system() == 'windows'
|
efl_libs.set(key, mono_libs[0].to_lower())
|
||||||
efl_libs.set(key, 'lib' + mono_libs[0].to_lower() + '-' + version_major)
|
|
||||||
else
|
|
||||||
efl_libs.set(key, mono_libs[0].to_lower())
|
|
||||||
endif
|
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
configure_file(
|
configure_file(
|
||||||
|
|
|
@ -17,13 +17,12 @@
|
||||||
<!-- </PropertyGroup> -->
|
<!-- </PropertyGroup> -->
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<DefineConstants>@EFL_BETA@</DefineConstants>
|
<DefineConstants>@EFL_BETA@</DefineConstants>
|
||||||
<DefineConstants>@EFL_WIN32@</DefineConstants>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="@BINDING_SRC@/efl_mono/*.cs" />
|
<Compile Include="@BINDING_SRC@/efl_mono/*.cs" />
|
||||||
<!-- FIXME Windows support -->
|
<!-- FIXME Windows support -->
|
||||||
<Compile Include="@BINDING_SRC@/eo_mono/*.cs" />
|
<Compile Include="@BINDING_SRC@/eo_mono/*.cs" Exclude="@BINDING_SRC@/eo_mono/*Windows.cs" />
|
||||||
<Compile Include="@BINDING_SRC@/eina_mono/*.cs" />
|
<Compile Include="@BINDING_SRC@/eina_mono/*.cs" />
|
||||||
<Compile Include="@BINDING_SRC@/eolian_mono/*.cs" />
|
<Compile Include="@BINDING_SRC@/eolian_mono/*.cs" />
|
||||||
<Compile Include="@BINDING_SRC@/eldbus_mono/*.cs" />
|
<Compile Include="@BINDING_SRC@/eldbus_mono/*.cs" />
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
#if !WIN32
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
@ -42,5 +40,3 @@ internal static partial class FunctionInterop
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -13,26 +13,19 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if WIN32
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Efl.Eo
|
namespace Efl.Eo
|
||||||
{
|
{
|
||||||
|
|
||||||
internal static partial class FunctionInterop
|
static partial class FunctionInterop
|
||||||
{
|
{
|
||||||
[DllImport(efl.Libs.Kernel32, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
|
[DllImport(efl.Libs.Libdl)]
|
||||||
internal static extern IntPtr GetProcAddress(IntPtr handle, string symbol);
|
internal static extern IntPtr GetProcAddress(IntPtr handle, string symbol);
|
||||||
|
|
||||||
private static IntPtr dlsym(IntPtr handle, string symbol) => FunctionInterop.GetProcAddress(handle, symbol);
|
private static IntPtr LoadFunctionPointer(IntPtr nativeLibraryHandle, string functionName)
|
||||||
|
=> FunctionInterop.GetProcAddress(nativeLibraryHandle, functionName);
|
||||||
internal static IntPtr LoadFunctionPointer(IntPtr nativeLibraryHandle, string functionName) =>
|
|
||||||
FunctionInterop.GetProcAddress(nativeLibraryHandle, functionName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -13,8 +13,6 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
#if !WIN32
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
@ -100,5 +98,3 @@ internal partial class NativeModule
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -13,32 +13,16 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
#if WIN32
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Efl.Eo
|
namespace Efl.Eo
|
||||||
{
|
{
|
||||||
|
|
||||||
internal partial class NativeModule
|
internal class partial NativeModule
|
||||||
{
|
{
|
||||||
[DllImport(efl.Libs.Kernel32, EntryPoint = "LoadLibrary", CharSet = CharSet.Unicode, SetLastError = true)]
|
[DllImport(efl.Libs.Kernel32, CharSet = CharSet.Unicode, SetLastError = true)]
|
||||||
private static extern IntPtr _LoadLibrary(string libFilename);
|
internal static extern IntPtr LoadLibrary(string libFilename);
|
||||||
|
|
||||||
internal static IntPtr LoadLibrary(string libFilename)
|
|
||||||
{
|
|
||||||
if (!libFilename.StartsWith("lib"))
|
|
||||||
{
|
|
||||||
libFilename = "lib" + libFilename + "-1";
|
|
||||||
}
|
|
||||||
return NativeModule._LoadLibrary(libFilename);
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(efl.Libs.Kernel32, CharSet = CharSet.Unicode, SetLastError = true)]
|
|
||||||
internal static extern void UnloadLibrary(IntPtr handle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -81,7 +81,7 @@ internal static class Globals
|
||||||
efl_ref(IntPtr eo);
|
efl_ref(IntPtr eo);
|
||||||
internal delegate void
|
internal delegate void
|
||||||
efl_unref_delegate(IntPtr eo);
|
efl_unref_delegate(IntPtr eo);
|
||||||
[DllImport(efl.Libs.Eo)] internal static extern void
|
[DllImport(efl.Libs.CustomExports)] internal static extern void
|
||||||
efl_unref(IntPtr eo);
|
efl_unref(IntPtr eo);
|
||||||
internal delegate int
|
internal delegate int
|
||||||
efl_ref_count_delegate(IntPtr eo);
|
efl_ref_count_delegate(IntPtr eo);
|
||||||
|
|
|
@ -4,9 +4,11 @@ mono_files += files(
|
||||||
'FunctionWrapper.cs',
|
'FunctionWrapper.cs',
|
||||||
'NativeModule.cs',
|
'NativeModule.cs',
|
||||||
'EoWrapper.cs',
|
'EoWrapper.cs',
|
||||||
'WrapperSupervisor.cs',
|
'WrapperSupervisor.cs'
|
||||||
'FunctionWrapper_Windows.cs',
|
|
||||||
'NativeModule_Windows.cs',
|
|
||||||
'FunctionWrapper_Unix.cs',
|
|
||||||
'NativeModule_Unix.cs'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if host_machine.system() == 'windows'
|
||||||
|
mono_files += files('FunctionWrapper_Windows.cs', 'NativeModule_Windows.cs')
|
||||||
|
else
|
||||||
|
mono_files += files('FunctionWrapper_Unix.cs', 'NativeModule_Unix.cs')
|
||||||
|
endif
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
cmake = import('cmake')
|
|
||||||
opt_var = cmake.subproject_options()
|
|
||||||
opt_var.set_override_option('cpp_std', 'c++17')
|
|
||||||
|
|
||||||
inc_dir = include_directories(join_paths('..', '..', '..', 'bin', 'eolian_mono'))
|
inc_dir = include_directories(join_paths('..', '..', '..', 'bin', 'eolian_mono'))
|
||||||
|
|
||||||
eolian_mono_gen_bin = executable('eolian_mono',
|
eolian_mono_gen_bin = executable('eolian_mono',
|
||||||
|
|
|
@ -81,11 +81,6 @@ foreach lib : mono_sublibs
|
||||||
package_name = lib[0].to_lower()
|
package_name = lib[0].to_lower()
|
||||||
eo_file_subdirs = get_variable(package_name + '_eo_subdirs')
|
eo_file_subdirs = get_variable(package_name + '_eo_subdirs')
|
||||||
file_location = join_paths('..', '..', 'lib', package_name)
|
file_location = join_paths('..', '..', 'lib', package_name)
|
||||||
dllimport = package_name
|
|
||||||
|
|
||||||
if target_machine.system() == 'windows'
|
|
||||||
dllimport = 'lib' + dllimport + '-' + version_major
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (package_name != 'eldbus')
|
if (package_name != 'eldbus')
|
||||||
foreach eo_file_subdir : eo_file_subdirs
|
foreach eo_file_subdir : eo_file_subdirs
|
||||||
|
@ -106,7 +101,7 @@ foreach lib : mono_sublibs
|
||||||
input : join_paths(subdir_file_location, mono_gen_file),
|
input : join_paths(subdir_file_location, mono_gen_file),
|
||||||
output : [mono_gen_file + '.cs'],
|
output : [mono_gen_file + '.cs'],
|
||||||
command : [eolian_mono_gen, beta_option, '-I', meson.current_source_dir(), eolian_include_directories,
|
command : [eolian_mono_gen, beta_option, '-I', meson.current_source_dir(), eolian_include_directories,
|
||||||
'--dllimport', dllimport,
|
'--dllimport', package_name,
|
||||||
'-o', join_paths(meson.current_build_dir(), mono_gen_file + '.cs'),
|
'-o', join_paths(meson.current_build_dir(), mono_gen_file + '.cs'),
|
||||||
'-e', get_option('mono-examples-dir'), partial,
|
'-e', get_option('mono-examples-dir'), partial,
|
||||||
'@INPUT@'])
|
'@INPUT@'])
|
||||||
|
@ -216,22 +211,7 @@ if (get_option('dotnet'))
|
||||||
# The major version should be enough for now while we don't have to deal
|
# The major version should be enough for now while we don't have to deal
|
||||||
# with minor differences and dotnet core is far from version 10
|
# with minor differences and dotnet core is far from version 10
|
||||||
dotnet_major_version = dotnet_version.stdout().strip()[0].to_int()
|
dotnet_major_version = dotnet_version.stdout().strip()[0].to_int()
|
||||||
if dotnet_major_version == 8
|
if dotnet_major_version == 3
|
||||||
dotnet_core_app_version = '8.0'
|
|
||||||
dotnet_standard_version = '2.1'
|
|
||||||
elif dotnet_major_version == 7
|
|
||||||
dotnet_core_app_version = '7.0'
|
|
||||||
dotnet_standard_version = '2.1'
|
|
||||||
elif dotnet_major_version == 6
|
|
||||||
dotnet_core_app_version = '6.0'
|
|
||||||
dotnet_standard_version = '2.1'
|
|
||||||
elif dotnet_major_version == 5
|
|
||||||
dotnet_core_app_version = '5.0'
|
|
||||||
dotnet_standard_version = '2.1'
|
|
||||||
elif dotnet_major_version == 4
|
|
||||||
dotnet_core_app_version = '4.0'
|
|
||||||
dotnet_standard_version = '2.1'
|
|
||||||
elif dotnet_major_version == 3
|
|
||||||
dotnet_core_app_version = '3.0'
|
dotnet_core_app_version = '3.0'
|
||||||
dotnet_standard_version = '2.1'
|
dotnet_standard_version = '2.1'
|
||||||
elif dotnet_major_version == 2
|
elif dotnet_major_version == 2
|
||||||
|
@ -252,13 +232,6 @@ if (get_option('dotnet'))
|
||||||
lib_csproj_conf_data.set('EFL_BETA', '')
|
lib_csproj_conf_data.set('EFL_BETA', '')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if target_machine.system() == 'windows'
|
|
||||||
lib_csproj_conf_data.set('EFL_WIN32', 'WIN32')
|
|
||||||
else
|
|
||||||
lib_csproj_conf_data.set('EFL_WIN32', '')
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
lib_csproj = configure_file(input: 'efl_sharp.csproj.in',
|
lib_csproj = configure_file(input: 'efl_sharp.csproj.in',
|
||||||
output: 'efl_sharp.csproj',
|
output: 'efl_sharp.csproj',
|
||||||
configuration: lib_csproj_conf_data)
|
configuration: lib_csproj_conf_data)
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
/ecore_exe_example
|
/ecore_exe_example
|
||||||
/ecore_exe_example_child
|
/ecore_exe_example_child
|
||||||
/ecore_fd_handler_example
|
/ecore_fd_handler_example
|
||||||
|
/ecore_fd_handler_gnutls_example
|
||||||
/ecore_file_download_example
|
/ecore_file_download_example
|
||||||
/ecore_getopt_example
|
/ecore_getopt_example
|
||||||
/ecore_idler_example
|
/ecore_idler_example
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
// Compile with:
|
// Compile with:
|
||||||
// gcc -o ecore_audio_custom ecore_audio_custom.c `pkg-config --libs --cflags ecore ecore-audio`
|
// gcc -o ecore_audio_custom ecore_audio_custom.c `pkg-config --libs --cflags ecore ecore-audio`
|
||||||
#ifndef EFL_BETA_API_SUPPORT
|
|
||||||
# define EFL_BETA_API_SUPPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -28,7 +25,7 @@ int read_cb(void *data EINA_UNUSED, Eo *eo_obj, void *buf, int len)
|
||||||
float *val = buf;
|
float *val = buf;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
volume = ecore_audio_obj_volume_get(eo_obj);
|
ecore_audio_obj_volume_get(eo_obj, &volume);
|
||||||
|
|
||||||
for(i=0; i<len/4; i++, phase1++)
|
for(i=0; i<len/4; i++, phase1++)
|
||||||
{
|
{
|
||||||
|
@ -59,9 +56,9 @@ main(int argc, const char *argv[])
|
||||||
|
|
||||||
ecore_app_args_set(argc, argv);
|
ecore_app_args_set(argc, argv);
|
||||||
|
|
||||||
out = efl_add_ref(ECORE_AUDIO_OUT_PULSE_CLASS, NULL);
|
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
|
||||||
|
|
||||||
in = efl_add_ref(ECORE_AUDIO_IN_CLASS, NULL);
|
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_CLASS, NULL);
|
||||||
if (!in)
|
if (!in)
|
||||||
{
|
{
|
||||||
printf("error when creating ecore audio source.\n");
|
printf("error when creating ecore audio source.\n");
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
// Compile with:
|
// Compile with:
|
||||||
// gcc -o ecore_audio_playback ecore_audio_playback.c `pkg-config --libs --cflags ecore eina ecore-audio`
|
// gcc -o ecore_audio_playback ecore_audio_playback.c `pkg-config --libs --cflags ecore eina ecore-audio`
|
||||||
#ifndef EFL_BETA_API_SUPPORT
|
|
||||||
# define EFL_BETA_API_SUPPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -12,7 +9,6 @@
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <Ecore.h>
|
#include <Ecore.h>
|
||||||
#include <Ecore_Audio.h>
|
#include <Ecore_Audio.h>
|
||||||
#include <Eina.h>
|
#include <Eina.h>
|
||||||
|
@ -34,19 +30,19 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
if (!out)
|
if (!out)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
out_inputs = ecore_audio_obj_out_inputs_get(out);
|
ecore_audio_obj_out_inputs_get(out, &out_inputs);
|
||||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||||
{
|
{
|
||||||
pos = ecore_audio_obj_in_seek(in, 0, SEEK_CUR);
|
ecore_audio_obj_in_seek(in, 0, SEEK_CUR, &pos);
|
||||||
if (!strncmp(cmd, "<", bread))
|
if (!strncmp(cmd, "<", bread))
|
||||||
pos = ecore_audio_obj_in_seek(in, -10, SEEK_CUR);/* */
|
ecore_audio_obj_in_seek(in, -10, SEEK_CUR, &pos);
|
||||||
else if (!strncmp(cmd, ">", bread))
|
else if (!strncmp(cmd, ">", bread))
|
||||||
pos = ecore_audio_obj_in_seek(in, 10, SEEK_CUR);
|
ecore_audio_obj_in_seek(in, 10, SEEK_CUR, &pos);
|
||||||
|
|
||||||
min = pos / 60;
|
min = pos / 60;
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
length = ecore_audio_obj_in_length_get(in);
|
ecore_audio_obj_in_length_get(in, &length);
|
||||||
printf("Position: %2im %5.02fs (%0.2f%%) - %s\n", min, pos - min * 60, pos/length*100, name);
|
printf("Position: %2im %5.02fs (%0.2f%%) - %s\n", min, pos - min * 60, pos/length*100, name);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -67,8 +63,8 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
{
|
{
|
||||||
in = (Eo *)eina_list_data_get(inputs);
|
in = (Eo *)eina_list_data_get(inputs);
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
length = ecore_audio_obj_in_length_get(in);
|
ecore_audio_obj_in_length_get(in, &length);
|
||||||
|
|
||||||
printf("Start: %s (%0.2fs)\n", name, length);
|
printf("Start: %s (%0.2fs)\n", name, length);
|
||||||
ret = ecore_audio_obj_out_input_attach(out, in);
|
ret = ecore_audio_obj_out_input_attach(out, in);
|
||||||
|
@ -88,8 +84,8 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
{
|
{
|
||||||
in = (Eo *)eina_list_data_get(inputs);
|
in = (Eo *)eina_list_data_get(inputs);
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
length = ecore_audio_obj_in_length_get(in);
|
ecore_audio_obj_in_length_get(in, &length);
|
||||||
|
|
||||||
printf("Start: %s (%0.2fs)\n", name, length);
|
printf("Start: %s (%0.2fs)\n", name, length);
|
||||||
ret = ecore_audio_obj_out_input_attach(out, in);
|
ret = ecore_audio_obj_out_input_attach(out, in);
|
||||||
|
@ -102,8 +98,8 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||||
{
|
{
|
||||||
Eina_Bool loop;
|
Eina_Bool loop;
|
||||||
loop = ecore_audio_obj_in_looped_get(in);
|
ecore_audio_obj_in_looped_get(in, &loop);
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
|
|
||||||
printf("%s song %s\n", !loop?"Looping":"Not looping", name);
|
printf("%s song %s\n", !loop?"Looping":"Not looping", name);
|
||||||
ecore_audio_obj_in_looped_set(in, !loop);
|
ecore_audio_obj_in_looped_set(in, !loop);
|
||||||
|
@ -128,11 +124,11 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
double speed;
|
double speed;
|
||||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||||
{
|
{
|
||||||
speed = ecore_audio_obj_in_speed_get(in);
|
ecore_audio_obj_in_speed_get(in, &speed);
|
||||||
if (speed < 2.0)
|
if (speed < 2.0)
|
||||||
speed += 0.01;
|
speed += 0.01;
|
||||||
ecore_audio_obj_in_speed_set(in, speed);
|
ecore_audio_obj_in_speed_set(in, speed);
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
printf("Speed: %3.0f%% (%s)\n", speed * 100, name);
|
printf("Speed: %3.0f%% (%s)\n", speed * 100, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -141,11 +137,11 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
double speed;
|
double speed;
|
||||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||||
{
|
{
|
||||||
speed = ecore_audio_obj_in_speed_get(in);
|
ecore_audio_obj_in_speed_get(in, &speed);
|
||||||
if (speed > 0.5)
|
if (speed > 0.5)
|
||||||
speed -= 0.01;
|
speed -= 0.01;
|
||||||
ecore_audio_obj_in_speed_set(in, speed);
|
ecore_audio_obj_in_speed_set(in, speed);
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
printf("Speed: %3.0f%% (%s)\n", speed * 100, name);
|
printf("Speed: %3.0f%% (%s)\n", speed * 100, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,9 +149,9 @@ handle_cmd(char *cmd, size_t bread)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||||
{
|
{
|
||||||
paused = ecore_audio_obj_paused_get(in);
|
ecore_audio_obj_paused_get(in, &paused);
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
length = ecore_audio_obj_in_remaining_get(in);
|
ecore_audio_obj_in_remaining_get(in, &length);
|
||||||
printf("%s %s\n%0.2f remaining\n", !paused ? "Paused" : "Unpaused", name, length);
|
printf("%s %s\n%0.2f remaining\n", !paused ? "Paused" : "Unpaused", name, length);
|
||||||
ecore_audio_obj_paused_set(in, !paused);
|
ecore_audio_obj_paused_set(in, !paused);
|
||||||
}
|
}
|
||||||
|
@ -195,13 +191,12 @@ handle_input(void *data EINA_UNUSED, Ecore_Fd_Handler *handler)
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||||
_play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
Eina_Bool ret;
|
Eina_Bool ret;
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(event->object);
|
ecore_audio_obj_name_get(event->object, &name);
|
||||||
printf("Done: %s\n", name);
|
printf("Done: %s\n", name);
|
||||||
|
|
||||||
inputs = eina_list_remove(inputs, event->object);
|
inputs = eina_list_remove(inputs, event->object);
|
||||||
|
@ -217,7 +212,7 @@ _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||||
const char *name;
|
const char *name;
|
||||||
Eo *in = (Eo *)eina_list_data_get(inputs);
|
Eo *in = (Eo *)eina_list_data_get(inputs);
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
printf("Start: %s\n", name);
|
printf("Start: %s\n", name);
|
||||||
ret = ecore_audio_obj_out_input_attach(out, in);
|
ret = ecore_audio_obj_out_input_attach(out, in);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -228,6 +223,8 @@ _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||||
printf("Stream done\n");
|
printf("Stream done\n");
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -255,7 +252,7 @@ main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
if (!strncmp(argv[i], "tone:", 5))
|
if (!strncmp(argv[i], "tone:", 5))
|
||||||
{
|
{
|
||||||
in = efl_add_ref(ECORE_AUDIO_IN_TONE_CLASS, NULL);
|
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_TONE_CLASS, NULL);
|
||||||
if (!in)
|
if (!in)
|
||||||
{
|
{
|
||||||
printf("error when creating ecore audio source.\n");
|
printf("error when creating ecore audio source.\n");
|
||||||
|
@ -279,7 +276,7 @@ main(int argc, const char *argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
in = efl_add_ref(ECORE_AUDIO_IN_SNDFILE_CLASS, NULL);
|
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, NULL);
|
||||||
if (!in)
|
if (!in)
|
||||||
{
|
{
|
||||||
printf("error when creating ecore audio source.\n");
|
printf("error when creating ecore audio source.\n");
|
||||||
|
@ -294,7 +291,7 @@ main(int argc, const char *argv[])
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
efl_event_callback_add(in, ECORE_AUDIO_IN_EVENT_IN_STOPPED, _play_finished, NULL);
|
efl_event_callback_add(in, ECORE_AUDIO_EV_IN_STOPPED, _play_finished, NULL);
|
||||||
inputs = eina_list_append(inputs, in);
|
inputs = eina_list_append(inputs, in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,12 +302,12 @@ main(int argc, const char *argv[])
|
||||||
if (!in)
|
if (!in)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(in);
|
ecore_audio_obj_name_get(in, &name);
|
||||||
length = ecore_audio_obj_in_length_get(in);
|
ecore_audio_obj_in_length_get(in, &length);
|
||||||
|
|
||||||
printf("Start: %s (%0.2fs)\n", name, length);
|
printf("Start: %s (%0.2fs)\n", name, length);
|
||||||
|
|
||||||
out = efl_add_ref(ECORE_AUDIO_OUT_PULSE_CLASS, NULL);
|
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
|
||||||
ret = ecore_audio_obj_out_input_attach(out, in);
|
ret = ecore_audio_obj_out_input_attach(out, in);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
printf("Could not attach input %s\n", name);
|
printf("Could not attach input %s\n", name);
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
// Compile with:
|
// Compile with:
|
||||||
// gcc -o ecore_audio_to_ogg ecore_audio_to_ogg.c `pkg-config --libs --cflags ecore eina ecore-audio`
|
// gcc -o ecore_audio_to_ogg ecore_audio_to_ogg.c `pkg-config --libs --cflags ecore eina ecore-audio`
|
||||||
#ifndef EFL_BETA_API_SUPPORT
|
|
||||||
# define EFL_BETA_API_SUPPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
@ -18,20 +15,21 @@
|
||||||
double volume = 1;
|
double volume = 1;
|
||||||
Eina_List *inputs = NULL;
|
Eina_List *inputs = NULL;
|
||||||
|
|
||||||
static void
|
static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||||
_play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
Eo *out;
|
Eo *out;
|
||||||
|
|
||||||
name = ecore_audio_obj_name_get(event->object);
|
ecore_audio_obj_name_get(event->object, &name);
|
||||||
printf("Done: %s\n", name);
|
printf("Done: %s\n", name);
|
||||||
|
|
||||||
out = ecore_audio_obj_in_output_get(event->object);
|
ecore_audio_obj_in_output_get(event->object, &out);
|
||||||
efl_unref(event->object);
|
efl_unref(event->object);
|
||||||
efl_unref(out);
|
efl_unref(out);
|
||||||
|
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -51,7 +49,7 @@ main(int argc, char *argv[])
|
||||||
ecore_audio_init();
|
ecore_audio_init();
|
||||||
|
|
||||||
|
|
||||||
in = efl_add_ref(ECORE_AUDIO_IN_SNDFILE_CLASS, NULL);
|
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, NULL);
|
||||||
efl_name_set(in, basename(argv[1]));
|
efl_name_set(in, basename(argv[1]));
|
||||||
ret = ecore_audio_obj_source_set(in, argv[1]);
|
ret = ecore_audio_obj_source_set(in, argv[1]);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
@ -60,9 +58,9 @@ main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
efl_event_callback_add(in, ECORE_AUDIO_IN_EVENT_IN_STOPPED, _play_finished, NULL);
|
efl_event_callback_add(in, ECORE_AUDIO_EV_IN_STOPPED, _play_finished, NULL);
|
||||||
|
|
||||||
out = efl_add_ref(ECORE_AUDIO_OUT_SNDFILE_CLASS, NULL);
|
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS, NULL);
|
||||||
ret = ecore_audio_obj_source_set(out, argv[2]);
|
ret = ecore_audio_obj_source_set(out, argv[2]);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
printf("Could not set %s as output\n", argv[2]);
|
printf("Could not set %s as output\n", argv[2]);
|
||||||
|
|
|
@ -0,0 +1,232 @@
|
||||||
|
//Compile with:
|
||||||
|
// gcc -o ecore_fd_handler_gnutls_example ecore_fd_handler_gnutls_example.c `pkg-config --cflags --libs ecore gnutls`
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#ifdef HAVE_NETINET_TCP_H
|
||||||
|
# include <netinet/tcp.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
#include <Ecore.h>
|
||||||
|
|
||||||
|
/* Ecore_Fd_Handler example
|
||||||
|
* 2010 Mike Blumenkrantz
|
||||||
|
* compile with gcc $(pkgconfig --cflags --libs gnutls ecore)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define print(...) \
|
||||||
|
do { \
|
||||||
|
fprintf(stderr, "line %i: ", __LINE__); \
|
||||||
|
fprintf(stderr, __VA_ARGS__); \
|
||||||
|
fprintf(stderr, "\n");\
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
static int done = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
tls_log_func(int level, const char *str)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "|<%d>| %s", level, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
SSL_GNUTLS_PRINT_HANDSHAKE_STATUS(gnutls_handshake_description_t status)
|
||||||
|
{
|
||||||
|
switch (status)
|
||||||
|
{
|
||||||
|
case GNUTLS_HANDSHAKE_HELLO_REQUEST:
|
||||||
|
return "Hello request";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_CLIENT_HELLO:
|
||||||
|
return "Client hello";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_SERVER_HELLO:
|
||||||
|
return "Server hello";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_CERTIFICATE_PKT:
|
||||||
|
return "Certificate packet";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE:
|
||||||
|
return "Server key exchange";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST:
|
||||||
|
return "Certificate request";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_SERVER_HELLO_DONE:
|
||||||
|
return "Server hello done";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY:
|
||||||
|
return "Certificate verify";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE:
|
||||||
|
return "Client key exchange";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_FINISHED:
|
||||||
|
return "Finished";
|
||||||
|
|
||||||
|
case GNUTLS_HANDSHAKE_SUPPLEMENTAL:
|
||||||
|
return "Supplemental";
|
||||||
|
default:
|
||||||
|
return "Uncaught state";
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Connects to the peer and returns a socket
|
||||||
|
* descriptor.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
tcp_connect(void)
|
||||||
|
{
|
||||||
|
const char *PORT = "443";
|
||||||
|
const char *SERVER = "69.58.181.89"; //verisign.com
|
||||||
|
int err, sd;
|
||||||
|
int flag = 1, curstate = 0;
|
||||||
|
struct sockaddr_in sa;
|
||||||
|
|
||||||
|
/* sets some fd options such as nonblock */
|
||||||
|
sd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (sd < 0) abort();
|
||||||
|
if (fcntl(sd, F_SETFL, O_NONBLOCK) < 0) perror("fcntl");
|
||||||
|
eina_file_close_on_exec(sd, EINA_TRUE);
|
||||||
|
if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&curstate, sizeof(curstate)) < 0) perror("setsockopt");
|
||||||
|
|
||||||
|
if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0) perror("setsockopt");
|
||||||
|
|
||||||
|
memset(&sa, '\0', sizeof (sa));
|
||||||
|
sa.sin_family = AF_INET;
|
||||||
|
sa.sin_port = eina_htons(atoi(PORT));
|
||||||
|
if (inet_pton(AF_INET, SERVER, &sa.sin_addr)) perror("inet_pton");
|
||||||
|
|
||||||
|
/* connects to server
|
||||||
|
*/
|
||||||
|
err = connect(sd, (struct sockaddr *)&sa, sizeof (sa));
|
||||||
|
if ((err < 0) && (errno != EINPROGRESS))
|
||||||
|
{
|
||||||
|
print("Connect error\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* closes the given socket descriptor.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
tcp_close(int sd)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
shutdown(sd, SD_BOTH); /* no more receptions */
|
||||||
|
closesocket(sd);
|
||||||
|
#else
|
||||||
|
shutdown(sd, SHUT_RDWR); /* no more receptions */
|
||||||
|
close(sd);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_process_data(gnutls_session_t client, Ecore_Fd_Handler *fd_handler)
|
||||||
|
{
|
||||||
|
static int ret, lastret;
|
||||||
|
static unsigned int count = 0;
|
||||||
|
|
||||||
|
if (!done)
|
||||||
|
{
|
||||||
|
lastret = ret;
|
||||||
|
ret = gnutls_handshake(client);
|
||||||
|
count++;
|
||||||
|
if (gnutls_record_get_direction(client))
|
||||||
|
ecore_main_fd_handler_active_set(fd_handler, ECORE_FD_WRITE);
|
||||||
|
else
|
||||||
|
ecore_main_fd_handler_active_set(fd_handler, ECORE_FD_READ);
|
||||||
|
/* avoid printing messages infinity times */
|
||||||
|
if (lastret != ret)
|
||||||
|
{
|
||||||
|
print("gnutls returned with: %s - %s", gnutls_strerror_name(ret), gnutls_strerror(ret));
|
||||||
|
if ((ret == GNUTLS_E_WARNING_ALERT_RECEIVED) || (ret == GNUTLS_E_FATAL_ALERT_RECEIVED))
|
||||||
|
print("Also received alert: %s", gnutls_alert_get_name(gnutls_alert_get(client)));
|
||||||
|
print("last out: %s", SSL_GNUTLS_PRINT_HANDSHAKE_STATUS(gnutls_handshake_get_last_out(client)));
|
||||||
|
print("last in: %s", SSL_GNUTLS_PRINT_HANDSHAKE_STATUS(gnutls_handshake_get_last_in(client)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gnutls_error_is_fatal(ret))
|
||||||
|
{
|
||||||
|
print("yarrr this be an error!");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret == GNUTLS_E_SUCCESS)
|
||||||
|
{
|
||||||
|
done = 1;
|
||||||
|
print("Handshake successful in %u handshake calls!", count);
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ECORE_CALLBACK_RENEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
/* credentials */
|
||||||
|
gnutls_anon_client_credentials_t c_anoncred;
|
||||||
|
gnutls_certificate_credentials_t c_certcred;
|
||||||
|
|
||||||
|
gnutls_session_t client;
|
||||||
|
int sd;
|
||||||
|
|
||||||
|
/* General init. */
|
||||||
|
gnutls_global_init();
|
||||||
|
ecore_init();
|
||||||
|
gnutls_global_set_log_function(tls_log_func);
|
||||||
|
gnutls_global_set_log_level(6);
|
||||||
|
|
||||||
|
/* Init client */
|
||||||
|
gnutls_anon_allocate_client_credentials(&c_anoncred);
|
||||||
|
gnutls_certificate_allocate_credentials(&c_certcred);
|
||||||
|
gnutls_init(&client, GNUTLS_CLIENT);
|
||||||
|
/* set very specific priorities */
|
||||||
|
gnutls_priority_set_direct(client, "NONE:%VERIFY_ALLOW_X509_V1_CA_CRT:+RSA:+DHE-RSA:+DHE-DSS:+ANON-DH:+COMP-DEFLATE:+COMP-NULL:+CTYPE-X509:+SHA1:+SHA256:+SHA384:+SHA512:+AES-256-CBC:+AES-128-CBC:+3DES-CBC:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0", NULL);
|
||||||
|
gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred);
|
||||||
|
gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_certcred);
|
||||||
|
gnutls_server_name_set(client, GNUTLS_NAME_DNS, "www.verisign.com", strlen("www.verisign.com"));
|
||||||
|
|
||||||
|
/* connect to the peer
|
||||||
|
*/
|
||||||
|
sd = tcp_connect();
|
||||||
|
|
||||||
|
/* associate gnutls with socket */
|
||||||
|
gnutls_transport_set_ptr(client, (gnutls_transport_ptr_t)(uintptr_t)sd);
|
||||||
|
/* add a callback for data being available for send/receive on socket */
|
||||||
|
if (!ecore_main_fd_handler_add(sd, ECORE_FD_READ | ECORE_FD_WRITE, (Ecore_Fd_Cb)_process_data, client, NULL, NULL))
|
||||||
|
{
|
||||||
|
print("could not create fd handler!");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/* begin main loop */
|
||||||
|
ecore_main_loop_begin();
|
||||||
|
|
||||||
|
gnutls_bye(client, GNUTLS_SHUT_RDWR);
|
||||||
|
|
||||||
|
gnutls_deinit(client);
|
||||||
|
|
||||||
|
tcp_close(sd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -18,8 +18,13 @@ if config_h.has('HAVE_FORK')
|
||||||
examples += 'ecore_pipe_simple_example'
|
examples += 'ecore_pipe_simple_example'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
gnutls = dependency('gnutls', required : false)
|
||||||
|
if gnutls.found()
|
||||||
|
examples += ['ecore_fd_handler_gnutls_example']
|
||||||
|
endif
|
||||||
|
|
||||||
foreach example : examples
|
foreach example : examples
|
||||||
executable(example, example + '.c', dependencies: [eina, ecore, ecore_file])
|
executable(example, example + '.c', dependencies: [eina, ecore, ecore_file, gnutls])
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
if get_option('gstreamer') == true
|
if get_option('gstreamer') == true
|
||||||
|
@ -34,9 +39,9 @@ endif
|
||||||
|
|
||||||
|
|
||||||
examples = [
|
examples = [
|
||||||
'ecore_audio_custom',
|
# 'ecore_audio_custom',
|
||||||
'ecore_audio_playback',
|
# 'ecore_audio_playback',
|
||||||
'ecore_audio_to_ogg',
|
# 'ecore_audio_to_ogg',
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach example : examples
|
foreach example : examples
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: UTF-8\n"
|
|
||||||
|
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "Loading..."
|
msgstr "Loading..."
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: UTF-8\n"
|
|
||||||
|
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "लोड हो रहा है..."
|
msgstr "लोड हो रहा है..."
|
||||||
|
|
||||||
|
|
|
@ -33,14 +33,6 @@ struct _ecore_exe_dead_exe
|
||||||
char *cmd;
|
char *cmd;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
/*
|
|
||||||
* this job is used to close child processes when parent one is closed
|
|
||||||
* see https://stackoverflow.com/a/53214/688348
|
|
||||||
*/
|
|
||||||
HANDLE _ecore_exe_win32_job = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EAPI int ECORE_EXE_EVENT_ADD = 0;
|
EAPI int ECORE_EXE_EVENT_ADD = 0;
|
||||||
EAPI int ECORE_EXE_EVENT_DEL = 0;
|
EAPI int ECORE_EXE_EVENT_DEL = 0;
|
||||||
EAPI int ECORE_EXE_EVENT_DATA = 0;
|
EAPI int ECORE_EXE_EVENT_DATA = 0;
|
||||||
|
@ -346,21 +338,6 @@ ecore_exe_hup(Ecore_Exe *obj)
|
||||||
void
|
void
|
||||||
_ecore_exe_init(void)
|
_ecore_exe_init(void)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
|
||||||
_ecore_exe_win32_job = CreateJobObject( NULL, NULL);
|
|
||||||
if (_ecore_exe_win32_job)
|
|
||||||
{
|
|
||||||
JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli;
|
|
||||||
|
|
||||||
memset (&jeli, 0, sizeof(jeli));
|
|
||||||
jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
|
|
||||||
if (!SetInformationJobObject(_ecore_exe_win32_job, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)))
|
|
||||||
{
|
|
||||||
CloseHandle(_ecore_exe_win32_job);
|
|
||||||
_ecore_exe_win32_job = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
ECORE_EXE_EVENT_ADD = ecore_event_type_new();
|
ECORE_EXE_EVENT_ADD = ecore_event_type_new();
|
||||||
ECORE_EXE_EVENT_DEL = ecore_event_type_new();
|
ECORE_EXE_EVENT_DEL = ecore_event_type_new();
|
||||||
ECORE_EXE_EVENT_DATA = ecore_event_type_new();
|
ECORE_EXE_EVENT_DATA = ecore_event_type_new();
|
||||||
|
@ -381,11 +358,6 @@ _ecore_exe_shutdown(void)
|
||||||
ECORE_EXE_EVENT_DEL,
|
ECORE_EXE_EVENT_DEL,
|
||||||
ECORE_EXE_EVENT_DATA,
|
ECORE_EXE_EVENT_DATA,
|
||||||
ECORE_EXE_EVENT_ERROR);
|
ECORE_EXE_EVENT_ERROR);
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (_ecore_exe_win32_job)
|
|
||||||
CloseHandle(_ecore_exe_win32_job);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ecore_Exe *
|
Ecore_Exe *
|
||||||
|
|
|
@ -133,10 +133,6 @@ struct _Ecore_Exe_Data
|
||||||
|
|
||||||
typedef struct _Ecore_Exe_Data Ecore_Exe_Data;
|
typedef struct _Ecore_Exe_Data Ecore_Exe_Data;
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
extern HANDLE _ecore_exe_win32_job;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EAPI extern int ECORE_EXE_EVENT_ADD;
|
EAPI extern int ECORE_EXE_EVENT_ADD;
|
||||||
EAPI extern int ECORE_EXE_EVENT_DEL;
|
EAPI extern int ECORE_EXE_EVENT_DEL;
|
||||||
EAPI extern int ECORE_EXE_EVENT_DATA;
|
EAPI extern int ECORE_EXE_EVENT_DATA;
|
||||||
|
|
|
@ -512,13 +512,6 @@ _impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & ECORE_EXE_TERM_WITH_PARENT) && _ecore_exe_win32_job)
|
|
||||||
{
|
|
||||||
if (!AssignProcessToJobObject(_ecore_exe_win32_job, pi.hProcess))
|
|
||||||
WRN("AssignProcessToJobObject failed (job: %p, process: %p",
|
|
||||||
_ecore_exe_win32_job, pi.hProcess);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Close pipe handles (do not continue to modify the parent).
|
* Close pipe handles (do not continue to modify the parent).
|
||||||
* We need to make sure that no handles to the write end of the
|
* We need to make sure that no handles to the write end of the
|
||||||
|
|
|
@ -447,11 +447,7 @@ _ecore_main_fdh_poll_add(Efl_Loop_Data *pd EINA_UNUSED, Ecore_Fd_Handler *fdh)
|
||||||
fdh->gfd.events = _gfd_events_from_fdh(fdh);
|
fdh->gfd.events = _gfd_events_from_fdh(fdh);
|
||||||
fdh->gfd.revents = 0;
|
fdh->gfd.revents = 0;
|
||||||
DBG("adding gpoll on %d %08x", fdh->fd, fdh->gfd.events);
|
DBG("adding gpoll on %d %08x", fdh->fd, fdh->gfd.events);
|
||||||
if (ecore_glib_source)
|
g_source_add_poll(ecore_glib_source, &fdh->gfd);
|
||||||
g_source_add_poll(ecore_glib_source, &fdh->gfd);
|
|
||||||
else
|
|
||||||
ERR("Failed to add gpoll on %d %08x. GSource is NULL",
|
|
||||||
fdh->fd, fdh->gfd.events);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
|
@ -943,6 +939,29 @@ quit:
|
||||||
static void
|
static void
|
||||||
_ecore_main_loop_setup(Eo *obj, Efl_Loop_Data *pd)
|
_ecore_main_loop_setup(Eo *obj, Efl_Loop_Data *pd)
|
||||||
{
|
{
|
||||||
|
// Please note that this function is being also called in case of a bad
|
||||||
|
// fd to reset the main loop.
|
||||||
|
#ifdef HAVE_SYS_EPOLL_H
|
||||||
|
pd->epoll_fd = epoll_create(1);
|
||||||
|
if (pd->epoll_fd < 0) WRN("Failed to create epoll fd!");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eina_file_close_on_exec(pd->epoll_fd, EINA_TRUE);
|
||||||
|
|
||||||
|
pd->epoll_pid = getpid();
|
||||||
|
|
||||||
|
// add polls on all our file descriptors
|
||||||
|
Ecore_Fd_Handler *fdh;
|
||||||
|
EINA_INLIST_FOREACH(pd->fd_handlers, fdh)
|
||||||
|
{
|
||||||
|
if (fdh->delete_me) continue;
|
||||||
|
_ecore_epoll_add(pd->epoll_fd, fdh->fd,
|
||||||
|
_ecore_poll_events_from_fdh(fdh), fdh);
|
||||||
|
_ecore_main_fdh_poll_add(pd, fdh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (obj == ML_OBJ)
|
if (obj == ML_OBJ)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBUV
|
#ifdef HAVE_LIBUV
|
||||||
|
@ -1053,30 +1072,6 @@ _ecore_main_loop_setup(Eo *obj, Efl_Loop_Data *pd)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Please note that this function is being also called in case of a bad
|
|
||||||
// fd to reset the main loop.
|
|
||||||
#ifdef HAVE_SYS_EPOLL_H
|
|
||||||
pd->epoll_fd = epoll_create(1);
|
|
||||||
if (pd->epoll_fd < 0) WRN("Failed to create epoll fd!");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
eina_file_close_on_exec(pd->epoll_fd, EINA_TRUE);
|
|
||||||
|
|
||||||
pd->epoll_pid = getpid();
|
|
||||||
|
|
||||||
// add polls on all our file descriptors
|
|
||||||
Ecore_Fd_Handler *fdh;
|
|
||||||
EINA_INLIST_FOREACH(pd->fd_handlers, fdh)
|
|
||||||
{
|
|
||||||
if (fdh->delete_me) continue;
|
|
||||||
_ecore_epoll_add(pd->epoll_fd, fdh->fd,
|
|
||||||
_ecore_poll_events_from_fdh(fdh), fdh);
|
|
||||||
_ecore_main_fdh_poll_add(pd, fdh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_ecore_main_timechanges_start(obj);
|
_ecore_main_timechanges_start(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -720,7 +720,8 @@ ECORE_CON_API Eina_Bool ecore_con_lookup(const char *name, Ecore_Con_Dns_Cb done
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns if SSL support is available.
|
* @brief Returns if SSL support is available.
|
||||||
* @return @c 2 if SSL is available and provided by openssl,
|
* @return @c 1 if SSL is available and provided by gnutls,
|
||||||
|
* @c 2 if SSL is available and provided by openssl,
|
||||||
* @c 0 if it is not available.
|
* @c 0 if it is not available.
|
||||||
*/
|
*/
|
||||||
ECORE_CON_API int ecore_con_ssl_available_get(void);
|
ECORE_CON_API int ecore_con_ssl_available_get(void);
|
||||||
|
|
|
@ -165,7 +165,9 @@ ecore_con_shutdown(void)
|
||||||
ECORE_CON_API int
|
ECORE_CON_API int
|
||||||
ecore_con_ssl_available_get(void)
|
ecore_con_ssl_available_get(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OPENSSL
|
#if HAVE_GNUTLS
|
||||||
|
return 1;
|
||||||
|
#elif HAVE_OPENSSL
|
||||||
return 2;
|
return 2;
|
||||||
#else
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -96,9 +96,11 @@ static Eina_Error efl_net_ssl_conn_hostname_verify_set(Efl_Net_Ssl_Conn *conn, E
|
||||||
static Eina_Error efl_net_ssl_conn_hostname_override_set(Efl_Net_Ssl_Conn *conn, const char *hostname);
|
static Eina_Error efl_net_ssl_conn_hostname_override_set(Efl_Net_Ssl_Conn *conn, const char *hostname);
|
||||||
|
|
||||||
#if HAVE_OPENSSL
|
#if HAVE_OPENSSL
|
||||||
# include "efl_net_ssl_conn-openssl.c"
|
#include "efl_net_ssl_conn-openssl.c"
|
||||||
|
#elif HAVE_GNUTLS
|
||||||
|
#include "efl_net_ssl_conn-gnutls.c"
|
||||||
#else
|
#else
|
||||||
# include "efl_net_ssl_conn-none.c"
|
#include "efl_net_ssl_conn-none.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MY_CLASS EFL_NET_SOCKET_SSL_CLASS
|
#define MY_CLASS EFL_NET_SOCKET_SSL_CLASS
|
||||||
|
|
|
@ -0,0 +1,362 @@
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
#include <gnutls/x509.h>
|
||||||
|
|
||||||
|
struct _Efl_Net_Ssl_Conn {
|
||||||
|
gnutls_session_t session;
|
||||||
|
gnutls_datum_t ticket;
|
||||||
|
Eo *sock;
|
||||||
|
const char *hostname;
|
||||||
|
Efl_Net_Ssl_Verify_Mode verify_mode;
|
||||||
|
Eina_Bool hostname_verify;
|
||||||
|
Eina_Bool is_dialer;
|
||||||
|
};
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
_efl_net_ssl_conn_write(gnutls_transport_ptr_t transp, const void *buf, size_t len)
|
||||||
|
{
|
||||||
|
Eina_Slice slice = {
|
||||||
|
.mem = buf,
|
||||||
|
.len = len
|
||||||
|
};
|
||||||
|
Efl_Net_Ssl_Conn *conn = transp;
|
||||||
|
Eina_Error err;
|
||||||
|
|
||||||
|
if ((!buf) || (len == 0)) return 0;
|
||||||
|
if (!conn) return 0;
|
||||||
|
|
||||||
|
if (!efl_io_writer_can_write_get(conn->sock))
|
||||||
|
{
|
||||||
|
DBG("socket=%p would block if written!", conn->sock);
|
||||||
|
gnutls_transport_set_errno(conn->session, EAGAIN);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = efl_io_writer_write(conn->sock, &slice, NULL);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
gnutls_transport_set_errno(conn->session, err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
gnutls_transport_set_errno(conn->session, 0);
|
||||||
|
return slice.len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
_efl_net_ssl_conn_read(gnutls_transport_ptr_t transp, void *buf, size_t len)
|
||||||
|
{
|
||||||
|
Eina_Rw_Slice slice = {
|
||||||
|
.mem = buf,
|
||||||
|
.len = len
|
||||||
|
};
|
||||||
|
Efl_Net_Ssl_Conn *conn = transp;
|
||||||
|
Eina_Error err;
|
||||||
|
|
||||||
|
if ((!buf) || (len == 0)) return 0;
|
||||||
|
if (!conn) return 0;
|
||||||
|
|
||||||
|
if (!efl_io_reader_can_read_get(conn->sock))
|
||||||
|
{
|
||||||
|
DBG("socket=%p would block if read!", conn->sock);
|
||||||
|
gnutls_transport_set_errno(conn->session, EAGAIN);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = efl_io_reader_read(conn->sock, &slice);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
gnutls_transport_set_errno(conn->session, err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
gnutls_transport_set_errno(conn->session, 0);
|
||||||
|
return slice.len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_setup(Efl_Net_Ssl_Conn *conn, Eina_Bool is_dialer, Efl_Net_Socket *sock, Efl_Net_Ssl_Context *context)
|
||||||
|
{
|
||||||
|
gnutls_certificate_request_t req;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(conn->session != NULL, EALREADY);
|
||||||
|
|
||||||
|
conn->is_dialer = is_dialer;
|
||||||
|
|
||||||
|
conn->session = efl_net_ssl_context_connection_new(context);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(conn->session, ENOSYS);
|
||||||
|
|
||||||
|
gnutls_handshake_set_private_extensions(conn->session, 1);
|
||||||
|
|
||||||
|
switch (conn->verify_mode)
|
||||||
|
{
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_NONE:
|
||||||
|
req = GNUTLS_CERT_IGNORE;
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_OPTIONAL:
|
||||||
|
req = GNUTLS_CERT_REQUEST;
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_REQUIRED:
|
||||||
|
default:
|
||||||
|
req = GNUTLS_CERT_REQUIRE;
|
||||||
|
}
|
||||||
|
gnutls_certificate_server_set_request(conn->session, req);
|
||||||
|
|
||||||
|
if (is_dialer)
|
||||||
|
{
|
||||||
|
r = gnutls_session_ticket_enable_client(conn->session);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not enable session's ticket client: %s", conn, gnutls_strerror(r));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = gnutls_session_ticket_key_generate(&conn->ticket);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not generate session ticket: %s", conn, gnutls_strerror(r));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = gnutls_session_ticket_enable_server(conn->session, &conn->ticket);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not enable session's ticket server: %s", conn, gnutls_strerror(r));
|
||||||
|
goto error_ticket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
conn->sock = sock;
|
||||||
|
gnutls_transport_set_ptr(conn->session, conn);
|
||||||
|
gnutls_transport_set_push_function(conn->session, _efl_net_ssl_conn_write);
|
||||||
|
gnutls_transport_set_pull_function(conn->session, _efl_net_ssl_conn_read);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error_ticket:
|
||||||
|
gnutls_free(conn->ticket.data);
|
||||||
|
conn->ticket.data = NULL;
|
||||||
|
|
||||||
|
error:
|
||||||
|
gnutls_deinit(conn->session);
|
||||||
|
conn->session = NULL;
|
||||||
|
return ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
efl_net_ssl_conn_teardown(Efl_Net_Ssl_Conn *conn)
|
||||||
|
{
|
||||||
|
if (conn->session)
|
||||||
|
{
|
||||||
|
gnutls_bye(conn->session, GNUTLS_SHUT_RDWR);
|
||||||
|
gnutls_deinit(conn->session);
|
||||||
|
conn->session = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->ticket.data)
|
||||||
|
{
|
||||||
|
gnutls_free(conn->ticket.data);
|
||||||
|
conn->ticket.data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_stringshare_replace(&conn->hostname, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_write(Efl_Net_Ssl_Conn *conn, Eina_Slice *slice)
|
||||||
|
{
|
||||||
|
ssize_t r = gnutls_record_send(conn->session, slice->mem, slice->len);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
slice->len = 0;
|
||||||
|
if (gnutls_error_is_fatal(r))
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not send %zd bytes: %s", conn, slice->len, gnutls_strerror(r));
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
DBG("ssl_conn=%p could not send %zd bytes: %s", conn, slice->len, gnutls_strerror(r));
|
||||||
|
return EAGAIN;
|
||||||
|
}
|
||||||
|
slice->len = r;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_read(Efl_Net_Ssl_Conn *conn, Eina_Rw_Slice *slice)
|
||||||
|
{
|
||||||
|
ssize_t r = gnutls_record_recv(conn->session, slice->mem, slice->len);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
slice->len = 0;
|
||||||
|
if (gnutls_error_is_fatal(r))
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not receive %zd bytes: %s", conn, slice->len, gnutls_strerror(r));
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
DBG("ssl_conn=%p could not receive %zd bytes: %s", conn, slice->len, gnutls_strerror(r));
|
||||||
|
return EAGAIN;
|
||||||
|
}
|
||||||
|
slice->len = r;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
_efl_net_ssl_conn_verify(Efl_Net_Ssl_Conn *conn)
|
||||||
|
{
|
||||||
|
unsigned status = 0;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = gnutls_certificate_verify_peers2(conn->session, &status);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not verify peer: %s", conn, gnutls_strerror(r));
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_HANDSHAKE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!status) return 0;
|
||||||
|
|
||||||
|
if (status & GNUTLS_CERT_INVALID)
|
||||||
|
WRN("ssl_conn=%p The certificate is not trusted.", conn);
|
||||||
|
if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
|
||||||
|
WRN("ssl_conn=%p The certificate hasn't got a known issuer.", conn);
|
||||||
|
if (status & GNUTLS_CERT_REVOKED)
|
||||||
|
WRN("ssl_conn=%p The certificate has been revoked.", conn);
|
||||||
|
if (status & GNUTLS_CERT_EXPIRED)
|
||||||
|
WRN("ssl_conn=%p The certificate has expired", conn);
|
||||||
|
if (status & GNUTLS_CERT_NOT_ACTIVATED)
|
||||||
|
WRN("ssl_conn=%p The certificate is not yet activated", conn);
|
||||||
|
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
_efl_net_ssl_conn_hostname_verify(Efl_Net_Ssl_Conn *conn)
|
||||||
|
{
|
||||||
|
const gnutls_datum_t *list;
|
||||||
|
unsigned int size;
|
||||||
|
gnutls_x509_crt_t cert = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if ((!conn->hostname) || (conn->hostname[0] == '\0'))
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p no hostname, cannot verify", conn);
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gnutls_certificate_type_get(conn->session) != GNUTLS_CRT_X509)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p PGP certificates are not yet supported!", conn);
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
list = gnutls_certificate_get_peers(conn->session, &size);
|
||||||
|
if (!list)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p no peer certificate!", conn);
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_HANDSHAKE;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = gnutls_x509_crt_init(&cert);
|
||||||
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(r < 0, EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED);
|
||||||
|
|
||||||
|
r = gnutls_x509_crt_import(cert, &list[0], GNUTLS_X509_FMT_DER);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not import x509 certificate to verify: %s", conn, gnutls_strerror(r));
|
||||||
|
gnutls_x509_crt_deinit(cert);
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = gnutls_x509_crt_check_hostname(cert, conn->hostname);
|
||||||
|
gnutls_x509_crt_deinit(cert);
|
||||||
|
|
||||||
|
if (r == 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ERR("ssl_conn=%p hostname='%s' doesn't match certificate.",
|
||||||
|
conn, conn->hostname);
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_handshake(Efl_Net_Ssl_Conn *conn, Eina_Bool *done)
|
||||||
|
{
|
||||||
|
int r = gnutls_handshake(conn->session);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
*done = EINA_FALSE;
|
||||||
|
if (gnutls_error_is_fatal(r))
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not handshake: %s", conn, gnutls_strerror(r));
|
||||||
|
return EFL_NET_SOCKET_SSL_ERROR_HANDSHAKE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG("ssl_conn=%p did not finish handshake: %s", conn, gnutls_strerror(r));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->verify_mode != EFL_NET_SSL_VERIFY_MODE_NONE)
|
||||||
|
{
|
||||||
|
Eina_Error err = _efl_net_ssl_conn_verify(conn);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->hostname_verify)
|
||||||
|
{
|
||||||
|
Eina_Error err = _efl_net_ssl_conn_hostname_verify(conn);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
*done = EINA_TRUE;
|
||||||
|
DBG("ssl_conn=%p handshake finished!", conn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_verify_mode_set(Efl_Net_Ssl_Conn *conn, Efl_Net_Ssl_Verify_Mode verify_mode)
|
||||||
|
{
|
||||||
|
gnutls_certificate_request_t req;
|
||||||
|
conn->verify_mode = verify_mode;
|
||||||
|
|
||||||
|
switch (conn->verify_mode)
|
||||||
|
{
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_NONE:
|
||||||
|
req = GNUTLS_CERT_IGNORE;
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_OPTIONAL:
|
||||||
|
req = GNUTLS_CERT_REQUEST;
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_VERIFY_MODE_REQUIRED:
|
||||||
|
default:
|
||||||
|
req = GNUTLS_CERT_REQUIRE;
|
||||||
|
}
|
||||||
|
gnutls_certificate_server_set_request(conn->session, req);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_hostname_verify_set(Efl_Net_Ssl_Conn *conn, Eina_Bool hostname_verify)
|
||||||
|
{
|
||||||
|
conn->hostname_verify = hostname_verify;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_conn_hostname_override_set(Efl_Net_Ssl_Conn *conn, const char *hostname)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
eina_stringshare_replace(&conn->hostname, hostname);
|
||||||
|
if (!hostname) hostname = "";
|
||||||
|
r = gnutls_server_name_set(conn->session, GNUTLS_NAME_DNS, hostname, strlen(hostname));
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_conn=%p could not set server name '%s': %s", conn, hostname, gnutls_strerror(r));
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -27,7 +27,7 @@
|
||||||
static int
|
static int
|
||||||
efl_net_socket_bio_create(BIO *b)
|
efl_net_socket_bio_create(BIO *b)
|
||||||
{
|
{
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
BIO_set_init(b, 1);
|
BIO_set_init(b, 1);
|
||||||
BIO_set_data(b, NULL);
|
BIO_set_data(b, NULL);
|
||||||
BIO_set_flags(b, 0);
|
BIO_set_flags(b, 0);
|
||||||
|
@ -44,7 +44,7 @@ static int
|
||||||
efl_net_socket_bio_destroy(BIO *b)
|
efl_net_socket_bio_destroy(BIO *b)
|
||||||
{
|
{
|
||||||
if (!b) return 0;
|
if (!b) return 0;
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
BIO_set_init(b, 0);
|
BIO_set_init(b, 0);
|
||||||
BIO_set_data(b, NULL);
|
BIO_set_data(b, NULL);
|
||||||
BIO_set_flags(b, 0);
|
BIO_set_flags(b, 0);
|
||||||
|
@ -63,7 +63,7 @@ efl_net_socket_bio_read(BIO *b, char *buf, int len)
|
||||||
.mem = buf,
|
.mem = buf,
|
||||||
.len = len
|
.len = len
|
||||||
};
|
};
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
Eo *sock = BIO_get_data(b);
|
Eo *sock = BIO_get_data(b);
|
||||||
#else
|
#else
|
||||||
Eo *sock = b->ptr;
|
Eo *sock = b->ptr;
|
||||||
|
@ -99,7 +99,7 @@ efl_net_socket_bio_write(BIO *b, const char *buf, int len)
|
||||||
.mem = buf,
|
.mem = buf,
|
||||||
.len = len
|
.len = len
|
||||||
};
|
};
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
Eo *sock = BIO_get_data(b);
|
Eo *sock = BIO_get_data(b);
|
||||||
#else
|
#else
|
||||||
Eo *sock = b->ptr;
|
Eo *sock = b->ptr;
|
||||||
|
@ -146,7 +146,7 @@ efl_net_socket_bio_puts(BIO *b, const char *str)
|
||||||
static BIO_METHOD *
|
static BIO_METHOD *
|
||||||
__efl_net_socket_bio_get(void)
|
__efl_net_socket_bio_get(void)
|
||||||
{
|
{
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
static BIO_METHOD *efl_net_socket_bio = NULL;
|
static BIO_METHOD *efl_net_socket_bio = NULL;
|
||||||
|
|
||||||
if (efl_net_socket_bio) return efl_net_socket_bio;
|
if (efl_net_socket_bio) return efl_net_socket_bio;
|
||||||
|
@ -359,7 +359,7 @@ efl_net_ssl_conn_setup(Efl_Net_Ssl_Conn *conn, Eina_Bool is_dialer, Efl_Net_Sock
|
||||||
conn->bio = BIO_new(__efl_net_socket_bio_get());
|
conn->bio = BIO_new(__efl_net_socket_bio_get());
|
||||||
EINA_SAFETY_ON_NULL_GOTO(conn->bio, error_bio);
|
EINA_SAFETY_ON_NULL_GOTO(conn->bio, error_bio);
|
||||||
|
|
||||||
#if (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER))
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
BIO_set_data(conn->bio, sock);
|
BIO_set_data(conn->bio, sock);
|
||||||
#else
|
#else
|
||||||
conn->bio->ptr = sock;
|
conn->bio->ptr = sock;
|
||||||
|
|
|
@ -81,9 +81,11 @@ static Eina_Error efl_net_ssl_ctx_hostname_verify_set(Efl_Net_Ssl_Ctx *ctx, Eina
|
||||||
static Eina_Error efl_net_ssl_ctx_hostname_set(Efl_Net_Ssl_Ctx *ctx, const char *hostname);
|
static Eina_Error efl_net_ssl_ctx_hostname_set(Efl_Net_Ssl_Ctx *ctx, const char *hostname);
|
||||||
|
|
||||||
#if HAVE_OPENSSL
|
#if HAVE_OPENSSL
|
||||||
# include "efl_net_ssl_ctx-openssl.c"
|
#include "efl_net_ssl_ctx-openssl.c"
|
||||||
|
#elif HAVE_GNUTLS
|
||||||
|
#include "efl_net_ssl_ctx-gnutls.c"
|
||||||
#else
|
#else
|
||||||
# include "efl_net_ssl_ctx-none.c"
|
#include "efl_net_ssl_ctx-none.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MY_CLASS EFL_NET_SSL_CONTEXT_CLASS
|
#define MY_CLASS EFL_NET_SSL_CONTEXT_CLASS
|
||||||
|
|
|
@ -0,0 +1,307 @@
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
|
||||||
|
struct _Efl_Net_Ssl_Ctx {
|
||||||
|
gnutls_certificate_credentials_t x509_cred;
|
||||||
|
gnutls_priority_t priority;
|
||||||
|
Eina_Bool is_dialer;
|
||||||
|
};
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
_efl_net_ssl_ctx_load_lists(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
|
{
|
||||||
|
Eina_List *n, *n_next, *pk_node;
|
||||||
|
const char *path;
|
||||||
|
unsigned certificates_count = eina_list_count(*cfg.certificates);
|
||||||
|
unsigned private_keys_count = eina_list_count(*cfg.private_keys);
|
||||||
|
unsigned certificate_revocation_lists_count = eina_list_count(*cfg.certificate_revocation_lists);
|
||||||
|
unsigned certificate_authorities_count = eina_list_count(*cfg.certificate_authorities);
|
||||||
|
int r;
|
||||||
|
|
||||||
|
ctx->is_dialer = cfg.is_dialer;
|
||||||
|
|
||||||
|
if (cfg.load_defaults)
|
||||||
|
{
|
||||||
|
r = gnutls_certificate_set_x509_system_trust(ctx->x509_cred);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not load default paths: %s", ctx, gnutls_strerror(r));
|
||||||
|
return ENOSYS;
|
||||||
|
}
|
||||||
|
DBG("ssl_ctx=%p loaded default paths", ctx);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DBG("ssl_ctx=%p did not load default paths", ctx);
|
||||||
|
|
||||||
|
/* GNUTLS needs certificate-key pairs, so we do:
|
||||||
|
*
|
||||||
|
* - if no private keys, use certificate as its own key;
|
||||||
|
*
|
||||||
|
* - if a private keys, walk the list alongside certificates, but
|
||||||
|
* do NOT delete elements if list sizes are different. Stop at
|
||||||
|
* last private key, allowing a single private key for multiple
|
||||||
|
* certificates.
|
||||||
|
*/
|
||||||
|
pk_node = *cfg.private_keys;
|
||||||
|
EINA_LIST_FOREACH_SAFE(*cfg.certificates, n, n_next, path)
|
||||||
|
{
|
||||||
|
const char *key = pk_node ? pk_node->data : path;
|
||||||
|
|
||||||
|
r = gnutls_certificate_set_x509_key_file(ctx->x509_cred, path, key, GNUTLS_X509_FMT_PEM);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not use certificate from '%s' with key '%s': %s",
|
||||||
|
ctx, path, key, gnutls_strerror(r));
|
||||||
|
|
||||||
|
if (pk_node)
|
||||||
|
{
|
||||||
|
if (eina_list_count(*cfg.private_keys) == eina_list_count(*cfg.certificates))
|
||||||
|
{
|
||||||
|
pk_node = pk_node->next;
|
||||||
|
eina_stringshare_del(key);
|
||||||
|
*cfg.private_keys = eina_list_remove_list(*cfg.private_keys, pk_node->prev);
|
||||||
|
}
|
||||||
|
else if (pk_node->next) pk_node = pk_node->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_stringshare_del(path);
|
||||||
|
*cfg.certificates = eina_list_remove_list(*cfg.certificates, n);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pk_node->next) pk_node = pk_node->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG("ssl_ctx=%p loaded certificate '%s' with key '%s'", ctx, path, key);
|
||||||
|
}
|
||||||
|
if (certificates_count && !*cfg.certificates)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p none of the required certificates were loaded!", ctx);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (private_keys_count && !*cfg.private_keys)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p none of the required private keys were loaded!", ctx);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
else if (pk_node != eina_list_last(*cfg.private_keys))
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
n = pk_node->next;
|
||||||
|
path = n->data;
|
||||||
|
ERR("ssl_ctx=%p extra private key is unused '%s'", ctx, path);
|
||||||
|
eina_stringshare_del(path);
|
||||||
|
*cfg.private_keys = eina_list_remove_list(*cfg.private_keys, n);
|
||||||
|
}
|
||||||
|
while (pk_node->next);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH_SAFE(*cfg.certificate_revocation_lists, n, n_next, path)
|
||||||
|
{
|
||||||
|
r = gnutls_certificate_set_x509_crl_file(ctx->x509_cred, path, GNUTLS_X509_FMT_PEM);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not use certificate revocation lists from %s: %s",
|
||||||
|
ctx, path, gnutls_strerror(r));
|
||||||
|
eina_stringshare_del(path);
|
||||||
|
*cfg.certificate_revocation_lists = eina_list_remove_list(*cfg.certificate_revocation_lists, n);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG("ssl_ctx=%p loaded certificate revocation lists '%s'", ctx, path);
|
||||||
|
}
|
||||||
|
if (certificate_revocation_lists_count && !*cfg.certificate_revocation_lists)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p none of the required certificate revocation lists were loaded!", ctx);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH_SAFE(*cfg.certificate_authorities, n, n_next, path)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
r = 0;
|
||||||
|
if (stat(path, &st) != 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not load certificate authorities from '%s': %s", ctx, path, eina_error_msg_get(errno));
|
||||||
|
eina_stringshare_del(path);
|
||||||
|
*cfg.certificate_authorities = eina_list_remove_list(*cfg.certificate_authorities, n);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (S_ISDIR(st.st_mode))
|
||||||
|
r = gnutls_certificate_set_x509_trust_dir(ctx->x509_cred, path, GNUTLS_X509_FMT_PEM);
|
||||||
|
else
|
||||||
|
r = gnutls_certificate_set_x509_trust_file(ctx->x509_cred, path, GNUTLS_X509_FMT_PEM);
|
||||||
|
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not use certificate authorities from '%s': %s", ctx, path, gnutls_strerror(r));
|
||||||
|
eina_stringshare_del(path);
|
||||||
|
*cfg.certificate_authorities = eina_list_remove_list(*cfg.certificate_authorities, n);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG("ssl_ctx=%p loaded certificate authorities '%s'", ctx, path);
|
||||||
|
}
|
||||||
|
if (certificate_authorities_count && !*cfg.certificate_authorities)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p none of the required certificate authorities were loaded!", ctx);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
efl_net_ssl_ctx_connection_new(Efl_Net_Ssl_Ctx *ctx)
|
||||||
|
{
|
||||||
|
gnutls_session_t session;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = gnutls_init(&session, ctx->is_dialer ? GNUTLS_CLIENT : GNUTLS_SERVER);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not create %s session: %s",
|
||||||
|
ctx, ctx->is_dialer ? "dialer" : "server", gnutls_strerror(r));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ctx->priority)
|
||||||
|
{
|
||||||
|
r = gnutls_set_default_priority(session);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not set default cipher priority: %s", ctx, gnutls_strerror(r));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = gnutls_priority_set(session, ctx->priority);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not set cipher priority: %s", ctx, gnutls_strerror(r));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, ctx->x509_cred);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not set session credentials: %s", ctx, gnutls_strerror(r));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return session;
|
||||||
|
|
||||||
|
error:
|
||||||
|
gnutls_deinit(session);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_ctx_setup(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
|
{
|
||||||
|
Eina_Error err;
|
||||||
|
const char *priority;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(ctx->x509_cred != NULL, EALREADY);
|
||||||
|
|
||||||
|
switch (cfg.cipher)
|
||||||
|
{
|
||||||
|
case EFL_NET_SSL_CIPHER_AUTO:
|
||||||
|
priority = NULL;
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_CIPHER_TLSV1:
|
||||||
|
priority = "NORMAL:%VERIFY_ALLOW_X509_V1_CA_CRT:!VERS-SSL3.0!VERS-TLS1.1:!VERS-TLS1.2";
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_CIPHER_TLSV1_1:
|
||||||
|
priority = "NORMAL:%VERIFY_ALLOW_X509_V1_CA_CRT:!VERS-SSL3.0:!VERS-TLS1.0:!VERS-TLS1.2";
|
||||||
|
break;
|
||||||
|
case EFL_NET_SSL_CIPHER_TLSV1_2:
|
||||||
|
priority = "NORMAL:%VERIFY_ALLOW_X509_V1_CA_CRT:!VERS-SSL3.0:!VERS-TLS1.0:!VERS-TLS1.1";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ERR("ssl_ctx=%p unsupported cipher %d", ctx, cfg.cipher);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priority)
|
||||||
|
{
|
||||||
|
const char *err_pos = NULL;
|
||||||
|
r = gnutls_priority_init(&ctx->priority, priority, &err_pos);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
size_t off = err_pos - priority;
|
||||||
|
if (r == GNUTLS_E_INVALID_REQUEST)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p invalid syntax on GNUTLS priority string offset %zd: '%s'", ctx, off, priority);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
ERR("ssl_ctx=%p could not set GNUTLS priority offset %zd '%s': %s", ctx, off, priority, gnutls_strerror(r));
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r = gnutls_certificate_allocate_credentials(&ctx->x509_cred);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p could not allocate X509 credentials: %s", ctx, gnutls_strerror(r));
|
||||||
|
err = ENOSYS;
|
||||||
|
goto err_cert_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = _efl_net_ssl_ctx_load_lists(ctx, cfg);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
ERR("ssl_ctx=%p failed to load certificate, private keys, CRL or CA", ctx);
|
||||||
|
goto err_load;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_load:
|
||||||
|
gnutls_certificate_free_credentials(ctx->x509_cred);
|
||||||
|
ctx->x509_cred = NULL;
|
||||||
|
err_cert_alloc:
|
||||||
|
gnutls_priority_deinit(ctx->priority);
|
||||||
|
ctx->priority = NULL;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
efl_net_ssl_ctx_teardown(Efl_Net_Ssl_Ctx *ctx)
|
||||||
|
{
|
||||||
|
if (ctx->x509_cred)
|
||||||
|
{
|
||||||
|
gnutls_certificate_free_credentials(ctx->x509_cred);
|
||||||
|
ctx->x509_cred = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->priority)
|
||||||
|
{
|
||||||
|
gnutls_priority_deinit(ctx->priority);
|
||||||
|
ctx->priority = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_ctx_verify_mode_set(Efl_Net_Ssl_Ctx *ctx EINA_UNUSED, Efl_Net_Ssl_Verify_Mode verify_mode EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_ctx_hostname_verify_set(Efl_Net_Ssl_Ctx *ctx EINA_UNUSED, Eina_Bool hostname_verify EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Error
|
||||||
|
efl_net_ssl_ctx_hostname_set(Efl_Net_Ssl_Ctx *ctx EINA_UNUSED, const char *hostname EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -43,7 +43,7 @@ ecore_drm2_plane_assign(Ecore_Drm2_Output *output, Ecore_Drm2_Fb *fb, int x, int
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Ecore_Drm2_Plane *plane;
|
Ecore_Drm2_Plane *plane;
|
||||||
Ecore_Drm2_Plane_State *pstate, *pstate_chosen = NULL;
|
Ecore_Drm2_Plane_State *pstate;
|
||||||
|
|
||||||
if (!_ecore_drm2_use_atomic) return NULL;
|
if (!_ecore_drm2_use_atomic) return NULL;
|
||||||
|
|
||||||
|
@ -68,12 +68,12 @@ ecore_drm2_plane_assign(Ecore_Drm2_Output *output, Ecore_Drm2_Fb *fb, int x, int
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* if we reach here, this FB can go on the cursor plane */
|
/* if we reach here, this FB can go on the cursor plane */
|
||||||
pstate_chosen = pstate;
|
goto out;
|
||||||
}
|
}
|
||||||
else if (pstate->type.value == DRM_PLANE_TYPE_OVERLAY)
|
else if (pstate->type.value == DRM_PLANE_TYPE_OVERLAY)
|
||||||
{
|
{
|
||||||
/* there are no size checks for an overlay plane */
|
/* there are no size checks for an overlay plane */
|
||||||
pstate_chosen = pstate;
|
goto out;
|
||||||
}
|
}
|
||||||
else if (pstate->type.value == DRM_PLANE_TYPE_PRIMARY)
|
else if (pstate->type.value == DRM_PLANE_TYPE_PRIMARY)
|
||||||
{
|
{
|
||||||
|
@ -82,15 +82,10 @@ ecore_drm2_plane_assign(Ecore_Drm2_Output *output, Ecore_Drm2_Fb *fb, int x, int
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* if we reach here, this FB can go on the primary plane */
|
/* if we reach here, this FB can go on the primary plane */
|
||||||
pstate_chosen = pstate;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pstate_chosen)
|
|
||||||
{
|
|
||||||
pstate = pstate_chosen;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -22,6 +22,15 @@ static Eina_Module *_ecore_evas_vnc = NULL;
|
||||||
# define ECORE_EVAS_ENGINE_NAME "module.so"
|
# define ECORE_EVAS_ENGINE_NAME "module.so"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline Eina_Bool
|
||||||
|
_file_exists(const char *file)
|
||||||
|
{
|
||||||
|
if (!file) return EINA_FALSE;
|
||||||
|
|
||||||
|
if (access(file, F_OK) == -1) return EINA_FALSE;
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Eina_Module *
|
static Eina_Module *
|
||||||
_ecore_evas_vnc_server_module_try_load(const char *prefix,
|
_ecore_evas_vnc_server_module_try_load(const char *prefix,
|
||||||
|
@ -210,7 +219,7 @@ _ecore_evas_available_engines_get(void)
|
||||||
eina_strbuf_append_printf(buf, "%s/%s/" ECORE_EVAS_ENGINE_NAME,
|
eina_strbuf_append_printf(buf, "%s/%s/" ECORE_EVAS_ENGINE_NAME,
|
||||||
info->path, MODULE_ARCH);
|
info->path, MODULE_ARCH);
|
||||||
|
|
||||||
if (eina_file_access(eina_strbuf_string_get(buf), EINA_FILE_ACCESS_MODE_EXIST))
|
if (_file_exists(eina_strbuf_string_get(buf)))
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
|
|
|
@ -606,19 +606,111 @@ ecore_file_dir_get(const char *file)
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
ecore_file_can_read(const char *file)
|
ecore_file_can_read(const char *file)
|
||||||
{
|
{
|
||||||
return eina_file_access(file, EINA_FILE_ACCESS_MODE_READ);
|
if (!file) return EINA_FALSE;
|
||||||
|
if (!access(file, R_OK)) return EINA_TRUE;
|
||||||
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
ecore_file_can_write(const char *file)
|
ecore_file_can_write(const char *file)
|
||||||
{
|
{
|
||||||
return eina_file_access(file, EINA_FILE_ACCESS_MODE_WRITE);
|
if (!file) return EINA_FALSE;
|
||||||
|
if (!access(file, W_OK)) return EINA_TRUE;
|
||||||
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
ecore_file_can_exec(const char *file)
|
ecore_file_can_exec(const char *file)
|
||||||
{
|
{
|
||||||
return eina_file_access(file, EINA_FILE_ACCESS_MODE_EXEC);
|
#ifdef _WIN32
|
||||||
|
HANDLE h;
|
||||||
|
HANDLE fm;
|
||||||
|
char *base;
|
||||||
|
char *base_nt;
|
||||||
|
LARGE_INTEGER sz;
|
||||||
|
WORD characteristics;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!file || !*file) return EINA_FALSE;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/*
|
||||||
|
* we parse the file to check if it is a PE file (EXE or DLL)
|
||||||
|
* and we finally check whether it's a DLL or not.
|
||||||
|
* Reference :
|
||||||
|
* https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
|
||||||
|
*/
|
||||||
|
h = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
goto test_bat;
|
||||||
|
|
||||||
|
if (!GetFileSizeEx(h, &sz))
|
||||||
|
goto close_h;
|
||||||
|
|
||||||
|
/* a PE file must have at least the DOS and NT headers */
|
||||||
|
if (sz.QuadPart < (LONGLONG)(sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS)))
|
||||||
|
goto close_h;
|
||||||
|
|
||||||
|
fm = CreateFileMapping(h, NULL, PAGE_READONLY, 0, 0, NULL);
|
||||||
|
if (fm == NULL)
|
||||||
|
goto close_h;
|
||||||
|
|
||||||
|
base = (char *)MapViewOfFile(fm, FILE_MAP_READ, 0, 0, 0);
|
||||||
|
CloseHandle(fm);
|
||||||
|
if (base == NULL)
|
||||||
|
goto close_h;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the PE file begins with the DOS header.
|
||||||
|
* First magic number : the DOS header must begin with a DOS magic number,
|
||||||
|
* that is "MZ", that is 0x5a4d, stored in a WORD.
|
||||||
|
*/
|
||||||
|
if (*((WORD *)base) != 0x5a4d)
|
||||||
|
goto unmap_view;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The position of the NT header is located at the offset 0x3c.
|
||||||
|
*/
|
||||||
|
base_nt = base + *((DWORD *)(base + 0x3c));
|
||||||
|
/*
|
||||||
|
* The NT header begins with the magic number "PE\0\0", that is
|
||||||
|
* 0x00004550, stored in a DWORD.
|
||||||
|
*/
|
||||||
|
if (*((DWORD *)base_nt) != 0x00004550)
|
||||||
|
goto unmap_view;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* to get informations about executable (EXE or DLL), we look at
|
||||||
|
* the 'Characteristics' member of the NT header, located at the offset
|
||||||
|
* 22 (4 for the magic number, 18 for the offset) from base_nt.
|
||||||
|
* https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#characteristics
|
||||||
|
*/
|
||||||
|
characteristics = *((WORD *)(base_nt + 4 + 18));
|
||||||
|
|
||||||
|
UnmapViewOfFile(base);
|
||||||
|
CloseHandle(h);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0x0002 : if set, EXE or DLL
|
||||||
|
* 0x2000 : if set, DLL
|
||||||
|
*/
|
||||||
|
if ((characteristics & 0x0002) && !(characteristics & 0x2000))
|
||||||
|
return EINA_TRUE;
|
||||||
|
unmap_view:
|
||||||
|
UnmapViewOfFile(base);
|
||||||
|
close_h:
|
||||||
|
CloseHandle(h);
|
||||||
|
test_bat:
|
||||||
|
/*
|
||||||
|
* a .bat file, considered as an executable, is only a text file,
|
||||||
|
* so we rely on the extension. Not the best but we cannot do more.
|
||||||
|
*/
|
||||||
|
return eina_str_has_extension(file, ".bat");
|
||||||
|
#else
|
||||||
|
if (!access(file, X_OK)) return EINA_TRUE;
|
||||||
|
#endif
|
||||||
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI char *
|
EAPI char *
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue