Compare commits

...

131 Commits

Author SHA1 Message Date
Simon Lees 74e604ba41
0.22.4 NEWS 2018-08-22 07:21:58 +09:30
Simon Lees b3e44793c3 0.22.4 build files
Signed-off-by: Simon Lees <sflees@suse.de>
2018-08-22 07:21:29 +09:30
Simon Lees 52030b2fc1 Revert "move config/ to data/config/"
This reverts commit 5cb6e1e8fa.
2018-08-22 07:19:10 +09:30
Chris Michael 5af9485c4f enlightenment: Ensure we have a valid menu comp object before calling
Summary:
evas functions

This fixes an issue when quickly mousing through menus can cause a
segfault in Enlightenment due to menu->comp_object being NULL

ref T7030

Reviewers: zmike

Reviewed By: zmike

Subscribers: cedric

Tags: #efl, #enlightenment22

Maniphest Tasks: T7030

Differential Revision: https://phab.enlightenment.org/D6641
2018-08-02 10:08:34 -04:00
Carsten Haitzler ae64aabfa2 e pixmap - follow on from previous commit to finally fix pixmap tracking
follow on form 4c7b798b45 - really
remove from the alias hash. the alias id is different and should ave
been stored in the pixmap and be deleted when pixmap is freed. i had
it right to remove from the aliases hash too, but i used the wrong id
- i used the "core" pixmap id, not alias. this tracks and uses that
alias.

this means internal windows are reliable now and dont crash...

@fix.
2018-08-02 10:08:34 -04:00
Carsten Haitzler 600a739f91 e wl - fix e pixmap tracking to remove from both aliases and pixmaps
on pixmap free only the pixmaps entry was deleted not the pixmaps hash
one. this led to lookup of stale pixmaps in the aliases hash... and
then a crash.

also use the correct local type with the correct byte order as well.
this has probably been an issue for a while but now internal windows
should work much better without crashes.

@fix
2018-08-02 10:08:34 -04:00
Carsten Haitzler f968b37095 e randr screen setup - fix disabling of scale checkbox 2018-08-02 10:04:31 -04:00
Carsten Haitzler 5347935700 e randr - fix crash when no zones found 2018-08-02 10:02:45 -04:00
Mike Blumenkrantz 894dddfcfd avoid adding render updates for deleted clients after animation completes
Summary:
in the case where deletion is deferred to preserve a window animation this
codepath may be triggered by a deleted client, at which point no render update
should occur in order to avoid compositor errors

ref f78eb3c108
fix T5203

Reviewers: ManMower, devilhorns

Reviewed By: devilhorns

Subscribers: netstar, cedric

Tags: #enlightenment-git

Maniphest Tasks: T5203

Differential Revision: https://phab.enlightenment.org/D6367
2018-08-02 10:02:20 -04:00
Daniel Zaoui 74c372c0ff Battery: fix the battery status when some battery devices are not valid
It happens that some devices are considered as batteries, even if they
cannot be charged or used as a power supply for the laptop.
The ELAN device deals with the touchpad and is a "battery". When looking
at the udev info, it appears that there is no technology present as
well as the basic battery info (energy levels).

P: /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-ELAN24CC:00/0018:04F3:24CC.0003/power_supply/hid-0018:04F3:24CC.0003-battery
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-ELAN24CC:00/0018:04F3:24CC.0003/power_supply/hid-0018:04F3:24CC.0003-battery
E: POWER_SUPPLY_CAPACITY=1
E: POWER_SUPPLY_MODEL_NAME=ELAN24CC:00 04F3:24CC
E: POWER_SUPPLY_NAME=hid-0018:04F3:24CC.0003-battery
E: POWER_SUPPLY_ONLINE=1
E: POWER_SUPPLY_PRESENT=1
E: POWER_SUPPLY_SCOPE=Device
E: POWER_SUPPLY_STATUS=Discharging
E: SUBSYSTEM=power_supply

The issue with that kind of devices is that it confuses the battery
gadget. Since two batteries are present, the total capacity is divided
by 2, resulting in the gadget displaying only 50% when the battery is
fully charged.
To avoid this, we check that the battery technology is known.

@fix
2018-08-02 10:01:46 -04:00
Carsten Haitzler 57b2988e7a mixer - fix exe handler del and handle to stop crashes after mixer run
running emixer from the mixer module popup was resulting in crashes.
it was this exe event handler handle and leaving a dangling garbage
ptr after it was deleted.

@fix
2018-08-02 10:01:10 -04:00
Carsten Haitzler a451626cc6 emxier desktop - fix categories to match well known cat names
Audio is not a well known/valid one. AudioVideo is. fixes T5076

@fix
2018-08-02 10:00:58 -04:00
Carsten Haitzler 3cb88fe76a meson - fix dir_sysconf to be under the prefix as it was not
dir_sysconf was set to "etc". not even a /.  this meant
enlightenment_sys couldnt find/load sysactions.conf as it used a
non-relocatable fixed location due to security (setuid root) reasons.
2018-08-02 10:00:39 -04:00
Carsten Haitzler 2c52afb6f4 input method conf dialog - fix filtering of imc's to search path
if exe is not a full path it'd be filtered out... so fix and do a path
search to show imc's that can work.

@fix
2018-08-02 09:59:31 -04:00
Mike Blumenkrantz 5cb6e1e8fa move config/ to data/config/
Summary:
this is part of the datadir distribution, it should not be in a different
directory than the rest of the datadir distribution

the gnu coding standards (https://www.gnu.org/prep/standards/html_node/Directory-Variables.html)
define 'datadir' as:

The directory for installing idiosyncratic read-only architecture-independent
data files for this program. This is usually the same place as ‘datarootdir’,
but we use the two separate variables so that you can move these program-specific
files without altering the location for Info files, man pages, etc.

This should normally be /usr/local/share, but write it as $(datarootdir).
(If you are using Autoconf, write it as ‘@datadir@’.)

The definition of ‘datadir’ is the same for all packages, so you should install your
data in a subdirectory thereof. Most packages install their data under $(datadir)/package-name/.

while this text has no clear requirement or suggestion for a corresponding
repository layout, projects typically employ a certain consistency in their
repository layout both for ease of maintenance and ease of learning for new
contributors.

this project has both a data/ directory, which contains the datadir distribution,
as well as the config/ directory, which also contains the datadir distribution.
this complicates matters both for active maintainers/developers who must
remember that the repository and build tree layouts have this exception,
and for new contributors who will initially be confused by this exception

other well-organized open source projects, such as wayland, have chosen to not
use a data/ directory. these projects have the datadir distribution in the base
directory of the repositor, which is a fine practice as it maintains consistency
for the project since all the files for the datadir distribution are in the same
directory.

by applying this patch, the project will move towards a more easily readable and
learnable layout. current and future developers will no longer need to wonder why
this directory is outside of the data/ directory, and anyone attempting to reference
these files from the source/build trees will be able to do so more easily

ref D6013

Reviewers: cedric, raster, bu5hm4n

Reviewed By: raster

Subscribers: devilhorns

Tags: #enlightenment-git

Differential Revision: https://phab.enlightenment.org/D6154
2018-08-02 09:58:49 -04:00
Mike Blumenkrantz bd3e00d463 update arcconfig key:values for new phabricator api
Summary:
https://secure.phabricator.com/book/phabricator/article/arcanist_new_project/
the previous values here are no longer valid and will fail when used
with git-phab
Depends on D6154

Reviewers: cedric, raster, bu5hm4n

Reviewed By: bu5hm4n

Subscribers: devilhorns

Tags: #enlightenment-git

Differential Revision: https://phab.enlightenment.org/D6155
2018-08-02 09:58:38 -04:00
Derek Foreman e047ed2638 compile against stable EFL again
E should probably continue to build against released EFL older than
the current interface name changes.
2018-08-02 09:58:31 -04:00
Carsten Haitzler 5155856566 compile again after efl change interface names... 2018-08-02 09:58:22 -04:00
Carsten Haitzler ff17200996 e thumb - be consistent and use safe run for restarting thumbnailer
fix inconsistency in using ecore_exe_run and the e_util wrapper...

@fix
2018-08-02 09:57:31 -04:00
Carsten Haitzler deb08178d7 e pan/scrollframe - fix garbage pan values that happen temporarily
during setup garbage pan positions can be set due to uninitialized
local variables. fix that to initialize.

@fix
2018-08-02 09:57:23 -04:00
Carsten Haitzler 65039f9c4c efm - dont add null icons to list ... fixes segv
as per title. dont store null icons in the list - not intended to be
that way.

@fix
2018-08-02 09:57:16 -04:00
Carsten Haitzler 2583e560a2 startup - fix management of timer pointer for startup timeout
fixes access of invalid timer pointer value on slow systems. (was
being caught with magic/invalid eiod before)

@fix
2018-08-02 09:57:09 -04:00
Carsten Haitzler 8b129bab79 efm - fill in some media icon blanks which lead to generic icons
i found a thumbdrive i got a generic "whatever" file icon for...
because efm media type matching didnt find an icon name for it. fix
that.
2018-08-02 09:56:47 -04:00
maxerba 46d2f7a6e5 Updating all po files 2018-08-02 09:56:09 -04:00
Carsten Haitzler 5e07f6815c edge flip while dragging with alt - fix to work again
this fixes when you drag a wqindow to screen edge and it flips if you
use alt+drag as opposed to just dragging titlebar around without alt.
it fixes it by updating your config to allow "any modifier" for edge
flips which is actually correct.

@fix
2018-08-02 09:55:47 -04:00
Chris Michael 25c2f3ab5c conf_randr: Use eina_stringshare_replace
Instead of deleteing a stringshare and re-adding it, just use
eina_stringshare_replace

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-08-02 09:53:50 -04:00
Carsten Haitzler eb2bdeb443 e mouse bindings - fix wheel conflict check to check only dir 0
allows ylou to bund extra wheels for desktop switching ... much
better. no conflicts with signals :)
2018-08-02 09:53:42 -04:00
Carsten Haitzler 781f4eb70b e menus - when filtering for exe handle quotes, escapes etc.
handle quotes, escapes and so on for the shell command so you can do
things like Exec="ls" and it still work. this will also allow
executables with spaces in them as well with quotes or escapes as
backslash.

this fixes T6787
@fix
2018-08-02 09:53:17 -04:00
Al Poole 04c8ec9c39 AUTHORS: use netstar's real name. 2018-08-02 09:51:58 -04:00
Derek Foreman 768e64bd2f Fix recent typo in mirror object alpha setting
ref 6a04bfb0ff
2018-08-02 09:51:55 -04:00
Derek Foreman 14c04b8777 Fix single frame broken render on wayland client opaque region change
Turns out this is called too late in the render pass and a single frame
can occur with the old border setting.  This can lead to nasty flicker
artifacts.
2018-08-02 09:51:54 -04:00
Derek Foreman b88d080742 Move alpha set for mirrors out of pixels_get callback
the pixels_get callback fires too late for this to work properly, so
set it in e_comp_object_dirty() instead.
2018-08-02 09:51:52 -04:00
Derek Foreman 34c28af7dc Remove useless pixels_dirty_set from mirror_pixels_get
This is implicit at the end of render.
2018-08-02 09:51:50 -04:00
Alastair Poole 6a1f91ae0b e_ckpasswd_main: Fix build on OpenBSD. 2018-05-31 12:34:40 +01:00
Simon Lees 52713ce0db
22.3 NEWS 2018-03-22 20:36:31 +10:30
Simon Lees cd4c2cee3f
22.3 build file bump 2018-03-22 20:33:14 +10:30
Carsten Haitzler 2a0f90dab3 build - make pam a requirement on non-bsd unless disabled
this shou,ld provide a compile failure for when no pam headers are
found and thus pam not enabled if we need pam for auth (i.e. linux).
so it'll be harder to foot-shoot now.also an add-on fix to T6779
2018-03-22 12:18:03 +09:00
Carsten Haitzler 3bdcb7a0c2 move from data_home/apps/defaults.list to config_home/mimeapps.list
this moves to the newer mimeapps.list file in ~/.config from the older
defaults.list. it also provides a migration (copy file ovr if target
doesnt exist on e startup).

this fixes T6784

@fix
2018-03-22 12:17:03 +09:00
Carsten Haitzler 8b03df8b30 e desklock pam error - go back to previous text
since we had translations of this, go back to the prior text so we
keep these. also dont show if using a personal password. related to
fixing T6779
2018-03-22 12:16:47 +09:00
Carsten Haitzler 71d481b4c4 desklock - make it fail to lock on non-bsd platforms if no pam support
if no pam support detected at build time, dont even lock to begin
with. this should fix T6779

yes - even better is making pam a requirement for building and to be
optionallhy disabled, but then even if disabled we still need this check.

this has been a long long long standing bug in e. i think this is why
we had some reports of "any password unlocks e" - because it was built
without pam support and before auth was always succeeding without pam.
now it is always FAILING instead (which is probably better).

@fix
2018-03-22 12:16:32 +09:00
Carsten Haitzler 0d9a763165 fix autofoo build to match e auth patch backport
the autofoo wasnt updated with the patch and peolpe are using the
autotools build thus this btoke e lockscreen auth but not building the
binary.
2018-03-22 12:11:23 +09:00
Derek Foreman 3c5b541385 Revert no-longer required pulseaudio hack for wayland
The problem this solved is now handled elsewhere.

Reverts what's left of commit 6eefae4822
2018-03-20 12:32:01 -05:00
Simon Lees 256236eba3
22.2 NEWS 2018-03-13 13:51:22 +10:30
Simon Lees ffec2e91e7
22.2 build file bump 2018-03-13 13:38:02 +10:30
Carsten Haitzler 1296061c19 systray - fix sizing of tray so you can see the icons
this should also address the last comment with a fix T5910
2018-03-13 13:28:54 +10:30
Carsten Haitzler eba3bec170 e systray/indicator protocol pixmap data fetch fix
this fixes several issues in the pixmap data fetching

1. it over-read the input buffer assuming ints count instead it has
byte count for length
2. it would leak memory if you have multiple pixmaps and the largest
was not the first found.
3. it always swapped pixel bytes instead of only on little endian.

this should fix T5910
2018-03-13 13:25:25 +10:30
Mike Blumenkrantz 348e57123c remove adding theme extension for "default" theme on startup
elm_theme does this automatically so there should never be a need for it
2018-03-02 11:14:27 -05:00
Carsten Haitzler 3c4e25360e e auth - move all auth to child process only (e_ckpasswd).
this should fix T6211 ensuring no drivers can cause a segfault at exit
time. this also happens to remove the enlightenment_sys -z option for
openbsd and unifies all the passwd checking into the single
enlightenment_ckpasswd binary util (that has ifdefs for openbsd,
freebsd and linux pam in it).

this simplifies code removing a mess of auth being done in multiple
places, removes special fork vs run 1 exe or a different exe in
different cases making it more maintainable. yes - this requires
enlightenment_ckpasswd to be setuid root, but it already was when it
was built.

@fix
2018-03-02 11:14:20 -05:00
Al Poole e8132e8723 sysinfo: fix linux build. 2018-03-02 11:14:08 -05:00
Al Poole da19c3cd6a sysinfo: fix cpuclock for BSD.
This lets us use the cpuclock gadget on FreeBSD machines.

@fix T6259
2018-03-02 11:14:04 -05:00
Mike Blumenkrantz 140f176d8e fix luncher efreet event handling
this does not require a bar resize, a bar refill, or any object creation.
it only requires icon file setting.
2018-03-02 11:13:58 -05:00
Mike Blumenkrantz 553b8063a5 always unset pass_events on desktop editor when it is shown
fixes some cases where the editor could not be interacted with after
it was hidden during gadget placement
2018-03-02 11:13:49 -05:00
Mike Blumenkrantz c43113381c do not add gadget editor pointer site to editor del_list
the pointer site will never exist at the time when the editor is
destroyed
2018-03-02 11:13:42 -05:00
Thanatermesis c35aaefc1f Fix for window borders to accept edje icons
If you have edje icons installed in your system (efreet smartly searches
the candidate icon based in your Icon= entry), they works correctly in
the menus, bar, etc... but doesn't works in the window borders icon,
this is because the code try's to add it without dealing with the .edj
extensions, probably attempting to load multiple image types and
returning some errors/warning, resulting in an empty icon in the window
borders

Fixes T6723
2018-03-02 11:13:34 -05:00
Mike Blumenkrantz 2e0e3a356b process comp object hide/show signals immediately during intercept
for objects without animations, it's important to instantly perform
state transitions in order to preserve intended visibility behaviors of
these objects and avoid race conditions due to asynchronous signal
processing

fix T6722
2018-03-02 11:13:21 -05:00
Mike Blumenkrantz a6d1933823 use per-instance event handler for batman powersave eventing
==19679== Invalid read of size 4
==19679==    at 0x5CC90EF: _ecore_event_message_handler_handler_del (ecore_event_message_handler.c:194)
==19679==    by 0x5CCA332: ecore_event_message_handler_del (ecore_event_message_handler.eo.c:22)
==19679==    by 0x5CBC7E3: ecore_event_handler_del (ecore_events.c:51)
==19679==    by 0x2A23F4F1: _batman_removed_cb (batman.c:579)
==19679==    by 0x6A9A33D: _eo_evas_smart_cb (evas_object_smart.c:78)
==19679==    by 0xC166F4D: _event_callback_call (eo_base_class.c:1560)
==19679==    by 0xC16728E: _efl_object_event_callback_legacy_call (eo_base_class.c:1633)
==19679==    by 0xC167334: efl_event_callback_legacy_call (eo_base_class.c:1636)
==19679==    by 0x6A889CA: _efl_canvas_object_efl_object_event_callback_legacy_call (evas_object_main.c:1157)
==19679==    by 0xC167334: efl_event_callback_legacy_call (eo_base_class.c:1636)
==19679==    by 0x6A9CBA7: evas_object_smart_callback_call (evas_object_smart.c:1037)
==19679==    by 0x500B1D: _gadget_remove (e_gadget.c:426)
==19679==    by 0x5037A9: _gadget_menu_remove (e_gadget.c:1263)
==19679==    by 0x552600: _e_menu_active_call (e_menu.c:2066)
==19679==    by 0x55445E: _e_menu_cb_mouse_up (e_menu.c:2809)
==19679==    by 0x5CC9933: _ecore_event_message_handler_efl_loop_message_handler_message_call (ecore_event_message_handler.c:359)
==19679==    by 0x5CD31D1: efl_loop_message_handler_message_call (efl_loop_message_handler.eo.c:14)
==19679==    by 0x5CCDA73: _efl_loop_message_process (efl_loop.c:681)
==19679==    by 0x5CCDC64: efl_loop_message_process (efl_loop.c:711)
==19679==    by 0x5CC7453: _ecore_main_loop_iterate_internal (ecore_main.c:2444)
==19679==    by 0x5CC457E: _ecore_main_loop_begin (ecore_main.c:1173)
==19679==    by 0x5CCC0CD: _efl_loop_begin (efl_loop.c:97)
==19679==    by 0x5CCED13: efl_loop_begin (efl_loop.eo.c:50)
==19679==    by 0x5CC46F7: ecore_main_loop_begin (ecore_main.c:1246)
==19679==    by 0x5476B6: main (e_main.c:1092)
==19679==  Address 0x212af268 is 40 bytes inside a block of size 48 free'd
==19679==    at 0x4C30D18: free (vg_replace_malloc.c:530)
==19679==    by 0x5CC9BE6: _ecore_event_message_handler_efl_loop_message_handler_message_call (ecore_event_message_handler.c:389)
==19679==    by 0x5CD31D1: efl_loop_message_handler_message_call (efl_loop_message_handler.eo.c:14)
==19679==    by 0x5CCDA73: _efl_loop_message_process (efl_loop.c:681)
==19679==    by 0x5CCDC64: efl_loop_message_process (efl_loop.c:711)
==19679==    by 0x5CC7453: _ecore_main_loop_iterate_internal (ecore_main.c:2444)
==19679==    by 0x5CC457E: _ecore_main_loop_begin (ecore_main.c:1173)
==19679==    by 0x5CCC0CD: _efl_loop_begin (efl_loop.c:97)
==19679==    by 0x5CCED13: efl_loop_begin (efl_loop.eo.c:50)
==19679==    by 0x5CC46F7: ecore_main_loop_begin (ecore_main.c:1246)
==19679==    by 0x5476B6: main (e_main.c:1092)
==19679==  Block was alloc'd at
==19679==    at 0x4C31A1E: calloc (vg_replace_malloc.c:711)
==19679==    by 0x5CC8EE1: _ecore_event_message_handler_handler_add (ecore_event_message_handler.c:148)
==19679==    by 0x5CCA0FB: ecore_event_message_handler_add (ecore_event_message_handler.eo.c:14)
==19679==    by 0x5CBC790: ecore_event_handler_add (ecore_events.c:35)
==19679==    by 0x2A23FB87: _batman_created_cb (batman.c:661)
==19679==    by 0x6A9A33D: _eo_evas_smart_cb (evas_object_smart.c:78)
==19679==    by 0xC166F4D: _event_callback_call (eo_base_class.c:1560)
==19679==    by 0xC16728E: _efl_object_event_callback_legacy_call (eo_base_class.c:1633)
==19679==    by 0xC167334: efl_event_callback_legacy_call (eo_base_class.c:1636)
==19679==    by 0x6A889CA: _efl_canvas_object_efl_object_event_callback_legacy_call (evas_object_main.c:1157)
==19679==    by 0xC167334: efl_event_callback_legacy_call (eo_base_class.c:1636)
==19679==    by 0x6A9CBA7: evas_object_smart_callback_call (evas_object_smart.c:1037)
==19679==    by 0x501172: _gadget_object_create (e_gadget.c:548)
==19679==    by 0x506B90: e_gadget_type_add (e_gadget.c:2056)
==19679==    by 0x2A23CA44: sysinfo_init (mod.c:161)
==19679==    by 0x2A23CCF5: e_modapi_init (mod.c:203)
==19679==    by 0x556814: e_module_enable (e_module.c:524)
==19679==    by 0x555DF9: e_module_all_load (e_module.c:324)
==19679==    by 0x554EFF: _module_done_cb (e_module.c:73)
==19679==    by 0x73531C1: eio_async_end (eio_file.c:510)
==19679==    by 0x5CF8D67: _ecore_thread_kill (ecore_thread.c:229)
==19679==    by 0x5CF8E1C: _ecore_thread_handler (ecore_thread.c:256)
==19679==    by 0x5CB97D0: _ecore_main_call_flush (ecore.c:1090)
==19679==    by 0x5CB9858: _thread_callback (ecore.c:1101)
==19679==    by 0x5CF51F3: _ecore_pipe_handler_call (ecore_pipe.c:602)
==19679==    by 0x5CF5529: _ecore_pipe_read (ecore_pipe.c:725)
==19679==    by 0x5CC3677: _ecore_call_fd_cb (ecore_private.h:476)
==19679==    by 0x5CC6793: _ecore_main_fd_handlers_call (ecore_main.c:2051)
==19679==    by 0x5CC7414: _ecore_main_loop_iterate_internal (ecore_main.c:2439)
==19679==    by 0x5CC457E: _ecore_main_loop_begin (ecore_main.c:1173)
==19679==    by 0x5CCC0CD: _efl_loop_begin (efl_loop.c:97)
==19679==    by 0x5CCED13: efl_loop_begin (efl_loop.eo.c:50)
==19679==    by 0x5CC46F7: ecore_main_loop_begin (ecore_main.c:1246)
==19679==    by 0x5476B6: main (e_main.c:1092)
2018-03-02 11:13:04 -05:00
Mike Blumenkrantz 0c0d002f94 disable bounce for gadget bar scrollers
fix T6721
2018-03-02 11:12:58 -05:00
Mike Blumenkrantz 829f7ee29d use the current pointer client for the xwayland drag client if owner is unmapped
qt seems to like doing this

