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
|
||||
===
|
||||
|
||||
-----
|
||||
|
||||
*Please report bugs/issues at*
|
||||
[git.enlightenment.org](https://git.enlightenment.org/enlightenment/efl/issues)
|
||||
|
||||
-----
|
||||
******************************************************************************
|
||||
FOR ANY ISSUES PLEASE EMAIL:
|
||||
enlightenment-devel@lists.sourceforge.net
|
||||
******************************************************************************
|
||||
|
||||
EFL is a collection of libraries for handling many common tasks a
|
||||
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:
|
||||
|
||||
[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
|
||||
compiled and run also on Windows (using MSYS2 + mingw-w64) - please see
|
||||
[windows docs](https://www.enlightenment.org/docs/distros/windows-start.md),
|
||||
Mac OS X, FreeBSD and NetBSD.
|
||||
compiled and run also on Windows (using MSYS2 + mingw-w64 - please see
|
||||
https://phab.enlightenment.org/w/windows/), Mac OS X, FreeBSD and
|
||||
NetBSD.
|
||||
|
||||
## Components
|
||||
COMPONENTS
|
||||
----------
|
||||
|
||||
**Ecore:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is the core main-loop, system events and execution layer. This
|
||||
handles running the main loop, integrating with external data and
|
||||
|
@ -48,25 +48,31 @@ timing sources (the system clock, file descriptors, system signals),
|
|||
and producing an event queue, walking that queue and dispatching
|
||||
events to appropriate callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore Audio:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides an API for audio playback and recording. It uses
|
||||
pulse audio underneath to handle mixing and policies. The API for this
|
||||
should not be considered stable right now because it relies on EO and
|
||||
EO is not considered finalized yet.
|
||||
|
||||
|
||||
|
||||
**Ecore Cocoa:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
||||
Mac porting.
|
||||
|
||||
|
||||
|
||||
**Ecore Con:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides a completely event-based TCP/UDP and Unix domain socket
|
||||
API that integrates with the main-loop. This means no blocking to send
|
||||
|
@ -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
|
||||
server, not just a client, with the same event-based API.
|
||||
|
||||
|
||||
|
||||
**Ecore Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue between the display target (X11, Wayland,
|
||||
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
||||
|
@ -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
|
||||
wrappers/glue for manipulating the Window/Surface.
|
||||
|
||||
|
||||
|
||||
**Ecore Fb:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides virtual terminal allocation, access and handling,
|
||||
frame buffer information, raw input handling for keyboard, mouse and
|
||||
touch (via tslib).
|
||||
|
||||
|
||||
|
||||
**Ecore File:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides file access convenience APIs for doing simple file
|
||||
operations like renames, copies, listing directories and more. It also
|
||||
supports file change monitoring and URL downloads.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is an input method abstraction framework to allow EFL to talk to
|
||||
things like SCIM, IBus, Wayland and XIM. This allows for complex text
|
||||
entry in languages such as Chinese, Japanese and Korean.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library glues Input method support from Ecore IMF and Evas
|
||||
together.
|
||||
|
||||
|
||||
|
||||
**Ecore Input:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a generic input layer where multiple display systems can
|
||||
post events in the same format to the event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Input Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This Routes events from Ecore Input into a given Evas canvas which
|
||||
will then route the event further to the destination object and
|
||||
callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore IPC:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a layer on top of Ecore Con which handles entire IPC
|
||||
message packets, dealing with header delta compression and
|
||||
|
@ -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
|
||||
supports all the transport layers Ecore Con supports.
|
||||
|
||||
|
||||
|
||||
|
||||
**Ecore SDL:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a wrapper/glue around SDL to handle SDL Windows as well
|
||||
as input events from SDL and tie them to the Ecore main-loop and event
|
||||
queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Wayland:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a glue/wrapper library to interface EFL to Wayland libraries
|
||||
to tie them into the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Win32:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
||||
the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore X:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a library to wrap/deal with Xlib make dealing with X11 less painful
|
||||
and less footwork as well as being glue to tie these into the Ecore main-loop
|
||||
and event queue.
|
||||
|
||||
|
||||
|
||||
**Edje:**
|
||||
|
||||
*BSD 2-Clause license* (except the epp binary which is GPLv2)
|
||||
//BSD 2-Clause license// (except the epp binary which is GPLv2)
|
||||
|
||||
This is a graphics event, input, theme, animation and theme
|
||||
abstraction library used to place many UI/UX elements into data files
|
||||
|
@ -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
|
||||
portable.
|
||||
|
||||
|
||||
|
||||
**Eet:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library is a data storage, encoding and decoding library
|
||||
designed to be extremely compact, fast and easy to use. It can take
|
||||
|
@ -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
|
||||
encoding and decoding of image data in lossless or lossy form.
|
||||
|
||||
|
||||
|
||||
**Eeze:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library acts as an abstraction to discovering hardware interfaces
|
||||
for sensors as well as removable media and much more.
|
||||
|
||||
|
||||
|
||||
**EFL:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is just some core common header data like a common version number
|
||||
for EFL and how to expose the EO API.
|
||||
|
||||
|
||||
|
||||
**Efreet:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides code for handling Freedesktop.org standards such
|
||||
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
||||
|
@ -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
|
||||
library reads.
|
||||
|
||||
|
||||
|
||||
**Eina:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This library provides low-level routines for common things like linked
|
||||
lists, hash tables, growable arrays, basic string buffers, shared
|
||||
|
@ -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
|
||||
more.
|
||||
|
||||
|
||||
|
||||
**EIO:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is an asynchronous I/O library for doing disk I/O without blocking.
|
||||
|
||||
|
||||
|
||||
**ElDBus:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is a DBus access library to allow you to create DBus services as
|
||||
well as clients. This glues in DBus into the main-loop so all access is
|
||||
asynchronous.
|
||||
|
||||
|
||||
|
||||
**Embryo:**
|
||||
|
||||
*Small license (same as ZLib license)*
|
||||
//Small license (same as ZLib license)//
|
||||
|
||||
This is a small C-like language compiler and byte-code interpreter
|
||||
library. This is used for scripting in Edje. The code is based on
|
||||
|
@ -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
|
||||
runtime library being refactored to be extremely small.
|
||||
|
||||
|
||||
|
||||
**Emotion:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a wrapper around Gstreamer 1.x pluggable decoder libraries
|
||||
This glues in the decoder library, and its output into a smart Evas object
|
||||
|
@ -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
|
||||
regardless of the back-end used.
|
||||
|
||||
|
||||
|
||||
**EO:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a core object system API that EFL 1.8 and on depend on. The
|
||||
API is not finalized, so do not depend on it yet in EFL 1.8, but
|
||||
|
@ -288,35 +341,43 @@ strong and weak references, auto-deletion of child objects, unifies
|
|||
callback handling with a single path, and also abstracts object
|
||||
pointers to be indirect table lookups for increased safety at runtime.
|
||||
|
||||
|
||||
|
||||
**EPhysics:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides a wrapper around the Bullet physics library,
|
||||
allowing for it to be linked directly with Evas objects and control
|
||||
their behavior as if they were real physical objects. This is now
|
||||
disabled by default as it's rarely if ever used by anything.
|
||||
|
||||
|
||||
|
||||
**Ethumb:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This library provides core API for a thumbnailing daemon as well as
|
||||
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
||||
off thumbnail generation to a central location to be done
|
||||
asynchronously.
|
||||
|
||||
|
||||
|
||||
**Ethumb Client:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is the client-side part of Ethumb that provides an API for
|
||||
clients to request the Ethumb thumbnailer to generate or find cached
|
||||
thumbnails of files.
|
||||
|
||||
|
||||
|
||||
**Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is the core rendering and scene graph abstraction library for
|
||||
EFL. It manages a stateful 2D scene graph that defines the entire
|
||||
|
@ -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
|
||||
implementations that are fast and accurate.
|
||||
|
||||
|
||||
|
||||
**Evil:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library acts as a porting library for Windows to provide missing
|
||||
libc calls not in Mingw32 that EFL needs. It is used internally and
|
||||
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
|
||||
to C++ libraries like Bullet and our C++ bindings.
|
||||
|
||||
Required by default:
|
||||
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* lua (lua 5.1, luajit or lua 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* luajit (lua 5.1 or 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
|
||||
|
||||
### Wayland support
|
||||
Wayland support:
|
||||
|
||||
You may also want wayland support when on Linux. This enables support
|
||||
for EFL to target wayland support for client applications. To do this
|
||||
for EFL to trget wayland support for client applications. To do this
|
||||
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
|
||||
support so enable this. This is what you also want for wayland
|
||||
compositor support in enlightenment as it will want to be able to
|
||||
render to a modern framebuffer target with atomic buffer swapping. To
|
||||
render to a moder framebuffer tarbet with atomic buffer swapping. To
|
||||
do this provide:
|
||||
``` sh
|
||||
-Ddrm=true
|
||||
```
|
||||
|
||||
Legacy fbcon support also exists, but you probably no longer want to
|
||||
use this as it is not maintained anymore. This supports basic frame-buffers
|
||||
like /dev/fb as well as input via /dev/input for keyboards and mice in a
|
||||
basic way. Enable this with:
|
||||
``` sh
|
||||
-Dfb=true
|
||||
```
|
||||
-Ddrm=true
|
||||
|
||||
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
|
||||
use prefixes like /opt/e or /opt/efl or /home/USERNAME/software etc.
|
||||
|
||||
### Compiler flags
|
||||
COMPILER FLAGS
|
||||
--------------
|
||||
|
||||
You can affect compilation optimization, debugging and other factors
|
||||
by setting your `CFLAGS` environment variable (and `CXXFLAGS`). Be aware
|
||||
that to ensure ABI stability you should use the exact same `CFLAGS` /
|
||||
`CXXFLAGS` for all the build of EFL and any applications/libraries that
|
||||
by setting your CFLAGS environment variable (and CXXFLAGS). Be aware
|
||||
that to ensure ABI stability you should use the exact same CFLAGS /
|
||||
CXXFLAGS for all the build of EFL and any applications/libraries that
|
||||
depend on them.
|
||||
|
||||
There are many other configure options that can be used, but in
|
||||
|
@ -439,110 +517,13 @@ these without understanding the implications. The defaults
|
|||
have been carefully considered to provide full functionality so users
|
||||
will not be missing anything.
|
||||
|
||||
-----
|
||||
|
||||
## Compiling and Installing
|
||||
CRYPTOGRAPHY
|
||||
------------
|
||||
|
||||
Meson is the build system used for this project. For more information
|
||||
please see [mesonbuild.com](https://mesonbuild.com)
|
||||
EFL officially offers openssl or gnutls as cryptography backends. By
|
||||
default it uses "openssl" to do signature, cipher and related. Alternatively
|
||||
one can use "gnutls" (some distros are strict about licenses and want gnutls
|
||||
instead of openssl) You can switch to gnutls with:
|
||||
|
||||
You will need normal build tooling installed such as a compiler (gcc
|
||||
or clang for example), pkg-config, ninja, any relevant package-dev or
|
||||
package-devel packages if your distribution splits out development
|
||||
headers (e.g. libc6-dev) etc.
|
||||
|
||||
Depending on where dependencies, you might have to set your
|
||||
`PKG_CONFIG_PATH` environment variable like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
|
||||
```
|
||||
|
||||
Also note that some distributions like to add extra arch directories
|
||||
to your library locations so you might have to have more like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
|
||||
```
|
||||
|
||||
You will need to ensure that the destination library directory (e.g.
|
||||
`/usr/local/lib` is in your /etc/ld.so.conf or /etc/ld.so.conf.d/
|
||||
files and after installing anything that installs libraries you
|
||||
re-run `ldconfig`. Please see relevant documentation on ldconfig and
|
||||
ld.so.conf for your distribution.
|
||||
|
||||
You might also want to add the destination bin dir to your environment
|
||||
variable PATH (see documentation on your shell PATH variable) such as:
|
||||
```sh
|
||||
export PATH=/usr/local/bin:/usr/bin:/bin
|
||||
```
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
```sh
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
For meson build generic options:
|
||||
```sh
|
||||
meson --help
|
||||
```
|
||||
|
||||
For a list of project specific options supported:
|
||||
```sh
|
||||
cat meson_options.txt
|
||||
```
|
||||
|
||||
To set 1 or more project specific options:
|
||||
```sh
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
```
|
||||
|
||||
To display current configuration:
|
||||
```sh
|
||||
meson configure build
|
||||
```
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
```sh
|
||||
meson . build
|
||||
```
|
||||
|
||||
### Quick build help
|
||||
|
||||
How to clean out the build and config and start fresh:
|
||||
```sh
|
||||
rm -rf build
|
||||
```
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
```sh
|
||||
ninja -C build dist
|
||||
```
|
||||
|
||||
How to change prefix:
|
||||
```sh
|
||||
meson --prefix=/path/to/prefix . build
|
||||
```
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
```sh
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
```
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
```sh
|
||||
ninja -C build -v
|
||||
```
|
||||
|
||||
-----
|
||||
|
||||
**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`
|
||||
-Dcrypto=gnutls
|
|
@ -1,5 +1,6 @@
|
|||
#!/bin/sh -e
|
||||
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 \
|
||||
$@ . build
|
||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
|||
value "config_version" int: 131096;
|
||||
value "entry_select_allow" uchar: 1;
|
||||
value "engine" string: "";
|
||||
value "vsync" uchar: 1;
|
||||
value "vsync" uchar: 0;
|
||||
//
|
||||
value "thumbscroll_enable" uchar: 1;
|
||||
value "thumbscroll_threshold" int: 24;
|
||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
|||
value "config_version" int: 131096;
|
||||
value "entry_select_allow" uchar: 1;
|
||||
value "engine" string: "";
|
||||
value "vsync" uchar: 1;
|
||||
value "vsync" uchar: 0;
|
||||
value "thumbscroll_enable" uchar: 1;
|
||||
value "thumbscroll_threshold" int: 24;
|
||||
value "thumbscroll_hold_threshold" int: 100;
|
||||
|
|
|
@ -2,7 +2,7 @@ group "Elm_Config" struct {
|
|||
value "config_version" int: 131096;
|
||||
value "entry_select_allow" uchar: 1;
|
||||
value "engine" string: "";
|
||||
value "vsync" uchar: 1;
|
||||
value "vsync" uchar: 0;
|
||||
value "thumbscroll_enable" uchar: 0;
|
||||
value "thumbscroll_threshold" int: 4;
|
||||
value "thumbscroll_hold_threshold" int: 4;
|
||||
|
|
|
@ -172,7 +172,6 @@ color_tree {
|
|||
"/fg/normal/spinner/arrow";
|
||||
"/fg/normal/spinner/text";
|
||||
"/fg/normal/notification/text";
|
||||
"/fg/pressed/notification/text/title";
|
||||
"/fg/selected/winlist/item/text/iconified";
|
||||
"/fg/pressed/gadgets/tasks/text/iconified";
|
||||
"/fg/normal/gadgets/battery/level/discharge";
|
||||
|
@ -198,7 +197,6 @@ color_tree {
|
|||
"/fg/selected/radio/radio";
|
||||
"/fg/normal/gadgets/backlight/base";
|
||||
"/fg-alt";
|
||||
"/fg/normal/fileman/filesize/0";
|
||||
}
|
||||
":fg-prehigh" {
|
||||
"/fg/normal/flipselector/down";
|
||||
|
@ -300,7 +298,6 @@ color_tree {
|
|||
"/fg-alt/pressed";
|
||||
"/fg-alt/selected";
|
||||
"/fg-alt/selected-pressed";
|
||||
"/fg/selected/fileman/filesize/0";
|
||||
}
|
||||
":selected" {
|
||||
"/bg/selected";
|
||||
|
@ -337,7 +334,7 @@ color_tree {
|
|||
"/fg/normal/text-preedit";
|
||||
"/fg/normal/text-info";
|
||||
"/fg/normal/text-type";
|
||||
"/fg/normal/fileselector/pathsep";
|
||||
"/fg/nmormal/fileselector/pathsep";
|
||||
"/fg/selected/button/bar";
|
||||
"/fg/normal/button-anchor";
|
||||
"/fg/selected/thumb/bar";
|
||||
|
@ -363,7 +360,6 @@ color_tree {
|
|||
"/fg/normal/gadgets/mixer/volume/normal";
|
||||
"/fg/normal/gadgets/music_control/progress";
|
||||
"/fg/normal/gadgets/music_control/text/tag";
|
||||
"/fg/normal/fileman/filesize/1";
|
||||
}
|
||||
":selected-light" {
|
||||
"/bg/normal/tiling/position/base";
|
||||
|
@ -403,10 +399,6 @@ color_tree {
|
|||
"/fg/normal/gadgets/packagekit/pkg/bug";
|
||||
"/fg/normal/gadgets/packagekit/pkg/enhancement";
|
||||
"/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" {
|
||||
"/bg/normal/access";
|
||||
|
@ -418,8 +410,6 @@ color_tree {
|
|||
"/fg/normal/text-line-added";
|
||||
"/fg/normal/desklock/fprint/success";
|
||||
"/fg/normal/gadgets/procstats/mem/all";
|
||||
"/fg/normal/fileman/filesize/3";
|
||||
"/fg/selected/fileman/filesize/3";
|
||||
}
|
||||
":selected2-dim" {
|
||||
"/fg/disabled/text-line-added";
|
||||
|
@ -428,8 +418,6 @@ color_tree {
|
|||
"/fg/normal/gadgets/procstats/cpu/all";
|
||||
"/fg/normal/gadgets/cpufreq/hands/max";
|
||||
"/fg/normal/gadgets/packagekit/pkg/important";
|
||||
"/fg/normal/fileman/filesize/4";
|
||||
"/fg/selected/fileman/filesize/4";
|
||||
}
|
||||
":selected4" {
|
||||
"/fg/normal/text-urgent";
|
||||
|
@ -439,7 +427,6 @@ color_tree {
|
|||
"/fg/normal/text-line-removed";
|
||||
"/fg/normal/gadgets/temperature/hi";
|
||||
"/fg/normal/gadgets/clock/analog/hands/secs";
|
||||
"/fg/normal/fileperm/write";
|
||||
}
|
||||
":selected4-dim" {
|
||||
"/fg/disabled/text-warning";
|
||||
|
@ -458,7 +445,6 @@ color_tree {
|
|||
}
|
||||
":selected6" {
|
||||
"/fg/normal/text-string";
|
||||
"/fg/selected/fileman/filesize/1";
|
||||
}
|
||||
":selected6-dim" {
|
||||
"/fg/disabled/text-string";
|
||||
|
@ -476,7 +462,6 @@ color_tree {
|
|||
"/fg/normal/fileman/mount/off";
|
||||
"/fg/normal/progress/busy/2";
|
||||
"/fg/normal/gadgets/packagekit/pkg/low-priority";
|
||||
"/fg/normal/filegraph/bartop";
|
||||
}
|
||||
":light-high" {
|
||||
"/fg/normal/naviframe/top/overlap";
|
||||
|
@ -560,7 +545,6 @@ color_tree {
|
|||
}
|
||||
":success" {
|
||||
"/fg/normal/text-success";
|
||||
"/fg/normal/fileperm/read";
|
||||
}
|
||||
":success-dim" {
|
||||
"/fg/disabled/text-success";
|
||||
|
@ -585,7 +569,6 @@ color_tree {
|
|||
}
|
||||
":number" {
|
||||
"/fg/normal/text-number";
|
||||
"/fg/normal/fileperm/setuid";
|
||||
}
|
||||
":number-dim" {
|
||||
"/fg/disabled/text-number";
|
||||
|
@ -1294,7 +1277,7 @@ color_classes {
|
|||
// color_class { name: "/fg/disabled/flipselector/up";
|
||||
// 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_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";
|
||||
images.image: "shadow_circle_vert.png" COMP;
|
||||
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)
|
||||
#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;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to_y: "e.swallow.client";
|
||||
|
@ -212,23 +193,12 @@ group { name: "e/widgets/border/default/border";
|
|||
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;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
rel2.to_y: "e.text.title";
|
||||
rel2.offset: -1 2;
|
||||
color_class: "/bg/normal/titlebar";
|
||||
#if defined(BLUR_TITLE) || defined(BLUR_BEHIND)
|
||||
color: 255 255 255 BLUR_FORCE_ALPHA;
|
||||
#endif
|
||||
offscale;
|
||||
}
|
||||
description { state: "focused" 0.0;
|
||||
|
@ -524,9 +494,6 @@ group { name: "e/widgets/border/default/border";
|
|||
description { state: "default" 0.0;
|
||||
color_class: "/bg/normal/border";
|
||||
rel.to: "bottom";
|
||||
#if defined(BLUR_BEHIND)
|
||||
color: 255 255 255 BLUR_FORCE_ALPHA;
|
||||
#endif
|
||||
}
|
||||
description { state: "focused" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
|
|
|
@ -267,70 +267,11 @@ group { name: "e/comp/frame/default";
|
|||
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;
|
||||
clip_to: "focus-clipper";
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "shower";
|
||||
}
|
||||
}
|
||||
}
|
||||
spacer { "gspacer";
|
||||
desc {
|
||||
|
@ -385,21 +326,6 @@ group { name: "e/comp/frame/default";
|
|||
transition: SINUSOIDAL 0.2 USE_DURATION_FACTOR 1;
|
||||
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";
|
||||
signal: "e,state,urgent"; source: "e";
|
||||
|
@ -435,15 +361,6 @@ group { name: "e/comp/frame/rotate";
|
|||
alias: "e/comp/frame/rotate/fast"; // legacy
|
||||
inherit: "e/comp/frame/default";
|
||||
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";
|
||||
description { state: "default";
|
||||
map {
|
||||
|
@ -477,12 +394,6 @@ group { name: "e/comp/frame/rotate";
|
|||
target: "e.swallow.content";
|
||||
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
|
||||
inherit: "e/comp/frame/default";
|
||||
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";
|
||||
description { state: "default";
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { name: "focusbounce";
|
||||
signal: "xxx";
|
||||
}
|
||||
program { name: "focusbounceoff";
|
||||
signal: "xxx";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "e/comp/frame/none";
|
||||
|
@ -561,15 +455,6 @@ group { name: "e/comp/frame/still";
|
|||
alias: "e/comp/frame/still/fast"; // legacy
|
||||
inherit: "e/comp/frame/default";
|
||||
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";
|
||||
description { state: "default" 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";
|
||||
|
@ -611,15 +488,6 @@ group { name: "e/comp/frame/everything";
|
|||
alias: "e/comp/frame/everything/fast"; // legacy
|
||||
inherit: "e/comp/frame/popup";
|
||||
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";
|
||||
description { state: "hidden" 0.0;
|
||||
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";
|
||||
|
|
|
@ -17,7 +17,7 @@ group { name: "e/desklock/background";
|
|||
color_class: "/bg/normal/desklock/background";
|
||||
}
|
||||
}
|
||||
program { name: "shower"; signal: "show"; source: "";
|
||||
program { signal: "show"; source: "";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
transition: SINUSOIDAL 0.5 USE_DURATION_FACTOR 1;
|
||||
target: "clip";
|
||||
|
@ -30,14 +30,6 @@ group { name: "e/desklock/background";
|
|||
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;
|
||||
clip_to: "clip";
|
||||
description { state: "default" 0.0;
|
||||
|
|
|
@ -263,7 +263,7 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel2.to_x: "event.minimize";
|
||||
rel2.to_y: "shadow_base";
|
||||
align: 0.5 0.0;
|
||||
color_class: "/fg/normal/titlebar";
|
||||
color_class: "/fg/noemal/titlebar";
|
||||
min: 0 16;
|
||||
text { font: FNBD; size: 10;
|
||||
text_class: "title_bar";
|
||||
|
@ -330,7 +330,7 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "event.close";
|
||||
min: 15 15; max: 15 15;
|
||||
fixed: 1 1;
|
||||
color_class: "/fg/normal/titlebar/close";
|
||||
color_class: "/fg/noemal/titlebar/close";
|
||||
}
|
||||
desc { "selected";
|
||||
inherit: "default";
|
||||
|
@ -345,7 +345,7 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "event.maximize";
|
||||
min: 15 15; max: 15 15;
|
||||
fixed: 1 1;
|
||||
color_class: "/fg/normal/titlebar/maximize";
|
||||
color_class: "/fg/noemal/titlebar/maximize";
|
||||
}
|
||||
desc { "selected";
|
||||
inherit: "default";
|
||||
|
|
|
@ -6,7 +6,7 @@ group { name: "elm/entry/path/separator/default";
|
|||
image.normal: "i-arrow-r";
|
||||
FIXED_SIZE(15, 15)
|
||||
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;
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "elm.swallow.content";
|
||||
rel.to: "elm.swallow.background";
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.background"; type: SWALLOW;
|
||||
// scale: 1;
|
||||
clip_to: "clipper";
|
||||
description { state: "default" 0.0;
|
||||
// rel1.offset: 2 2;
|
||||
// rel2.offset: -3 -3;
|
||||
// offscale;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.content"; type: SWALLOW;
|
||||
|
@ -183,7 +187,7 @@ group { name: "elm/scroller/base/default";
|
|||
|
||||
part { name: "sh_clip"; type: RECT;
|
||||
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";
|
||||
}
|
||||
}
|
||||
part { name: "knob"; mouse_events: 0;
|
||||
part { name: "knob"; repeat_events: 1;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 1;
|
||||
|
@ -354,7 +354,7 @@ group { name: "elm/slider/horizontal/default";
|
|||
color_class: "/fg/disabled/slider/knob";
|
||||
}
|
||||
}
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||
scale: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
dragable.events: "elm.dragable.slider";
|
||||
|
@ -947,7 +947,7 @@ group { name: "elm/slider/vertical/default";
|
|||
rel2.to_y: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
part { name: "knob"; mouse_events: 0;
|
||||
part { name: "knob"; repeat_events: 1;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 1;
|
||||
|
@ -966,7 +966,7 @@ group { name: "elm/slider/vertical/default";
|
|||
color_class: "/fg/disabled/slider/knob";
|
||||
}
|
||||
}
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||
scale: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
dragable.events: "elm.dragable.slider";
|
||||
|
@ -1614,7 +1614,7 @@ group { name: "elm/slider/range/horizontal/default";
|
|||
rel2.to_x: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
part { name: "knob"; mouse_events: 0;
|
||||
part { name: "knob"; repeat_events: 1;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 1;
|
||||
|
@ -1633,7 +1633,7 @@ group { name: "elm/slider/range/horizontal/default";
|
|||
color_class: "/fg/disabled/slider/knob";
|
||||
}
|
||||
}
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||
scale: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
dragable.events: "elm.dragable.slider";
|
||||
|
@ -1677,7 +1677,7 @@ group { name: "elm/slider/range/horizontal/default";
|
|||
rel2.to_x: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
part { name: "knob2"; mouse_events: 0;
|
||||
part { name: "knob2"; repeat_events: 1;
|
||||
clip_to: "enable2";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -1698,7 +1698,7 @@ group { name: "elm/slider/range/horizontal/default";
|
|||
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";
|
||||
scale: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
|
@ -2298,7 +2298,7 @@ group { name: "elm/slider/range/vertical/default";
|
|||
rel2.to_y: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
part { name: "knob"; mouse_events: 0;
|
||||
part { name: "knob"; repeat_events: 1;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 1 1;
|
||||
|
@ -2317,7 +2317,7 @@ group { name: "elm/slider/range/vertical/default";
|
|||
color_class: "/fg/disabled/slider/knob";
|
||||
}
|
||||
}
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 0;
|
||||
part { name: "slideevent"; type: RECT; repeat_events: 1;
|
||||
scale: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
dragable.events: "elm.dragable.slider";
|
||||
|
@ -2361,7 +2361,7 @@ group { name: "elm/slider/range/vertical/default";
|
|||
rel2.to_y: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
part { name: "knob2"; mouse_events: 0;
|
||||
part { name: "knob2"; repeat_events: 1;
|
||||
clip_to: "enable2";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -2381,7 +2381,7 @@ group { name: "elm/slider/range/vertical/default";
|
|||
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";
|
||||
scale: 1;
|
||||
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("person-bust", "i-person-bust")
|
||||
|
||||
ICON("state-radio", "i-radio")
|
||||
ICON("state-check", "i-check")
|
||||
|
||||
#undef ICON
|
||||
|
||||
// regular icons
|
||||
|
@ -751,7 +746,6 @@ ICON("state-check", "i-check")
|
|||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
ICON("folder", "i-folder")
|
||||
ICON("file", "i-file")
|
||||
ICON("clock", "i-clock")
|
||||
|
@ -889,7 +883,6 @@ ICON("preferences-desktop-screensaver", "i-screen")
|
|||
ICON("preferences-desktop-wallpaper", "i-picture-landscape")
|
||||
ICON("preferences-system", "i-gear")
|
||||
ICON("preferences-other", "i-gear-spanner")
|
||||
ICON("preferences-etc", "i-utilities")
|
||||
ICON("system-file-manager", "i-folder")
|
||||
ICON("applications-accessories", "i-scissor-rule")
|
||||
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: "i" "+ font="FNIT" text_class=module_italic";
|
||||
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;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.5;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
aspect: 1.0 1.0;
|
||||
aspect_preference: BOTH;
|
||||
rel.to: "base";
|
||||
rel1.to_y: "notification.textblock.message";
|
||||
rel1.offset: 12 0;
|
||||
rel1.offset: 12 12;
|
||||
rel2.offset: 12 -13;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 24 24;
|
||||
|
@ -82,11 +83,26 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -13;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
min: 200 20;
|
||||
|
@ -96,9 +112,7 @@ group { name: "e/modules/notification/main";
|
|||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -27 -13;
|
||||
text { style: "notification_style";
|
||||
text_source: "notification.textblock.message";
|
||||
min: 0 1;
|
||||
|
@ -107,45 +121,6 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.swallow.desktop_icon"; type: SWALLOW; mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
rel1.to_x: "base";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.offset: 12 0;
|
||||
rel2.to: "notification.text.title";
|
||||
rel2.offset: 12 -1;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 15 15;
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.text.title"; type: TEXT; mouse_events: 0;
|
||||
clip_to: "titleclip";
|
||||
scale: 1;
|
||||
|
@ -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";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -233,81 +190,14 @@ group { name: "e/modules/notification/main";
|
|||
program { signal: "mouse,clicked,1"; source: "base";
|
||||
action: SIGNAL_EMIT "notification,find" "theme";
|
||||
}
|
||||
program { signal: "e,state,actions,show"; source: "e";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
program { signal: "e,state,actions,hide"; source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
// program { signal: "e,category,device"; source: "e"; }
|
||||
// program { signal: "e,category,device.added"; source: "e"; }
|
||||
// program { signal: "e,category,device.error"; source: "e"; }
|
||||
// program { signal: "e,category,device.removed"; source: "e"; }
|
||||
// program { signal: "e,category,email"; source: "e"; }
|
||||
// program { signal: "e,category,email.arrived"; source: "e"; }
|
||||
// program { signal: "e,category,email.bounced"; source: "e"; }
|
||||
// program { signal: "e,category,im"; source: "e"; }
|
||||
// program { signal: "e,category,im.error"; source: "e"; }
|
||||
// program { signal: "e,category,im.received"; source: "e"; }
|
||||
// program { signal: "e,category,network"; source: "e"; }
|
||||
// program { signal: "e,category,network.connected"; source: "e"; }
|
||||
// program { signal: "e,category,network.disconnected"; source: "e"; }
|
||||
// program { signal: "e,category,network.error"; source: "e"; }
|
||||
// program { signal: "e,category,presence"; source: "e"; }
|
||||
// program { signal: "e,category,presence.offline"; source: "e"; }
|
||||
// program { signal: "e,category,presence.online"; source: "e"; }
|
||||
// program { signal: "e,category,transfer"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.complete"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.error"; source: "e"; }
|
||||
// program { signal: "e,urgency,low"; source: "e"; }
|
||||
// program { signal: "e,urgency,normal"; source: "e"; }
|
||||
// program { signal: "e,urgency,critical"; source: "e"; }
|
||||
// program { signal: "notification,new"; source: "notification"; }
|
||||
// program { signal: "notification,del"; source: "notification"; }
|
||||
// program { signal: "notification,deleted"; source: "notification"; }
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "e/modules/notification/action";
|
||||
parts {
|
||||
part { name: "e.text.label"; type: TEXT;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -5 -5;
|
||||
color_class: "/fg/normal/notification/text/title";
|
||||
text { font: FNBD; size: 10;
|
||||
min: 1 1;
|
||||
text_class: "notification_title";
|
||||
}
|
||||
offscale;
|
||||
}
|
||||
description { state: "selected" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color_class: "/fg/pressed/notification/text/title";
|
||||
}
|
||||
}
|
||||
part { name: "event"; type: RECT;
|
||||
scale : 1;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 40 20;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { signal: "mouse,down,1"; source: "event";
|
||||
action: STATE_SET "selected" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,up,1"; source: "event";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,clicked,1"; source: "event";
|
||||
action: SIGNAL_EMIT "e,action,clicked" "e";
|
||||
}
|
||||
// program {
|
||||
// signal: "notification,new"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,del"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,deleted"; source: "notification";
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
parts {
|
||||
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
|
||||
}
|
||||
}
|
||||
#ifdef BLUR_WINLIST
|
||||
/*
|
||||
snapshot { "bg_blur";
|
||||
clip_to: "bg_clip";
|
||||
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;
|
||||
}
|
||||
desc { state: "visible" 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;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
part { name: "bg_darken"; type: RECT;
|
||||
clip_to: "bg_clip";
|
||||
description { state: "default" 0.0;
|
||||
color_class: "/dim/normal/winlist/base";
|
||||
}
|
||||
}
|
||||
#ifdef BLUR_WINLIST
|
||||
/*
|
||||
part { name: "shadow"; mouse_events: 0;
|
||||
clip_to: "bg_clip";
|
||||
description { state: "default" 0.0;
|
||||
|
@ -304,26 +298,26 @@ group { name: "e/widgets/winlist/large/bg";
|
|||
rel2.relative: 2.0 2.0;
|
||||
image.normal: "screen_circular_shadow.png";
|
||||
fill.smooth: 0;
|
||||
color: 255 255 255 0; // no cc
|
||||
visible: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit;
|
||||
rel1.relative: 0.0 0.0;
|
||||
rel2.relative: 1.0 1.0;
|
||||
color: 255 255 255 255; // no cc
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
programs {
|
||||
program { signal: "e,state,visible,on"; source: "e";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
transition: DECELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
||||
target: "bg_clip";
|
||||
#ifdef BLUR_WINLIST
|
||||
target: "bg_blur";
|
||||
target: "shadow";
|
||||
#endif
|
||||
// target: "bg_blur";
|
||||
// target: "shadow";
|
||||
after: "show2";
|
||||
}
|
||||
program { name: "show2";
|
||||
|
@ -333,10 +327,8 @@ group { name: "e/widgets/winlist/large/bg";
|
|||
action: STATE_SET "default" 0.0;
|
||||
transition: ACCELERATE 0.2 USE_DURATION_FACTOR 1 CURRENT;
|
||||
target: "bg_clip";
|
||||
#ifdef BLUR_WINLIST
|
||||
target: "bg_blur";
|
||||
target: "shadow";
|
||||
#endif
|
||||
// target: "bg_blur";
|
||||
// target: "shadow";
|
||||
after: "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-star", "star")
|
||||
I060("i-star-off", "star-off")
|
||||
I060("i-person-bust", "person-bust")
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// larger color icons (mostly efm or settings)
|
||||
|
@ -360,7 +359,7 @@ I160("i-monitor-speakers", "monitor-speakers")
|
|||
I160("i-briefcase", "briefcase")
|
||||
I160("i-app-window", "app-window")
|
||||
I160("i-beaker", "beaker")
|
||||
I160("i-utilities", "utilities")
|
||||
// not used yet I160("i-utilities", "utilities")
|
||||
I160("i-sun", "sun")
|
||||
I160("i-moon", "moon")
|
||||
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".
|
||||
*/
|
||||
|
||||
/**
|
||||
* @example ecore_fd_handler_gnutls_example.c
|
||||
* Shows how to use fd handlers.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @example ecore_con_lookup_example.c
|
||||
* 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'],
|
||||
version: '1.27.99',
|
||||
version: '1.26.99',
|
||||
default_options : ['buildtype=plain', 'warning_level=1', 'cpp_std=c++11'],
|
||||
meson_version : '>=0.50'
|
||||
)
|
||||
|
@ -118,7 +118,6 @@ if sys_windows
|
|||
error('Version of targetted Windows incorrect')
|
||||
endif
|
||||
add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: langs)
|
||||
add_global_arguments('-define:WIN32', language: 'cs')
|
||||
endif
|
||||
|
||||
if sys_sun
|
||||
|
@ -219,15 +218,15 @@ else
|
|||
error('System ' + host_machine.system() + ' not known')
|
||||
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'
|
||||
# This is necessary. We MUST use OpenSSL in base as bringing in from ports
|
||||
# can cause major issues (2 copies of the same library).
|
||||
crypto = declare_dependency(link_args : [ '-lssl', '-lcrypto'])
|
||||
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'
|
||||
crypto = dependency('openssl')
|
||||
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)
|
||||
endforeach
|
||||
|
||||
doxygen = find_program('doxygen', required : get_option('docs'))
|
||||
if get_option('docs')
|
||||
if not doxygen.found()
|
||||
error('Need doxygen for docs')
|
||||
endif
|
||||
doxygen = find_program('doxygen', required : false)
|
||||
|
||||
if doxygen.found()
|
||||
subdir('doc')
|
||||
endif
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ option('debug-threads',
|
|||
|
||||
option('build-examples',
|
||||
type : 'boolean',
|
||||
value : false,
|
||||
value : true,
|
||||
description : 'Compile examples'
|
||||
)
|
||||
|
||||
|
@ -108,7 +108,7 @@ option('build-tests',
|
|||
|
||||
option('crypto',
|
||||
type : 'combo',
|
||||
choices : ['openssl'],
|
||||
choices : ['gnutls', 'openssl'],
|
||||
value : 'openssl',
|
||||
description : 'Which SSL Crypto library used in efl'
|
||||
)
|
||||
|
@ -330,7 +330,7 @@ option('dotnet',
|
|||
option('lua-interpreter',
|
||||
type: 'combo',
|
||||
choices: ['luajit', 'lua'],
|
||||
value: 'lua',
|
||||
value: 'luajit',
|
||||
description: 'Which Lua back-end library to use in efl'
|
||||
)
|
||||
|
||||
|
@ -382,15 +382,3 @@ option('max-fd-size',
|
|||
value : '8192',
|
||||
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_child.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_getopt_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_unix.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-openssl.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-openssl.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.h
|
||||
src/lib/emile/emile_cipher.c
|
||||
src/lib/emile/emile_cipher_gnutls.c
|
||||
src/lib/emile/emile_cipher.h
|
||||
src/lib/emile/emile_cipher_openssl.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.
|
||||
# Copyright (C) 2012 Enlightenment development team
|
||||
# This file is public domain.
|
||||
# Sérgio Marques <smarquespt@gmail.com>, 2010-2014.
|
||||
# Hugo Carvalho <hugokarvalho@hotmail.com> 2021-2022.
|
||||
# Sérgio Marques <smarquespt@gmail.com>, 2010-2014
|
||||
#
|
||||
#: src/lib/elementary/elm_config.c:4267
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Elementary\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||
"PO-Revision-Date: 2022-10-02 22:21+0100\n"
|
||||
"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
|
||||
"Language-Team: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
|
||||
"PO-Revision-Date: 2013-11-05 14:11-0000\n"
|
||||
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
|
||||
"Language-Team: General\n"
|
||||
"Language: pt\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.1.1\n"
|
||||
"X-Generator: Poedit 1.6.4\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-07 16:20+0000\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:85
|
||||
|
@ -31,7 +30,7 @@ msgstr "Utilização:"
|
|||
#: src/lib/ecore/ecore_getopt.c:101
|
||||
#, c-format
|
||||
msgid "%s [options]"
|
||||
msgstr "%s [options]"
|
||||
msgstr "%s [opções]"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:301
|
||||
msgid "Copyright:"
|
||||
|
@ -43,15 +42,15 @@ msgstr "Licença:"
|
|||
|
||||
#: src/lib/ecore/ecore_getopt.c:499
|
||||
msgid "Type: "
|
||||
msgstr "Tipo: "
|
||||
msgstr "Tipo:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:575
|
||||
msgid "Default: "
|
||||
msgstr "Padrão: "
|
||||
msgstr "Padrão:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:602
|
||||
msgid "Choices: "
|
||||
msgstr "Escolhas: "
|
||||
msgstr "Escolhas:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||
msgid "No categories available."
|
||||
|
@ -59,7 +58,7 @@ msgstr "Nenhuma categoria disponível."
|
|||
|
||||
#: src/lib/ecore/ecore_getopt.c:645
|
||||
msgid "Categories: "
|
||||
msgstr "Categorias: "
|
||||
msgstr "Categorias:"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:767
|
||||
msgid "Options:\n"
|
||||
|
@ -108,7 +107,7 @@ msgstr "formato numérico inválido %s\n"
|
|||
#: src/lib/ecore/ecore_getopt.c:1309
|
||||
#, c-format
|
||||
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
|
||||
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
|
||||
#, c-format
|
||||
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
|
||||
#, c-format
|
||||
msgid " See -%c.\n"
|
||||
msgstr " Veja -%c.\n"
|
||||
msgstr "Consulte -%c.\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2148
|
||||
msgid "ERROR: invalid positional arguments found."
|
||||
|
@ -242,19 +241,20 @@ msgstr "Vídeos"
|
|||
|
||||
#: src/lib/evas/common/language/evas_language_utils.c:205
|
||||
msgid "default:LTR"
|
||||
msgstr "padrão: LTR (da esquerda para a direita)"
|
||||
msgstr "default:LTR"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:408
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:415
|
||||
#, fuzzy
|
||||
msgid "Subtitle"
|
||||
msgstr "Legenda"
|
||||
msgstr "Título"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:966
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
msgstr "Recuar"
|
||||
|
||||
#: src/lib/elementary/elc_fileselector.c:1755
|
||||
msgid "Up"
|
||||
|
@ -266,7 +266,7 @@ msgstr "Pasta pessoal"
|
|||
|
||||
#: src/lib/elementary/elc_fileselector.c:1787
|
||||
msgid "Search"
|
||||
msgstr "Procurar"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/elementary/elc_fileselector.c:2061
|
||||
msgid "OK"
|
||||
|
|
112
po/ru.po
112
po/ru.po
|
@ -3,15 +3,15 @@
|
|||
# This file is put in the public domain.
|
||||
# Danny Moshnakov <dm@agent.co.il>, 2012.
|
||||
# Igor Murzov <garik@efl.so>, 2015.
|
||||
# Dmitri Chudinov <dmitri.chudinov@gmail.com>, 2022.
|
||||
#
|
||||
#: src/lib/elementary/elm_config.c:4267
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: elementary 1.11\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||
"PO-Revision-Date: 2022-06-07 11:55+0500\n"
|
||||
"Last-Translator: Дмитрий Чудинов <dmitri.chudinov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2015-02-07 15:16+0300\n"
|
||||
"Last-Translator: Игорь Мурзов <garik@efl.so>\n"
|
||||
"Language-Team: ru <enlightenment-intl@lists.sourceforge.net>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -22,192 +22,191 @@ msgstr ""
|
|||
|
||||
#: src/lib/ecore/ecore_getopt.c:85
|
||||
msgid "Version:"
|
||||
msgstr "Версия:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:94
|
||||
msgid "Usage:"
|
||||
msgstr "Пример использования:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:101
|
||||
#, c-format
|
||||
msgid "%s [options]"
|
||||
msgstr "%s [опций]"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:301
|
||||
msgid "Copyright:"
|
||||
msgstr "Копирайт:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:313
|
||||
msgid "License:"
|
||||
msgstr "Лицензия:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:499
|
||||
msgid "Type: "
|
||||
msgstr "Тип: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:575
|
||||
msgid "Default: "
|
||||
msgstr "По умолчанию: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:602
|
||||
msgid "Choices: "
|
||||
msgstr "Варианты: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||
msgid "No categories available."
|
||||
msgstr "Нет доступных категорий."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:645
|
||||
msgid "Categories: "
|
||||
msgstr "Категории: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:767
|
||||
msgid "Options:\n"
|
||||
msgstr "Опции:\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:776
|
||||
msgid "Positional arguments:\n"
|
||||
msgstr "Позиционные аргументы:\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:843
|
||||
#, c-format
|
||||
msgid "ERROR: unknown category '%s'.\n"
|
||||
msgstr "ОШИБКА: неизвестная категория '%s'.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:947
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция --%s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:949
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция -%c.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1012
|
||||
msgid "ERROR: "
|
||||
msgstr "ОШИБКА: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1108 src/lib/ecore/ecore_getopt.c:1245
|
||||
#: src/lib/ecore/ecore_getopt.c:1261 src/lib/ecore/ecore_getopt.c:1276
|
||||
#: src/lib/ecore/ecore_getopt.c:1296 src/lib/ecore/ecore_getopt.c:1343
|
||||
#: src/lib/ecore/ecore_getopt.c:1463 src/lib/ecore/ecore_getopt.c:1504
|
||||
msgid "value has no pointer set.\n"
|
||||
msgstr "значение не имеет установленного указателя.\n"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1309
|
||||
#, c-format
|
||||
msgid "invalid choice \"%s\". Valid values are: "
|
||||
msgstr "недопустимый выбор \"%s\". Допустимыми значениями являются: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1337
|
||||
msgid "missing parameter to append.\n"
|
||||
msgstr "недостающий параметр для добавления.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1441
|
||||
msgid "could not parse value.\n"
|
||||
msgstr "не удалось разобрать значение.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1498
|
||||
msgid "missing parameter.\n"
|
||||
msgstr "отсутствует параметр\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1511
|
||||
msgid "missing callback function!\n"
|
||||
msgstr "отсутствует функция вызова (callback)\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1542
|
||||
msgid "no version was defined.\n"
|
||||
msgstr "версия не определена\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1559
|
||||
msgid "no copyright was defined.\n"
|
||||
msgstr "копирайт не определен\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1576
|
||||
msgid "no license was defined.\n"
|
||||
msgstr "лицензия не определена\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1666
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s, ignored.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция --%s, проигнорировано\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1706
|
||||
#, c-format
|
||||
msgid "ERROR: option --%s requires an argument!\n"
|
||||
msgstr "ОШИБКА: для опции --%s требуется указать аргумент!\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1748
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c, ignored.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция -%c, проигнорировано.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1793
|
||||
#, c-format
|
||||
msgid "ERROR: option -%c requires an argument!\n"
|
||||
msgstr "ОШИБКА: для опции -%c требуется указать аргумент!\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1888
|
||||
#, c-format
|
||||
msgid "ERROR: missing required positional argument %s.\n"
|
||||
msgstr "ОШИБКА: отсутствует необходимый позиционный аргумент %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: 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 "ОШИБКА: не предоставлен анализатор (parser).\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
||||
msgid "ERROR: no values provided.\n"
|
||||
msgstr "ОШИБКА: не предоставлены значения.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
||||
msgid "ERROR: no arguments provided.\n"
|
||||
msgstr "ОШИБКА: не предоставлены аргументы.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2081
|
||||
msgid "ERROR: invalid options found."
|
||||
msgstr "ОШИБКА: обнаружены недопустимые опции."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
||||
#, c-format
|
||||
msgid " See --%s.\n"
|
||||
msgstr " Смотри --%s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
||||
#, c-format
|
||||
msgid " See -%c.\n"
|
||||
msgstr " Смотри --%c.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2148
|
||||
msgid "ERROR: invalid positional arguments found."
|
||||
msgstr "ОШИБКА: найдены недопустимые позиционные аргументы."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2183
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect geometry value '%s'\n"
|
||||
msgstr "ОШИБКА: некорректное значение геометрии '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2201
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect size value '%s'\n"
|
||||
msgstr "ОШИБКА: некорректное значение размера '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:127
|
||||
msgid "Desktop"
|
||||
|
@ -223,7 +222,7 @@ msgstr "Шаблоны"
|
|||
|
||||
#: src/lib/efreet/efreet_base.c:153
|
||||
msgid "Public"
|
||||
msgstr "Открытый"
|
||||
msgstr "Общий каталог"
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:162
|
||||
msgid "Documents"
|
||||
|
@ -250,8 +249,9 @@ msgid "Title"
|
|||
msgstr "Заголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:415
|
||||
#, fuzzy
|
||||
msgid "Subtitle"
|
||||
msgstr "Подзаголовок"
|
||||
msgstr "Заголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:966
|
||||
msgid "Back"
|
||||
|
@ -263,7 +263,7 @@ msgstr "Вверх"
|
|||
|
||||
#: src/lib/elementary/elc_fileselector.c:1769
|
||||
msgid "Home"
|
||||
msgstr "Главная"
|
||||
msgstr "Дом"
|
||||
|
||||
#: src/lib/elementary/elc_fileselector.c:1787
|
||||
msgid "Search"
|
||||
|
@ -281,16 +281,16 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Отключено"
|
||||
|
||||
#~ msgid "multi button entry label"
|
||||
#~ msgstr "метка многокнопочного элемента"
|
||||
#~ msgstr "метка многокопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry item"
|
||||
#~ msgstr "кнопка многокнопочного элемента"
|
||||
#~ msgstr "кнопка многокопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry"
|
||||
#~ msgstr "многокнопочный элемент"
|
||||
|
||||
#~ msgid "Next"
|
||||
#~ msgstr "Далее"
|
||||
#~ msgstr "Вперёд"
|
||||
|
||||
#~ msgid "Popup Title"
|
||||
#~ msgstr "Заголовок всплывающего окна"
|
||||
|
@ -368,7 +368,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "элемент выбора дня"
|
||||
|
||||
#~ msgid "diskselector item"
|
||||
#~ msgstr "элемент выбора диска"
|
||||
#~ msgstr "элемент диска выбора"
|
||||
|
||||
#~ msgid "Cut"
|
||||
#~ msgstr "Вырезать"
|
||||
|
@ -383,7 +383,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Выбрать"
|
||||
|
||||
#~ msgid "Entry"
|
||||
#~ msgstr "Ввод"
|
||||
#~ msgstr "Запись"
|
||||
|
||||
#~ msgid "Index"
|
||||
#~ msgstr "Алфавитный указатель"
|
||||
|
@ -419,7 +419,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Выбрано"
|
||||
|
||||
#~ msgid "State: Unselected"
|
||||
#~ msgstr "Состояние: Не выбрано"
|
||||
#~ msgstr "Состояние: Невыбрано"
|
||||
|
||||
#~ msgid "Segment Control Item"
|
||||
#~ msgstr "Элемент сегментного элемента управления"
|
||||
|
@ -438,7 +438,7 @@ msgstr "Отмена"
|
|||
|
||||
#, fuzzy
|
||||
#~ msgid "spinner text"
|
||||
#~ msgstr "текст счётчика"
|
||||
#~ msgstr "счётчик"
|
||||
|
||||
#~ msgid "Selected"
|
||||
#~ msgstr "Выбрано"
|
||||
|
@ -450,7 +450,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "С меню"
|
||||
|
||||
#~ msgid "Unselected"
|
||||
#~ msgstr "Не выбраноы"
|
||||
#~ msgstr "Невыбрано"
|
||||
|
||||
#~ msgid "Toolbar Item"
|
||||
#~ msgstr "Элемент панели инструментов"
|
||||
|
|
|
@ -4151,7 +4151,7 @@ do_xifdef(cpp_reader * pfile, struct directive *keyword,
|
|||
int c;
|
||||
|
||||
/* 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;
|
||||
|
||||
pfile->no_macro_expand++;
|
||||
|
|
|
@ -43,9 +43,9 @@ if meson.is_cross_build()
|
|||
edje_depends = []
|
||||
else
|
||||
if sys_windows == true
|
||||
edje_cc_exe = [edje_cc]
|
||||
edje_cc_exe = [edje_cc.full_path()]
|
||||
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
|
||||
edje_depends = [edje_cc, epp, evas_engine_buffer_mod, embryo_cc]
|
||||
endif
|
||||
|
@ -97,7 +97,7 @@ if meson.is_cross_build()
|
|||
edje_codegen_path = _edje_codegen.path()
|
||||
edje_codegen_exe = [_edje_codegen]
|
||||
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
|
||||
|
||||
edje_pick = executable('edje_pick',
|
||||
|
|
|
@ -68,7 +68,7 @@ do
|
|||
if [ $? -ne 0 ]; then
|
||||
echo "Failed compiling eet file."
|
||||
echo "Press 'Return' to reopen the editor, or ^C to abort."
|
||||
read _dummy
|
||||
read
|
||||
else
|
||||
DONE=1
|
||||
fi
|
||||
|
|
|
@ -2029,7 +2029,7 @@ _status_config_etc(Evas_Object *win,
|
|||
elm_check_state_set(ck, elm_config_desktop_entry_get());
|
||||
|
||||
// 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());
|
||||
|
||||
// access
|
||||
|
@ -2455,8 +2455,7 @@ _status_config_icons(Evas_Object *win,
|
|||
ic = elm_icon_add(li);
|
||||
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,
|
||||
_icon_theme_sel,
|
||||
eina_stringshare_add(th->name.internal));
|
||||
_icon_theme_sel, th->name.internal);
|
||||
|
||||
if (!strcmp(th->name.internal, "hicolor"))
|
||||
def_it = list_it;
|
||||
|
@ -3376,7 +3375,7 @@ _profiles_list_unselect_cb(void *data EINA_UNUSED,
|
|||
Evas_Object *obj,
|
||||
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"),
|
||||
EINA_TRUE);
|
||||
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_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
|
||||
|
@ -4383,16 +4382,11 @@ _status_config_full(Evas_Object *win,
|
|||
"Audio", _cf_audio, win);
|
||||
elm_toolbar_item_append(tb, "preferences-profile",
|
||||
"Profiles", _cf_profiles, win);
|
||||
elm_toolbar_item_append(tb, "system-run",
|
||||
"Scrolling", _cf_scrolling, win);
|
||||
elm_toolbar_item_append(tb, "preferences-desktop",
|
||||
"Rendering", _cf_rendering, win);
|
||||
elm_toolbar_item_append(tb, "appointment-new",
|
||||
"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_toolbar_item_append(tb, NULL, "Scrolling", _cf_scrolling, win);
|
||||
elm_toolbar_item_append(tb, NULL, "Rendering", _cf_rendering, win);
|
||||
elm_toolbar_item_append(tb, NULL, "Caches", _cf_caches, win);
|
||||
elm_toolbar_item_append(tb, NULL, "Focus", _cf_focus, win);
|
||||
elm_toolbar_item_append(tb, NULL, "Etc", _cf_etc, win);
|
||||
|
||||
elm_box_pack_end(bx0, 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++)
|
||||
{
|
||||
|
|
|
@ -36,8 +36,7 @@ _group_1_create(Evas_Object *bx, const char *style)
|
|||
|
||||
// radio 1
|
||||
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);
|
||||
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_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);
|
||||
}
|
||||
|
|
|
@ -14,25 +14,17 @@ map = run_command('map_generate.sh').stdout()
|
|||
|
||||
efl_libs = configuration_data()
|
||||
efl_libs.set('EFL_MONO_LIBRARY_MAP', map)
|
||||
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
|
||||
efl_libs.set('EVIL_DL_MONO', 'dl')
|
||||
if sys_osx
|
||||
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
|
||||
efl_libs.set('LIBDL_DL_MONO', 'libdl.so')
|
||||
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
|
||||
endif
|
||||
|
||||
foreach mono_libs : mono_sublibs
|
||||
key = mono_libs[0].to_upper()+'_DL_MONO'
|
||||
if target_machine.system() == 'windows'
|
||||
efl_libs.set(key, 'lib' + mono_libs[0].to_lower() + '-' + version_major)
|
||||
else
|
||||
efl_libs.set(key, mono_libs[0].to_lower())
|
||||
endif
|
||||
efl_libs.set(key, mono_libs[0].to_lower())
|
||||
endforeach
|
||||
|
||||
configure_file(
|
||||
|
|
|
@ -17,13 +17,12 @@
|
|||
<!-- </PropertyGroup> -->
|
||||
<PropertyGroup>
|
||||
<DefineConstants>@EFL_BETA@</DefineConstants>
|
||||
<DefineConstants>@EFL_WIN32@</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="@BINDING_SRC@/efl_mono/*.cs" />
|
||||
<!-- 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@/eolian_mono/*.cs" />
|
||||
<Compile Include="@BINDING_SRC@/eldbus_mono/*.cs" />
|
||||
|
|
|
@ -13,8 +13,6 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#if !WIN32
|
||||
|
||||
using System;
|
||||
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
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if WIN32
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
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);
|
||||
|
||||
private static IntPtr dlsym(IntPtr handle, string symbol) => FunctionInterop.GetProcAddress(handle, symbol);
|
||||
|
||||
internal static IntPtr LoadFunctionPointer(IntPtr nativeLibraryHandle, string functionName) =>
|
||||
FunctionInterop.GetProcAddress(nativeLibraryHandle, functionName);
|
||||
private 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
|
||||
* limitations under the License.
|
||||
*/
|
||||
#if !WIN32
|
||||
|
||||
using System;
|
||||
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
|
||||
* limitations under the License.
|
||||
*/
|
||||
#if WIN32
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Efl.Eo
|
||||
{
|
||||
|
||||
internal partial class NativeModule
|
||||
internal class partial NativeModule
|
||||
{
|
||||
[DllImport(efl.Libs.Kernel32, EntryPoint = "LoadLibrary", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
private 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);
|
||||
[DllImport(efl.Libs.Kernel32, CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
internal static extern IntPtr LoadLibrary(string libFilename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -81,7 +81,7 @@ internal static class Globals
|
|||
efl_ref(IntPtr eo);
|
||||
internal delegate void
|
||||
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);
|
||||
internal delegate int
|
||||
efl_ref_count_delegate(IntPtr eo);
|
||||
|
|
|
@ -4,9 +4,11 @@ mono_files += files(
|
|||
'FunctionWrapper.cs',
|
||||
'NativeModule.cs',
|
||||
'EoWrapper.cs',
|
||||
'WrapperSupervisor.cs',
|
||||
'FunctionWrapper_Windows.cs',
|
||||
'NativeModule_Windows.cs',
|
||||
'FunctionWrapper_Unix.cs',
|
||||
'NativeModule_Unix.cs'
|
||||
'WrapperSupervisor.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'))
|
||||
|
||||
eolian_mono_gen_bin = executable('eolian_mono',
|
||||
|
|
|
@ -81,11 +81,6 @@ foreach lib : mono_sublibs
|
|||
package_name = lib[0].to_lower()
|
||||
eo_file_subdirs = get_variable(package_name + '_eo_subdirs')
|
||||
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')
|
||||
foreach eo_file_subdir : eo_file_subdirs
|
||||
|
@ -106,7 +101,7 @@ foreach lib : mono_sublibs
|
|||
input : join_paths(subdir_file_location, mono_gen_file),
|
||||
output : [mono_gen_file + '.cs'],
|
||||
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'),
|
||||
'-e', get_option('mono-examples-dir'), partial,
|
||||
'@INPUT@'])
|
||||
|
@ -216,22 +211,7 @@ if (get_option('dotnet'))
|
|||
# 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
|
||||
dotnet_major_version = dotnet_version.stdout().strip()[0].to_int()
|
||||
if dotnet_major_version == 8
|
||||
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
|
||||
if dotnet_major_version == 3
|
||||
dotnet_core_app_version = '3.0'
|
||||
dotnet_standard_version = '2.1'
|
||||
elif dotnet_major_version == 2
|
||||
|
@ -252,13 +232,6 @@ if (get_option('dotnet'))
|
|||
lib_csproj_conf_data.set('EFL_BETA', '')
|
||||
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',
|
||||
output: 'efl_sharp.csproj',
|
||||
configuration: lib_csproj_conf_data)
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
/ecore_exe_example
|
||||
/ecore_exe_example_child
|
||||
/ecore_fd_handler_example
|
||||
/ecore_fd_handler_gnutls_example
|
||||
/ecore_file_download_example
|
||||
/ecore_getopt_example
|
||||
/ecore_idler_example
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// Compile with:
|
||||
// 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 <sys/types.h>
|
||||
|
@ -28,7 +25,7 @@ int read_cb(void *data EINA_UNUSED, Eo *eo_obj, void *buf, int len)
|
|||
float *val = buf;
|
||||
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++)
|
||||
{
|
||||
|
@ -59,9 +56,9 @@ main(int argc, const char *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)
|
||||
{
|
||||
printf("error when creating ecore audio source.\n");
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// Compile with:
|
||||
// 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 <string.h>
|
||||
|
@ -12,7 +9,6 @@
|
|||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_Audio.h>
|
||||
#include <Eina.h>
|
||||
|
@ -34,19 +30,19 @@ handle_cmd(char *cmd, size_t bread)
|
|||
if (!out)
|
||||
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)
|
||||
{
|
||||
pos = ecore_audio_obj_in_seek(in, 0, SEEK_CUR);
|
||||
ecore_audio_obj_in_seek(in, 0, SEEK_CUR, &pos);
|
||||
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))
|
||||
pos = ecore_audio_obj_in_seek(in, 10, SEEK_CUR);
|
||||
ecore_audio_obj_in_seek(in, 10, SEEK_CUR, &pos);
|
||||
|
||||
min = pos / 60;
|
||||
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
length = ecore_audio_obj_in_length_get(in);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
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);
|
||||
|
||||
}
|
||||
|
@ -67,8 +63,8 @@ handle_cmd(char *cmd, size_t bread)
|
|||
{
|
||||
in = (Eo *)eina_list_data_get(inputs);
|
||||
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
length = ecore_audio_obj_in_length_get(in);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
ecore_audio_obj_in_length_get(in, &length);
|
||||
|
||||
printf("Start: %s (%0.2fs)\n", name, length);
|
||||
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);
|
||||
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
length = ecore_audio_obj_in_length_get(in);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
ecore_audio_obj_in_length_get(in, &length);
|
||||
|
||||
printf("Start: %s (%0.2fs)\n", name, length);
|
||||
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_Bool loop;
|
||||
loop = ecore_audio_obj_in_looped_get(in);
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
ecore_audio_obj_in_looped_get(in, &loop);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
|
||||
printf("%s song %s\n", !loop?"Looping":"Not looping", name);
|
||||
ecore_audio_obj_in_looped_set(in, !loop);
|
||||
|
@ -128,11 +124,11 @@ handle_cmd(char *cmd, size_t bread)
|
|||
double speed;
|
||||
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)
|
||||
speed += 0.01;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -141,11 +137,11 @@ handle_cmd(char *cmd, size_t bread)
|
|||
double speed;
|
||||
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)
|
||||
speed -= 0.01;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -153,9 +149,9 @@ handle_cmd(char *cmd, size_t bread)
|
|||
{
|
||||
EINA_LIST_FOREACH(out_inputs, input, in)
|
||||
{
|
||||
paused = ecore_audio_obj_paused_get(in);
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
length = ecore_audio_obj_in_remaining_get(in);
|
||||
ecore_audio_obj_paused_get(in, &paused);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
ecore_audio_obj_in_remaining_get(in, &length);
|
||||
printf("%s %s\n%0.2f remaining\n", !paused ? "Paused" : "Unpaused", name, length);
|
||||
ecore_audio_obj_paused_set(in, !paused);
|
||||
}
|
||||
|
@ -195,13 +191,12 @@ handle_input(void *data EINA_UNUSED, Ecore_Fd_Handler *handler)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
{
|
||||
const char *name;
|
||||
Eina_Bool ret;
|
||||
|
||||
name = ecore_audio_obj_name_get(event->object);
|
||||
ecore_audio_obj_name_get(event->object, &name);
|
||||
printf("Done: %s\n", name);
|
||||
|
||||
inputs = eina_list_remove(inputs, event->object);
|
||||
|
@ -217,7 +212,7 @@ _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
|||
const char *name;
|
||||
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);
|
||||
ret = ecore_audio_obj_out_input_attach(out, in);
|
||||
if (!ret)
|
||||
|
@ -228,6 +223,8 @@ _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
|||
printf("Stream done\n");
|
||||
ecore_main_loop_quit();
|
||||
}
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -255,7 +252,7 @@ main(int argc, const char *argv[])
|
|||
{
|
||||
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)
|
||||
{
|
||||
printf("error when creating ecore audio source.\n");
|
||||
|
@ -279,7 +276,7 @@ main(int argc, const char *argv[])
|
|||
}
|
||||
else
|
||||
{
|
||||
in = efl_add_ref(ECORE_AUDIO_IN_SNDFILE_CLASS, NULL);
|
||||
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, NULL);
|
||||
if (!in)
|
||||
{
|
||||
printf("error when creating ecore audio source.\n");
|
||||
|
@ -294,7 +291,7 @@ main(int argc, const char *argv[])
|
|||
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);
|
||||
}
|
||||
|
||||
|
@ -305,12 +302,12 @@ main(int argc, const char *argv[])
|
|||
if (!in)
|
||||
return 1;
|
||||
|
||||
name = ecore_audio_obj_name_get(in);
|
||||
length = ecore_audio_obj_in_length_get(in);
|
||||
ecore_audio_obj_name_get(in, &name);
|
||||
ecore_audio_obj_in_length_get(in, &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);
|
||||
if (!ret)
|
||||
printf("Could not attach input %s\n", name);
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// Compile with:
|
||||
// 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 <libgen.h>
|
||||
|
@ -18,20 +15,21 @@
|
|||
double volume = 1;
|
||||
Eina_List *inputs = NULL;
|
||||
|
||||
static void
|
||||
_play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
{
|
||||
const char *name;
|
||||
Eo *out;
|
||||
|
||||
name = ecore_audio_obj_name_get(event->object);
|
||||
ecore_audio_obj_name_get(event->object, &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(out);
|
||||
|
||||
ecore_main_loop_quit();
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -51,7 +49,7 @@ main(int argc, char *argv[])
|
|||
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]));
|
||||
ret = ecore_audio_obj_source_set(in, argv[1]);
|
||||
if (!ret) {
|
||||
|
@ -60,9 +58,9 @@ main(int argc, char *argv[])
|
|||
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]);
|
||||
if (!ret) {
|
||||
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'
|
||||
endif
|
||||
|
||||
gnutls = dependency('gnutls', required : false)
|
||||
if gnutls.found()
|
||||
examples += ['ecore_fd_handler_gnutls_example']
|
||||
endif
|
||||
|
||||
foreach example : examples
|
||||
executable(example, example + '.c', dependencies: [eina, ecore, ecore_file])
|
||||
executable(example, example + '.c', dependencies: [eina, ecore, ecore_file, gnutls])
|
||||
endforeach
|
||||
|
||||
if get_option('gstreamer') == true
|
||||
|
@ -34,9 +39,9 @@ endif
|
|||
|
||||
|
||||
examples = [
|
||||
'ecore_audio_custom',
|
||||
'ecore_audio_playback',
|
||||
'ecore_audio_to_ogg',
|
||||
# 'ecore_audio_custom',
|
||||
# 'ecore_audio_playback',
|
||||
# 'ecore_audio_to_ogg',
|
||||
]
|
||||
|
||||
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"
|
||||
msgstr "Loading..."
|
||||
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: UTF-8\n"
|
||||
|
||||
msgid "LOADING"
|
||||
msgstr "लोड हो रहा है..."
|
||||
|
||||
|
|
|
@ -33,14 +33,6 @@ struct _ecore_exe_dead_exe
|
|||
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_DEL = 0;
|
||||
EAPI int ECORE_EXE_EVENT_DATA = 0;
|
||||
|
@ -346,21 +338,6 @@ ecore_exe_hup(Ecore_Exe *obj)
|
|||
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_DEL = 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_DATA,
|
||||
ECORE_EXE_EVENT_ERROR);
|
||||
|
||||
#ifdef _WIN32
|
||||
if (_ecore_exe_win32_job)
|
||||
CloseHandle(_ecore_exe_win32_job);
|
||||
#endif
|
||||
}
|
||||
|
||||
Ecore_Exe *
|
||||
|
|
|
@ -133,10 +133,6 @@ struct _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_DEL;
|
||||
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;
|
||||
}
|
||||
|
||||
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).
|
||||
* 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.revents = 0;
|
||||
DBG("adding gpoll on %d %08x", fdh->fd, fdh->gfd.events);
|
||||
if (ecore_glib_source)
|
||||
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);
|
||||
g_source_add_poll(ecore_glib_source, &fdh->gfd);
|
||||
#endif
|
||||
}
|
||||
return r;
|
||||
|
@ -943,6 +939,29 @@ quit:
|
|||
static void
|
||||
_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)
|
||||
{
|
||||
#ifdef HAVE_LIBUV
|
||||
|
@ -1053,30 +1072,6 @@ _ecore_main_loop_setup(Eo *obj, Efl_Loop_Data *pd)
|
|||
}
|
||||
#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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
* @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.
|
||||
*/
|
||||
ECORE_CON_API int ecore_con_ssl_available_get(void);
|
||||
|
|
|
@ -165,7 +165,9 @@ ecore_con_shutdown(void)
|
|||
ECORE_CON_API int
|
||||
ecore_con_ssl_available_get(void)
|
||||
{
|
||||
#ifdef HAVE_OPENSSL
|
||||
#if HAVE_GNUTLS
|
||||
return 1;
|
||||
#elif HAVE_OPENSSL
|
||||
return 2;
|
||||
#else
|
||||
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);
|
||||
|
||||
#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
|
||||
# include "efl_net_ssl_conn-none.c"
|
||||
#include "efl_net_ssl_conn-none.c"
|
||||
#endif
|
||||
|
||||
#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
|
||||
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_data(b, NULL);
|
||||
BIO_set_flags(b, 0);
|
||||
|
@ -44,7 +44,7 @@ static int
|
|||
efl_net_socket_bio_destroy(BIO *b)
|
||||
{
|
||||
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_data(b, NULL);
|
||||
BIO_set_flags(b, 0);
|
||||
|
@ -63,7 +63,7 @@ efl_net_socket_bio_read(BIO *b, char *buf, int len)
|
|||
.mem = buf,
|
||||
.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);
|
||||
#else
|
||||
Eo *sock = b->ptr;
|
||||
|
@ -99,7 +99,7 @@ efl_net_socket_bio_write(BIO *b, const char *buf, int len)
|
|||
.mem = buf,
|
||||
.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);
|
||||
#else
|
||||
Eo *sock = b->ptr;
|
||||
|
@ -146,7 +146,7 @@ efl_net_socket_bio_puts(BIO *b, const char *str)
|
|||
static BIO_METHOD *
|
||||
__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;
|
||||
|
||||
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());
|
||||
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);
|
||||
#else
|
||||
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);
|
||||
|
||||
#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
|
||||
# include "efl_net_ssl_ctx-none.c"
|
||||
#include "efl_net_ssl_ctx-none.c"
|
||||
#endif
|
||||
|
||||
#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;
|
||||
Ecore_Drm2_Plane *plane;
|
||||
Ecore_Drm2_Plane_State *pstate, *pstate_chosen = NULL;
|
||||
Ecore_Drm2_Plane_State *pstate;
|
||||
|
||||
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;
|
||||
|
||||
/* 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)
|
||||
{
|
||||
/* there are no size checks for an overlay plane */
|
||||
pstate_chosen = pstate;
|
||||
goto out;
|
||||
}
|
||||
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;
|
||||
|
||||
/* 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;
|
||||
|
||||
out:
|
||||
|
|
|
@ -22,6 +22,15 @@ static Eina_Module *_ecore_evas_vnc = NULL;
|
|||
# define ECORE_EVAS_ENGINE_NAME "module.so"
|
||||
#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 *
|
||||
_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,
|
||||
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;
|
||||
|
||||
|
|
|
@ -606,19 +606,111 @@ ecore_file_dir_get(const char *file)
|
|||
EAPI Eina_Bool
|
||||
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
|
||||
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
|
||||
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 *
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue