_e_shell_surface_destroy() is already the implementation's destructor, so
it'll be called when the surface is destroyed anyway. What we have to do
here is just call wl_resource_destroy(resource) - which will call that
function for us.
It'll also do us the favor of actually destroying the resource and
removing it from the client's resource list so we won't get a SECOND call
to _e_shell_surface_destroy() on client exit.
this allows video files to be played for wapapers - they loop and run
indefinitely. it is a special video object that shares the same source
across all outputs, so if you have the same video set, on 2 screens
(or desktops) then it's only decoded once and uses proxies to
ducplicate. this works in the pager too (it uses proxies).
this is for amusement and fun and ... because we can. :)
When running under DRM, this patch adds support for getting the
supported rotations of an output, listing them in the Screen Setup
dialog, and adds the ability to set a rotation on a given screen
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
in many cases, a mouse action's callback will fail to execute as a result of multiple
objects being under the pointer at the time of the event. in this case,
the callback should be able to determine whether action callback processing should
continue.
as an example, when attempting to execute an action which only activates for
client objects, if the passed object is not a client then the callback should return
false to indicate that it was not able to perform the action for the given object,
allowing further actions to be attempted on this object
the drm screenshot action forcefully iterates the main loop, causing
the current loop (which triggered the action) to return after the screenshot
action has ended. during this time, it's possible for other actions to also
trigger, including triggering subsequent screenshot actions, so it's necessary
to defer the execution of the action until after the initial loop which triggered
the action has returned
#Recursion
in this case, mouse events which are not originating from the internal
window are for the screen, and these coords can be used for determining
"mouse out". if the mouse event comes from the window, it is inside the window.
ref 7c661b54a9
these types of surfaces should grab focus as early as possible, and
setting the flag at this time ensures that it will be handled during
the next client eval
if windows are created during startup, they will attempt to show themselves
before xdg surface operations are available, leading to a scenario where they
will never successfully map themselves. if the elm win object is visible, this
indicates a mapped internal window, so directly call the map function at this
time to make the window visible
Summary:
printf %m stringifies and prints errno. This is actually hugely confusing
if used in error messages after failures that don't set errno.
You may get "Success", or you may get an errno that was harmless ages
ago.
Some of the functions followed by %m have only some error paths that
set errno, or make multiple system calls that can set errno
independently - knowing the errno at failure time is unlikely to be
useful in these cases.
Reviewers: devilhorns, zmike
Reviewed By: zmike
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3571
this removes the per desktop profile config and replaces it with a
per-screen one that is tied to a specific display so it is far more
logical than per desktop. this allows e to set up different scaling
per screen for apps that use elementary for example via this derived
profile.
this of course is slightly problematic for e itself since it now uses
elm - as this will cause e to go kind-of-crazy with differing profiles
as it fights with itself and elm if 2 screens have different profiles.
this requires elm to be fixed to allow custom profiles per window.
this also currently won't switch profile of a window when you
reconfigure screens.
@feature
xx
Summary:
Set xkb context and keymap to Ecore_Drm.
In enlightenment (used in wayland with drm backend), keymap is used only one.
So for avoid unnecessary open keymap files, set cached context and keymap.
But for this, enlightenment must compile keymap before init ecore_drm.
So I changed booting sequence also.
Test Plan: Distinguish time between before and after during add a keyboard device.
Reviewers: raster, devilhorns, zmike
Subscribers: cedric, input.hacker, ohduna
Differential Revision: https://phab.enlightenment.org/D3504
I can't find anything in the specs that would imply those shouldn't be
tiled. This may cause placement bugs, but I don't think that'd be the
case, as we ignore application placement when tiling anyway.
@fix
This function is being used inside e_mod_main, but the function
prototype was never exposed which lead to implicit declaration
warnings when building winlist module
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Summary:
The original next window selection of winlist is weak. It searches the next window with the following conditions:
1. Next non-overlaped window in the direction of user's selection (up,down,right,left).
2. The next window has to be the closest window from the currently selected window (calculated from shortest distance from each window's border, in the direction of selection)
3. the second distant requirement is this:
delta2_next = abs(ec_orig->x - ec_orig->w / 2 - ec->x + ec->w/2);
* Which I believe is a mistake, should be:
delta2_next = abs(ec_orig->x + ec_orig->w / 2 - ec->x + ec->w/2);
These two conditions are weak, and they sometimes can result in unexpected selection to the user.
The enclosed patch enhances the next window selection: 1) A next window selection can be the window that's overlapping with the in-focused window. 2) calculates the next window from the center of the currently focused window to the next window, and it also takes into account directionality (a window that's farther in the direction of selection has a better chance of being selected then a window that's closer in the direction of selection, but offset-ed in the lateral direction.)
Test Plan:
1. Create 4 key binds for "next window to left, right, up, down".
2. Open up 4 different windows and position them in odd/random positions.
3. Try to navigate to each window (with the winlist shortcut keys) before this patch.
4. Try with this patch, and evaluate if the window selection is more **PREDICTABLE**.
Reviewers: zmike
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2661
I fixed the weridness and it behaves much more reliably now with
"tall" or "wide" windows. also fixed some formatting etc. etc. - this
now works better and now if u alt+tab AND then use arrow keys while
holding alt... it'll navigate around geometrically rather nicely.
so big fixes and good for pointing out the simpleness of the original
code. :)
- raster
@feat
If we are calling emix_config_save_state_get while in init, we are
freeing the list emix_config_save_state_restore is iterating over.
This leads to crashes.
@fix T2942
@fix T2906
In the xdg_surface_configure_send function, the size params
(width/height) come in as int32_t. This patch makes the E_Shell_Data
fields for width & height match those (else we end up with compiler
warnings when comparing int32_t to uint32_t).
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
desktop gadgets don't have minimum size set from parent objects, so
it's necessary to use the current object geometry in order to correctly
size these gadgets since the top-most widget is from elm
fix T2907
Summary:
Fix missmatched paths between desklock and conf_applications module to
enable adding/removing screen lock applications with a dialog.
Test Plan:
Settings=>Apps=>Screen lock/unlock application
Veryfy if apps are correctly added to config.
Reviewers: zmike, cedric
Subscribers: cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3436
as part of another fix for having e just pop up the screen config
dialog when a new screen is detected that isn't configured, allow
config dialog for randr to get screen output name via input params
@fix
since forever, sticky windows have not been allowed to receive focus after
various events, eg. desk flip or window close. in some workflows, however,
this may actually be desired behavior
disabled by default
fix T2837
Summary:
libwayland-server.so will post an error if the requested version
is higher than the supported one anyway, so there's no point in
doing this.
Using MIN() to pick versions is a client side idiom.
#kansas
Reviewers: zmike, devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3385
We have to use void in a function declaration if we want no function
parameters. Using just empty parenthesis means the function takes an
unspecified number of parameters.
We had it correct for most declarations and this series fixes it for
the rest.
Thanks for the sparse semantic parser for pointing this out.
for security reaons, all the dbus methods that allow you to mess with
e are now in the msgbus module - load at your own risk. this is
irrelevant in x11, but in wayland this matters as wayland is actually
secure.
this also disables restart and shutdown dbus methods still in core.
they are there but non-functional due to possibly being able to be
abused in a wayland universe to "dos attack" the wm.
@fix
in the case where a client is deleted, it's possible that the shell
surface may persist longer than the duration of the normal client delete
cycle, so it's necessary to ensure that the client will continue to exist
until the shell surface has been destroyed
Summary:
The imc import dialog at "Settings > Language > Input Method Settings >
Import .." had issue where the size was almost zero. When trying to
close the window it would SEGV.
The SEGV seems to be do the with dialog->cdata not being set.
The resize issue I am not so sure, but I upgraded to ELM and if fixed
the issue.
Test Plan:
Open "Settings > Language > Input Method Settings > Import ..."
- The size should not be really small
- When closing it should not cause E to SEGV
After applying the patch the above issues are fixed.
Reviewers: zmike
Subscribers: cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3353
Summary:
@Fix
possible null dereference issue while referencing cs2->id. So added a condition
to check it
Signed-off-by: Vivek Ellur <vivek.ellur@samsung.com>
Reviewers: zmike
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3309
valgrind pointed out a referencing issue with the ibar client menu on
hover and if e is shut down while this is up. it ends up referencing
an already deleted ibar icon, so delete the menu objects that
reference the icon if icon is deleted.
@fix
Summary:
It seems this was missed when doing the manager/container id removal
back in march. The param validation was failing and causing the "Set"
button to not work in "Screen > Virtual Desktops > Click to Change
wallpaper".
Test Plan:
1. Open "Screen > Virtual Desktops > Click to Change wallpaper"
2. Click "Set"
- Expect that a wallpaper dialog be shown
- Before this patch nothing happens
Reviewers: zmike
Subscribers: cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3298
Summary:
Currently the config dialog in Apps > Startup Applications does not properly
resized as one of the objects is not set to horizontal fill.
Test Plan: 1. Resize "Apps > Startup Applications", it should resize the list with the window
Reviewers: zmike
Subscribers: cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3296
Summary:
Currently the dialogs in Winows > Window List Menu and Window Display are
resizable the their content does not resize. This patch fixes that.
Test Plan: Open windows in window config dialog and ensure they can resize propertly
Reviewers: zmike
Subscribers: raster, cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3275
i encontered a situation where the icon_hash contained a garbage entry
- had been freed already. the only way i can see this happening is if
the desktop file changed path during runtime thus the icon was never
removed from hash on free as string didnt match. store string used
when adding to hash so removal is guarannteed to work and also for
good measure protect against double-adding (and generate a new string
for storage using timestamp which should be unique).
so this fixes a crash i was just looping on.
@fix
as promised almost a year ago, this module has been unmaintained to
the point where it cannot function in any way, and attempting to keep
it in the tree is a futile effort
this module can now be found at devs/discomfitor/e_module-access.git
ref 77717523f3
enlightenment is (I think) the first wayland compositor to run with
in-process pulseaudio integration for audio playback and not just mixer
support. hooray.
this results in a fun issue: if DISPLAY is set, as it must be for x11
clients to function, pulseaudio will unconditionally attempt to use a
blocking socket connection to create a connection to the running xserver.
the only exception here is if x11 support has been compiled out of pulseaudio,
but probably no distro will do that ever.
so, what happens when the compositor thread tries to create a socket connection
to the xserver that the compositor thread has not yet started? absolutely nothing.
forever.
the easiest solution which continues to provide the key press sounds that everyone
loves is to ensure that the pulseaudio connection is created before DISPLAY is ever
set, namely in the xwayland module init.
this will now occur automatically now in the case when the mixer module detects
pulseaudio support.
TL;DR: don't disable mixer module if you use xwayland
man xset => If the `threshold' parameter is provided and 0, the
`acceleration' parameter will be used in the exponent of a more
natural and continuous formula, giving precise control for slow motion
but big reach for fast motion, and a progressive transition for motions
in between. Recommended `acceleration' value in this case is 3/2 to 3,
but not limited to that range.
the env var DBUS_SESSION_BUS_ADDRESS may not be set for all platforms
where enlightenment+dbus are usable, so it's necessary to get the dbus
id to ensure that this value exists and is properly tracked
the current spec does not directly require any behavior from clients
when a systray host, leading to an issue where clients do not re-register
their items when a new host appears
when using an in-process systray watcher, as the current implementation does,
the best choice for maintaining consistency for systray items across restarts
is to cache them according to the current dbus session. the process of setting
up the item will validate it on subsequent restarts, and changes to the session
will clear the cache
fix T2786
according to the StatusNotifierItem specification, applications
register "service org.freedesktop.StatusNotifierItem-PID-ID" on the
session bus, and then "must register the unique instance name
to the StatusNotifierWatcher".
some applications, such as steam, instead register the path that they
will run on (/org/ayatana/NotificationItem/steam) and then expect the
watcher to register the method call's send id bus: this is totally bogus.
to catch this, when registering the new item the enlightenment watcher must
first determine if the item is spec-conforming. if yes, proceed as normal.
if no, pretend the application knows what it's doing and try to make things
work as expected anyway
for more details, read the full spec here
http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem
fix T2763
==24509== Invalid write of size 8
==24509== at 0x2C5ED500: _notification_popup_del_cb (e_mod_popup.c:404)
==24509== by 0x91AAE93: _eo_evas_object_cb (evas_callbacks.c:92)
==24509== by 0xE54DDEA: _eo_base_event_callback_call (eo_base_class.c:715)
==24509== by 0xE54B67A: eo_event_callback_call (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x91AB323: evas_object_event_callback_call (evas_callbacks.c:264)
==24509== by 0x91E8DE3: _evas_object_eo_base_destructor (evas_object_main.c:691)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x60A3019: _edje_object_eo_base_destructor (edje_smart.c:43)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0xE5443EC: _eo_del_internal (eo_private.h:221)
==24509== by 0xE5443EC: _eo_unref (eo_private.h:295)
==24509== by 0xE5443EC: _eo_do_end (eo.c:546)
==24509== by 0x6091146: edje_match_callback_exec_check_finals (edje_match.c:556)
==24509== by 0x6091146: edje_match_callback_exec (edje_match.c:711)
==24509== by 0x60974AE: _edje_emit_cb (edje_program.c:1453)
==24509== by 0x60974AE: _edje_emit_handle (edje_program.c:1405)
==24509== by 0x60924EE: _edje_message_queue_process (edje_message_queue.c:787)
==24509== by 0x60926A6: _edje_job (edje_message_queue.c:154)
==24509== by 0xCC5087A: _ecore_job_event_handler (ecore_job.c:121)
==24509== by 0xCC4B204: _ecore_call_handler_cb (ecore_private.h:390)
==24509== by 0xCC4B204: _ecore_event_call (ecore_events.c:565)
==24509== by 0xCC52AE7: _ecore_main_loop_iterate_internal (ecore_main.c:1927)
==24509== by 0xCC52CD6: ecore_main_loop_begin (ecore_main.c:983)
==24509== by 0x4383F4: main (e_main.c:1047)
==24509== Address 0x23b3dcb0 is 16 bytes inside a block of size 80 free'd
==24509== at 0x4C2A65B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24509== by 0x2C5ED606: _notification_popdown (e_mod_popup.c:747)
==24509== by 0x2C5ED952: _notification_reshuffle_cb (e_mod_popup.c:700)
==24509== by 0x91AAE93: _eo_evas_object_cb (evas_callbacks.c:92)
==24509== by 0xE54DDEA: _eo_base_event_callback_call (eo_base_class.c:715)
==24509== by 0xE54B67A: eo_event_callback_call (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x91AB323: evas_object_event_callback_call (evas_callbacks.c:264)
==24509== by 0x91E8DE3: _evas_object_eo_base_destructor (evas_object_main.c:691)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x60A3019: _edje_object_eo_base_destructor (edje_smart.c:43)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0xE5443EC: _eo_del_internal (eo_private.h:221)
==24509== by 0xE5443EC: _eo_unref (eo_private.h:295)
==24509== by 0xE5443EC: _eo_do_end (eo.c:546)
==24509== by 0x504CEF: _e_zoomap_smart_del (e_zoomap.c:266)
==24509== by 0x91F5ABC: evas_object_smart_del (evas_object_smart.c:1019)
==24509== by 0x91E9107: _evas_object_eo_base_destructor (evas_object_main.c:739)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0xE5443EC: _eo_del_internal (eo_private.h:221)
==24509== by 0xE5443EC: _eo_unref (eo_private.h:295)
==24509== by 0xE5443EC: _eo_do_end (eo.c:546)
==24509== by 0x458C7A: _e_comp_object_util_del (e_comp_object.c:2402)
==24509== by 0x91AAE93: _eo_evas_object_cb (evas_callbacks.c:92)
==24509== by 0xE54DDEA: _eo_base_event_callback_call (eo_base_class.c:715)
==24509== by 0xE54B67A: eo_event_callback_call (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x91AB323: evas_object_event_callback_call (evas_callbacks.c:264)
==24509== by 0x91E8DE3: _evas_object_eo_base_destructor (evas_object_main.c:691)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0x60A3019: _edje_object_eo_base_destructor (edje_smart.c:43)
==24509== by 0xE54A8A3: eo_destructor (in /usr/lib/libeo.so.1.15.99)
==24509== by 0xE5443EC: _eo_del_internal (eo_private.h:221)
==24509== by 0xE5443EC: _eo_unref (eo_private.h:295)
==24509== by 0xE5443EC: _eo_do_end (eo.c:546)
==24509== by 0x6091146: edje_match_callback_exec_check_finals (edje_match.c:556)
==24509== by 0x6091146: edje_match_callback_exec (edje_match.c:711)
==24509== by 0x60974AE: _edje_emit_cb (edje_program.c:1453)
==24509== by 0x60974AE: _edje_emit_handle (edje_program.c:1405)
==24509== by 0x60924EE: _edje_message_queue_process (edje_message_queue.c:787)
==24509== by 0x60926A6: _edje_job (edje_message_queue.c:154)
==24509== by 0xCC5087A: _ecore_job_event_handler (ecore_job.c:121)
==24509== by 0xCC4B204: _ecore_call_handler_cb (ecore_private.h:390)
==24509== by 0xCC4B204: _ecore_event_call (ecore_events.c:565)
==24509== by 0xCC52AE7: _ecore_main_loop_iterate_internal (ecore_main.c:1927)
==24509== by 0xCC52CD6: ecore_main_loop_begin (ecore_main.c:983)
==24509== by 0x4383F4: main (e_main.c:1047)
previously, this would throw dbus errors (or not) and then do nothing in
many cases. now it manages bus/path names more effectively and falls back
to binary image data when an icon path is not available
fix T2626 and probably some others
the previous behavior would just set up the new layouts, resulting in
the first layout in the list being applied. now it should be the case
that if the current layout has not been deleted, it will continue to
remain in effect; alternatively if the current layout has been modified,
it's now more likely to be picked up and used
remove several config vars in advanced performance that frankly don't
work (unless you change them int he dialog). they are not set up on
startup or not even used at all. remove things that don't work anymore!
@fix
Summary:
Depends on D2275
this module is a virtual keyboard used in wayland.
Test Plan:
<prerequisite>
- Configure with --enable-wl-weekeyboard.
1. run enlightenment as a wayland display server.
2. run weston-editor which has text entry using wayland protocol.
Reviewers: devilhorns, raster, ManMower, jonc, zmike
Subscribers: bryceharrington, jonc, jihoon, cedric, ManMower
Differential Revision: https://phab.enlightenment.org/D2858
Summary: input_method's context set to NULL when context is freed.
Test Plan: N/A
Reviewers: zmike, devilhorns
Reviewed By: devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3015
as pointed out by jackdanielsz and bu5hm4n - this doesnt save
everything. like all the outputs and ports and... so now it does.
everything is saved and restored is "remember" is enabled. now
everything should be fine.
i have never seen this before until last night. on some systems audio
starts up volume 0 and muted (either or) and thus on login the volume
is not where you left it and you have to manually fix it every time.
this fixes this by having mixer remember the last volume and mute
state you set (option to enable/disable too) and handles "upgrading"
to remember by default if you have old config
@feature / @fix
some systray indicator icons are not found because the sizes are not
in the list. fix this. this SHOULD actually use our existing efreet
icon theme finding to auto-switch file based on size changes.
Summary:
this patch allow to use virtual keyboard such as weston-keyboard.
it was tested in wayland verion 1.6.
Test Plan:
<prerequisite>
- Configure with --enable-wl-text-input
- edit configuration file, e.cfg to enable module wl_text_input.
1. run enlightenment as a wayland display server.
2. run weston-keyboard.
3. run weston-editor.
Reviewers: raster, Sergeant_Whitespace, devilhorns, zmike
Reviewed By: zmike
Subscribers: ManMower, Sergeant_Whitespace, cedric, jihoon
Differential Revision: https://phab.enlightenment.org/D2275
key handlers here will pick up both wayland and drm engine type events,
so ensure that we only handle events matching the compositor canvas
window to prevent unexpected behavior
fix T2637
previously it was possible for the shot module to init in a wayland
compositor and fail to grab the necessary globals, resulting in black
rects for all shots
previously, beginning a drag with the left button, then pressing and
releasing another button would result in the drag terminating without
the original button being released
a lot of this functionality is reused from dnd. basic selection owner
management in x11 and slapping bytes down a pipe to the wl client;
a bit laggy when pasting to wl clients sometimes, need to spend more time
debugging that...
#Kansas
still a little rough, but the basics are functional. works by showing
the x11 compositor selection window, which has rects to exclude geometries
of xwl clients, for getting x11 xdnd events, and then manually sending
all the related client messages in order to inform the x11 client that
enlightenment is, in fact, an extremely credible xdnd drop site and not
a rogue compositor which will mangle/destroy the dnd data.
still render crashes after the operation completes, so possibly not the
most useful thing to be using now
We used the manager unref for client and location as well. Looking at the
generated code it does not make any difference right now but might do in
the future so better fix this up.
Instead of setting the highest accuracy level as minimum we now set the
lowest level. By doing so we should get a somewhat accurate location in
any case. Before this change we would just not get any location
information at all which was confusing and let people think the module
did not work.
We also keep track of the AvailableAccuracyLevel property know.
Fixes T2641