fix T6644
2018-03-02 11:12:54 -05:00
Stephen Houston abb761b784 Luncher: Add a timeout for mousing out when preview already exists. Update preview on deskswitch.
This fixes https://phab.enlightenment.org/T6328 and https://phab.enlightenment.org/T6202
2018-03-02 11:12:47 -05:00
Mike Blumenkrantz c93e8f93a1 resolve even more null derefs from string parsing in vkbd
CID 1132747
2018-03-02 11:12:21 -05:00
Andy Williams 52319a6feb Remove E_BITFIELD as it is not present on this branch 2018-02-09 11:28:49 +00:00
Marcel Hollerbach 461872e669 build: enter po subdir
the option is handled inside
2018-01-30 10:52:50 -05:00
Mike Blumenkrantz 7b55e20ace print notifications to stderr if a notification handler doesn't exist 2018-01-30 10:52:43 -05:00
Mike Blumenkrantz a95e49fe6b further protect against crashes when xwayland crashes 2018-01-30 10:52:34 -05:00
Mike Blumenkrantz afe31ab8d5 toggle x_fatal variable when xwayland crashes 2018-01-30 10:52:21 -05:00
Mike Blumenkrantz a0985dc6c0 don't do x11 window grab for fps counter when running in wayland mode
this crashes older efl
2018-01-30 10:52:15 -05:00
Mike Blumenkrantz 58e81cdd25 fix notification crashes when a callback isn't specified 2018-01-30 10:52:09 -05:00
Mike Blumenkrantz 9bd0b71f46 add menu item for reporting bugs
fix T6633
2018-01-30 10:52:00 -05:00
Mike Blumenkrantz 22dd7fef86 use normal emotion function to determine playability of e_thumb files
ref 82f1b8a1c1
ref D4779
2018-01-30 10:51:25 -05:00
Mike Blumenkrantz 110835d212 clamp large windows to desk's useful geometry if smart placement fails
in the case where a window does not place with the smart placement algorithm,
clamp position to the top-left available position within the useful geometry
so that the titlebar will always be visible
2018-01-30 10:51:19 -05:00
Mike Blumenkrantz b1eff9a96b block gadget site layouts on moving gadgets which are not on the pointer site
these will be recalculated correctly once the move operation terminates

fix T6623
2018-01-30 10:51:12 -05:00
Mike Blumenkrantz 727b564199 fix some crashes with start gadget deletion
ref T6623
2018-01-30 10:51:05 -05:00
Mike Blumenkrantz cafe1976fb clear visible gadget popups when triggering a gadget action 2018-01-30 10:50:59 -05:00
Mike Blumenkrantz ba11728905 consider gadget ctxpopups as normal popups for callback purposes 2018-01-30 10:50:52 -05:00
Mike Blumenkrantz acf6198252 sort gadgets alphabetically in gadget editor 2018-01-30 10:50:42 -05:00
Carsten Haitzler ef98964bc9 init anim - fix sudden vanish of init splash in some cases
this seems to happen to @manmower in T6619. it may just be timing
changes that changed the start loop time to be at init of ecore maybe ...
but it was doing a forced hide and not a clean "done"
that animates/fades. so fix this along with deferring show until the
first render pre.

this fixes T6619
2018-01-30 10:49:57 -05:00
Mike Blumenkrantz cd74104405 add a lot of null checks to wayland egl init
fix T6617
2018-01-30 10:49:36 -05:00
Mike Blumenkrantz 92d7f40486 unset E_Client->changes.pos when attempting to maximize a new re_manage client
a remaining client from before a restart which is maximized does not need its
position adjusted; this will cause it to go offscreen when unmaximized

ref T6414
2018-01-30 10:49:22 -05:00
Mike Blumenkrantz 083e1a34b4 use e_zone_desk_useful_geometry_get() for all client maximize geometry fetching
fix T6414
2018-01-30 10:49:14 -05:00
Mike Blumenkrantz 9400e02493 make xwl data offer writing async
I foolishly thought this was an impossibly rare deadlock condition

fix T6454
2018-01-30 10:49:07 -05:00
Mike Blumenkrantz 4d0e4b1f8f protect against null deref when setting proxy vars in connman module
CID 1382957, 1382958
2018-01-30 10:48:02 -05:00
Mike Blumenkrantz 8d8c9f69e0 print error when failing to unlink efm/eeze mount point after unmount
CID 1382955
2018-01-30 10:47:56 -05:00
Mike Blumenkrantz 96a67811a1 protect against null deref when emitting efm/eeze error messages
CID 1382954
2018-01-30 10:47:50 -05:00
Mike Blumenkrantz 31e5559658 refactor E_Storage finding for efm/eeze volumes in backend
CID 1382951
2018-01-30 10:47:41 -05:00
Mike Blumenkrantz f10e7ece19 simplify icon suffix detection in vkbd module
CID 1132746, 1132747
2018-01-30 10:47:32 -05:00
Ross Vandegrift 67ad5c81a5 clean up .desktop files and misc typos
Summary:
Drop deprecated Encoding key from desktop files

The Encoding key is no longer required, all desktop files are assumed to
be UTF-8 encoded.  See details at:
https://standards.freedesktop.org/desktop-entry-spec/1.1/apc.html

Fix various typos and misspellings

lintian, Debian's package checker, uses strings to check for common typos
in compiled binaries.  This change fixes the ones it identified in 0.22.1.

Reviewers: zmike!

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D5585
2018-01-30 10:46:25 -05:00
Derek Foreman 661ffe5233 Fix potential NULL pointer dereference
CID 1382953
2018-01-30 10:46:15 -05:00
Al Poole 7b6ba297d1 luncher: fix slider on mouse scroll. 2018-01-30 10:45:56 -05:00
Al Poole 4f5598c62d build: fix meson build on FreeBSD.
Summary: -Dsystemd=false and -Ddevice-udev=false with this.

Reviewers: raster, zmike!

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D5648

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2018-01-30 10:45:32 -05:00
Al Poole 2988791f95 conf_theme: show appropriate background list.
If a new install show the system wallpapers. If a user supplied
wallpaper show the list of user supplied. If a system, show the
system list of wallpapers. On a fresh install on first use people
realise there are wallpapers!!!
2018-01-30 10:45:25 -05:00
Chris Michael b3af218542 wl-drm: sort screen modes and assign zone->output
Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-30 10:44:54 -05:00
Chris Michael b5db66ea56 wl-drm: get screen geometry after e_comp_wl_init is called
This change is needed because if we call
ecore_evas_screen_geometry_get before calling e_comp_wl_init, then
when the drm2 randr settings are applied, the screen geometry could
change (saved resolutions are restored). This commit ensures that drm2
has the same resolution settings as the randr ones, and
screen_geometry_get will return the proper values now.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-30 10:44:47 -05:00
Carsten Haitzler bb2ff3639e e come client - actually set placed more generally...
previous fix... was not general enough. put this outside the if that
only places if props change or size pos hints need fetching.

@fix
2018-01-30 10:44:28 -05:00
Marcel Hollerbach fc9e6b10b4 build: fix build on picky systems
there are a few systems out there that are checking the .so files that
are linked dynamically into a created shared library. This leads to a
problem, since the .so files often also carries unresolved symbols,
which are resolved by other dynamic linked .so files. However, to ship
arround those picky systems, we are not reacting to unresolved symbols
at all for now. The error will rise at runtime and come up in a nice
little dialog instead.

this fixes build on bsd
2018-01-30 10:44:11 -05:00
Marcel Hollerbach e23ac1044b build: enable -lintl if we find it
otherwise translations are not working
2018-01-30 10:44:03 -05:00
maxerba 8301597011 Updating italian translation 2018-01-30 10:43:54 -05:00
maxerba e73999d7e6 Give to gettext correct options to make it able to run. 2018-01-30 10:43:47 -05:00
Marcel Hollerbach dea31f7d66 meson: wl_drm now requires libdrm
this fixes building
2018-01-30 10:43:13 -05:00
Marcel Hollerbach f39b482ef1 meson: fix build
everything that includes e.h needs deps_e as dependencys, otherwise headers may not be found
2018-01-30 10:43:06 -05:00
Chris Michael 5926787184 vkbd: Fix null pointer dereference
These look like simple copy-paste issues however coverity was
reporting null pointer dereferences here so fix those.

Fixes Coverity CID1382959

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-30 10:42:58 -05:00
Chris Michael 92b1fe6f4c vkbd: Remove whitespace
Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-30 10:42:53 -05:00
Chris Michael 1ccf777bec conf-randr: No need to set this variable twice
Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-30 10:42:46 -05:00
Carsten Haitzler 23a91a4498 e client - fix initial placement of override redirect windows in x....
several override redirect windows are being forcibly re-placed by e.
they should not be. ever. this affects scim's IM panel i see and
chromium's menus. it probably affects more than this. this fixes both
of these cases for sure. probably more.

@fix
2018-01-30 10:42:44 -05:00
Stefan Schmidt 7edbdb2499 meson: make it possible to set the path for eet
Follow the approach of edje_cc and eldbus-codegen which detecting the
eet binary.
2018-01-30 10:40:14 -05:00
Stefan Schmidt 24bc67c914 meson: make it possible to set the path for eldbus-codegen
find_program() did not detect the eldbus-codegen binary in a given
prefix. Which is a situation we have on Jenkins builds. Make it an
option that can be set like we already do with edje_cc.
If there is a more meson-like approach to this I do not know feel free
to enlight me.
2018-01-30 10:40:05 -05:00
Stefan Schmidt ba9309ee21 README: no need to mention elementary as dependency
Current E needs efl >= 1.20.5 which has elementary merged.
2018-01-30 10:39:52 -05:00
Simon Lees 70a269a896
22.1 NEWS 2017-11-28 06:45:41 +10:30
Simon Lees f3e1f9c88e
22.1 Release 2017-11-28 06:45:18 +10:30
Andy Williams 8729f8b58e music-control - Fix build after raster's file rename 2017-11-20 10:42:27 -05:00
Carsten Haitzler d429cc3bba music-control - install properly with meson build with icon
@fix
2017-11-20 10:42:18 -05:00
Carsten Haitzler e276b75b5d fix mouse hangs after unblank
this fixes T5883
2017-11-20 10:42:03 -05:00
Mike Blumenkrantz 2f3d1473cf use last client from E_Exec_Instance list when updating luncher popups
the last client is the most recently-added

fix T6288
2017-11-08 09:56:53 -05:00
Mike Blumenkrantz 3fc4e337e7 always emit E_EVENT_COMP_OBJECT_ADD events
fix T6322
2017-11-08 09:56:48 -05:00
Mike Blumenkrantz 7a9a4b0855 prevent double shutdown of x11 compositor in xwayland mode
only do shutdown in xwl module if not actively shutting down
2017-11-08 09:56:44 -05:00
Mike Blumenkrantz 2a1c23ed4b avoid performing client rescales during shutdown 2017-11-08 09:56:41 -05:00
Mike Blumenkrantz bbabdb11b2 requeue client for render if show animation completes and damages exist
attempt to catch clients which have a render queued prior to the image
becoming visible
2017-11-08 09:56:34 -05:00
Mike Blumenkrantz 2fbcb807aa do not add iconify provider for luncher when creating a demo gadget 2017-11-08 09:56:27 -05:00
Mike Blumenkrantz 185bdaf2a4 destroy luncher iconify provider on gadget delete
this is removed on object delete, not config delete

fix T6258
2017-11-08 09:56:26 -05:00
Mike Blumenkrantz 29ad9c85d9 add field width limits to all fscanf params in e_intlc.
fix T6316
2017-11-08 09:56:23 -05:00
Mike Blumenkrantz 2b2d2c00ad improve meson build module disabling
ref 61ddcb25e6075e5e6a5436dc6f981e45317c5d7d
2017-11-08 09:56:01 -05:00
Carsten Haitzler b78cbb40ad hits: silence warnings about possible null string for strcmp 2017-11-08 09:55:55 -05:00
Carsten Haitzler 24257c718a e sys - frix warning for less noise
though act will not be set unless mnt is also true... this means less
noise from compiler wanrings so we can focus on real errors.
2017-11-08 09:55:48 -05:00
maxerba 94d937b848 Adding danish strings to desktop files 2017-11-08 09:55:41 -05:00
Marcel Hollerbach d710cf5bb0 meson: this version is enough for the things we use in the moment
this makes meson build work on ubuntu 17.04
2017-11-08 09:55:30 -05:00
Marcel Hollerbach cc0ac5cf72 meson: make those scripts executable
A missing executable bit here brings old meson version down while building e.
2017-11-08 09:55:16 -05:00
Mike Blumenkrantz 2e956cb089 check meson module option state before executing subdir
fix module disabling
2017-11-08 09:55:15 -05:00
Mike Blumenkrantz fc3f0dd4a9 update README with meson instructions 2017-11-08 09:55:08 -05:00
Mike Blumenkrantz e4cf048112 make wl_pointer cursor handling state-based to correctly handle cursor visuals
this fixes a lot of corner cases such as apps which set their cursor before
receiving pointer.enter events
2017-11-08 09:54:42 -05:00
Mike Blumenkrantz 88888e66ba show internal pointer cursor whenever resetting to internal cursor
don't rely on efl internals for this
2017-11-08 09:54:34 -05:00
Mike Blumenkrantz a5423c9aa6 unset wayland cursor for all pointers when running nested in wl 2017-11-08 09:54:25 -05:00
Mike Blumenkrantz efa975eb4e create wl output resource when running in wl nested 2017-11-08 09:54:18 -05:00
211 changed files with 78564 additions and 66326 deletions

View File

@ -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/"
}

View File

@ -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
View File

@ -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
View File

@ -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.

View File

@ -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)
)

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Default
Name[ab]=默认

View File

@ -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

View File

@ -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)
)

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Mobile
Name[ca]=Mòbil

View File

@ -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)
)

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Computer (Standard Enlightenment)
Name[ca]=Ordinador (Enlightenment estàndard)

View File

@ -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)
)

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Tiling (Standard Enlightenment)
Name[ca]=Mosaic (Standard Enlightenment)

View File

@ -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])

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Enlightenment Askpass
Comment=Enlightenment Password Request

View File

@ -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

View File

@ -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

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Home
Name[ca]=Carpeta personal

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Root
Name[ca]=Arrel

View File

@ -1,5 +1,4 @@
[Desktop Entry]
Encoding=UTF-8
Type=Link
Name=Temp
Name[ca]=Temp.

View File

@ -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

View File

@ -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 = []

0
meson/clean_check.sh Normal file → Executable file
View File

0
meson/meson_inst.sh Normal file → Executable file
View File

0
meson/meson_modules.sh Normal file → Executable file
View File

View File

@ -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,

3739
po/ar.po

File diff suppressed because it is too large Load Diff

3682
po/bg.po

File diff suppressed because it is too large Load Diff

3774
po/ca.po

File diff suppressed because it is too large Load Diff

3740
po/cs.po

File diff suppressed because it is too large Load Diff

662
po/da.po

File diff suppressed because it is too large Load Diff

3816
po/de.po

File diff suppressed because it is too large Load Diff

3736
po/el.po

File diff suppressed because it is too large Load Diff

3755
po/eo.po

File diff suppressed because it is too large Load Diff

3756
po/es.po

File diff suppressed because it is too large Load Diff

3615
po/et.po

File diff suppressed because it is too large Load Diff

3698
po/fi.po

File diff suppressed because it is too large Load Diff

3579
po/fo.po

File diff suppressed because it is too large Load Diff

3742
po/fr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3740
po/gl.po

File diff suppressed because it is too large Load Diff

3690
po/he.po

File diff suppressed because it is too large Load Diff

3705
po/hr.po

File diff suppressed because it is too large Load Diff

3714
po/hu.po

File diff suppressed because it is too large Load Diff

968
po/it.po

File diff suppressed because it is too large Load Diff

3694
po/ja.po

File diff suppressed because it is too large Load Diff

3578
po/km.po

File diff suppressed because it is too large Load Diff

3731
po/ko.po

File diff suppressed because it is too large Load Diff

3630
po/lt.po

File diff suppressed because it is too large Load Diff

View File

@ -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

3617
po/ms.po

File diff suppressed because it is too large Load Diff

3631
po/nb.po

File diff suppressed because it is too large Load Diff

3700
po/nl.po

File diff suppressed because it is too large Load Diff

3685
po/pl.po

File diff suppressed because it is too large Load Diff

3762
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3619
po/ro.po

File diff suppressed because it is too large Load Diff

3792
po/ru.po

File diff suppressed because it is too large Load Diff

3697
po/sk.po

File diff suppressed because it is too large Load Diff

3781
po/sl.po

File diff suppressed because it is too large Load Diff

3769
po/sr.po

File diff suppressed because it is too large Load Diff

3676
po/sv.po

File diff suppressed because it is too large Load Diff

3743
po/tr.po

File diff suppressed because it is too large Load Diff

3688
po/uk.po

File diff suppressed because it is too large Load Diff

3766
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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");
}

View File

@ -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)

View File

@ -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);

View File

@ -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;
}

View File

@ -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)

View File

@ -1813,6 +1813,7 @@ e_comp_clients_rescale(void)
{
int i;
if (stopping) return;
for (i = 0; i < 11; i++)
{
Eina_List *tmp = NULL;

View File

@ -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)

View File

@ -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 */

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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();

View File

@ -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)

View File

@ -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!!!!!

View File

@ -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)

View File

@ -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)

View File

@ -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;
}

View File

@ -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);
if ((v2) && (v2->partition == 0))
_e_fm_main_eeze_volume_del(v2->udi);
}
E_Storage *s;
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)

View File

@ -1,6 +1,7 @@
deps = [
dep_eina,
dep_ecore,
dep_eet,
dep_ecore_con,
dep_ecore_file,
dep_ecore_ipc,

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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;
}

View File

@ -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)

View File

@ -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));

View File

@ -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;

View File

@ -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);
}

View File

@ -31,6 +31,7 @@ struct _E_Pixmap
E_Pixmap_Type type;
int64_t win;
int64_t alias;
Ecore_Window parent;
int w, h;
@ -266,7 +267,7 @@ _e_pixmap_find(E_Pixmap_Type type, va_list *l)
int64_t id;
#endif
E_Pixmap *cp;
if (!pixmaps[type]) return NULL;
switch (type)
{
@ -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;

View File

@ -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