forked from enlightenment/enlightenment
Compare commits
131 Commits
master
...
enlightenm
Author | SHA1 | Date |
---|---|---|
Simon Lees | 74e604ba41 | |
Simon Lees | b3e44793c3 | |
Simon Lees | 52030b2fc1 | |
Chris Michael | 5af9485c4f | |
Carsten Haitzler | ae64aabfa2 | |
Carsten Haitzler | 600a739f91 | |
Carsten Haitzler | f968b37095 | |
Carsten Haitzler | 5347935700 | |
Mike Blumenkrantz | 894dddfcfd | |
Daniel Zaoui | 74c372c0ff | |
Carsten Haitzler | 57b2988e7a | |
Carsten Haitzler | a451626cc6 | |
Carsten Haitzler | 3cb88fe76a | |
Carsten Haitzler | 2c52afb6f4 | |
Mike Blumenkrantz | 5cb6e1e8fa | |
Mike Blumenkrantz | bd3e00d463 | |
Derek Foreman | e047ed2638 | |
Carsten Haitzler | 5155856566 | |
Carsten Haitzler | ff17200996 | |
Carsten Haitzler | deb08178d7 | |
Carsten Haitzler | 65039f9c4c | |
Carsten Haitzler | 2583e560a2 | |
Carsten Haitzler | 8b129bab79 | |
maxerba | 46d2f7a6e5 | |
Carsten Haitzler | 5e07f6815c | |
Chris Michael | 25c2f3ab5c | |
Carsten Haitzler | eb2bdeb443 | |
Carsten Haitzler | 781f4eb70b | |
Al Poole | 04c8ec9c39 | |
Derek Foreman | 768e64bd2f | |
Derek Foreman | 14c04b8777 | |
Derek Foreman | b88d080742 | |
Derek Foreman | 34c28af7dc | |
Alastair Poole | 6a1f91ae0b | |
Simon Lees | 52713ce0db | |
Simon Lees | cd4c2cee3f | |
Carsten Haitzler | 2a0f90dab3 | |
Carsten Haitzler | 3bdcb7a0c2 | |
Carsten Haitzler | 8b03df8b30 | |
Carsten Haitzler | 71d481b4c4 | |
Carsten Haitzler | 0d9a763165 | |
Derek Foreman | 3c5b541385 | |
Simon Lees | 256236eba3 | |
Simon Lees | ffec2e91e7 | |
Carsten Haitzler | 1296061c19 | |
Carsten Haitzler | eba3bec170 | |
Mike Blumenkrantz | 348e57123c | |
Carsten Haitzler | 3c4e25360e | |
Al Poole | e8132e8723 | |
Al Poole | da19c3cd6a | |
Mike Blumenkrantz | 140f176d8e | |
Mike Blumenkrantz | 553b8063a5 | |
Mike Blumenkrantz | c43113381c | |
Thanatermesis | c35aaefc1f | |
Mike Blumenkrantz | 2e0e3a356b | |
Mike Blumenkrantz | a6d1933823 | |
Mike Blumenkrantz | 0c0d002f94 | |
Mike Blumenkrantz | 829f7ee29d | |
Stephen Houston | abb761b784 | |
Mike Blumenkrantz | c93e8f93a1 | |
Andy Williams | 52319a6feb | |
Marcel Hollerbach | 461872e669 | |
Mike Blumenkrantz | 7b55e20ace | |
Mike Blumenkrantz | a95e49fe6b | |
Mike Blumenkrantz | afe31ab8d5 | |
Mike Blumenkrantz | a0985dc6c0 | |
Mike Blumenkrantz | 58e81cdd25 | |
Mike Blumenkrantz | 9bd0b71f46 | |
Mike Blumenkrantz | 22dd7fef86 | |
Mike Blumenkrantz | 110835d212 | |
Mike Blumenkrantz | b1eff9a96b | |
Mike Blumenkrantz | 727b564199 | |
Mike Blumenkrantz | cafe1976fb | |
Mike Blumenkrantz | ba11728905 | |
Mike Blumenkrantz | acf6198252 | |
Carsten Haitzler | ef98964bc9 | |
Mike Blumenkrantz | cd74104405 | |
Mike Blumenkrantz | 92d7f40486 | |
Mike Blumenkrantz | 083e1a34b4 | |
Mike Blumenkrantz | 9400e02493 | |
Mike Blumenkrantz | 4d0e4b1f8f | |
Mike Blumenkrantz | 8d8c9f69e0 | |
Mike Blumenkrantz | 96a67811a1 | |
Mike Blumenkrantz | 31e5559658 | |
Mike Blumenkrantz | f10e7ece19 | |
Ross Vandegrift | 67ad5c81a5 | |
Derek Foreman | 661ffe5233 | |
Al Poole | 7b6ba297d1 | |
Al Poole | 4f5598c62d | |
Al Poole | 2988791f95 | |
Chris Michael | b3af218542 | |
Chris Michael | b5db66ea56 | |
Carsten Haitzler | bb2ff3639e | |
Marcel Hollerbach | fc9e6b10b4 | |
Marcel Hollerbach | e23ac1044b | |
maxerba | 8301597011 | |
maxerba | e73999d7e6 | |
Marcel Hollerbach | dea31f7d66 | |
Marcel Hollerbach | f39b482ef1 | |
Chris Michael | 5926787184 | |
Chris Michael | 92b1fe6f4c | |
Chris Michael | 1ccf777bec | |
Carsten Haitzler | 23a91a4498 | |
Stefan Schmidt | 7edbdb2499 | |
Stefan Schmidt | 24bc67c914 | |
Stefan Schmidt | ba9309ee21 | |
Simon Lees | 70a269a896 | |
Simon Lees | f3e1f9c88e | |
Andy Williams | 8729f8b58e | |
Carsten Haitzler | d429cc3bba | |
Carsten Haitzler | e276b75b5d | |
Mike Blumenkrantz | 2f3d1473cf | |
Mike Blumenkrantz | 3fc4e337e7 | |
Mike Blumenkrantz | 7a9a4b0855 | |
Mike Blumenkrantz | 2a1c23ed4b | |
Mike Blumenkrantz | bbabdb11b2 | |
Mike Blumenkrantz | 2fbcb807aa | |
Mike Blumenkrantz | 185bdaf2a4 | |
Mike Blumenkrantz | 29ad9c85d9 | |
Mike Blumenkrantz | 2b2d2c00ad | |
Carsten Haitzler | b78cbb40ad | |
Carsten Haitzler | 24257c718a | |
maxerba | 94d937b848 | |
Marcel Hollerbach | d710cf5bb0 | |
Marcel Hollerbach | cc0ac5cf72 | |
Mike Blumenkrantz | 2e956cb089 | |
Mike Blumenkrantz | fc3f0dd4a9 | |
Mike Blumenkrantz | e4cf048112 | |
Mike Blumenkrantz | 88888e66ba | |
Mike Blumenkrantz | a5423c9aa6 | |
Mike Blumenkrantz | efa975eb4e |
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"project_id" : "enlightenment",
|
||||
"conduit_uri" : "https://phab.enlightenment.org/"
|
||||
"project_id" : "enlightenment-git",
|
||||
"projects" : "enlightenment-git",
|
||||
"conduit_uri" : "https://phab.enlightenment.org/",
|
||||
"phabricator.uri" : "https://phab.enlightenment.org/"
|
||||
}
|
||||
|
|
2
AUTHORS
2
AUTHORS
|
@ -60,4 +60,4 @@ Luis de Bethencourt (luisbg) <luis@debethencourt.com>
|
|||
bu5hm4n (Marcel Hollerbach) <marcel-hollerbach@t-online.de>
|
||||
simotek (Simon Lees) <simon@simotek.net>
|
||||
Derek Foreman <derekf@osg.samsung.com>
|
||||
netstar (Al Poole) <netstar@gmail.com>
|
||||
netstar (Alastair Poole) <netstar@gmail.com>
|
||||
|
|
179
NEWS
179
NEWS
|
@ -1,3 +1,182 @@
|
|||
Release 0.22.4:
|
||||
---------------------
|
||||
Alastair Poole (1):
|
||||
AUTHORS: use netstar's real name.
|
||||
e_ckpasswd_main: Fix build on OpenBSD.
|
||||
|
||||
Carsten Haitzler (17):
|
||||
e menus - when filtering for exe handle quotes, escapes etc.
|
||||
e mouse bindings - fix wheel conflict check to check only dir 0
|
||||
edge flip while dragging with alt - fix to work again
|
||||
efm - fill in some media icon blanks which lead to generic icons
|
||||
startup - fix management of timer pointer for startup timeout
|
||||
efm - dont add null icons to list ... fixes segv
|
||||
e pan/scrollframe - fix garbage pan values that happen temporarily
|
||||
e thumb - be consistent and use safe run for restarting thumbnailer
|
||||
compile again after efl change interface names...
|
||||
input method conf dialog - fix filtering of imc's to search path
|
||||
meson - fix dir_sysconf to be under the prefix as it was not
|
||||
emxier desktop - fix categories to match well known cat names
|
||||
mixer - fix exe handler del and handle to stop crashes after mixer run
|
||||
e randr - fix crash when no zones found
|
||||
e randr screen setup - fix disabling of scale checkbox
|
||||
e wl - fix e pixmap tracking to remove from both aliases and pixmaps
|
||||
e pixmap - follow on from previous commit to finally fix pixmap tracking
|
||||
|
||||
Christopher Michael (2):
|
||||
conf_randr: Use eina_stringshare_replace
|
||||
enlightenment: Ensure we have a valid menu comp object before calling
|
||||
|
||||
Daniel Zaoui (1):
|
||||
Battery: fix the battery status when some battery devices are not valid
|
||||
|
||||
Derek Foreman (5):
|
||||
Remove useless pixels_dirty_set from mirror_pixels_get
|
||||
Move alpha set for mirrors out of pixels_get callback
|
||||
Fix single frame broken render on wayland client opaque region change
|
||||
Fix recent typo in mirror object alpha setting
|
||||
compile against stable EFL again
|
||||
|
||||
Massimo Maiurana (1):
|
||||
Updating all po files
|
||||
|
||||
Mike Blumenkrantz (3):
|
||||
update arcconfig key:values for new phabricator api
|
||||
move config/ to data/config/
|
||||
avoid adding render updates for deleted clients after animation completes
|
||||
|
||||
Release 0.22.3:
|
||||
---------------------
|
||||
Carsten Haitzler (5):
|
||||
fix autofoo build to match e auth patch backport
|
||||
desklock - make it fail to lock on non-bsd platforms if no pam support
|
||||
e desklock pam error - go back to previous text
|
||||
move from data_home/apps/defaults.list to config_home/mimeapps.list
|
||||
build - make pam a requirement on non-bsd unless disabled
|
||||
|
||||
Derek Foreman (1):
|
||||
Revert no-longer required pulseaudio hack for wayland
|
||||
|
||||
Release 0.22.2:
|
||||
---------------------
|
||||
Al Poole (5):
|
||||
conf_theme: show appropriate background list.
|
||||
build: fix meson build on FreeBSD.
|
||||
luncher: fix slider on mouse scroll.
|
||||
sysinfo: fix cpuclock for BSD.
|
||||
sysinfo: fix linux build.
|
||||
|
||||
Andy Williams (1):
|
||||
Remove E_BITFIELD as it is not present on this branch
|
||||
|
||||
Carsten Haitzler (6):
|
||||
e client - fix initial placement of override redirect windows in x....
|
||||
e come client - actually set placed more generally...
|
||||
init anim - fix sudden vanish of init splash in some cases
|
||||
e auth - move all auth to child process only (e_ckpasswd).
|
||||
e systray/indicator protocol pixmap data fetch fix
|
||||
systray - fix sizing of tray so you can see the icons
|
||||
|
||||
Christopher Michael (5):
|
||||
conf-randr: No need to set this variable twice
|
||||
vkbd: Remove whitespace
|
||||
vkbd: Fix null pointer dereference
|
||||
wl-drm: get screen geometry after e_comp_wl_init is called
|
||||
wl-drm: sort screen modes and assign zone->output
|
||||
|
||||
Derek Foreman (1):
|
||||
Fix potential NULL pointer dereference
|
||||
|
||||
Marcel Hollerbach (5):
|
||||
libtool: uninstall: rm -f /home/simon/src/devel/enlightenment/enlightenment-0.22.2/_inst/lib64/enlightenment/modules/conf_shelves/linux-gnu-x86_64-0.22/modul meson: fix build
|
||||
meson: wl_drm now requires libdrm
|
||||
build: enable -lintl if we find it
|
||||
build: fix build on picky systems
|
||||
build: enter po subdir
|
||||
|
||||
Massimo Maiurana (2):
|
||||
Give to gettext correct options to make it able to run.
|
||||
Updating italian translation
|
||||
|
||||
Mike Blumenkrantz (31):
|
||||
simplify icon suffix detection in vkbd module
|
||||
refactor E_Storage finding for efm/eeze volumes in backend
|
||||
protect against null deref when emitting efm/eeze error messages
|
||||
print error when failing to unlink efm/eeze mount point after unmount
|
||||
protect against null deref when setting proxy vars in connman module
|
||||
make xwl data offer writing async
|
||||
use e_zone_desk_useful_geometry_get() for all client maximize geometry fetching
|
||||
unset E_Client->changes.pos when attempting to maximize a new re_manage client
|
||||
add a lot of null checks to wayland egl init
|
||||
sort gadgets alphabetically in gadget editor
|
||||
consider gadget ctxpopups as normal popups for callback purposes
|
||||
clear visible gadget popups when triggering a gadget action
|
||||
fix some crashes with start gadget deletion
|
||||
block gadget site layouts on moving gadgets which are not on the pointer site
|
||||
clamp large windows to desk's useful geometry if smart placement fails
|
||||
use normal emotion function to determine playability of e_thumb files
|
||||
add menu item for reporting bugs
|
||||
fix notification crashes when a callback isn't specified
|
||||
don't do x11 window grab for fps counter when running in wayland mode
|
||||
toggle x_fatal variable when xwayland crashes
|
||||
further protect against crashes when xwayland crashes
|
||||
print notifications to stderr if a notification handler doesn't exist
|
||||
resolve even more null derefs from string parsing in vkbd
|
||||
use the current pointer client for the xwayland drag client if owner is unmapped
|
||||
disable bounce for gadget bar scrollers
|
||||
use per-instance event handler for batman powersave eventing
|
||||
process comp object hide/show signals immediately during intercept
|
||||
do not add gadget editor pointer site to editor del_list
|
||||
always unset pass_events on desktop editor when it is shown
|
||||
fix luncher efreet event handling
|
||||
remove adding theme extension for "default" theme on startup
|
||||
|
||||
Ross Vandegrift (1):
|
||||
clean up .desktop files and misc typos
|
||||
|
||||
Samuel F. Baggen (1):
|
||||
Fix for window borders to accept edje icons
|
||||
|
||||
Stefan Schmidt (3):
|
||||
README: no need to mention elementary as dependency
|
||||
meson: make it possible to set the path for eldbus-codegen
|
||||
meson: make it possible to set the path for eet
|
||||
|
||||
Stephen Houston (1):
|
||||
Luncher: Add a timeout for mousing out when preview already exists. Update preview on deskswitch.
|
||||
|
||||
Release 0.22.1:
|
||||
---------------------
|
||||
Carsten Haitzler (4):
|
||||
e sys - frix warning for less noise
|
||||
hits: silence warnings about possible null string for strcmp
|
||||
fix mouse hangs after unblank
|
||||
music-control - install properly with meson build with icon
|
||||
|
||||
Marcel Hollerbach (2):
|
||||
meson: make those scripts executable
|
||||
meson: this version is enough for the things we use in the moment
|
||||
|
||||
Massimo Maiurana (1):
|
||||
Adding danish strings to desktop files
|
||||
|
||||
Mike Blumenkrantz (15):
|
||||
create wl output resource when running in wl nested
|
||||
unset wayland cursor for all pointers when running nested in wl
|
||||
show internal pointer cursor whenever resetting to internal cursor
|
||||
make wl_pointer cursor handling state-based to correctly handle cursor visuals
|
||||
update README with meson instructions
|
||||
check meson module option state before executing subdir
|
||||
improve meson build module disabling
|
||||
add field width limits to all fscanf params in e_intlc.
|
||||
destroy luncher iconify provider on gadget delete
|
||||
do not add iconify provider for luncher when creating a demo gadget
|
||||
requeue client for render if show animation completes and damages exist
|
||||
avoid performing client rescales during shutdown
|
||||
prevent double shutdown of x11 compositor in xwayland mode
|
||||
always emit E_EVENT_COMP_OBJECT_ADD events
|
||||
use last client from E_Exec_Instance list when updating luncher popups
|
||||
|
||||
Release 0.22.0:
|
||||
---------------------
|
||||
Highlights:
|
||||
|
|
18
README
18
README
|
@ -1,12 +1,12 @@
|
|||
Please report bugs and send patches to phab.enlightenment.org
|
||||
|
||||
Enlightenment 0.19.0
|
||||
Enlightenment
|
||||
|
||||
Requirements:
|
||||
-------------
|
||||
|
||||
Must:
|
||||
efl elementary
|
||||
efl
|
||||
libc libm libX11 libXext
|
||||
xcb xcb-shape xcb-keysyms
|
||||
|
||||
|
@ -14,12 +14,18 @@ Heavily suggested:
|
|||
evas_generic_loaders (all loaders)
|
||||
|
||||
NOTE: Users of DR16 will need to rename the $prefix/bin/enlightenment
|
||||
file prior to installing DR19 or it will be overwritten.
|
||||
file prior to installing this release or it will be overwritten.
|
||||
|
||||
You can also use the configure --prefix option to put enlightenment in a separate tree
|
||||
of its own (recommended) like:
|
||||
MESON BUILD:
|
||||
meson . build
|
||||
optional:
|
||||
mesonconf --options OR meson configure --options
|
||||
|
||||
./configure --prefix=/usr/local/e19
|
||||
cd build && sudo ninja install
|
||||
|
||||
AUTOTOOLS BUILD:
|
||||
./configure --prefix=/usr/local/e
|
||||
sudo make install
|
||||
|
||||
You will, as usual, need to add the subsequent bin dir to your $PATH etc.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ foreach cd: src
|
|||
custom_target(' '.join(['config_dist', dir, cd]),
|
||||
input : cd + '.src',
|
||||
output : cd + '.cfg',
|
||||
command : [eet, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
command : [eet_cmd, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
install : true,
|
||||
install_dir: join_paths(dir_config, dir)
|
||||
)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Default
|
||||
Name[ab]=默认
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
dir_config = join_paths(dir_data, 'enlightenment/data/config')
|
||||
|
||||
eet = find_program('eet')
|
||||
gen_eet = generator(eet,
|
||||
output : '@BASENAME@.cfg',
|
||||
arguments: ['-e', '@OUTPUT@', 'config', '@INPUT@', '1'])
|
||||
eet_cmd = get_option('eet')
|
||||
if eet_cmd == ''
|
||||
eet_cmd = join_paths(dep_eet.get_pkgconfig_variable('prefix'),
|
||||
'bin', 'eet')
|
||||
endif
|
||||
|
||||
custom_target('profile.src',
|
||||
input : 'profile.src',
|
||||
command : [eet, '-i', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
command : [eet_cmd, '-i', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
output : ['profile.cfg'],
|
||||
install : true,
|
||||
install_dir: dir_config
|
||||
|
|
|
@ -12,7 +12,7 @@ foreach cd: src
|
|||
custom_target(' '.join(['config_dist', dir, cd]),
|
||||
input : cd + '.src',
|
||||
output : cd + '.cfg',
|
||||
command : [eet, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
command : [eet_cmd, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
install : true,
|
||||
install_dir: join_paths(dir_config, dir)
|
||||
)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Mobile
|
||||
Name[ca]=Mòbil
|
||||
|
|
|
@ -18,7 +18,7 @@ foreach cd: src
|
|||
custom_target(' '.join(['config_dist', dir, cd]),
|
||||
input : cd + '.src',
|
||||
output : cd + '.cfg',
|
||||
command : [eet, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
command : [eet_cmd, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
install : true,
|
||||
install_dir: join_paths(dir_config, dir)
|
||||
)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Computer (Standard Enlightenment)
|
||||
Name[ca]=Ordinador (Enlightenment estàndard)
|
||||
|
|
|
@ -19,7 +19,7 @@ foreach cd: src
|
|||
custom_target(' '.join(['config_dist', dir, cd]),
|
||||
input : cd + '.src',
|
||||
output : cd + '.cfg',
|
||||
command : [eet, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
command : [eet_cmd, '-e', '@OUTPUT@', 'config', '@INPUT@', '1'],
|
||||
install : true,
|
||||
install_dir: join_paths(dir_config, dir)
|
||||
)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Tiling (Standard Enlightenment)
|
||||
Name[ca]=Mosaic (Standard Enlightenment)
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
|
||||
m4_define([v_maj], [0])
|
||||
m4_define([v_min], [22])
|
||||
m4_define([v_mic], [0])
|
||||
m4_define([v_mic], [4])
|
||||
m4_define([v_rev], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl
|
||||
##-- When released, remove the dnl on the below line
|
||||
m4_undefine([v_rev])
|
||||
m4_define([relname], [0.22.0])
|
||||
m4_define([relname], [0.22.4])
|
||||
##-- When doing snapshots - change soname. remove dnl on below line
|
||||
m4_define([relname], [0.22])
|
||||
dnl m4_define([v_rel], [-release relname])
|
||||
|
@ -116,6 +116,8 @@ fi
|
|||
|
||||
AC_SUBST([fnmatch_libs])
|
||||
|
||||
CKPASSWD_LIBS=""
|
||||
|
||||
have_pam=no
|
||||
AC_ARG_ENABLE(pam,
|
||||
AS_HELP_STRING([--enable-pam], [enable PAM support @<:@default=detect@:>@]),
|
||||
|
@ -125,6 +127,7 @@ AC_ARG_ENABLE(pam,
|
|||
if test "x$want_pam" != "xno" ; then
|
||||
AC_CHECK_HEADERS(security/pam_appl.h, [
|
||||
LIBS="$LIBS -lpam"
|
||||
CKPASSWD_LIBS="$CKPASSWD_LIBS -lpam"
|
||||
have_pam=yes
|
||||
AC_DEFINE(HAVE_PAM, 1, [PAM Authentication Support])])
|
||||
if test "x$want_pam$have_pam" = "xyesno" ; then
|
||||
|
@ -1029,6 +1032,7 @@ SUID_CFLAGS=
|
|||
SUID_LDFLAGS=
|
||||
case "$host_os" in
|
||||
freebsd*|pcbsd*)
|
||||
CKPASSWD_LIBS="$CKPASSWD_LIBS -lcrypt"
|
||||
;;
|
||||
*)
|
||||
if test -n "$GCC"; then
|
||||
|
@ -1051,6 +1055,7 @@ case "$host_os" in
|
|||
fi
|
||||
;;
|
||||
esac
|
||||
AC_SUBST([CKPASSWD_LIBS])
|
||||
AC_SUBST([SUID_CFLAGS])
|
||||
AC_SUBST([SUID_LDFLAGS])
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Application
|
||||
Name=Enlightenment Askpass
|
||||
Comment=Enlightenment Password Request
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Application
|
||||
Name=Enlightenment File Manager
|
||||
Name[ca]=Gestor d'arxius Enlightenment
|
||||
Name[da]=Enlightenment-filhåndtering
|
||||
Name[de]=Enlightenment-Dateiverwaltung
|
||||
Name[eo]=Dosieradministrilo de Enlightenment
|
||||
Name[es]=Administrador de archivos de Enlightenment
|
||||
|
@ -21,6 +21,7 @@ Name[sr]=Управник датотека Просвећења
|
|||
Name[tr]=Enlightenment Dosya Yöneticisi
|
||||
Comment=File Manager provided by Enlightenment
|
||||
Comment[ca]=Gestor d'arxius proveït per Enlightenment
|
||||
Comment[da]=Filhåndtering leveret af Enlightenment
|
||||
Comment[de]=Die Dateiverwaltung bereitgestellt von Enlightenment
|
||||
Comment[eo]=La dosieradministrilo provizita de Enlightenment
|
||||
Comment[es]=El administrador de ficheros proporcionado por Enlightenment
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Desktop
|
||||
Name[ca]=Escriptori
|
||||
Name[da]=Skrivebord
|
||||
Name[de]=Schreibtisch
|
||||
Name[el]=Επιφάνεια Εργασίας
|
||||
Name[eo]=Labortablo
|
||||
|
@ -20,6 +20,7 @@ Name[sr]=Радна површ
|
|||
Name[tr]=Masaüstü
|
||||
Comment=Files on your Desktop
|
||||
Comment[ca]=Fitxers a l'escriptori
|
||||
Comment[da]=Filer på dit skrivebord
|
||||
Comment[de]=Dateien auf dem Schreibtisch
|
||||
Comment[eo]=Dosieroj sur via labortablo
|
||||
Comment[es]=Los archivos en su escritorio
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Home
|
||||
Name[ca]=Carpeta personal
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Root
|
||||
Name[ca]=Arrel
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Link
|
||||
Name=Temp
|
||||
Name[ca]=Temp.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Application
|
||||
Name=Enlightenment
|
||||
Name[ca]=Enlightenment
|
||||
|
@ -18,6 +17,7 @@ Name[sr]=Просвећење
|
|||
Name[tr]=Enlightenment
|
||||
Comment=Log in using Enlightenment (Version @VERSION@)
|
||||
Comment[ca]=Iniciar sessió amb Enlightenment (Versió @VERSION@)
|
||||
Comment[da]=Log ind med Enlightenment (Version @VERSION@)
|
||||
Comment[de]=Anmelden und Enlightenment verwenden (Version @VERSION@)
|
||||
Comment[el]=Είσοδος με το Enlightenment (Έκδοση @VERSION@)
|
||||
Comment[eo]=Ensaluti pere de Enlightenment (Versio @VERSION@)
|
||||
|
@ -35,5 +35,4 @@ Comment[tr]=Enlightenment kullanarak giriş yaın (Version @VERSION@)
|
|||
Icon=@prefix@/share/enlightenment/data/images/enlightenment.png
|
||||
TryExec=@prefix@/bin/enlightenment_start
|
||||
Exec=@prefix@/bin/enlightenment_start
|
||||
Type=Application
|
||||
DesktopNames=Enlightenment
|
||||
|
|
24
meson.build
24
meson.build
|
@ -1,9 +1,9 @@
|
|||
##### project
|
||||
project('enlightenment', 'c',
|
||||
version : '0.22.0',
|
||||
version : '0.22.4',
|
||||
license : 'BSD 2 clause',
|
||||
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.40.0')
|
||||
meson_version : '>= 0.39.0')
|
||||
|
||||
##### convenience variables for later
|
||||
proj = meson.project_name()
|
||||
|
@ -47,6 +47,10 @@ dir_module_e = join_paths(dir_lib, proj, 'modules')
|
|||
dir_util_e = join_paths(dir_lib, proj, 'utils')
|
||||
dir_pc = join_paths(dir_data, 'pkgconfig')
|
||||
|
||||
if dir_sysconf == 'etc'
|
||||
dir_sysconf = join_paths(dir_prefix, dir_sysconf)
|
||||
endif
|
||||
|
||||
suid_exes = []
|
||||
|
||||
pkgconfig = import('pkgconfig')
|
||||
|
@ -84,9 +88,7 @@ config_h.set('_TANDEM_SOURCE' , '1')
|
|||
config_h.set('__EXTENSIONS__' , '1')
|
||||
config_h.set('E_RELEASE_BUILD' , '1')
|
||||
|
||||
if get_option('nls') == true
|
||||
subdir('po')
|
||||
endif
|
||||
subdir('po')
|
||||
|
||||
darwin = host_machine.system().startswith('darwin')
|
||||
if darwin == true
|
||||
|
@ -193,6 +195,10 @@ if get_option('pam') == true
|
|||
if cc.has_header('security/pam_appl.h')
|
||||
config_h.set('HAVE_PAM', '1')
|
||||
dep_pam = cc.find_library('pam', required: true)
|
||||
else
|
||||
if openbsd == false and freebsd == false
|
||||
error('PAM is not disabled and not found on non-free+open BSD platforms')
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
@ -213,7 +219,7 @@ if get_option('systemd') == true
|
|||
endif
|
||||
endif
|
||||
|
||||
if cc.has_function('eeze_disk_function', dependencies: dependency('eeze')) == true
|
||||
if host_os.startswith('linux') and cc.has_function('eeze_disk_function', dependencies: dependency('eeze')) == true
|
||||
config_h.set('HAVE_EEZE_MOUNT', '1')
|
||||
eeze_mount = true
|
||||
endif
|
||||
|
@ -318,7 +324,11 @@ if dep_xkeyboard_config.found() == true
|
|||
config_h.set_quoted('XKB_BASE', dep_xkeyboard_config.get_pkgconfig_variable('xkb_base'))
|
||||
endif
|
||||
|
||||
eldbus_codegen = find_program('eldbus-codegen')
|
||||
eldbus_codegen_cmd = get_option('eldbus-codegen')
|
||||
if eldbus_codegen_cmd == ''
|
||||
eldbus_codegen_cmd = join_paths(dep_eldbus.get_pkgconfig_variable('prefix'),
|
||||
'bin', 'eldbus-codegen')
|
||||
endif
|
||||
|
||||
requires_e = []
|
||||
|
||||
|
|
|
@ -19,6 +19,14 @@ option('edje-cc',
|
|||
type : 'string',
|
||||
description: 'A path to a edje_cc. Defaults to system edje_cc')
|
||||
|
||||
option('eldbus-codegen',
|
||||
type : 'string',
|
||||
description: 'A path to a eldbus-codegen. Defaults to system eldbus-codegen')
|
||||
|
||||
option('eet',
|
||||
type : 'string',
|
||||
description: 'A path to a eet. Defaults to system eet')
|
||||
|
||||
option('pam',
|
||||
type: 'boolean',
|
||||
value: true,
|
||||
|
|
3711
po/fr_CH.po
3711
po/fr_CH.po
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,18 @@
|
|||
dep_intl = []
|
||||
|
||||
if get_option('nls')
|
||||
i18n = import('i18n')
|
||||
i18n.gettext('enlightenment')
|
||||
i18n.gettext('enlightenment',
|
||||
args: [
|
||||
'--keyword=_',
|
||||
'--keyword=d_:1',
|
||||
'--keyword=P_:1,2',
|
||||
'--keyword=dP_:1,2',
|
||||
'--keyword=N_',
|
||||
'--keyword=NP_:1,2',
|
||||
'--from-code=UTF-8',
|
||||
'--foreign-user'
|
||||
])
|
||||
config_h.set('HAVE_GETTEXT', '1')
|
||||
dep_intl = cc.find_library('intl', required : false)
|
||||
endif
|
||||
|
|
3741
po/pt_BR.po
3741
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
3690
po/zh_CN.po
3690
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
3660
po/zh_TW.po
3660
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
|
@ -54,9 +54,7 @@ src/bin/enlightenment_elm_cfgtool \
|
|||
src/bin/enlightenment_static_grabber \
|
||||
src/bin/enlightenment_alert
|
||||
|
||||
if HAVE_FREEBSD
|
||||
internal_bin_PROGRAMS += src/bin/enlightenment_ckpasswd
|
||||
endif
|
||||
|
||||
ENLIGHTENMENTHEADERS = \
|
||||
src/bin/efx/e_Efx.h \
|
||||
|
@ -530,13 +528,11 @@ src/bin/e_backlight_main.c
|
|||
src_bin_enlightenment_backlight_CPPFLAGS = @SUID_CFLAGS@ @EEZE_CFLAGS@
|
||||
src_bin_enlightenment_backlight_LDADD = @SUID_LDFLAGS@ @EEZE_LIBS@
|
||||
|
||||
if HAVE_FREEBSD
|
||||
src_bin_enlightenment_ckpasswd_SOURCES = \
|
||||
src/bin/e_ckpasswd_main.c
|
||||
|
||||
src_bin_enlightenment_ckpasswd_CPPFLAGS = @SUID_CFLAGS@
|
||||
src_bin_enlightenment_ckpasswd_LDADD = @SUID_LDFLAGS@ -lcrypt
|
||||
endif
|
||||
src_bin_enlightenment_ckpasswd_LDADD = @SUID_LDFLAGS@ @CKPASSWD_LIBS@
|
||||
|
||||
src_bin_enlightenment_alert_SOURCES = \
|
||||
src/bin/e_alert_main.c
|
||||
|
@ -568,9 +564,7 @@ setuid_root_mode = a=rx,u+xs
|
|||
enlightenment-sys-install-data-hook:
|
||||
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_sys$(EXEEXT) || true
|
||||
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_backlight$(EXEEXT) || true
|
||||
if HAVE_FREEBSD
|
||||
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_ckpasswd$(EXEEXT) || true
|
||||
endif
|
||||
installed_headersdir = $(prefix)/include/enlightenment
|
||||
installed_headers_DATA = $(ENLIGHTENMENTHEADERS) src/bin/e_fm_shared_types.h
|
||||
INSTALL_DATA_HOOKS += enlightenment-sys-install-data-hook
|
||||
|
|
234
src/bin/e_auth.c
234
src/bin/e_auth.c
|
@ -1,137 +1,6 @@
|
|||
#include "e.h"
|
||||
|
||||
#if defined(HAVE_PAM) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
||||
# include <security/pam_appl.h>
|
||||
# include <pwd.h>
|
||||
|
||||
|
||||
typedef struct E_Auth
|
||||
{
|
||||
struct
|
||||
{
|
||||
struct pam_conv conv;
|
||||
pam_handle_t *handle;
|
||||
} pam;
|
||||
|
||||
char user[4096];
|
||||
char passwd[4096];
|
||||
} E_Auth;
|
||||
|
||||
static pid_t _e_auth_child_pid = -1;
|
||||
|
||||
static char *
|
||||
_auth_auth_get_current_user(void)
|
||||
{
|
||||
char *user;
|
||||
struct passwd *pwent = NULL;
|
||||
|
||||
pwent = getpwuid(getuid());
|
||||
if (!pwent) return NULL;
|
||||
user = strdup(pwent->pw_name);
|
||||
return user;
|
||||
}
|
||||
|
||||
static int
|
||||
_auth_auth_pam_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr)
|
||||
{
|
||||
int replies = 0;
|
||||
E_Auth *da = (E_Auth *)appdata_ptr;
|
||||
struct pam_response *reply = NULL;
|
||||
|
||||
reply = (struct pam_response *)malloc(sizeof(struct pam_response) * num_msg);
|
||||
|
||||
if (!reply) return PAM_CONV_ERR;
|
||||
|
||||
for (replies = 0; replies < num_msg; replies++)
|
||||
{
|
||||
switch (msg[replies]->msg_style)
|
||||
{
|
||||
case PAM_PROMPT_ECHO_ON:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = strdup(da->user);
|
||||
break;
|
||||
|
||||
case PAM_PROMPT_ECHO_OFF:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = strdup(da->passwd);
|
||||
break;
|
||||
|
||||
case PAM_ERROR_MSG:
|
||||
case PAM_TEXT_INFO:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
free(reply);
|
||||
return PAM_CONV_ERR;
|
||||
}
|
||||
}
|
||||
*resp = reply;
|
||||
return PAM_SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
_auth_pam_init(E_Auth *da)
|
||||
{
|
||||
int pamerr;
|
||||
const char *pam_prof;
|
||||
char *current_host;
|
||||
char *current_user;
|
||||
|
||||
if (!da) return -1;
|
||||
|
||||
da->pam.conv.conv = _auth_auth_pam_conv;
|
||||
da->pam.conv.appdata_ptr = da;
|
||||
da->pam.handle = NULL;
|
||||
|
||||
/* try other pam profiles - and system-auth (login for fbsd users) is a fallback */
|
||||
pam_prof = "login";
|
||||
if (ecore_file_exists("/etc/pam.d/enlightenment"))
|
||||
pam_prof = "enlightenment";
|
||||
else if (ecore_file_exists("/etc/pam.d/xscreensaver"))
|
||||
pam_prof = "xscreensaver";
|
||||
else if (ecore_file_exists("/etc/pam.d/kscreensaver"))
|
||||
pam_prof = "kscreensaver";
|
||||
else if (ecore_file_exists("/etc/pam.d/system-auth"))
|
||||
pam_prof = "system-auth";
|
||||
else if (ecore_file_exists("/etc/pam.d/system"))
|
||||
pam_prof = "system";
|
||||
else if (ecore_file_exists("/etc/pam.d/xdm"))
|
||||
pam_prof = "xdm";
|
||||
else if (ecore_file_exists("/etc/pam.d/gdm"))
|
||||
pam_prof = "gdm";
|
||||
else if (ecore_file_exists("/etc/pam.d/kdm"))
|
||||
pam_prof = "kdm";
|
||||
|
||||
if ((pamerr = pam_start(pam_prof, da->user, &(da->pam.conv),
|
||||
&(da->pam.handle))) != PAM_SUCCESS)
|
||||
return pamerr;
|
||||
|
||||
current_user = _auth_auth_get_current_user();
|
||||
|
||||
if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, current_user)) != PAM_SUCCESS)
|
||||
{
|
||||
free(current_user);
|
||||
return pamerr;
|
||||
}
|
||||
|
||||
current_host = e_auth_hostname_get();
|
||||
if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, current_host)) != PAM_SUCCESS)
|
||||
{
|
||||
free(current_user);
|
||||
free(current_host);
|
||||
return pamerr;
|
||||
}
|
||||
|
||||
free(current_user);
|
||||
free(current_host);
|
||||
return 0;
|
||||
}
|
||||
#endif // HAVE_PAM && !__FreeBSD__ && !_OpenBSD__
|
||||
|
||||
E_API int
|
||||
#if defined(__FreeBSD__)
|
||||
e_auth_begin(char *passwd)
|
||||
{
|
||||
char buf[PATH_MAX], *p;
|
||||
|
@ -159,109 +28,8 @@ out:
|
|||
if (exe) ecore_exe_free(exe);
|
||||
|
||||
/* security - null out passwd string once we are done with it */
|
||||
for (p = passwd; *p; p++)
|
||||
*p = 0;
|
||||
for (p = passwd; *p; p++) *p = 0;
|
||||
if (passwd[0] || passwd[3]) fprintf(stderr, "ACK!\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
#elif defined(__OpenBSD__)
|
||||
e_auth_begin(char *passwd)
|
||||
{
|
||||
char exe_path[PATH_MAX], *p;
|
||||
Ecore_Exe *exe = NULL;
|
||||
int ret = 0;
|
||||
int len = strlen(passwd);
|
||||
|
||||
if (len == 0) goto out;
|
||||
|
||||
snprintf(exe_path, sizeof(exe_path), "%s/enlightenment/utils/enlightenment_sys -z",
|
||||
e_prefix_lib_get());
|
||||
|
||||
exe = ecore_exe_pipe_run(exe_path, ECORE_EXE_PIPE_WRITE, NULL);
|
||||
if (!exe) goto out;
|
||||
if (ecore_exe_send(exe, passwd, len) != EINA_TRUE) goto out;
|
||||
if (ecore_exe_send(exe, "\n", 1) != EINA_TRUE) goto out;
|
||||
ecore_exe_close_stdin(exe);
|
||||
|
||||
ret = ecore_exe_pid_get(exe);
|
||||
if (ret == -1)
|
||||
{
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
exe = NULL;
|
||||
out:
|
||||
if (exe) ecore_exe_free(exe);
|
||||
|
||||
for (p = passwd; *p; p++)
|
||||
*p = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
#elif defined(HAVE_PAM)
|
||||
e_auth_begin(char *passwd)
|
||||
{
|
||||
/* child */
|
||||
int pamerr;
|
||||
E_Auth da;
|
||||
char *current_user;
|
||||
struct sigaction action;
|
||||
|
||||
_e_auth_child_pid = fork();
|
||||
if (_e_auth_child_pid > 0) return _e_auth_child_pid;
|
||||
if (_e_auth_child_pid < 0) return -1;
|
||||
|
||||
action.sa_handler = SIG_DFL;
|
||||
action.sa_flags = SA_ONSTACK | SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
|
||||
sigemptyset(&action.sa_mask);
|
||||
sigaction(SIGSEGV, &action, NULL);
|
||||
sigaction(SIGILL, &action, NULL);
|
||||
sigaction(SIGFPE, &action, NULL);
|
||||
sigaction(SIGBUS, &action, NULL);
|
||||
sigaction(SIGABRT, &action, NULL);
|
||||
|
||||
current_user = _auth_auth_get_current_user();
|
||||
eina_strlcpy(da.user, current_user, sizeof(da.user));
|
||||
eina_strlcpy(da.passwd, passwd, sizeof(da.passwd));
|
||||
/* security - null out passwd string once we are done with it */
|
||||
e_util_memclear(passwd, strlen(passwd));
|
||||
|
||||
da.pam.handle = NULL;
|
||||
da.pam.conv.conv = NULL;
|
||||
da.pam.conv.appdata_ptr = NULL;
|
||||
|
||||
pamerr = _auth_pam_init(&da);
|
||||
if (pamerr != PAM_SUCCESS)
|
||||
{
|
||||
free(current_user);
|
||||
_exit(1);
|
||||
}
|
||||
pamerr = pam_authenticate(da.pam.handle, 0);
|
||||
pam_end(da.pam.handle, pamerr);
|
||||
/* security - null out passwd string once we are done with it */
|
||||
e_util_memclear(da.passwd, sizeof(da.passwd));
|
||||
|
||||
if (pamerr == PAM_SUCCESS)
|
||||
{
|
||||
free(current_user);
|
||||
_exit(0);
|
||||
}
|
||||
free(current_user);
|
||||
_exit(-1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
e_auth_begin(char *passwd EINA_UNUSED)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
E_API char *
|
||||
e_auth_hostname_get(void)
|
||||
{
|
||||
return strdup("localhost");
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#define E_AUTH_H
|
||||
|
||||
E_API int e_auth_begin(char *passwd);
|
||||
E_API char *e_auth_hostname_get(void);
|
||||
|
||||
static inline int
|
||||
e_auth_hash_djb2(const char *key, int len)
|
||||
|
|
|
@ -873,11 +873,13 @@ _bryce_orient(Bryce *b)
|
|||
{
|
||||
elm_layout_signal_emit(b->layout, "e,state,orient,horizontal", "e");
|
||||
elm_layout_signal_emit(b->scroller, "e,state,orient,horizontal", "e");
|
||||
elm_scroller_policy_set(b->scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
elm_layout_signal_emit(b->layout, "e,state,orient,vertical", "e");
|
||||
elm_layout_signal_emit(b->scroller, "e,state,orient,vertical", "e");
|
||||
elm_scroller_policy_set(b->scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
|
||||
}
|
||||
evas_object_event_callback_add(b->site, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _bryce_site_hints, b);
|
||||
evas_object_smart_callback_add(b->site, "gadget_site_anchor", _bryce_site_anchor, b);
|
||||
|
@ -918,6 +920,7 @@ _bryce_create(Bryce *b, Evas_Object *parent)
|
|||
_bryce_style_apply(b);
|
||||
|
||||
b->scroller = scr = elm_scroller_add(ly);
|
||||
elm_scroller_bounce_set(scr, 0, 0);
|
||||
elm_object_style_set(scr, "bryce");
|
||||
_bryce_orient(b);
|
||||
elm_object_part_content_set(ly, "e.swallow.content", scr);
|
||||
|
|
|
@ -1,81 +1,217 @@
|
|||
#include <sys/types.h>
|
||||
#include "config.h"
|
||||
|
||||
#define __USE_MISC
|
||||
#define _SVID_SOURCE
|
||||
#define _DEFAULT_SOURCE
|
||||
|
||||
#include <err.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <pwd.h>
|
||||
#ifdef HAVE_ALLOCA_H
|
||||
#include <alloca.h>
|
||||
#endif
|
||||
|
||||
#if defined(__OpenBSD__)
|
||||
|
||||
static int
|
||||
_check_auth(uid_t uid, const char *guess)
|
||||
{
|
||||
struct passwd *pwent;
|
||||
|
||||
pwent = getpwuid_shadow(uid);
|
||||
if (!pwent) return -1;
|
||||
if (!pwent->pw_passwd) return -1;
|
||||
|
||||
return crypt_checkpass(guess, pwent->pw_passwd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#elif defined(__FreeBSD__)
|
||||
#include <security/pam_constants.h>
|
||||
|
||||
// Exit codes, per src/modules/lokker/lokker.c:
|
||||
// 0: success (unlock)
|
||||
// 1-128: PAM error but also unlock (!!!)
|
||||
// else: failed.
|
||||
|
||||
static char pw[4096];
|
||||
struct passwd *pwent;
|
||||
|
||||
static void
|
||||
zeropw(void)
|
||||
static int
|
||||
_check_auth(uid_t uid, const char *pw)
|
||||
{
|
||||
/* security - null out passwd string once we are done with it */
|
||||
memset(pw, 0, sizeof(pw));
|
||||
if (pw[0] || pw[3]) printf("ACK!\n");
|
||||
struct passwd *pwent = getpwuid(uid);
|
||||
|
||||
if (pwent == NULL) return;
|
||||
if (pwent->pw_passwd == NULL) return;
|
||||
if (!pwent) return -1;
|
||||
if (!pwent->pw_passwd) return -1;
|
||||
|
||||
/* security - null out passwd string once we are done with it */
|
||||
memset(pwent->pw_passwd, 0, strlen(pwent->pw_passwd));
|
||||
if (pwent->pw_passwd[0]) printf("ACK!\n");
|
||||
if (!strcmp(crypt(pw, pwent->pw_passwd), pwent->pw_passwd)) return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#elif defined(HAVE_PAM)
|
||||
# include <security/pam_appl.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *user;
|
||||
const char *pw;
|
||||
} Authinfo;
|
||||
|
||||
static int
|
||||
_conv_cb(int num, const struct pam_message **msg, struct pam_response **resp, void *data)
|
||||
{
|
||||
Authinfo *ai = data;
|
||||
int replies;
|
||||
struct pam_response *reply = NULL;
|
||||
|
||||
reply = malloc(sizeof(struct pam_response) * num);
|
||||
if (!reply) return PAM_CONV_ERR;
|
||||
|
||||
for (replies = 0; replies < num; replies++)
|
||||
{
|
||||
switch (msg[replies]->msg_style)
|
||||
{
|
||||
case PAM_PROMPT_ECHO_ON:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = strdup(ai->user);
|
||||
break;
|
||||
case PAM_PROMPT_ECHO_OFF:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = strdup(ai->pw);
|
||||
break;
|
||||
case PAM_ERROR_MSG:
|
||||
case PAM_TEXT_INFO:
|
||||
reply[replies].resp_retcode = PAM_SUCCESS;
|
||||
reply[replies].resp = NULL;
|
||||
break;
|
||||
default:
|
||||
free(reply);
|
||||
return PAM_CONV_ERR;
|
||||
}
|
||||
}
|
||||
*resp = reply;
|
||||
return PAM_SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
_check_auth(uid_t uid, const char *pw)
|
||||
{
|
||||
Authinfo ai;
|
||||
struct passwd *pwent;
|
||||
const char *user;
|
||||
const char *prof;
|
||||
const char *host;
|
||||
struct stat st;
|
||||
pam_handle_t *handle;
|
||||
int pamerr;
|
||||
struct pam_conv conv;
|
||||
|
||||
pwent = getpwuid(uid);
|
||||
if (!pwent) return -1;
|
||||
user = pwent->pw_name;
|
||||
if (!user) return -1;
|
||||
|
||||
host = "localhost";
|
||||
|
||||
prof = "login";
|
||||
if (!stat("/etc/pam.d/enlightenment", &st)) prof = "enlightenment";
|
||||
else if (!stat("/etc/pam.d/xscreensaver", &st)) prof = "xscreensaver";
|
||||
else if (!stat("/etc/pam.d/kscreensaver", &st)) prof = "kscreensaver";
|
||||
else if (!stat("/etc/pam.d/system-auth", &st)) prof = "system-auth";
|
||||
else if (!stat("/etc/pam.d/system", &st)) prof = "system";
|
||||
else if (!stat("/etc/pam.d/xdm", &st)) prof = "xdm";
|
||||
else if (!stat("/etc/pam.d/gdm", &st)) prof = "gdm";
|
||||
else if (!stat("/etc/pam.d/kdm", &st)) prof = "kdm";
|
||||
|
||||
ai.user = user;
|
||||
ai.pw = pw;
|
||||
|
||||
conv.conv = _conv_cb;
|
||||
conv.appdata_ptr = &ai;
|
||||
if (pam_start(prof, user, &conv, &handle) != PAM_SUCCESS) return -1;
|
||||
if (pam_set_item(handle, PAM_USER, user) != PAM_SUCCESS) return -1;
|
||||
if (pam_set_item(handle, PAM_RHOST, host) != PAM_SUCCESS) return -1;
|
||||
|
||||
pamerr = pam_authenticate(handle, 0);
|
||||
pam_end(handle, pamerr);
|
||||
|
||||
if (pamerr != PAM_SUCCESS) return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#else
|
||||
|
||||
static int
|
||||
_check_auth(uid_t uid, const char *pw)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
ssize_t rd;
|
||||
uid_t id;
|
||||
int i;
|
||||
char pw[4096], *p;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if ((!strcmp(argv[i], "-h")) ||
|
||||
(!strcmp(argv[i], "-help")) ||
|
||||
(!strcmp(argv[i], "--help")))
|
||||
{
|
||||
printf("This is an internal tool for Enlightenment.\n"
|
||||
"do not use it.\n");
|
||||
exit(129);
|
||||
}
|
||||
}
|
||||
if (argc != 1)
|
||||
exit(130);
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
fprintf(stderr, "Unknown option %s\n", argv[i]);
|
||||
fprintf(stderr,
|
||||
"This is an internal tool for Enlightenment\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
// get uid who ran this
|
||||
id = getuid();
|
||||
|
||||
if (atexit(zeropw)) err(131, "atexit");
|
||||
|
||||
// read passwd from stdin
|
||||
rd = read(0, pw, sizeof(pw) - 1);
|
||||
if (rd < 0) err(132, "read");
|
||||
if (rd < 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Error. Can't read passwd on stdin\n");
|
||||
goto err;
|
||||
}
|
||||
pw[rd] = 0;
|
||||
for (p = pw; *p; p++)
|
||||
{
|
||||
if ((*p == '\r') || (*p == '\n'))
|
||||
{
|
||||
*p = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we are setuid root then try become root - we can work without though
|
||||
// if pam etc. can work without being root
|
||||
if (setuid(0) != 0)
|
||||
{
|
||||
printf("ERROR: UNABLE TO ASSUME ROOT PRIVILEGES\n");
|
||||
exit(133);
|
||||
}
|
||||
fprintf(stderr,
|
||||
"Warning. Can't become user root. If password auth requires root then this will fail\n");
|
||||
if (setgid(0) != 0)
|
||||
{
|
||||
printf("ERROR: UNABLE TO ASSUME ROOT GROUP PRIVILEGES\n");
|
||||
exit(134);
|
||||
}
|
||||
|
||||
pwent = getpwuid(id);
|
||||
if (pwent == NULL) return -2;
|
||||
|
||||
if (strcmp(crypt(pw, pwent->pw_passwd), pwent->pw_passwd) == 0)
|
||||
return 0;
|
||||
|
||||
fprintf(stderr,
|
||||
"Warning. Can't become group root. If password auth requires root then this will fail\n");
|
||||
if (_check_auth(id, pw) == 0) return 0;
|
||||
err:
|
||||
fprintf(stderr,
|
||||
"Password auth fail\n");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -3331,6 +3331,8 @@ e_client_rescale(E_Client *ec)
|
|||
{
|
||||
Eina_Bool shaded;
|
||||
int shade_dir;
|
||||
|
||||
if (stopping) return;
|
||||
E_OBJECT_CHECK(ec);
|
||||
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
|
||||
|
||||
|
@ -4000,19 +4002,7 @@ e_client_maximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int
|
|||
|
||||
case E_MAXIMIZE_SMART:
|
||||
case E_MAXIMIZE_EXPAND:
|
||||
if (ec->desk->visible)
|
||||
e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh);
|
||||
else
|
||||
{
|
||||
x1 = ec->zone->x;
|
||||
yy1 = ec->zone->y;
|
||||
x2 = ec->zone->x + ec->zone->w;
|
||||
y2 = ec->zone->y + ec->zone->h;
|
||||
e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
|
||||
zx = x1, zy = yy1;
|
||||
zw = x2 - x1;
|
||||
zh = y2 - yy1;
|
||||
}
|
||||
e_zone_desk_useful_geometry_get(ec->zone, ec->desk, &zx, &zy, &zw, &zh);
|
||||
w = zw, h = zh;
|
||||
|
||||
e_comp_object_frame_xy_unadjust(ec->frame, ec->x, ec->y, &ecx, &ecy);
|
||||
|
@ -4068,11 +4058,8 @@ e_client_maximize_geometry_get(const E_Client *ec, E_Maximize max, int *mx, int
|
|||
x2 = ec->zone->x + ec->zone->w;
|
||||
y2 = ec->zone->y + ec->zone->h;
|
||||
|
||||
/* walk through all shelves */
|
||||
e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
|
||||
|
||||
/* walk through all windows */
|
||||
e_maximize_client_client_fill(ec, &x1, &yy1, &x2, &y2, max);
|
||||
e_zone_desk_useful_geometry_get(ec->zone, ec->desk, &zx, &zy, &zw, &zh);
|
||||
x1 = zx, yy1 = zy, x2 = x1 + zw, y2 = yy1 + zh;
|
||||
|
||||
w = x2 - x1;
|
||||
h = y2 - yy1;
|
||||
|
@ -4139,6 +4126,7 @@ e_client_maximize(E_Client *ec, E_Maximize max)
|
|||
ec->maximized &= ~E_MAXIMIZE_TYPE;
|
||||
ec->maximized |= max;
|
||||
EC_CHANGED(ec);
|
||||
if (ec->re_manage) ec->changes.pos = 0;
|
||||
return;
|
||||
}
|
||||
if ((max & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN)
|
||||
|
@ -5155,12 +5143,9 @@ e_client_icon_add(E_Client *ec, Evas *evas)
|
|||
{
|
||||
if ((ec->desktop) && (ec->icon_preference != E_ICON_PREF_NETWM))
|
||||
{
|
||||
o = e_icon_add(evas);
|
||||
o = e_util_desktop_icon_add(ec->desktop, 64, evas);
|
||||
if (o)
|
||||
{
|
||||
e_icon_fdo_icon_set(o, ec->desktop->icon);
|
||||
return o;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
else if (ec->netwm.icons)
|
||||
|
|
|
@ -1813,6 +1813,7 @@ e_comp_clients_rescale(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (stopping) return;
|
||||
for (i = 0; i < 11; i++)
|
||||
{
|
||||
Eina_List *tmp = NULL;
|
||||
|
|
|
@ -172,7 +172,6 @@ _e_comp_object_event_add(Evas_Object *obj)
|
|||
E_Event_Comp_Object *ev;
|
||||
E_Client *ec;
|
||||
|
||||
if (stopping) return;
|
||||
ev = E_NEW(E_Event_Comp_Object, 1);
|
||||
evas_object_ref(obj);
|
||||
ev->comp_object = obj;
|
||||
|
@ -826,8 +825,12 @@ _e_comp_object_done_defer(void *data, Evas_Object *obj EINA_UNUSED, const char *
|
|||
/* hide only after animation finishes to guarantee a full run of the animation */
|
||||
if (cw->defer_hide && ((!strcmp(emission, "e,action,hide,done")) || (!strcmp(emission, "e,action,done"))))
|
||||
evas_object_hide(cw->smart_obj);
|
||||
else
|
||||
e_comp_shape_queue();
|
||||
else if (!cw->deleted)
|
||||
{
|
||||
e_comp_shape_queue();
|
||||
if (cw->visible && cw->updates_exist)
|
||||
e_comp_object_render_update_add(cw->smart_obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* run a visibility compositor effect if available, return false if object is dead */
|
||||
|
@ -945,8 +948,6 @@ _e_comp_object_mirror_pixels_get(void *data, Evas_Object *obj)
|
|||
if (cw->native) return;
|
||||
|
||||
evas_object_image_data_set(obj, e_pixmap_image_data_get(cw->ec->pixmap));
|
||||
evas_object_image_alpha_set(obj, evas_object_image_alpha_get(cw->obj));
|
||||
evas_object_image_pixels_dirty_set(obj, EINA_FALSE);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////
|
||||
|
@ -958,7 +959,6 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
|
|||
E_Comp_Object *cw = data;
|
||||
E_Client *ec = cw->ec;
|
||||
int pw, ph;
|
||||
int bx, by, bxx, byy;
|
||||
|
||||
if ((!ec->pixmap) || (!e_pixmap_size_get(ec->pixmap, &pw, &ph)))
|
||||
{
|
||||
|
@ -966,37 +966,6 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
|
|||
return;
|
||||
}
|
||||
//INF("PIXEL GET %p: %dx%d || %dx%d", ec, ec->w, ec->h, pw, ph);
|
||||
e_pixmap_image_opaque_get(cw->ec->pixmap, &bx, &by, &bxx, &byy);
|
||||
if (bxx && byy)
|
||||
{
|
||||
bxx = pw - (bx + bxx), byy = ph - (by + byy);
|
||||
evas_object_image_border_set(cw->obj, bx, bxx, by, byy);
|
||||
}
|
||||
else
|
||||
{
|
||||
bx = by = bxx = byy = 0;
|
||||
evas_object_image_border_set(cw->obj, bx, bxx, by, byy);
|
||||
if (cw->client_inset.calc && (!cw->frame_object)) //CSD
|
||||
{
|
||||
bx = -cw->client_inset.l + 4, by = -cw->client_inset.t + 4;
|
||||
bxx = -cw->client_inset.r, byy = -cw->client_inset.b;
|
||||
}
|
||||
}
|
||||
{
|
||||
Edje_Message_Int_Set *msg;
|
||||
Edje_Message_Int msg2;
|
||||
Eina_Bool id = (bx || by || bxx || byy);
|
||||
|
||||
msg = alloca(sizeof(Edje_Message_Int_Set) + (sizeof(int) * 3));
|
||||
msg->count = 4;
|
||||
msg->val[0] = bx;
|
||||
msg->val[1] = by;
|
||||
msg->val[2] = bxx;
|
||||
msg->val[3] = byy;
|
||||
edje_object_message_send(cw->shobj, EDJE_MESSAGE_INT_SET, 1, msg);
|
||||
msg2.val = id;
|
||||
edje_object_message_send(cw->shobj, EDJE_MESSAGE_INT, 0, &msg2);
|
||||
}
|
||||
|
||||
/* queue another render if client is still dirty; cannot refresh here. */
|
||||
if (e_pixmap_dirty_get(ec->pixmap) && e_pixmap_size_get(ec->pixmap, &pw, &ph))
|
||||
|
@ -2813,6 +2782,7 @@ _e_comp_object_util_show(void *data EINA_UNUSED, Evas_Object *obj)
|
|||
evas_object_data_set(obj, "comp_ref", (void*)1);
|
||||
}
|
||||
edje_object_signal_emit(obj, "e,state,visible", "e");
|
||||
edje_object_message_signal_process(obj);
|
||||
evas_object_data_set(obj, "comp_showing", (void*)1);
|
||||
if (e_comp_util_object_is_above_nocomp(obj))
|
||||
{
|
||||
|
@ -2841,6 +2811,7 @@ _e_comp_object_util_hide(void *data EINA_UNUSED, Evas_Object *obj)
|
|||
evas_object_data_set(obj, "comp_ref", (void*)1);
|
||||
}
|
||||
edje_object_signal_emit(obj, "e,state,hidden", "e");
|
||||
edje_object_message_signal_process(obj);
|
||||
evas_object_data_set(obj, "comp_hiding", (void*)1);
|
||||
|
||||
if (evas_object_data_del(obj, "comp_override"))
|
||||
|
@ -4073,7 +4044,8 @@ e_comp_object_dirty(Evas_Object *obj)
|
|||
Eina_List *ll;
|
||||
Evas_Object *o;
|
||||
int w, h;
|
||||
Eina_Bool dirty, visible;
|
||||
Eina_Bool dirty, visible, alpha;
|
||||
int bx, by, bxx, byy;
|
||||
|
||||
API_ENTRY;
|
||||
/* only actually dirty if pixmap is available */
|
||||
|
@ -4088,11 +4060,14 @@ e_comp_object_dirty(Evas_Object *obj)
|
|||
RENDER_DEBUG("SIZE [%p]: %dx%d", cw->ec, w, h);
|
||||
if (cw->pending_updates)
|
||||
eina_tiler_area_size_set(cw->pending_updates, w, h);
|
||||
|
||||
alpha = evas_object_image_alpha_get(cw->obj);
|
||||
EINA_LIST_FOREACH(cw->obj_mirror, ll, o)
|
||||
{
|
||||
//evas_object_image_border_set(o, bx, by, bxx, byy);
|
||||
//evas_object_image_border_center_fill_set(o, EVAS_BORDER_FILL_SOLID);
|
||||
evas_object_image_pixels_dirty_set(o, dirty);
|
||||
evas_object_image_alpha_set(o, alpha);
|
||||
if (!dirty)
|
||||
evas_object_image_data_set(o, NULL);
|
||||
evas_object_image_size_set(o, w, h);
|
||||
|
@ -4104,6 +4079,39 @@ e_comp_object_dirty(Evas_Object *obj)
|
|||
ERR("ERROR FETCHING PIXMAP FOR %p", cw->ec);
|
||||
return;
|
||||
}
|
||||
|
||||
e_pixmap_image_opaque_get(cw->ec->pixmap, &bx, &by, &bxx, &byy);
|
||||
if (bxx && byy)
|
||||
{
|
||||
bxx = w - (bx + bxx), byy = h - (by + byy);
|
||||
evas_object_image_border_set(cw->obj, bx, bxx, by, byy);
|
||||
}
|
||||
else
|
||||
{
|
||||
bx = by = bxx = byy = 0;
|
||||
evas_object_image_border_set(cw->obj, bx, bxx, by, byy);
|
||||
if (cw->client_inset.calc && (!cw->frame_object)) //CSD
|
||||
{
|
||||
bx = -cw->client_inset.l + 4, by = -cw->client_inset.t + 4;
|
||||
bxx = -cw->client_inset.r, byy = -cw->client_inset.b;
|
||||
}
|
||||
}
|
||||
{
|
||||
Edje_Message_Int_Set *msg;
|
||||
Edje_Message_Int msg2;
|
||||
Eina_Bool id = (bx || by || bxx || byy);
|
||||
|
||||
msg = alloca(sizeof(Edje_Message_Int_Set) + (sizeof(int) * 3));
|
||||
msg->count = 4;
|
||||
msg->val[0] = bx;
|
||||
msg->val[1] = by;
|
||||
msg->val[2] = bxx;
|
||||
msg->val[3] = byy;
|
||||
edje_object_message_send(cw->shobj, EDJE_MESSAGE_INT_SET, 1, msg);
|
||||
msg2.val = id;
|
||||
edje_object_message_send(cw->shobj, EDJE_MESSAGE_INT, 0, &msg2);
|
||||
}
|
||||
|
||||
e_comp_object_native_surface_set(obj, 1);
|
||||
it = eina_tiler_iterator_new(cw->updates);
|
||||
EINA_ITERATOR_FOREACH(it, rect)
|
||||
|
|
|
@ -211,11 +211,15 @@ _e_comp_wl_mouse_in(E_Client *ec, Evas_Event_Mouse_In *ev)
|
|||
serial = wl_display_next_serial(e_comp_wl->wl.disp);
|
||||
EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
|
||||
{
|
||||
E_Comp_Wl_Pointer *ptr = wl_resource_get_user_data(res);
|
||||
|
||||
if (!e_comp_wl_input_pointer_check(res)) continue;
|
||||
if (wl_resource_get_client(res) != wc) continue;
|
||||
ptr->entered = 1;
|
||||
wl_pointer_send_enter(res, serial, ec->comp_data->surface,
|
||||
wl_fixed_from_int(ev->canvas.x - ec->client.x),
|
||||
wl_fixed_from_int(ev->canvas.y - ec->client.y));
|
||||
e_comp_wl_input_pointer_cursor_update(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -267,8 +271,10 @@ _e_comp_wl_mouse_out(E_Client *ec)
|
|||
serial = wl_display_next_serial(e_comp_wl->wl.disp);
|
||||
EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
|
||||
{
|
||||
E_Comp_Wl_Pointer *ptr = wl_resource_get_user_data(res);
|
||||
if (!e_comp_wl_input_pointer_check(res)) continue;
|
||||
if (wl_resource_get_client(res) != wc) continue;
|
||||
ptr->entered = 0;
|
||||
wl_pointer_send_leave(res, serial, ec->comp_data->surface);
|
||||
}
|
||||
}
|
||||
|
@ -2591,11 +2597,21 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec)
|
|||
_e_comp_wl_mouse_out(ec);
|
||||
else if (ec->comp_data->cursor)
|
||||
{
|
||||
Evas_Object *o;
|
||||
Eina_List *l;
|
||||
struct wl_resource *res;
|
||||
|
||||
ecore_evas_cursor_get(e_comp->ee, &o, NULL, NULL, NULL);
|
||||
if (o == ec->frame)
|
||||
e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
|
||||
EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
|
||||
{
|
||||
E_Comp_Wl_Pointer *ptr = wl_resource_get_user_data(res);
|
||||
|
||||
if (ptr->cursor_set && (ptr->cursor == ec))
|
||||
{
|
||||
ptr->cursor = NULL;
|
||||
ptr->cursor_set = 0;
|
||||
if (ptr->entered)
|
||||
e_comp_wl_input_pointer_cursor_update(ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ec->comp_data->aux_hint.hints)
|
||||
|
@ -2913,10 +2929,12 @@ static void
|
|||
_e_comp_wl_gl_shutdown(void)
|
||||
{
|
||||
if (!e_comp->gl) return;
|
||||
if (e_comp_wl->wl.glapi->evasglUnbindWaylandDisplay)
|
||||
if (e_comp_wl->wl.glapi && e_comp_wl->wl.glapi->evasglUnbindWaylandDisplay)
|
||||
e_comp_wl->wl.glapi->evasglUnbindWaylandDisplay(e_comp_wl->wl.gl, e_comp_wl->wl.disp);
|
||||
evas_gl_surface_destroy(e_comp_wl->wl.gl, e_comp_wl->wl.glsfc);
|
||||
evas_gl_context_destroy(e_comp_wl->wl.gl, e_comp_wl->wl.glctx);
|
||||
if (e_comp_wl->wl.glsfc)
|
||||
evas_gl_surface_destroy(e_comp_wl->wl.gl, e_comp_wl->wl.glsfc);
|
||||
if (e_comp_wl->wl.glctx)
|
||||
evas_gl_context_destroy(e_comp_wl->wl.gl, e_comp_wl->wl.glctx);
|
||||
evas_gl_free(e_comp_wl->wl.gl);
|
||||
evas_gl_config_free(e_comp_wl->wl.glcfg);
|
||||
}
|
||||
|
@ -2927,16 +2945,22 @@ _e_comp_wl_gl_init(void)
|
|||
e_comp_wl->wl.gl = evas_gl_new(ecore_evas_get(e_comp->ee));
|
||||
if (!e_comp_wl->wl.gl) return;
|
||||
e_comp_wl->wl.glctx = evas_gl_context_create(e_comp_wl->wl.gl, NULL);
|
||||
if (!e_comp_wl->wl.glctx) goto end;
|
||||
e_comp_wl->wl.glcfg = evas_gl_config_new();
|
||||
if (!e_comp_wl->wl.glcfg) goto end;
|
||||
e_comp_wl->wl.glsfc = evas_gl_surface_create(e_comp_wl->wl.gl, e_comp_wl->wl.glcfg, 1, 1);
|
||||
evas_gl_make_current(e_comp_wl->wl.gl, e_comp_wl->wl.glsfc, e_comp_wl->wl.glctx);
|
||||
if (!e_comp_wl->wl.glsfc) goto end;
|
||||
if (!evas_gl_make_current(e_comp_wl->wl.gl, e_comp_wl->wl.glsfc, e_comp_wl->wl.glctx)) goto end;
|
||||
e_comp_wl->wl.glapi = evas_gl_context_api_get(e_comp_wl->wl.gl, e_comp_wl->wl.glctx);
|
||||
if (e_comp_wl->wl.glapi->evasglBindWaylandDisplay)
|
||||
e_comp->gl = e_comp_wl->wl.glapi->evasglBindWaylandDisplay(e_comp_wl->wl.gl, e_comp_wl->wl.disp);
|
||||
if (e_comp->gl)
|
||||
e_util_env_set("ELM_ACCEL", "gl");
|
||||
else
|
||||
_e_comp_wl_gl_shutdown();
|
||||
{
|
||||
e_util_env_set("ELM_ACCEL", "gl");
|
||||
return;
|
||||
}
|
||||
end:
|
||||
_e_comp_wl_gl_shutdown();
|
||||
}
|
||||
|
||||
/* public functions */
|
||||
|
|
|
@ -5,6 +5,7 @@ typedef struct _E_Comp_Wl_Subsurf_Data E_Comp_Wl_Subsurf_Data;
|
|||
typedef struct _E_Comp_Wl_Surface_State E_Comp_Wl_Surface_State;
|
||||
typedef struct _E_Comp_Wl_Client_Data E_Comp_Wl_Client_Data;
|
||||
typedef struct _E_Comp_Wl_Output E_Comp_Wl_Output;
|
||||
typedef struct _E_Comp_Wl_Pointer E_Comp_Wl_Pointer;
|
||||
typedef struct E_Shell_Data E_Shell_Data;
|
||||
typedef struct Tizen_Extensions Tizen_Extensions;
|
||||
typedef void (*E_Comp_Wl_Grab_End_Cb)(E_Client*);
|
||||
|
@ -394,6 +395,14 @@ struct _E_Comp_Wl_Output
|
|||
void *data;
|
||||
};
|
||||
|
||||
struct _E_Comp_Wl_Pointer
|
||||
{
|
||||
E_Client *cursor;
|
||||
Evas_Point offset;
|
||||
Eina_Bool entered : 1;
|
||||
Eina_Bool cursor_set : 1;
|
||||
};
|
||||
|
||||
E_API Eina_Bool e_comp_wl_init(void);
|
||||
EINTERN void e_comp_wl_shutdown(void);
|
||||
|
||||
|
|
|
@ -43,39 +43,18 @@ _e_comp_wl_input_cb_resource_destroy(struct wl_client *client EINA_UNUSED, struc
|
|||
}
|
||||
|
||||
static void
|
||||
_e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resource *resource EINA_UNUSED, uint32_t serial EINA_UNUSED, struct wl_resource *surface_resource, int32_t x, int32_t y)
|
||||
_e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t serial EINA_UNUSED, struct wl_resource *surface_resource, int32_t x, int32_t y)
|
||||
{
|
||||
E_Client *ec;
|
||||
Eina_Bool got_mouse = EINA_FALSE;
|
||||
E_Comp_Wl_Pointer *ptr = wl_resource_get_user_data(resource);
|
||||
|
||||
E_CLIENT_FOREACH(ec)
|
||||
{
|
||||
if (e_object_is_del(E_OBJECT(ec))) continue;
|
||||
if (e_pixmap_type_get(ec->pixmap) != E_PIXMAP_TYPE_WL) continue;
|
||||
if (!ec->comp_data->surface) continue;
|
||||
if (client != wl_resource_get_client(ec->comp_data->surface)) continue;
|
||||
if (ec->mouse.in)
|
||||
{
|
||||
if (e_client_has_xwindow(ec))
|
||||
got_mouse = E_INSIDE(ec->mouse.current.mx, ec->mouse.current.my,
|
||||
ec->client.x, ec->client.y, ec->client.w, ec->client.h);
|
||||
else
|
||||
got_mouse = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!got_mouse)
|
||||
{
|
||||
if (ec && ec->mouse.in && (!surface_resource))
|
||||
e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
|
||||
return;
|
||||
}
|
||||
if (!surface_resource)
|
||||
{
|
||||
if (e_comp_object_frame_exists(ec->frame) &&
|
||||
ec->mouse.in && (!ec->comp_data->ssd_mouse_in))
|
||||
e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
|
||||
else
|
||||
ptr->cursor_set = 1;
|
||||
ptr->cursor = NULL;
|
||||
ptr->offset.x = x;
|
||||
ptr->offset.y = y;
|
||||
if (ptr->entered)
|
||||
{
|
||||
ecore_evas_cursor_unset(e_comp->ee);
|
||||
evas_object_hide(e_comp->pointer->o_ptr);
|
||||
|
@ -89,6 +68,10 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resou
|
|||
* are being processed... let's BAIL.
|
||||
*/
|
||||
if (!ec) return;
|
||||
ptr->cursor_set = 1;
|
||||
ptr->cursor = ec;
|
||||
ptr->offset.x = x;
|
||||
ptr->offset.y = y;
|
||||
if (ec->comp_data->pending.input)
|
||||
eina_tiler_clear(ec->comp_data->pending.input);
|
||||
else
|
||||
|
@ -113,9 +96,8 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resou
|
|||
EC_CHANGED(ec);
|
||||
}
|
||||
|
||||
/* ignore cursor changes during resize/move I guess */
|
||||
if (e_client_action_get()) return;
|
||||
e_pointer_object_set(e_comp->pointer, ec->frame, x, y);
|
||||
if (ptr->entered)
|
||||
e_comp_wl_input_pointer_cursor_update(ptr);
|
||||
}
|
||||
|
||||
static const struct wl_pointer_interface _e_pointer_interface =
|
||||
|
@ -137,14 +119,20 @@ static const struct wl_touch_interface _e_touch_interface =
|
|||
static void
|
||||
_e_comp_wl_input_cb_pointer_unbind(struct wl_resource *resource)
|
||||
{
|
||||
E_Comp_Wl_Pointer *ptr = wl_resource_get_user_data(resource);
|
||||
|
||||
if (ptr->cursor_set && ptr->entered)
|
||||
e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
|
||||
e_comp_wl->ptr.resources =
|
||||
eina_list_remove(e_comp_wl->ptr.resources, resource);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_wl_input_cb_pointer_get(struct wl_client *client, struct wl_resource *resource, uint32_t id)
|
||||
{
|
||||
struct wl_resource *res;
|
||||
E_Comp_Wl_Pointer *ptr;
|
||||
|
||||
/* try to create pointer resource */
|
||||
res = wl_resource_create(client, &wl_pointer_interface,
|
||||
|
@ -156,12 +144,12 @@ _e_comp_wl_input_cb_pointer_get(struct wl_client *client, struct wl_resource *re
|
|||
wl_client_post_no_memory(client);
|
||||
return;
|
||||
}
|
||||
ptr = E_NEW(E_Comp_Wl_Pointer, 1);
|
||||
|
||||
e_comp_wl->ptr.resources =
|
||||
eina_list_append(e_comp_wl->ptr.resources, res);
|
||||
wl_resource_set_user_data(res, resource);
|
||||
wl_resource_set_implementation(res, &_e_pointer_interface,
|
||||
e_comp->wl_comp_data,
|
||||
ptr,
|
||||
_e_comp_wl_input_cb_pointer_unbind);
|
||||
}
|
||||
|
||||
|
@ -547,6 +535,24 @@ e_comp_wl_input_shutdown(void)
|
|||
e_comp_wl->seat.global = NULL;
|
||||
}
|
||||
|
||||
EINTERN void
|
||||
e_comp_wl_input_pointer_cursor_update(E_Comp_Wl_Pointer *ptr)
|
||||
{
|
||||
EINA_SAFETY_ON_TRUE_RETURN(!ptr->entered);
|
||||
if (ptr->cursor_set && (!e_comp_util_mouse_grabbed()))
|
||||
{
|
||||
if (ptr->cursor)
|
||||
e_pointer_object_set(e_comp->pointer, ptr->cursor->frame, ptr->offset.x, ptr->offset.y);
|
||||
else
|
||||
{
|
||||
ecore_evas_cursor_unset(e_comp->ee);
|
||||
evas_object_hide(e_comp->pointer->o_ptr);
|
||||
}
|
||||
}
|
||||
else
|
||||
e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
|
||||
}
|
||||
|
||||
EINTERN Eina_Bool
|
||||
e_comp_wl_input_pointer_check(struct wl_resource *res)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,8 @@ EINTERN Eina_Bool e_comp_wl_input_pointer_check(struct wl_resource *res);
|
|||
EINTERN Eina_Bool e_comp_wl_input_keyboard_check(struct wl_resource *res);
|
||||
EINTERN Eina_Bool e_comp_wl_input_touch_check(struct wl_resource *res);
|
||||
|
||||
EINTERN void e_comp_wl_input_pointer_cursor_update(E_Comp_Wl_Pointer *ptr);
|
||||
|
||||
EINTERN Eina_Bool e_comp_wl_input_keyboard_modifiers_serialize(void);
|
||||
EINTERN void e_comp_wl_input_keyboard_modifiers_update(void);
|
||||
EINTERN void e_comp_wl_input_keyboard_state_update(uint32_t keycode, Eina_Bool pressed);
|
||||
|
|
|
@ -3736,6 +3736,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
|
|||
ec->icccm.fetch.hints = 0;
|
||||
rem_change = 1;
|
||||
}
|
||||
if (ec->override) ec->placed = EINA_TRUE;
|
||||
if (ec->changes.prop || ec->icccm.fetch.size_pos_hints)
|
||||
{
|
||||
Eina_Bool request_pos;
|
||||
|
@ -5075,13 +5076,11 @@ _e_comp_x_cb_ping(void *data EINA_UNUSED, int ev_type EINA_UNUSED, Ecore_X_Event
|
|||
static void
|
||||
_e_comp_pointer_grab(void)
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 06 create grab win and grab pointer\n");
|
||||
if (_e_comp_x_suspend_grabbed) ecore_x_window_free(_e_comp_x_suspend_grabbed);
|
||||
_e_comp_x_suspend_grabbed = ecore_x_window_input_new(e_comp->root, 0, 0, 1, 1);
|
||||
ecore_x_window_show(_e_comp_x_suspend_grabbed);
|
||||
if (!e_grabinput_get(_e_comp_x_suspend_grabbed, 0, 0))
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 07 grab failed\n");
|
||||
ecore_x_window_free(_e_comp_x_suspend_grabbed);
|
||||
_e_comp_x_suspend_grabbed = 0;
|
||||
}
|
||||
|
@ -5091,7 +5090,6 @@ static void
|
|||
_e_comp_pointer_ungrab(void)
|
||||
{
|
||||
if (!_e_comp_x_suspend_grabbed) return;
|
||||
fprintf(stderr, "E_COMP_X: 6 really ungrab input and free window\n");
|
||||
e_grabinput_release(_e_comp_x_suspend_grabbed, 0);
|
||||
ecore_x_window_free(_e_comp_x_suspend_grabbed);
|
||||
_e_comp_x_suspend_grabbed = 0;
|
||||
|
@ -5100,17 +5098,20 @@ _e_comp_pointer_ungrab(void)
|
|||
static void
|
||||
_e_comp_cb_pointer_suspend_resume_done(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 5 cursor suspend/resume done\n");
|
||||
edje_object_signal_callback_del(obj, emission, source,
|
||||
_e_comp_cb_pointer_suspend_resume_done);
|
||||
if (!data) _e_comp_pointer_ungrab();
|
||||
if (!data)
|
||||
{
|
||||
_e_comp_pointer_ungrab();
|
||||
e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
EINTERN Eina_Bool
|
||||
_e_comp_x_screensaver_on()
|
||||
{
|
||||
const char *s;
|
||||
fprintf(stderr, "E_COMP_X: 01 screensaver on\n");
|
||||
|
||||
if ((!e_comp->pointer) || (!e_comp->pointer->o_ptr)) return ECORE_CALLBACK_RENEW;
|
||||
s = edje_object_data_get(e_comp->pointer->o_ptr, "can_suspend");
|
||||
|
||||
|
@ -5118,13 +5119,12 @@ _e_comp_x_screensaver_on()
|
|||
{
|
||||
if (!e_desklock_state_get())
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 02 ungrab then grab pointer\n");
|
||||
_e_comp_pointer_ungrab();
|
||||
e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
|
||||
e_pointer_grab_set(e_comp->pointer, EINA_TRUE);
|
||||
_e_comp_pointer_grab();
|
||||
fprintf(stderr, "E_COMP_X: 03 no desklock but abort pointer suspend\n");
|
||||
if (!_e_comp_x_suspend_grabbed) return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
fprintf(stderr, "E_COMP_X: 04 emit suspend signals to pointer\n");
|
||||
edje_object_signal_callback_del(e_comp->pointer->o_ptr,
|
||||
"e,state,mouse,suspend,done", "e",
|
||||
_e_comp_cb_pointer_suspend_resume_done);
|
||||
|
@ -5147,8 +5147,8 @@ _e_comp_x_screensaver_off()
|
|||
{
|
||||
const char *s;
|
||||
|
||||
fprintf(stderr, "E_COMP_X: 1 screensaver off\n");
|
||||
_e_comp_pointer_ungrab();
|
||||
e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
|
||||
if ((!e_comp->pointer) || (!e_comp->pointer->o_ptr)) return ECORE_CALLBACK_RENEW;
|
||||
s = edje_object_data_get(e_comp->pointer->o_ptr, "can_suspend");
|
||||
|
||||
|
@ -5156,15 +5156,10 @@ _e_comp_x_screensaver_off()
|
|||
{
|
||||
if (!e_desklock_state_get())
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 2 re-grab pointer because desklock not on\n");
|
||||
e_pointer_grab_set(e_comp->pointer, EINA_TRUE);
|
||||
_e_comp_pointer_grab();
|
||||
if (!_e_comp_x_suspend_grabbed)
|
||||
{
|
||||
fprintf(stderr, "E_COMP_X: 3 no desklock but abort pointer unsuspend\n");
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
if (!_e_comp_x_suspend_grabbed) return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
fprintf(stderr, "E_COMP_X: 4 emit resume signals to pointer\n");
|
||||
edje_object_signal_callback_del(e_comp->pointer->o_ptr,
|
||||
"e,state,mouse,suspend,done", "e",
|
||||
_e_comp_cb_pointer_suspend_resume_done);
|
||||
|
@ -5381,27 +5376,31 @@ _e_comp_x_del(E_Comp *c)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
ecore_x_window_key_ungrab(c->root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
||||
ECORE_EVENT_MODIFIER_CTRL |
|
||||
ECORE_EVENT_MODIFIER_ALT, 0);
|
||||
if (c->grabbed)
|
||||
if (!e_comp_wl)
|
||||
ecore_x_window_key_ungrab(c->root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
||||
ECORE_EVENT_MODIFIER_CTRL |
|
||||
ECORE_EVENT_MODIFIER_ALT, 0);
|
||||
if (ecore_x_display_get())
|
||||
{
|
||||
c->grabbed = 0;
|
||||
ecore_x_ungrab();
|
||||
if (c->grabbed)
|
||||
{
|
||||
c->grabbed = 0;
|
||||
ecore_x_ungrab();
|
||||
}
|
||||
|
||||
for (i = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); i <= e_comp_canvas_layer_map(E_LAYER_CLIENT_PRIO); i++)
|
||||
ecore_x_window_free(c->layers[i].win);
|
||||
|
||||
ecore_x_composite_unredirect_subwindows
|
||||
(c->root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
|
||||
if (c->block_win) ecore_x_window_free(c->block_win);
|
||||
ecore_x_composite_render_window_disable(c->win);
|
||||
e_alert_composite_win(c->root, 0);
|
||||
|
||||
ecore_x_window_free(c->cm_selection);
|
||||
ecore_x_screen_is_composited_set(0, 0);
|
||||
}
|
||||
|
||||
for (i = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); i <= e_comp_canvas_layer_map(E_LAYER_CLIENT_PRIO); i++)
|
||||
ecore_x_window_free(c->layers[i].win);
|
||||
|
||||
ecore_x_composite_unredirect_subwindows
|
||||
(c->root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
|
||||
if (c->block_win) ecore_x_window_free(c->block_win);
|
||||
ecore_x_composite_render_window_disable(c->win);
|
||||
e_alert_composite_win(c->root, 0);
|
||||
|
||||
ecore_x_window_free(c->cm_selection);
|
||||
ecore_x_screen_is_composited_set(0, 0);
|
||||
|
||||
eina_list_free(c->x_comp_data->retry_clients);
|
||||
ecore_timer_del(c->x_comp_data->retry_timer);
|
||||
E_FREE_FUNC(mouse_in_job, ecore_job_del);
|
||||
|
@ -5702,10 +5701,6 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
|||
|
||||
ecore_x_composite_redirect_subwindows(root, ECORE_X_COMPOSITE_UPDATE_MANUAL);
|
||||
|
||||
ecore_x_window_key_grab(root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
||||
ECORE_EVENT_MODIFIER_CTRL |
|
||||
ECORE_EVENT_MODIFIER_ALT, 0);
|
||||
|
||||
ecore_evas_data_set(e_comp->ee, "comp", e_comp);
|
||||
e_comp->bindings_grab_cb = _e_comp_x_bindings_grab_cb;
|
||||
e_comp->bindings_ungrab_cb = _e_comp_x_bindings_ungrab_cb;
|
||||
|
@ -5713,6 +5708,9 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
|||
if (e_comp->comp_type == E_PIXMAP_TYPE_NONE)
|
||||
{
|
||||
if (!e_comp_canvas_init(w, h)) return EINA_FALSE;
|
||||
ecore_x_window_key_grab(root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
||||
ECORE_EVENT_MODIFIER_CTRL |
|
||||
ECORE_EVENT_MODIFIER_ALT, 0);
|
||||
}
|
||||
|
||||
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
||||
|
@ -5734,6 +5732,7 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
|||
if (i >= e_comp_canvas_layer_map(E_LAYER_CLIENT_ABOVE))
|
||||
ecore_x_window_raise(e_comp->layers[i].win);
|
||||
ec = _e_comp_x_client_new(e_comp->layers[i].win, 0);
|
||||
if (!ec) continue;
|
||||
evas_object_name_set(ec->frame, "layer_obj");
|
||||
ec->lock_client_stacking = 1;
|
||||
ec->internal = 1;
|
||||
|
@ -5971,9 +5970,9 @@ e_comp_x_shutdown(void)
|
|||
E_FREE_FUNC(frame_extents, eina_hash_free);
|
||||
E_FREE_FUNC(mouse_in_fix_check_timer, ecore_timer_del);
|
||||
e_xsettings_shutdown();
|
||||
if (x_fatal) return;
|
||||
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
||||
ecore_x_screensaver_custom_blanking_disable();
|
||||
if (x_fatal) return;
|
||||
e_atoms_shutdown();
|
||||
/* ecore_x_ungrab(); */
|
||||
ecore_x_focus_reset();
|
||||
|
|
|
@ -1505,6 +1505,26 @@ e_config_load(void)
|
|||
if (!elm_config_profile_exists(_e_config_profile))
|
||||
elm_config_profile_save(_e_config_profile);
|
||||
}
|
||||
CONFIG_VERSION_CHECK(25)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Config_Binding_Edge *ebe;
|
||||
|
||||
EINA_LIST_FOREACH(e_bindings->edge_bindings, l, ebe)
|
||||
{
|
||||
if ((ebe->context == E_BINDING_CONTEXT_ZONE) &&
|
||||
(ebe->modifiers == 0) &&
|
||||
(ebe->edge >= 1) && (ebe->edge <= 4) &&
|
||||
(!ebe->any_mod) &&
|
||||
(ebe->action) &&
|
||||
(!strcmp(ebe->action, "desk_flip_in_direction")))
|
||||
{
|
||||
ebe->any_mod = 1;
|
||||
}
|
||||
}
|
||||
CONFIG_VERSION_UPDATE_INFO(25);
|
||||
e_config_save_queue();
|
||||
}
|
||||
}
|
||||
elm_config_profile_set(_e_config_profile);
|
||||
if (!e_config->remember_internal_fm_windows)
|
||||
|
|
|
@ -46,7 +46,7 @@ typedef enum
|
|||
/* increment this whenever a new set of config values are added but the users
|
||||
* config doesn't need to be wiped - simply new values need to be put in
|
||||
*/
|
||||
#define E_CONFIG_FILE_GENERATION 24
|
||||
#define E_CONFIG_FILE_GENERATION 25
|
||||
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION)
|
||||
|
||||
#define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!!
|
||||
|
|
|
@ -247,6 +247,15 @@ e_desklock_show(Eina_Bool suspend)
|
|||
E_Desklock_Hide_Cb hide_cb;
|
||||
E_Zone *zone;
|
||||
|
||||
#if !defined(HAVE_PAM) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
||||
if (!e_desklock_is_personal())
|
||||
{
|
||||
e_util_dialog_show(_("Error - no PAM support"),
|
||||
_("No PAM support was built into Enlightenment, so<ps/>"
|
||||
"desk locking is disabled."));
|
||||
return EINA_FALSE;
|
||||
}
|
||||
#endif
|
||||
if (_e_desklock_state) return EINA_TRUE;
|
||||
|
||||
if (e_desklock_is_external() && e_config->desklock_custom_desklock_cmd && e_config->desklock_custom_desklock_cmd[0])
|
||||
|
@ -268,16 +277,6 @@ e_desklock_show(Eina_Bool suspend)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#if ! defined(HAVE_PAM) && ! defined(__OpenBSD__)
|
||||
if (e_desklock_is_system())
|
||||
{
|
||||
e_util_dialog_show(_("Error - no PAM support"),
|
||||
_("No PAM support was built into Enlightenment, so<ps/>"
|
||||
"desk locking is disabled."));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (e_desklock_is_personal())
|
||||
{
|
||||
if (!e_config->desklock_passwd)
|
||||
|
|
|
@ -40,6 +40,20 @@ static E_Exehist *_e_exehist = NULL;
|
|||
static E_Powersave_Deferred_Action *_e_exehist_unload_defer = NULL;
|
||||
static int _e_exehist_changes = 0;
|
||||
|
||||
static void
|
||||
_upgrade_defaults_to_mimeapps(void)
|
||||
{
|
||||
char buf[PATH_MAX], buf2[PATH_MAX];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
if (ecore_file_exists(buf)) return;
|
||||
ecore_file_mkpath(efreet_config_home_get());
|
||||
snprintf(buf2, sizeof(buf2), "%s/applications/defaults.list",
|
||||
efreet_data_home_get());
|
||||
ecore_file_cp(buf2, buf);
|
||||
}
|
||||
|
||||
/* externally accessible functions */
|
||||
EINTERN int
|
||||
e_exehist_init(void)
|
||||
|
@ -65,6 +79,8 @@ e_exehist_init(void)
|
|||
|
||||
E_EVENT_EXEHIST_UPDATE = ecore_event_type_new();
|
||||
|
||||
_upgrade_defaults_to_mimeapps();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -313,8 +329,8 @@ e_exehist_mime_desktop_add(const char *mime, Efreet_Desktop *desktop)
|
|||
f = efreet_util_path_to_file_id(desktop->orig_path);
|
||||
if (!f) return;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list",
|
||||
efreet_data_home_get());
|
||||
snprintf(buf, sizeof(buf), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
ini = efreet_ini_new(buf);
|
||||
//fprintf(stderr, "try open %s = %p\n", buf, ini);
|
||||
if (ini)
|
||||
|
|
|
@ -4561,7 +4561,7 @@ _e_fm2_uri_selected_icon_list_get(Eina_List *uri)
|
|||
if (eina_list_data_find(ic->sd->selected_icons, ic)) break;
|
||||
ic = NULL;
|
||||
}
|
||||
icons = eina_list_append(icons, ic);
|
||||
if (ic) icons = eina_list_append(icons, ic);
|
||||
}
|
||||
return icons;
|
||||
}
|
||||
|
|
|
@ -108,14 +108,17 @@ _e_fm_main_eeze_format_error_msg(char **buf,
|
|||
char *tmp;
|
||||
|
||||
vu = strlen(v->udi) + 1;
|
||||
vm = strlen(v->mount_point) + 1;
|
||||
vm = (v->mount_point ? strlen(v->mount_point) : 0) + 1;
|
||||
en = strlen(name) + 1;
|
||||
size = vu + vm + en + strlen(msg) + 1;
|
||||
tmp = *buf = malloc(size);
|
||||
|
||||
strcpy(tmp, v->udi);
|
||||
tmp += vu;
|
||||
strcpy(tmp, v->mount_point);
|
||||
if (v->mount_point)
|
||||
strcpy(tmp, v->mount_point);
|
||||
else
|
||||
tmp[0] = 0;
|
||||
tmp += vm;
|
||||
strcpy(tmp, name);
|
||||
tmp += en;
|
||||
|
@ -241,7 +244,8 @@ _e_fm_main_eeze_cb_vol_unmounted(void *user_data EINA_UNUSED,
|
|||
v->mounted = EINA_FALSE;
|
||||
INF("UNMOUNT: %s from %s", v->udi, v->mount_point);
|
||||
if (!strncmp(v->mount_point, e_user_dir_get(), strlen(e_user_dir_get())))
|
||||
unlink(v->mount_point);
|
||||
if (unlink(v->mount_point))
|
||||
printf("Error unlinking mount point!\n");
|
||||
size = strlen(v->udi) + 1 + strlen(v->mount_point) + 1;
|
||||
buf = alloca(size);
|
||||
strcpy(buf, v->udi);
|
||||
|
@ -404,18 +408,19 @@ _e_fm_main_eeze_volume_add(const char *syspath,
|
|||
v->partition_label = eeze_disk_udev_get_property(v->disk, "ID_FS_LABEL");
|
||||
}
|
||||
|
||||
/* if we have dev/sda ANd dev/sda1 - ia a parent vol - del the parent vol
|
||||
* since we actually have real child partition volumes to mount */
|
||||
if ((v->partition != 0) && (v->parent))
|
||||
if (v->parent)
|
||||
{
|
||||
E_Volume *v2 = _e_fm_main_eeze_volume_find_fast(v->parent);
|
||||
E_Storage *s;
|
||||
|
||||
if ((v2) && (v2->partition == 0))
|
||||
_e_fm_main_eeze_volume_del(v2->udi);
|
||||
}
|
||||
if (v->partition)
|
||||
{
|
||||
/* prevent having storage and volume from same device */
|
||||
E_Volume *v2 = _e_fm_main_eeze_volume_find_fast(v->parent);
|
||||
|
||||
if ((v2) && (v2->partition == 0))
|
||||
_e_fm_main_eeze_volume_del(v2->udi);
|
||||
}
|
||||
|
||||
{
|
||||
E_Storage *s;
|
||||
s = e_storage_find(v->parent);
|
||||
INF("++VOL:\n syspath: %s\n uuid: %s\n fstype: %s\n size: %llu\n label: %s\n"
|
||||
" partition: %d\n partition_number: %d\n partition_label: %s\n mounted: %d\n mount_point: %s",
|
||||
|
@ -423,7 +428,7 @@ _e_fm_main_eeze_volume_add(const char *syspath,
|
|||
v->partition ? v->partition_label : "(not a partition)", v->mounted, v->mount_point);
|
||||
if (s)
|
||||
v->storage = s;
|
||||
else if (v->parent)
|
||||
else
|
||||
s = v->storage = _e_fm_main_eeze_storage_add(v->parent);
|
||||
|
||||
if (s)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
deps = [
|
||||
dep_eina,
|
||||
dep_ecore,
|
||||
dep_eet,
|
||||
dep_ecore_con,
|
||||
dep_ecore_file,
|
||||
dep_ecore_ipc,
|
||||
|
|
|
@ -100,12 +100,17 @@ _e_fm2_device_volume_setup(E_Volume *v)
|
|||
icon = "media-floppy";
|
||||
else if (!strcmp(v->storage->drive_type, "tape"))
|
||||
icon = "media-tape";
|
||||
else if (!strcmp(v->storage->drive_type, "thumb"))
|
||||
// XXX: maybe a spcial type?
|
||||
icon = "drive-removable-media";
|
||||
else if (!strcmp(v->storage->drive_type, "compact_flash")
|
||||
|| !strcmp(v->storage->drive_type, "memory_stick")
|
||||
|| !strcmp(v->storage->drive_type, "smart_media")
|
||||
|| !strcmp(v->storage->drive_type, "sd_mmc")
|
||||
|| !strncmp(v->storage->drive_type, "flash", 5))
|
||||
icon = "media-flash";
|
||||
else // XXX: fallback if we don't know
|
||||
icon = "media-floppy";
|
||||
}
|
||||
if (icon) eina_stringshare_replace(&v->icon, icon);
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ struct E_Gadget_Config
|
|||
} style;
|
||||
E_Gadget_Configure_Cb configure;
|
||||
Evas_Object *cfg_object;
|
||||
Eina_List *popups;
|
||||
E_Gadget_Site *site;
|
||||
E_Menu *menu;
|
||||
|
||||
|
@ -314,23 +315,29 @@ _desktop_rect_obj_add(Evas_Object *obj)
|
|||
}
|
||||
|
||||
static void
|
||||
_gadget_popup_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
_gadget_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
E_Gadget_Config *zgc = data;
|
||||
if (desktop_editor) evas_object_show(desktop_editor);
|
||||
zgc->popups = eina_list_remove(zgc->popups, event_info);
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_popup(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
||||
{
|
||||
E_Gadget_Site *zgs = data;
|
||||
E_Gadget_Config *zgc = data;
|
||||
E_Gadget_Site *zgs = zgc->site;
|
||||
|
||||
if (event_info && elm_object_widget_check(event_info))
|
||||
elm_object_tree_focus_allow_set(event_info, 0);
|
||||
if (event_info) _desktop_rect_obj_add(event_info);
|
||||
evas_object_smart_callback_call(zgs->layout, "gadget_site_popup", event_info);
|
||||
if (!event_info) return;
|
||||
evas_object_event_callback_add(event_info, EVAS_CALLBACK_HIDE, _gadget_popup_hide, zgs);
|
||||
evas_object_event_callback_add(event_info, EVAS_CALLBACK_HIDE, _gadget_popup_hide, zgc);
|
||||
if (desktop_editor) evas_object_hide(desktop_editor);
|
||||
if (eina_list_data_find(zgc->popups, event_info))
|
||||
ERR("gadget_popup called multiple times for same popup");
|
||||
zgc->popups = eina_list_append(zgc->popups, event_info);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -518,7 +525,7 @@ _gadget_object_create(E_Gadget_Config *zgc)
|
|||
e_object_data_set(zgc->e_obj_inherit, g);
|
||||
zgc->gadget = zgc->display = g;
|
||||
evas_object_event_callback_add(g, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _gadget_object_hints, zgc);
|
||||
evas_object_smart_callback_add(g, "gadget_popup", _gadget_popup, zgc->site);
|
||||
evas_object_smart_callback_add(g, "gadget_popup", _gadget_popup, zgc);
|
||||
evas_object_data_set(g, "__e_gadget", zgc);
|
||||
if (zgc->site->style_cb)
|
||||
zgc->site->style_cb(zgc->site->layout, zgc->style.name, g);
|
||||
|
@ -922,7 +929,10 @@ _site_layout(Evas_Object *o, Evas_Object_Box_Data *priv EINA_UNUSED, void *data)
|
|||
|
||||
if (!zgc->display) continue;
|
||||
if (zgc->moving)
|
||||
_site_gadget_resize(zgc->gadget, w, h, &ww, &hh, &ow, &oh);
|
||||
{
|
||||
if (zgs->layout != pointer_site) continue;
|
||||
_site_gadget_resize(zgc->gadget, w, h, &ww, &hh, &ow, &oh);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (zgc->zone >= 0)
|
||||
|
@ -1127,6 +1137,16 @@ _gadget_act_resize_end(E_Object *obj, const char *params EINA_UNUSED, E_Binding_
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_popups_clear(E_Gadget_Config *zgc)
|
||||
{
|
||||
Eina_List *l, *ll;
|
||||
Evas_Object *popup;
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(zgc->popups, l, ll, popup)
|
||||
evas_object_del(popup);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_gadget_act_move(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev EINA_UNUSED)
|
||||
{
|
||||
|
@ -1153,6 +1173,7 @@ _gadget_act_move(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_
|
|||
zgc->moving = 0;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
_gadget_popups_clear(zgc);
|
||||
z->moving = 1;
|
||||
evas_object_pass_events_set(zgc->site->layout, 1);
|
||||
evas_object_geometry_get(g, NULL, NULL, &w, &h);
|
||||
|
@ -1174,6 +1195,7 @@ _gadget_act_resize(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Even
|
|||
g = e_object_data_get(obj);
|
||||
zgc = evas_object_data_get(g, "__e_gadget");
|
||||
if (zgc->site->orient) return EINA_FALSE;
|
||||
_gadget_popups_clear(zgc);
|
||||
evas_object_geometry_get(g, &x, &y, &w, &h);
|
||||
if (ev->canvas.x < x + (w / 3))
|
||||
zgc->resizing = E_GADGET_SITE_ANCHOR_LEFT;
|
||||
|
@ -1270,6 +1292,7 @@ _gadget_act_menu(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_
|
|||
|
||||
g = e_object_data_get(obj);
|
||||
zgc = evas_object_data_get(g, "__e_gadget");
|
||||
_gadget_popups_clear(zgc);
|
||||
|
||||
zgc->menu = e_menu_new();
|
||||
evas_object_smart_callback_call(g, "gadget_menu", zgc->menu);
|
||||
|
@ -2231,7 +2254,8 @@ e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style)
|
|||
evas_object_size_hint_min_get(style, &zgc->style.minw, &zgc->style.minh);
|
||||
evas_object_event_callback_add(style, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _gadget_style_hints, zgc);
|
||||
evas_object_show(style);
|
||||
evas_object_smart_callback_add(zgc->display, "gadget_popup", _gadget_popup, zgc->site);
|
||||
if (zgc->display != zgc->gadget)
|
||||
evas_object_smart_callback_add(zgc->display, "gadget_popup", _gadget_popup, zgc);
|
||||
return prev;
|
||||
}
|
||||
|
||||
|
@ -2315,7 +2339,7 @@ e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_
|
|||
evas_object_event_callback_add(content, EVAS_CALLBACK_RESIZE, _gadget_util_ctxpopup_moveresize, NULL);
|
||||
}
|
||||
_desktop_rect_obj_add(ctx);
|
||||
evas_object_smart_callback_call(zgc->site->layout, "gadget_site_popup", ctx);
|
||||
evas_object_smart_callback_call(g, "gadget_popup", ctx);
|
||||
if (evas_object_visible_get(ctx))
|
||||
e_comp_shape_queue();
|
||||
}
|
||||
|
@ -2730,7 +2754,6 @@ _editor_gadget_new(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_pass_events_set(desktop_editor, 1);
|
||||
orient = e_gadget_site_orient_get(gi->site);
|
||||
_editor_pointer_site_init(orient, gi->site, gi->editor, 0);
|
||||
e_comp_object_util_del_list_append(gi->editor, pointer_site);
|
||||
|
||||
if (zgc->external.domain)
|
||||
e_gadget_site_gadget_external_add(pointer_site, zgc->external.domain, e_gadget_type_get(gi->gadget), 1);
|
||||
|
@ -2804,6 +2827,15 @@ _editor_gadget_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED
|
|||
elm_object_item_del(gi->it);
|
||||
}
|
||||
|
||||
static int
|
||||
_editor_sort(Elm_Object_Item *ita, Elm_Object_Item *itb)
|
||||
{
|
||||
Gadget_Item *a = elm_object_item_data_get(ita);
|
||||
Gadget_Item *b = elm_object_item_data_get(itb);
|
||||
|
||||
return strcasecmp(e_gadget_type_get(a->gadget), e_gadget_type_get(b->gadget));
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
||||
{
|
||||
|
@ -2891,9 +2923,9 @@ e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
|||
evas_object_pass_events_set(g, 1);
|
||||
evas_object_event_callback_add(g, EVAS_CALLBACK_DEL, _editor_gadget_del, gi);
|
||||
if (orient)
|
||||
gi->it = elm_genlist_item_append(list, &gli, gi, NULL, 0, _editor_gadget_new, gi);
|
||||
gi->it = elm_genlist_item_sorted_insert(list, &gli, gi, NULL, 0, (Eina_Compare_Cb)_editor_sort, _editor_gadget_new, gi);
|
||||
else
|
||||
gi->it = elm_gengrid_item_append(list, &gli, gi, _editor_gadget_new, gi);
|
||||
gi->it = elm_gengrid_item_sorted_insert(list, &gli, gi, (Eina_Compare_Cb)_editor_sort, _editor_gadget_new, gi);
|
||||
}
|
||||
evas_object_event_callback_add(list, EVAS_CALLBACK_DEL, _editor_del, parent);
|
||||
e_comp_object_util_del_list_append(list, tempsite);
|
||||
|
@ -2914,6 +2946,13 @@ e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
|||
return list;
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
if (obj == desktop_editor)
|
||||
evas_object_pass_events_set(desktop_editor, 0);
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
e_gadget_site_edit(Evas_Object *site)
|
||||
{
|
||||
|
@ -2956,6 +2995,7 @@ e_gadget_site_edit(Evas_Object *site)
|
|||
comp_object = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE);
|
||||
evas_object_layer_set(comp_object, E_LAYER_POPUP);
|
||||
evas_object_show(comp_object);
|
||||
evas_object_event_callback_add(comp_object, EVAS_CALLBACK_SHOW, _editor_show, NULL);
|
||||
evas_object_resize(comp_object, zone->w / 2, zone->h / 2);
|
||||
e_comp_object_util_center_on_zone(comp_object, zone);
|
||||
|
||||
|
|
|
@ -1782,7 +1782,7 @@ e_hints_aux_hint_add_with_pixmap(E_Pixmap *cp, int32_t id, const char *name, con
|
|||
E_Comp_Wl_Aux_Hint *hint;
|
||||
Eina_List *l;
|
||||
|
||||
if (!cp) return EINA_FALSE;
|
||||
if ((!cp) || (!val) || (!name)) return EINA_FALSE;
|
||||
cdata = (E_Comp_Wl_Client_Data*)e_pixmap_cdata_get(cp);
|
||||
if (!cdata) return EINA_FALSE;
|
||||
|
||||
|
@ -1836,7 +1836,7 @@ e_hints_aux_hint_change_with_pixmap(E_Pixmap *cp, int32_t id, const char *val, i
|
|||
E_Comp_Wl_Aux_Hint *hint;
|
||||
Eina_Bool found = EINA_FALSE;
|
||||
|
||||
if (!cp) return EINA_FALSE;
|
||||
if ((!cp) || (!val)) return EINA_FALSE;
|
||||
cdata = (E_Comp_Wl_Client_Data*)e_pixmap_cdata_get(cp);
|
||||
if (!cdata) return EINA_FALSE;
|
||||
|
||||
|
|
|
@ -23,6 +23,19 @@ _e_init_cb_signal_done_ok(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
e_init_hide();
|
||||
}
|
||||
|
||||
static void
|
||||
_e_init_render_pre(void *data EINA_UNUSED, Evas *e, void *info EINA_UNUSED)
|
||||
{
|
||||
Eina_List *l;
|
||||
Evas_Object *o;
|
||||
|
||||
evas_event_callback_del(e, EVAS_CALLBACK_RENDER_PRE, _e_init_render_pre);
|
||||
EINA_LIST_FOREACH(splash_objs, l, o)
|
||||
{
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
|
||||
/* public functions */
|
||||
EINTERN int
|
||||
e_init_init(void)
|
||||
|
@ -67,9 +80,10 @@ e_init_show(void)
|
|||
evas_object_move(o, zone->x, zone->y);
|
||||
evas_object_resize(o, zone->w, zone->h);
|
||||
evas_object_layer_set(o, E_LAYER_MAX - 1000);
|
||||
evas_object_show(o);
|
||||
splash_objs = eina_list_append(splash_objs, o);
|
||||
}
|
||||
evas_event_callback_add
|
||||
(e_comp->evas, EVAS_CALLBACK_RENDER_PRE, _e_init_render_pre, NULL);
|
||||
edje_object_part_text_set(_e_init_object, "e.text.disable_text",
|
||||
"Disable splash screen");
|
||||
edje_object_signal_callback_add(_e_init_object, "e,state,done_ok", "e",
|
||||
|
@ -112,12 +126,20 @@ e_init_status_set(const char *str)
|
|||
E_API void
|
||||
e_init_done(void)
|
||||
{
|
||||
Eina_List *l;
|
||||
Evas_Object *o;
|
||||
|
||||
undone--;
|
||||
if (undone > 0) return;
|
||||
done = 1;
|
||||
ecore_event_add(E_EVENT_INIT_DONE, NULL, NULL, NULL);
|
||||
// printf("---DONE %p\n", client);
|
||||
edje_object_signal_emit(_e_init_object, "e,state,done", "e");
|
||||
if (!done)
|
||||
{
|
||||
done = 1;
|
||||
ecore_event_add(E_EVENT_INIT_DONE, NULL, NULL, NULL);
|
||||
EINA_LIST_FOREACH(splash_objs, l, o)
|
||||
{
|
||||
edje_object_signal_emit(o, "e,state,done", "e");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
E_API void
|
||||
|
|
|
@ -44,6 +44,7 @@ static void _e_int_menus_virtuals_pre_cb(void *data, E_Menu *m);
|
|||
static void _e_int_menus_virtuals_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_virtuals_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_themes_about(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_report_bug(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_lost_clients_pre_cb(void *data, E_Menu *m);
|
||||
static void _e_int_menus_lost_clients_free_hook(void *obj);
|
||||
static void _e_int_menus_lost_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
@ -251,6 +252,11 @@ e_int_menus_main_new(void)
|
|||
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-theme");
|
||||
e_menu_item_callback_set(mi, _e_int_menus_themes_about, NULL);
|
||||
|
||||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi, _("Report Bug"));
|
||||
e_util_menu_item_theme_icon_set(mi, "dialog-error");
|
||||
e_menu_item_callback_set(mi, _e_int_menus_report_bug, NULL);
|
||||
|
||||
l = _e_int_menus_augmentation_find("enlightenment/1");
|
||||
if (l) _e_int_menus_augmentation_add(subm, l);
|
||||
|
||||
|
@ -638,6 +644,12 @@ _e_int_menus_themes_about(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_
|
|||
if (about) e_theme_about_show(about);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_report_bug(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
|
||||
{
|
||||
e_util_open("https://www.enlightenment.org/contrib/report-bug.md", NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
static void
|
||||
_e_int_menus_fwin_favorites_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
|
@ -682,6 +694,80 @@ _e_int_menus_main_exit(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Ite
|
|||
if ((a) && (a->func.go)) a->func.go(NULL, NULL);
|
||||
}
|
||||
|
||||
static char *
|
||||
_e_int_menus_app_exe_get(const char *exec)
|
||||
{
|
||||
char *real, *d;
|
||||
const char *s;
|
||||
Eina_Bool in_quote_dbl = EINA_FALSE;
|
||||
Eina_Bool in_quote = EINA_FALSE;
|
||||
|
||||
real = malloc(strlen(exec) + 1);
|
||||
if (!real) return NULL;
|
||||
for (d = real, s = exec; *s; s++)
|
||||
{
|
||||
if (in_quote_dbl)
|
||||
{
|
||||
switch (*s)
|
||||
{
|
||||
case '\"':
|
||||
in_quote_dbl = EINA_FALSE;
|
||||
break;
|
||||
case '\\':
|
||||
s++;
|
||||
EINA_FALLTHROUGH
|
||||
default:
|
||||
*d = *s;
|
||||
d++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (in_quote)
|
||||
{
|
||||
switch (*s)
|
||||
{
|
||||
case '\'':
|
||||
in_quote = EINA_FALSE;
|
||||
break;
|
||||
case '\\':
|
||||
s++;
|
||||
EINA_FALLTHROUGH
|
||||
default:
|
||||
*d = *s;
|
||||
d++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (*s)
|
||||
{
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
case '\n':
|
||||
goto done;
|
||||
break;
|
||||
case '\"':
|
||||
in_quote_dbl = EINA_TRUE;
|
||||
break;
|
||||
case '\'':
|
||||
in_quote = EINA_TRUE;
|
||||
break;
|
||||
case '\\':
|
||||
s++;
|
||||
EINA_FALLTHROUGH
|
||||
default:
|
||||
*d = *s;
|
||||
d++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
*d = 0;
|
||||
return real;
|
||||
}
|
||||
/*
|
||||
* This function searches $PATH for try_exec or exec
|
||||
* return true if try_exec or exec is found!
|
||||
|
@ -693,23 +779,31 @@ _e_int_menus_app_finder(const char *exec)
|
|||
char **split, buf[PATH_MAX];
|
||||
Eina_Bool exec_found = EINA_FALSE;
|
||||
int i = 0;
|
||||
char *real = NULL;
|
||||
|
||||
if (strchr(exec, '/'))
|
||||
if (!exec) return EINA_FALSE;
|
||||
real = _e_int_menus_app_exe_get(exec);
|
||||
if (!real) return EINA_FALSE;
|
||||
if (strchr(real, '/'))
|
||||
{
|
||||
if (ecore_file_exists(exec) && ecore_file_can_exec(exec))
|
||||
return EINA_TRUE;
|
||||
if (ecore_file_exists(real) && ecore_file_can_exec(real))
|
||||
{
|
||||
free(real);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!env)
|
||||
{
|
||||
WRN("Unable to $PATH, Returning TRUE for every .desktop");
|
||||
free(real);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
split = eina_str_split(env, ":", 0);
|
||||
for (i = 0; split[i] != NULL; i++)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/%s", split[i], exec);
|
||||
snprintf(buf, sizeof(buf), "%s/%s", split[i], real);
|
||||
|
||||
if (ecore_file_exists(buf) && ecore_file_can_exec(buf))
|
||||
{
|
||||
|
@ -723,6 +817,7 @@ _e_int_menus_app_finder(const char *exec)
|
|||
if (!exec_found)
|
||||
WRN("Unable to find: [%s] I searched $PATH=%s", exec, env);
|
||||
|
||||
free(real);
|
||||
return exec_found;
|
||||
}
|
||||
|
||||
|
@ -783,16 +878,7 @@ _e_int_menus_app_config_append(Efreet_Desktop *desktop)
|
|||
}
|
||||
else if (cma->exec)
|
||||
{
|
||||
if (!strchr(cma->exec, ' '))
|
||||
cma->exec_valid = _e_int_menus_app_finder(cma->exec);
|
||||
else
|
||||
{
|
||||
char **split;
|
||||
split = eina_str_split(cma->exec, " ", 0);
|
||||
cma->exec_valid = _e_int_menus_app_finder(split[0]);
|
||||
free(split[0]);
|
||||
free(split);
|
||||
}
|
||||
cma->exec_valid = _e_int_menus_app_finder(cma->exec);
|
||||
}
|
||||
|
||||
e_config->menu_applications = eina_list_append(e_config->menu_applications, cma);
|
||||
|
|
|
@ -218,7 +218,7 @@ e_intl_language_set(const char *lang)
|
|||
"An error occurred setting your locale. \n\n"
|
||||
|
||||
"The locale you have chosen '%s' appears to \n"
|
||||
"be an alias, however, it can not be resloved.\n"
|
||||
"be an alias, however, it can not be resolved.\n"
|
||||
"Please make sure you have a 'locale.alias' \n"
|
||||
"file in your 'messages' path which can resolve\n"
|
||||
"this alias.\n\n"
|
||||
|
@ -585,7 +585,7 @@ _e_intl_locale_alias_hash_get(void)
|
|||
char alias[4096], locale[4096];
|
||||
|
||||
/* read locale alias lines */
|
||||
while (fscanf(f, "%4090s %[^\n]\n", alias, locale) == 2)
|
||||
while (fscanf(f, "%4095s %4095[^\n]\n", alias, locale) == 2)
|
||||
{
|
||||
/* skip comments */
|
||||
if ((alias[0] == '!') || (alias[0] == '#'))
|
||||
|
@ -873,7 +873,7 @@ _e_intl_locale_system_locales_get(void)
|
|||
if (output)
|
||||
{
|
||||
char line[32];
|
||||
while (fscanf(output, "%[^\n]\n", line) == 1)
|
||||
while (fscanf(output, "%31[^\n]\n", line) == 1)
|
||||
locales = eina_list_append(locales, strdup(line));
|
||||
|
||||
pclose(output);
|
||||
|
|
|
@ -459,8 +459,6 @@ main(int argc, char **argv)
|
|||
e_error_message_show(_("Enlightenment cannot initialize Elementary!\n"));
|
||||
_e_main_shutdown(-1);
|
||||
}
|
||||
if (!eina_streq(elm_theme_get(NULL), "default"))
|
||||
elm_theme_extension_add(NULL, "default");
|
||||
TS("Elementary Init Done");
|
||||
//_e_main_shutdown_push(elm_shutdown);
|
||||
|
||||
|
@ -1042,9 +1040,6 @@ main(int argc, char **argv)
|
|||
}
|
||||
TS("Run Startup Apps Done");
|
||||
|
||||
if (e_config->show_splash && (!after_restart))
|
||||
ecore_timer_loop_add(2.0, _e_main_cb_startup_fake_end, NULL);
|
||||
|
||||
TS("E_Comp Thaw");
|
||||
e_comp_all_thaw();
|
||||
TS("E_Comp Thaw Done");
|
||||
|
@ -1085,6 +1080,9 @@ main(int argc, char **argv)
|
|||
|
||||
e_util_env_set("E_RESTART", "1");
|
||||
|
||||
if (e_config->show_splash && (!after_restart))
|
||||
ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
|
||||
|
||||
TS("MAIN LOOP AT LAST");
|
||||
if (!setjmp(x_fatal_buff))
|
||||
ecore_main_loop_begin();
|
||||
|
@ -1814,6 +1812,6 @@ _e_main_cb_idle_after(void *data EINA_UNUSED)
|
|||
static Eina_Bool
|
||||
_e_main_cb_startup_fake_end(void *data EINA_UNUSED)
|
||||
{
|
||||
e_init_hide();
|
||||
e_init_done();
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
|
|
@ -1175,10 +1175,14 @@ e_menu_idler_before(void)
|
|||
/* phase 4. de-activate... */
|
||||
EINA_LIST_REVERSE_FOREACH(_e_active_menus, l, m)
|
||||
{
|
||||
if ((!m->active) && (!evas_object_visible_get(m->comp_object)))
|
||||
if (!m->active)
|
||||
{
|
||||
_e_menu_unrealize(m);
|
||||
removals = eina_list_append(removals, m);
|
||||
if ((m->realized) &&
|
||||
(!evas_object_visible_get(m->comp_object)))
|
||||
{
|
||||
_e_menu_unrealize(m);
|
||||
removals = eina_list_append(removals, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
EINA_LIST_FREE(removals, m)
|
||||
|
|
|
@ -451,7 +451,8 @@ client_notify_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
|
|||
if (!eldbus_message_arguments_get(msg, "u", &id))
|
||||
goto end;
|
||||
end:
|
||||
cb(data, id);
|
||||
if (cb)
|
||||
cb(data, id);
|
||||
eldbus_connection_unref(conn);
|
||||
eldbus_shutdown();
|
||||
}
|
||||
|
@ -532,7 +533,8 @@ notification_client_dbus_send(E_Notification_Notify *notify, E_Notification_Clie
|
|||
|
||||
p = eldbus_connection_send(conn, msg, client_notify_cb, data, 5000);
|
||||
EINA_SAFETY_ON_NULL_GOTO(p, error);
|
||||
eldbus_pending_data_set(p, "cb", cb);
|
||||
if (cb)
|
||||
eldbus_pending_data_set(p, "cb", cb);
|
||||
eldbus_pending_data_set(p, "conn", conn);
|
||||
|
||||
return EINA_TRUE;
|
||||
|
@ -559,7 +561,10 @@ e_notification_client_send(E_Notification_Notify *notify, E_Notification_Client_
|
|||
normalize_notify(notify);
|
||||
|
||||
if (!n_data)
|
||||
return notification_client_dbus_send(notify, cb, data);
|
||||
{
|
||||
fprintf(stderr, "UNHANDLED NOTIFICATION:\nSummary: %s\nBody: %s\n", notify->summary, notify->body);
|
||||
return notification_client_dbus_send(notify, cb, data);
|
||||
}
|
||||
|
||||
//local
|
||||
copy = malloc(sizeof(E_Notification_Notify));
|
||||
|
|
|
@ -113,8 +113,8 @@ handler_find(const char *mime)
|
|||
char path[PATH_MAX];
|
||||
const char *name;
|
||||
|
||||
snprintf(path, sizeof(path), "%s/applications/defaults.list",
|
||||
efreet_data_home_get());
|
||||
snprintf(path, sizeof(path), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
name = xdg_defaults_get(path, mime);
|
||||
if (!name)
|
||||
{
|
||||
|
@ -328,7 +328,8 @@ terminal_open(void)
|
|||
s = efreet_data_home_get();
|
||||
if (s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
|
||||
snprintf(buf, sizeof(buf), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
tdesktop = _terminal_get(buf);
|
||||
}
|
||||
if (tdesktop) goto have_desktop;
|
||||
|
|
|
@ -144,7 +144,7 @@ static void
|
|||
_e_smart_child_resize_hook(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
Evas_Coord w, h;
|
||||
Evas_Coord w = 0, h = 0;
|
||||
|
||||
sd = data;
|
||||
if (!sd->child_obj) return;
|
||||
|
@ -173,10 +173,14 @@ _e_smart_add(Evas_Object *obj)
|
|||
sd = E_NEW(E_Smart_Data, 1);
|
||||
if (!sd) return;
|
||||
sd->smart_obj = obj;
|
||||
sd->px = 0;
|
||||
sd->py = 0;
|
||||
sd->x = 0;
|
||||
sd->y = 0;
|
||||
sd->w = 0;
|
||||
sd->h = 0;
|
||||
sd->child_w = 0;
|
||||
sd->child_h = 0;
|
||||
evas_object_smart_data_set(obj, sd);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ struct _E_Pixmap
|
|||
E_Pixmap_Type type;
|
||||
|
||||
int64_t win;
|
||||
int64_t alias;
|
||||
Ecore_Window parent;
|
||||
|
||||
int w, h;
|
||||
|
@ -294,10 +295,36 @@ _e_pixmap_find(E_Pixmap_Type type, va_list *l)
|
|||
E_API int
|
||||
e_pixmap_free(E_Pixmap *cp)
|
||||
{
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
Ecore_X_Window xwin = cp ? cp->win : 0;
|
||||
Ecore_X_Window alias_xwin = cp ? cp->alias : 0;
|
||||
#endif
|
||||
#ifdef HAVE_WAYLAND
|
||||
int64_t id = cp ? cp->win : 0;
|
||||
int64_t alias_id = cp ? cp->alias : 0;
|
||||
#endif
|
||||
E_Pixmap_Type type;
|
||||
|
||||
if (!cp) return 0;
|
||||
if (--cp->refcount) return cp->refcount;
|
||||
type = cp->type;
|
||||
e_pixmap_image_clear(cp, EINA_FALSE);
|
||||
eina_hash_del_by_key(pixmaps[cp->type], &cp->win);
|
||||
switch (type)
|
||||
{
|
||||
case E_PIXMAP_TYPE_X:
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
if (alias_xwin) eina_hash_del(aliases[type], &alias_xwin, cp);
|
||||
eina_hash_del(pixmaps[type], &xwin, cp);
|
||||
#endif
|
||||
break;
|
||||
case E_PIXMAP_TYPE_WL:
|
||||
#ifdef HAVE_WAYLAND
|
||||
if (alias_id) eina_hash_del(aliases[type], &alias_id, cp);
|
||||
eina_hash_del(pixmaps[type], &id, cp);
|
||||
#endif
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1074,6 +1101,7 @@ e_pixmap_image_opaque_get(E_Pixmap *cp, int *x, int *y, int *w, int *h)
|
|||
E_API void
|
||||
e_pixmap_alias(E_Pixmap *cp, E_Pixmap_Type type, ...)
|
||||
{
|
||||
E_Pixmap *cp2;
|
||||
va_list l;
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
Ecore_X_Window xwin;
|
||||
|
@ -1090,6 +1118,9 @@ e_pixmap_alias(E_Pixmap *cp, E_Pixmap_Type type, ...)
|
|||
xwin = va_arg(l, uint32_t);
|
||||
if (!aliases[type])
|
||||
aliases[type] = eina_hash_int32_new(NULL);
|
||||
cp2 = eina_hash_find(aliases[type], &xwin);
|
||||
if ((cp2) && (!cp)) cp2->alias = 0;
|
||||
else if (cp) cp->alias = xwin;
|
||||
eina_hash_set(aliases[type], &xwin, cp);
|
||||
#endif
|
||||
break;
|
||||
|
@ -1098,6 +1129,9 @@ e_pixmap_alias(E_Pixmap *cp, E_Pixmap_Type type, ...)
|
|||
id = va_arg(l, int64_t);
|
||||
if (!aliases[type])
|
||||
aliases[type] = eina_hash_int64_new(NULL);
|
||||
cp2 = eina_hash_find(aliases[type], &xwin);
|
||||
if ((cp2) && (!cp)) cp2->alias = 0;
|
||||
else if (cp) cp->alias = id;
|
||||
eina_hash_set(aliases[type], &id, cp);
|
||||
#endif
|
||||
break;
|
||||
|
|
|
@ -418,9 +418,11 @@ done:
|
|||
E_FREE(a_x);
|
||||
E_FREE(a_y);
|
||||
|
||||
if ((*rx + w) > desk->zone->x + desk->zone->w) *rx = desk->zone->x + desk->zone->w - w;
|
||||
e_zone_desk_useful_geometry_get(desk->zone, desk, &zx, &zy, &zw, &zh);
|
||||
|
||||
if ((*rx + w) > zx + zw) *rx = zx + zw - w;
|
||||
if (*rx < zx) *rx = zx;
|
||||
if ((*ry + h) > desk->zone->y + desk->zone->h) *ry = desk->zone->y + desk->zone->h - h;
|
||||
if ((*ry + h) > zy + zh) *ry = zy + zh - h;
|
||||
if (*ry < zy) *ry = zy;
|
||||
|
||||
// printf("0 - PLACE %i %i | %ix%i\n", *rx, *ry, w, h);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue